Initial Rewrite

This commit is contained in:
Matthew Vale 2015-11-17 17:01:33 +00:00
parent 09db455c3a
commit 702466ea52
16 changed files with 3400 additions and 35 deletions

View File

@ -0,0 +1,28 @@
<?php
//application details
$apps[$x]['name'] = "Install";
$apps[$x]['uuid'] = "75507e6e-891e-11e5-af63-feff819cdc9f";
$apps[$x]['category'] = "Core";
$apps[$x]['subcategory'] = "";
$apps[$x]['version'] = "";
$apps[$x]['url'] = "http://www.fusionpbx.com";
$apps[$x]['description']['en-us'] = "Install the fuisionPBX system or add new switches";
$apps[$x]['description']['es-cl'] = "";
$apps[$x]['description']['de-de'] = "";
$apps[$x]['description']['de-ch'] = "";
$apps[$x]['description']['de-at'] = "";
$apps[$x]['description']['fr-fr'] = "";
$apps[$x]['description']['fr-ca'] = "";
$apps[$x]['description']['fr-ch'] = "";
$apps[$x]['description']['pt-pt'] = "";
$apps[$x]['description']['pt-br'] = "";
//permission details
$y = 0;
$apps[$x]['permissions'][$y]['name'] = "install";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "75507e6e-891e-11e5-af63-feff819cdc9f";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
?>

View File

@ -0,0 +1,557 @@
<?php
$text['title-install_first_time']['en-us'] = "First Time Install";
$text['title-install_first_time']['es-cl'] = "";
$text['title-install_first_time']['pt-pt'] = "";
$text['title-install_first_time']['fr-fr'] = "";
$text['title-install_first_time']['pt-br'] = "";
$text['title-install_first_time']['pl'] = "";
$text['title-install_first_time']['sv-se'] = "";
$text['title-install_first_time']['uk'] = "";
$text['title-install_first_time']['de-at'] = "";
$text['title-install_first_time']['ar-eg'] = "";
$text['message-update']['en-us'] = "Update Completed";
$text['message-update']['es-cl'] = "Actualización Completada";
$text['message-update']['pt-pt'] = "Actualização Efectuada";
$text['message-update']['fr-fr'] = "Mis à jour";
$text['message-update']['pt-br'] = "Atualização Efetuada";
$text['message-update']['pl'] = "Zaktualizowano poprawnie";
$text['message-update']['sv-se'] = "Uppdatering Klar";
$text['message-update']['uk'] = "Оновлення завершено";
$text['message-update']['de-at'] = "Aktualisierung durchgeführt";
$text['message-update']['ar-eg'] = "اكتمال التحديث";
$text['message-required']['en-us'] = "Please provide: ";
$text['message-required']['es-cl'] = "Por favor indique: ";
$text['message-required']['pt-pt'] = "Por favor indique: ";
$text['message-required']['fr-fr'] = "Merci d'indiquer: ";
$text['message-required']['pt-br'] = "Por favor Indique:";
$text['message-required']['pl'] = "Wpisz:";
$text['message-required']['sv-se'] = "Var god uppge:";
$text['message-required']['uk'] = "Будь ласка, вкажіть:";
$text['message-required']['de-at'] = "Bitte geben Sie folgendes an:";
$text['message-required']['ar-eg'] = "من فضلك أدخل";
$text['message-message']['en-us'] = "Message";
$text['message-message']['es-cl'] = "Mensaje";
$text['message-message']['pt-pt'] = "Mensagem";
$text['message-message']['fr-fr'] = "Message";
$text['message-message']['pt-br'] = "Mensagem";
$text['message-message']['pl'] = "Wiadomość";
$text['message-message']['sv-se'] = "Meddelande";
$text['message-message']['uk'] = "Повідомлення";
$text['message-message']['de-at'] = "Nachricht";
$text['message-message']['ar-eg'] = "رسالة";
$text['message-delete']['en-us'] = "Delete Completed";
$text['message-delete']['es-cl'] = "Eliminación Completada";
$text['message-delete']['pt-pt'] = "Remoção Efectuada";
$text['message-delete']['fr-fr'] = "Supprimé";
$text['message-delete']['pt-br'] = "Remoção Efetuada";
$text['message-delete']['pl'] = "Usunięto poprawnie";
$text['message-delete']['sv-se'] = "Borttagning Klar";
$text['message-delete']['uk'] = "Видалено";
$text['message-delete']['de-at'] = "Erfolgreich gelöscht";
$text['message-delete']['ar-eg'] = "تم المسح";
$text['label-ft-install']['en-us'] = "First Time Install";
$text['description-ft-install']['en-us'] = "Perform all actions for a First Time Install";
$text['label-add-switch']['en-us'] = "Add a new switch";
$text['description-add-switch']['en-us'] = "Add a new switch";
$text['label-select_language']['en-us'] = "Language";
$text['label-select_language']['es-cl'] = "";
$text['label-select_language']['pt-pt'] = "";
$text['label-select_language']['fr-fr'] = "";
$text['label-select_language']['pt-br'] = "";
$text['label-select_language']['pl'] = "";
$text['label-select_language']['sv-se'] = "";
$text['label-select_language']['uk'] = "";
$text['label-select_language']['de-at'] = "";
$text['label-select_language']['ar-eg'] = "";
$text['label-event_host']['en-us'] = "Host/IP";
$text['label-event_host']['es-cl'] = "";
$text['label-event_host']['pt-pt'] = "";
$text['label-event_host']['fr-fr'] = "";
$text['label-event_host']['pt-br'] = "";
$text['label-event_host']['pl'] = "";
$text['label-event_host']['sv-se'] = "";
$text['label-event_host']['uk'] = "";
$text['label-event_host']['de-at'] = "";
$text['label-event_host']['ar-eg'] = "";
$text['label-event_port']['en-us'] = "Port";
$text['label-event_port']['es-cl'] = "Puerto";
$text['label-event_port']['pt-pt'] = "Porto";
$text['label-event_port']['fr-fr'] = "Port";
$text['label-event_port']['pt-br'] = "Porta";
$text['label-event_port']['pl'] = "Port";
$text['label-event_port']['sv-se'] = "Port";
$text['label-event_port']['uk'] = "Порт";
$text['label-event_port']['de-at'] = "Port";
$text['label-event_port']['ar-eg'] = "منفذ";
$text['label-event_password']['en-us'] = "Password";
$text['label-event_password']['es-cl'] = "Contreseña";
$text['label-event_password']['pt-pt'] = "Palavra-Chave";
$text['label-event_password']['fr-fr'] = "Mot de Passe";
$text['label-event_password']['pt-br'] = "Senha";
$text['label-event_password']['pl'] = "Hasło";
$text['label-event_password']['sv-se'] = "Lösenord";
$text['label-event_password']['uk'] = "Пароль";
$text['label-event_password']['de-at'] = "Passwort";
$text['label-event_password']['ar-eg'] = "كلمة السر";
$text['label-username']['en-us'] = "Username";
$text['label-username']['es-cl'] = "Nombre de usuario";
$text['label-username']['pt-pt'] = "Utilizador";
$text['label-username']['fr-fr'] = "Utilisateur";
$text['label-username']['pt-br'] = "Nome do Usuário";
$text['label-username']['pl'] = "Użytkownik";
$text['label-username']['sv-se'] = "Användarnamn";
$text['label-username']['uk'] = "Ім’я користувача";
$text['label-username']['de-at'] = "Benutzername";
$text['label-username']['ar-eg'] = "اسم المستخدم";
$text['label-type']['en-us'] = "Type";
$text['label-type']['es-cl'] = "Tipo";
$text['label-type']['pt-pt'] = "Tipo";
$text['label-type']['fr-fr'] = "Type";
$text['label-type']['pt-br'] = "Tipo";
$text['label-type']['pl'] = "Typ";
$text['label-type']['sv-se'] = "Typ";
$text['label-type']['uk'] = "Тип";
$text['label-type']['de-at'] = "Typ";
$text['label-type']['ar-eg'] = "النوع";
$text['label-port']['en-us'] = "Port";
$text['label-port']['es-cl'] = "Puerto";
$text['label-port']['pt-pt'] = "Porto";
$text['label-port']['fr-fr'] = "Port";
$text['label-port']['pt-br'] = "Porta";
$text['label-port']['pl'] = "Port";
$text['label-port']['sv-se'] = "Port";
$text['label-port']['uk'] = "Порт";
$text['label-port']['de-at'] = "Port";
$text['label-port']['ar-eg'] = "منفذ";
$text['label-path']['en-us'] = "Path";
$text['label-path']['es-cl'] = "Ruta";
$text['label-path']['pt-pt'] = "Caminho";
$text['label-path']['fr-fr'] = "Chemin";
$text['label-path']['pt-br'] = "Caminho";
$text['label-path']['pl'] = "Ścieżka";
$text['label-path']['sv-se'] = "Sökväg";
$text['label-path']['uk'] = "Шлях";
$text['label-path']['de-at'] = "Pfad";
$text['label-path']['ar-eg'] = "";
$text['label-password']['en-us'] = "Password";
$text['label-password']['es-cl'] = "Contreseña";
$text['label-password']['pt-pt'] = "Palavra-Chave";
$text['label-password']['fr-fr'] = "Mot de Passe";
$text['label-password']['pt-br'] = "Senha";
$text['label-password']['pl'] = "Hasło";
$text['label-password']['sv-se'] = "Lösenord";
$text['label-password']['uk'] = "Пароль";
$text['label-password']['de-at'] = "Passwort";
$text['label-password']['ar-eg'] = "كلمة السر";
$text['label-name']['en-us'] = "Name";
$text['label-name']['es-cl'] = "Nombre";
$text['label-name']['pt-pt'] = "Nome";
$text['label-name']['fr-fr'] = "Nom";
$text['label-name']['pt-br'] = "Nome";
$text['label-name']['pl'] = "Nazwa";
$text['label-name']['sv-se'] = "Namn";
$text['label-name']['uk'] = "Назва";
$text['label-name']['de-at'] = "Name";
$text['label-name']['ar-eg'] = "الأسم";
$text['label-host']['en-us'] = "Host";
$text['label-host']['es-cl'] = "Host";
$text['label-host']['pt-pt'] = "Máquina";
$text['label-host']['fr-fr'] = "Hôte";
$text['label-host']['pt-br'] = "Máquina";
$text['label-host']['pl'] = "Host";
$text['label-host']['sv-se'] = "Värd";
$text['label-host']['uk'] = "Хост";
$text['label-host']['de-at'] = "Host";
$text['label-host']['ar-eg'] = "مضيف";
$text['label-driver']['en-us'] = "Driver";
$text['label-driver']['es-cl'] = "Controlador";
$text['label-driver']['pt-pt'] = "Driver";
$text['label-driver']['fr-fr'] = "Driver";
$text['label-driver']['pt-br'] = "Driver";
$text['label-driver']['pl'] = "Sterownik";
$text['label-driver']['sv-se'] = "Drivrutin";
$text['label-driver']['uk'] = "Драйвер";
$text['label-driver']['de-at'] = "Treiber";
$text['label-driver']['ar-eg'] = "";
$text['label-description']['en-us'] = "Description";
$text['label-description']['es-cl'] = "Descripción";
$text['label-description']['pt-pt'] = "Descrição";
$text['label-description']['fr-fr'] = "Description";
$text['label-description']['pt-br'] = "Descrição";
$text['label-description']['pl'] = "Opis";
$text['label-description']['sv-se'] = "Beskrivning";
$text['label-description']['uk'] = "Опис";
$text['label-description']['de-at'] = "Beschreibung";
$text['label-description']['ar-eg'] = "الوصف";
$text['header-install']['en-us'] = "Install";
$text['header-install']['es-cl'] = "";
$text['header-install']['pt-pt'] = "";
$text['header-install']['fr-fr'] = "";
$text['header-install']['pt-br'] = "";
$text['header-install']['pl'] = "";
$text['header-install']['sv-se'] = "";
$text['header-install']['uk'] = "";
$text['header-install']['de-at'] = "";
$text['header-install']['ar-eg'] = "";
$text['header-select_language']['en-us'] = "Select Language";
$text['header-select_language']['es-cl'] = "";
$text['header-select_language']['pt-pt'] = "";
$text['header-select_language']['fr-fr'] = "";
$text['header-select_language']['pt-br'] = "";
$text['header-select_language']['pl'] = "";
$text['header-select_language']['sv-se'] = "";
$text['header-select_language']['uk'] = "";
$text['header-select_language']['de-at'] = "";
$text['header-select_language']['ar-eg'] = "";
$text['header-event_socket']['en-us'] = "Event Socket Configuration";
$text['header-event_socket']['es-cl'] = "";
$text['header-event_socket']['pt-pt'] = "";
$text['header-event_socket']['fr-fr'] = "";
$text['header-event_socket']['pt-br'] = "";
$text['header-event_socket']['pl'] = "";
$text['header-event_socket']['sv-se'] = "";
$text['header-event_socket']['uk'] = "";
$text['header-event_socket']['de-at'] = "";
$text['header-event_socket']['ar-eg'] = "";
$text['header-config_detail']['en-us'] = "Admin Configuration";
$text['header-config_detail']['es-cl'] = "";
$text['header-config_detail']['pt-pt'] = "";
$text['header-config_detail']['fr-fr'] = "";
$text['header-config_detail']['pt-br'] = "";
$text['header-config_detail']['pl'] = "";
$text['header-config_detail']['sv-se'] = "";
$text['header-config_detail']['uk'] = "";
$text['header-config_detail']['de-at'] = "";
$text['header-config_detail']['ar-eg'] = "";
$text['header-config_database']['en-us'] = "Database Configuration";
$text['header-config_database']['es-cl'] = "";
$text['header-config_database']['pt-pt'] = "";
$text['header-config_database']['fr-fr'] = "";
$text['header-config_database']['pt-br'] = "";
$text['header-config_database']['pl'] = "";
$text['header-config_database']['sv-se'] = "";
$text['header-config_database']['uk'] = "";
$text['header-config_database']['de-at'] = "";
$text['header-config_database']['ar-eg'] = "";
$text['header-installing']['en-us'] = "Executing Install";
$text['header-installing']['es-cl'] = "";
$text['header-installing']['pt-pt'] = "";
$text['header-installing']['fr-fr'] = "";
$text['header-installing']['pt-br'] = "";
$text['header-installing']['pl'] = "";
$text['header-installing']['sv-se'] = "";
$text['header-installing']['uk'] = "";
$text['header-installing']['de-at'] = "";
$text['header-installing']['ar-eg'] = "";
$text['description-event_host']['en-us'] = "Enter the event socket host name/IP.";
$text['description-event_host']['es-cl'] = "";
$text['description-event_host']['pt-pt'] = "";
$text['description-event_host']['fr-fr'] = "";
$text['description-event_host']['pt-br'] = "";
$text['description-event_host']['pl'] = "";
$text['description-event_host']['sv-se'] = "";
$text['description-event_host']['uk'] = "";
$text['description-event_host']['de-at'] = "";
$text['description-event_host']['ar-eg'] = "";
$text['description-event_port']['en-us'] = "Enter the event socket port number.";
$text['description-event_port']['es-cl'] = "";
$text['description-event_port']['pt-pt'] = "";
$text['description-event_port']['fr-fr'] = "";
$text['description-event_port']['pt-br'] = "";
$text['description-event_port']['pl'] = "";
$text['description-event_port']['sv-se'] = "";
$text['description-event_port']['uk'] = "";
$text['description-event_port']['de-at'] = "";
$text['description-event_port']['ar-eg'] = "";
$text['description-event_password']['en-us'] = "Enter the event socket password.";
$text['description-event_password']['es-cl'] = "";
$text['description-event_password']['pt-pt'] = "";
$text['description-event_password']['fr-fr'] = "";
$text['description-event_password']['pt-br'] = "";
$text['description-event_password']['pl'] = "";
$text['description-event_password']['sv-se'] = "";
$text['description-event_password']['uk'] = "";
$text['description-event_password']['de-at'] = "";
$text['description-event_password']['ar-eg'] = "";
$text['description-username']['en-us'] = "Enter the database username.";
$text['description-username']['es-cl'] = "Ingrese el nombre de usuario de la base de datos.";
$text['description-username']['pt-pt'] = "Introduza o utilizador da base de dados.";
$text['description-username']['fr-fr'] = "Entrer le nom d'utilisateur de la Base de données.";
$text['description-username']['pt-br'] = "Insira o nome do usuário";
$text['description-username']['pl'] = "Wprowadź nazwę użytkownika";
$text['description-username']['sv-se'] = "Ange databasen användarnamn här.";
$text['description-username']['uk'] = "Введіть ім’я користувача бази даних";
$text['description-username']['de-at'] = "Geben Sie den Datenbank Benutzernamen an.";
$text['description-username']['ar-eg'] = "أدخل اسم المستخدم هنا";
$text['description-type']['en-us'] = "Select the database type.";
$text['description-type']['es-cl'] = "Seleccione el tipo de base de datos";
$text['description-type']['pt-pt'] = "Escolha o tipo de base de dados.";
$text['description-type']['fr-fr'] = "Choisir le type de Base de données.";
$text['description-type']['pt-br'] = "Introduza o tipo de definição.";
$text['description-type']['pl'] = "Wprowadź rodzaj bazy danych";
$text['description-type']['sv-se'] = "Välj databastyp";
$text['description-type']['uk'] = "Виберіть тип бази даних";
$text['description-type']['de-at'] = "Wählen Sie den Datenbank Typ.";
$text['description-type']['ar-eg'] = "إختر نوع قاعدة البيانات";
$text['description-port']['en-us'] = "Enter the port number.";
$text['description-port']['es-cl'] = "Ingrese el número del puerto.";
$text['description-port']['pt-pt'] = "Introduza o número do porto.";
$text['description-port']['fr-fr'] = "Entrer le numéro de port.";
$text['description-port']['pt-br'] = "Insira o número da porta";
$text['description-port']['pl'] = "Wprowadź numer portu";
$text['description-port']['sv-se'] = "Ange portnummer";
$text['description-port']['uk'] = "Введіть номер порта";
$text['description-port']['de-at'] = "Geben Sie die Port Nummer an.";
$text['description-port']['ar-eg'] = "أدخل رقم المنفذ";
$text['description-path']['en-us'] = "Enter the database file path (SQLite only).";
$text['description-path']['es-cl'] = "Ingrese la ruta al archivo de datos (solo SQLite).";
$text['description-path']['pt-pt'] = "Introduza o caminho da base de dados (apenas SQLite)";
$text['description-path']['fr-fr'] = "Entrer le chemin du fichier Base de données (Spécifique SQLite).";
$text['description-path']['pt-br'] = "Insira o caminho da base de dados (SQLite)";
$text['description-path']['pl'] = "Wprowadź ścieżkę do pliku bazy danych (tylko SQLite)";
$text['description-path']['sv-se'] = "Ange databasens sökväg (gäller endast SQLite).";
$text['description-path']['uk'] = "Вкажіть шлях до файлу бази даних (тільки SQLite).";
$text['description-path']['de-at'] = "Geben Sie den Datenbank Pfad an (nur für SQLite).";
$text['description-path']['ar-eg'] = "";
$text['description-password']['en-us'] = "Enter the database password.";
$text['description-password']['es-cl'] = "Ingrese la contraseña de la base de datos.";
$text['description-password']['pt-pt'] = "Introduza a palavra-chave da base de dados.";
$text['description-password']['fr-fr'] = "Entrer le mot de passe pour la Base de données.";
$text['description-password']['pt-br'] = "Introduza a senha";
$text['description-password']['pl'] = "Wpisz hasło";
$text['description-password']['sv-se'] = "Ange databasens lösenord.";
$text['description-password']['uk'] = "Введіть пароль бази даних.";
$text['description-password']['de-at'] = "Geben Sie das Datenbank Passwort ein.";
$text['description-password']['ar-eg'] = "أدخل الرقم السري الخاص بقاعدة البيانات";
$text['description-name']['en-us'] = "Enter the database name.";
$text['description-name']['es-cl'] = "Ingrese el nombre de la base de datos.";
$text['description-name']['pt-pt'] = "Introduza o nome da base de dados.";
$text['description-name']['fr-fr'] = "Entrer le nom de la Base de données.";
$text['description-name']['pt-br'] = "Insira o nome do menu";
$text['description-name']['pl'] = "Wprowadź nazwę bazy danych.";
$text['description-name']['sv-se'] = "Ange databasens namn.";
$text['description-name']['uk'] = "Введіть ім'я бази даних.";
$text['description-name']['de-at'] = "Geben Sie den Namen der Datenbank an";
$text['description-name']['ar-eg'] = "أدخل إسم قاعدة البيانات";
$text['description-host']['en-us'] = "Enter the host name.";
$text['description-host']['es-cl'] = "Ingrese el nombre de host";
$text['description-host']['pt-pt'] = "Introduza o nome da máquina.";
$text['description-host']['fr-fr'] = "Entrer le nom de l'hôte.";
$text['description-host']['pt-br'] = "Insira o nome da máquina ";
$text['description-host']['pl'] = "Wprowadź nazwę hosta.";
$text['description-host']['sv-se'] = "Ange värdnamnet";
$text['description-host']['uk'] = "Введіть ім'я хоста.";
$text['description-host']['de-at'] = "Geben Sie den Host Namen ein.";
$text['description-host']['ar-eg'] = "أدخل إسم المضيف";
$text['description-driver']['en-us'] = "Select the database driver.";
$text['description-driver']['es-cl'] = "Seleccione un controlador de base de datos.";
$text['description-driver']['pt-pt'] = "Escolha o driver da base de dados";
$text['description-driver']['fr-fr'] = "Choisir le driver de la Base de données.";
$text['description-driver']['pt-br'] = "Escolha o driver da base de dados";
$text['description-driver']['pl'] = "Wybierz sterownik bazy danych.";
$text['description-driver']['sv-se'] = "Välj databas drivrutin.";
$text['description-driver']['uk'] = "Виберіть драйвер бази даних.";
$text['description-driver']['de-at'] = "Wählen Sie den Datenbank Treiber.";
$text['description-driver']['ar-eg'] = "";
$text['description-description']['en-us'] = "Enter a description for this database, if desired.";
$text['description-description']['es-cl'] = "Ingrese una descripción para esta base de datos, opcional.";
$text['description-description']['pt-pt'] = "Introduza a descrição para a base de dados (opcional).";
$text['description-description']['fr-fr'] = "Entrer une description pour cette Base de données. (optionnel)";
$text['description-description']['pt-br'] = "Insira a descrição, caso desejar";
$text['description-description']['pl'] = "Wprowadź opis bazy danych (opcjonalne)";
$text['description-description']['sv-se'] = "Fyll i en beskrivning för denna databas, om nödvändigt.";
$text['description-description']['uk'] = "Введіть опис, якщо це необхідно.";
$text['description-description']['de-at'] = "Falls gewünscht, geben Sie eine Beschreibung an.";
$text['description-description']['ar-eg'] = "";
$text['description-install']['en-us'] = "Select the action below you wish to perform.";
$text['description-install']['es-cl'] = "Seleccione las accion a continuación que desea realizar.";
$text['description-install']['pt-pt'] = "Selecione as ações abaixo você deseja executar."; //action signular needed
$text['description-install']['fr-fr'] = "Sélectionnez les action ci-dessous que vous souhaitez effectuer.";
$text['description-install']['pt-br'] = "Seleciona as ações abaixo que deseja executar "; //action signular needed
$text['description-install']['pl'] = "Wybierz opcje, które chcesz wykonać."; //action signular needed
$text['description-install']['sv-se'] = "Välj de åtgärder nedan som du vill utföra."; //action signular needed
$text['description-install']['uk'] = "Виберіть об’єкти для оновлення"; //action signular needed
$text['description-install']['de-at'] = "Wählen Sie eine Aktion."; //action signular needed
$text['description-database-edit']['en-us'] = "Database connection information.";
$text['description-database-edit']['es-cl'] = "Información de conexión a base de datos.";
$text['description-database-edit']['pt-pt'] = "Informação da ligação à base de dados.";
$text['description-database-edit']['fr-fr'] = "Informations de connexion à la Base";
$text['description-database-edit']['pt-br'] = "Informações da ligação na base de dados";
$text['description-database-edit']['pl'] = "Informacje o połączeniach z bazą danych.";
$text['description-database-edit']['sv-se'] = "Information om Databasanslutning";
$text['description-database-edit']['uk'] = "інформація про підключення до бази даних.";
$text['description-database-edit']['de-at'] = "Datenbank Verbindungs Information.";
$text['description-database-edit']['ar-eg'] = "بيانات الإتصال الخاص بقاعدة البيانات";
$text['description-database-add']['en-us'] = "Database connection information.";
$text['description-database-add']['es-cl'] = "Información de conexión a base de datos.";
$text['description-database-add']['pt-pt'] = "Informação da ligação à base de dados.";
$text['description-database-add']['fr-fr'] = "Informations de connexion à la Base.";
$text['description-database-add']['pt-br'] = "Informações da ligação na base de dados";
$text['description-database-add']['pl'] = "Informacje o połączeniach z bazą danych.";
$text['description-database-add']['sv-se'] = "Information om Databasanslutning";
$text['description-database-add']['uk'] = "інформація про підключення до бази даних.";
$text['description-database-add']['de-at'] = "Datenbank Verbindungs Information.";
$text['description-database-add']['ar-eg'] = "بيانات الإتصال الخاص بقاعدة البيانات";
$text['description-select_language']['en-us'] = "Please select the language you want to use";
$text['description-select_language']['es-cl'] = "";
$text['description-select_language']['pt-pt'] = "";
$text['description-select_language']['fr-fr'] = "";
$text['description-select_language']['pt-br'] = "";
$text['description-select_language']['pl'] = "";
$text['description-select_language']['sv-se'] = "";
$text['description-select_language']['uk'] = "";
$text['description-select_language']['de-at'] = "";
$text['description-select_language']['ar-eg'] = "";
$text['confirm-delete']['en-us'] = "Do you really want to delete this?";
$text['confirm-delete']['es-cl'] = "¿Realmente desea eliminar esto?";
$text['confirm-delete']['pt-pt'] = "Deseja realmente remover isto?";
$text['confirm-delete']['fr-fr'] = "Voulez-vous vraiment supprimer cela?";
$text['confirm-delete']['pt-br'] = "Deseja realmente remover isto?";
$text['confirm-delete']['pl'] = "Czy na pewno chcesz to usunąć?";
$text['confirm-delete']['sv-se'] = "Vill du verkligen ta bort detta?";
$text['confirm-delete']['uk'] = "Ви дійсно бажаєте це видалити?";
$text['confirm-delete']['de-at'] = "Wollen Sie das wirklich löschen?";
$text['confirm-delete']['ar-eg'] = "هل تريد حقا مسح هذا؟";
$text['button-save']['en-us'] = "Save";
$text['button-save']['es-cl'] = "Guardar";
$text['button-save']['pt-pt'] = "Guardar";
$text['button-save']['fr-fr'] = "Sauvegarder";
$text['button-save']['pt-br'] = "Salvar";
$text['button-save']['pl'] = "Zachowaj";
$text['button-save']['sv-se'] = "Spara";
$text['button-save']['uk'] = "Зберегти";
$text['button-save']['de-at'] = "Speichern";
$text['button-save']['ar-eg'] = "حفظ";
$text['button-next']['en-us'] = "Next";
$text['button-next']['es-cl'] = "";
$text['button-next']['pt-pt'] = "";
$text['button-next']['fr-fr'] = "";
$text['button-next']['pt-br'] = "";
$text['button-next']['pl'] = "";
$text['button-next']['sv-se'] = "";
$text['button-next']['uk'] = "";
$text['button-next']['de-at'] = "";
$text['button-next']['ar-eg'] = "";
$text['button-detect']['en-us'] = "Detect Configuration";
$text['button-detect']['es-cl'] = "";
$text['button-detect']['pt-pt'] = "";
$text['button-detect']['fr-fr'] = "";
$text['button-detect']['pt-br'] = "";
$text['button-detect']['pl'] = "";
$text['button-detect']['sv-se'] = "";
$text['button-detect']['uk'] = "";
$text['button-detect']['de-at'] = "";
$text['button-detect']['ar-eg'] = "";
$text['button-select']['en-us'] = "Select";
$text['button-select']['es-cl'] = "";
$text['button-select']['pt-pt'] = "";
$text['button-select']['fr-fr'] = "";
$text['button-select']['pt-br'] = "";
$text['button-select']['pl'] = "";
$text['button-select']['sv-se'] = "";
$text['button-select']['uk'] = "";
$text['button-select']['de-at'] = "";
$text['button-select']['ar-eg'] = "";
$text['button-edit']['en-us'] = "Edit";
$text['button-edit']['es-cl'] = "Editar";
$text['button-edit']['pt-pt'] = "Editar";
$text['button-edit']['fr-fr'] = "Editer";
$text['button-edit']['pt-br'] = "Editar";
$text['button-edit']['pl'] = "Edytuj";
$text['button-edit']['sv-se'] = "Editera";
$text['button-edit']['uk'] = "Редагувати";
$text['button-edit']['de-at'] = "Bearbeiten";
$text['button-edit']['ar-eg'] = "تعديل";
$text['button-delete']['en-us'] = "Delete";
$text['button-delete']['es-cl'] = "Eliminar";
$text['button-delete']['pt-pt'] = "Remover";
$text['button-delete']['fr-fr'] = "Supprimé";
$text['button-delete']['pt-br'] = "Remover";
$text['button-delete']['pl'] = "Usuń";
$text['button-delete']['sv-se'] = "Ta Bort";
$text['button-delete']['uk'] = "Видалити";
$text['button-delete']['de-at'] = "Löschen";
$text['button-delete']['ar-eg'] = "مسح";
$text['button-back']['en-us'] = "Back";
$text['button-back']['es-cl'] = "Volver";
$text['button-back']['pt-pt'] = "Voltar";
$text['button-back']['fr-fr'] = "Retour";
$text['button-back']['pt-br'] = "Voltar";
$text['button-back']['pl'] = "Wróć";
$text['button-back']['sv-se'] = "Tillbaka";
$text['button-back']['uk'] = "Назад";
$text['button-back']['de-at'] = "Zurück";
$text['button-back']['ar-eg'] = "رجوع";
$text['button-add']['en-us'] = "Add";
$text['button-add']['es-cl'] = "Agregar";
$text['button-add']['pt-pt'] = "Adicionar";
$text['button-add']['fr-fr'] = "Ajouter";
$text['button-add']['pt-br'] = "Adicionar";
$text['button-add']['pl'] = "Dodaj";
$text['button-add']['sv-se'] = "Lägg Till";
$text['button-add']['uk'] = "Додати";
$text['button-add']['de-at'] = "Hinzufügen";
$text['button-add']['ar-eg'] = "اضافة";
$text['button-install_execute']['en-us'] = "Execute";
$text['button-install_execute']['es-cl'] = "Ejecutar";
$text['button-install_execute']['pt-pt'] = "Executar";
$text['button-install_execute']['fr-fr'] = "Exécuter";
$text['button-install_execute']['pt-br'] = "Executar";
$text['button-install_execute']['pl'] = "Wykonaj";
$text['button-install_execute']['sv-se'] = "Kör";
$text['button-install_execute']['uk'] = "Виконати";
$text['button-install_execute']['de-at'] = "Ausführen";
?>

10
core/install/app_menu.php Normal file
View File

@ -0,0 +1,10 @@
<?php
$apps[$x]['menu'][0]['title']['en-us'] = "Install";
$apps[$x]['menu'][0]['uuid'] = "75507e6e-891e-11e5-af63-feff819cdc9f";
$apps[$x]['menu'][0]['parent_uuid'] = "594d99c5-6128-9c88-ca35-4b33392cec0f";
$apps[$x]['menu'][0]['category'] = "internal";
$apps[$x]['menu'][0]['path'] = "/core/install/index.php";
$apps[$x]['menu'][0]['groups'][] = "superadmin";
?>

102
core/install/index.php Normal file
View File

@ -0,0 +1,102 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Matthew Vale <github@mafoo.org>
*/
require_once "root.php";
require_once "resources/require.php";
require_once "resources/check_auth.php";
//detect install state
$first_time_install = true;
if (file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/resources/config.php")) {
$first_time_install = false;
} elseif (file_exists("/etc/fusionpbx/config.php")) {
//linux
$first_time_install = false;
} elseif (file_exists("/usr/local/etc/fusionpbx/config.php")) {
$first_time_install = false;
}
if($first_time_install) {
header("Location: ".PROJECT_PATH."/core/install/install_first_time.php");
exit;
}
require_once "resources/check_auth.php";
if (!if_group("superadmin")) {
echo "access denied";
exit;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//includes and title
require_once "resources/header.php";
$document['title'] = $text['title-install'];
echo "<b>".$text['header-install']."</b>";
echo "<br><br>";
echo $text['description-install'];
echo "<br><br>";
echo "<form name='frm' method='post' action='/core/install/install_first_time.php'>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo " <td width='30%' class='vncell'>\n";
echo " <input id='do_ft-install' type='submit' class='btn' value='".$text['label-ft-install']."'/>";
echo " </td>\n";
echo " <td width='70%' class='vtable' style='height: 50px;'>\n";
echo " <label for='do_ft-install'>";
echo " ".$text['description-ft-install'];
echo " </label>\n";
echo " </td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</form>\n";
echo "<form name='frm' method='post' action='/core/install/install_add_switch.php'>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo " <td width='30%' class='vncell'>\n";
echo " <input id='do_add-switch' type='submit' class='btn' value='".$text['label-add-switch']."'/>";
echo " </td>\n";
echo " <td width='70%' class='vtable' style='height: 50px;'>\n";
echo " <label for='do_add-switch'>";
echo " ".$text['description-add-switch'];
echo " </label>\n";
echo " </td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</form>\n";
echo "<br><br>";
echo "<p>WiP</p>";
//include the footer
require_once "resources/footer.php";
?>

View File

@ -0,0 +1,377 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Matthew Vale <github@mafoo.org>
*/
require_once "root.php";
require_once "resources/functions.php";
require_once "resources/classes/text.php";
//initialize varibles we are going to use
$event_host = '';
$event_port = '';
$event_password = '';
$install_language = 'en-us';
$admin_username = '';
$admin_password = '';
$install_default_country = 'US';
$install_template_name = '';
$domain_name = '';
$db_type = '';
$db_path = '';
$db_host = '';
$db_port = '';
$db_name = '';
$db_username = '';
$db_password = '';
$db_create_username = '';
$db_create_password = '';
//detect the iso country code from the locale
//TBD $locale = Locale::getDefault();
$timezone = 'UTC';
if (is_link('/etc/localtime')) {
// Mac OS X (and older Linuxes)
// /etc/localtime is a symlink to the
// timezone in /usr/share/zoneinfo.
$filename = readlink('/etc/localtime');
if (strpos($filename, '/usr/share/zoneinfo/') === 0) {
$timezone = substr($filename, 20);
}
} elseif (file_exists('/etc/timezone')) {
// Ubuntu / Debian.
$data = file_get_contents('/etc/timezone');
if ($data) {
$timezone = $data;
}
} elseif (file_exists('/etc/sysconfig/clock')) {
// RHEL / CentOS
$data = parse_ini_file('/etc/sysconfig/clock');
if (!empty($data['ZONE'])) {
$timezone = $data['ZONE'];
}
}
date_default_timezone_set($timezone);
//detect install state
$first_time_install = true;
if (file_exists($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/resources/config.php")) {
$first_time_install = false;
} elseif (file_exists("/etc/fusionpbx/config.php")) {
//linux
$first_time_install = false;
} elseif (file_exists("/usr/local/etc/fusionpbx/config.php")) {
$first_time_install = false;
}
if(!$first_time_install) {
require_once "resources/require.php";
require_once "resources/check_auth.php";
if (!if_group("superadmin")) {
echo "access denied";
exit;
}
}
$install_step = '';
$return_install_step = '';
if (count($_POST)>0) {
$install_language = check_str($_POST["install_language"]);
$install_step = check_str($_POST["install_step"]);
$return_install_step = check_str($_POST["return_install_step"]);
if(isset($_POST["event_host"])){
$event_host = check_str($_POST["event_host"]);
$event_port = check_str($_POST["event_port"]);
$event_password = check_str($_POST["event_password"]);
}
if(isset($_POST["db_type"])){
$db_type = $_POST["db_type"];
$admin_username = $_POST["admin_username"];
$admin_password = $_POST["admin_password"];
$install_default_country = $_POST["install_default_country"];
$install_template_name = $_POST["install_template_name"];
$domain_name = $_POST["domain_name"];
}
}
if(!$install_step) { $install_step = 'select_language'; }
$_SESSION['domain']['language']['code'] = $install_language;
//add multi-lingual support
$language = new text;
$text = $language->get();
//set a default template
$default_template = 'enhanced';
if (isset($_SESSION['domain']['template']['name']) and strlen($_SESSION['domain']['template']['name']) != 0) {
$default_template = $_SESSION['domain']['template']['name'];
}
//set a default enviroment if first_time
if($first_time_install){
//grab the default theme
$set_session_theme = 1;
$domains_processed = 1;
include "themes/enhanced/app_defaults.php";
unset($set_session_theme, $domains_processed);
//initialize some defaults so we can be 'logged in'
$_SESSION['username'] = 'first_time_install';
$_SESSION['permissions'][]['permission_name'] = 'superadmin';
$_SESSION['menu'] = '';
//initialize some varibles to cut down on warnings
$_SESSION['message'] = '';
$v_link_label_play = '';
$v_link_label_pause = '';
$default_login = 0;
$footer = '';
$onload = '';
}
//get the contents of the template and save it to the template variable
$template = file_get_contents($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/themes/'.$default_template.'/template.php');
//buffer the content
ob_end_clean(); //clean the buffer
ob_start();
$messages = array();
if (!extension_loaded('PDO')) {
$messages[] = "<b>PHP PDO was not detected</b>. Please install it before proceeding";
}
echo "<div align='center'>\n";
$msg = '';
//make sure the includes directory is writable so the config.php file can be written.
if (!is_writable($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/pdo.php")) {
$messages[] = "<b>Write access to ".$_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."</b> and its sub-directories are required during the install.";
}
//test for selinux
if (file_exists('/usr/sbin/getenforce')) {
$enforcing;
exec('getenforce', $enforcing);
if($enforcing[0] == 'Enforcing'){
$messages[] = "<b>SELinux is enabled and enforcing</b> you must have a policy installed to let the webserver connect to the switch event socket<br/>".
"<sm>You can use the following to find what ports are allowed<pre>semanage port -l | grep '^http_port_t'</pre></sm>";
}
}
//action code
if($return_install_step == 'config_detail'){
//check for all required data
$existing_errors = count($messages);
if (strlen($admin_username) == 0) { $messages[] = "Please provide the Admin Username"; }
if (strlen($admin_password) == 0) { $messages[] = "Please provide the Admin Password"; }
elseif (strlen($admin_password) < 5) { $messages[] = "Please provide an Admin Password that is 5 or more characters.<br>\n"; }
if ( count($messages) > $existing_errors) { $install_step = 'config_detail'; }
}
if($install_step =='execute')
{
//start the rocket launch!
//set the max execution time to 1 hour
ini_set('max_execution_time',3600);
}
//display messages
if (count($messages)>0) {
echo "<br />\n";
echo "<div align='center'>\n";
echo "<table width='75%'>\n";
echo "<tr>\n";
echo "<th align='left'>Messages</th>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='row_style1'><strong><ul>\n";
foreach ($messages as $message){
echo "<li>$message</li>\n";
}
echo "</ul></strong></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</div>\n";
}
//includes and title
$document['title'] = $text['title-install_first_time'];
//view code
if($install_step == 'select_language'){
include "resources/page_parts/install_select_language.php";
echo "<form method='post' name='frm' action=''>\n";
echo " <input type='hidden' name='install_language' value='".$_SESSION['domain']['language']['code']."'/>\n";
echo " <input type='hidden' name='return_install_step' value='select_language'/>\n";
echo " <input type='hidden' name='install_step' value='detect_config'/>\n";
echo " <div style='text-align:right'>\n";
echo " <button type='submit' id='next'>".$text['button-next']."</button>\n";
echo " </div>\n";
echo "</form>\n";
}elseif($install_step == 'detect_config'){
include "resources/page_parts/install_event_socket.php";
if($detect_ok){
echo "<form method='post' name='frm' action=''>\n";
echo " <input type='hidden' name='install_language' value='".$_SESSION['domain']['language']['code']."'/>\n";
echo " <input type='hidden' name='return_install_step' value='detect_config'/>\n";
echo " <input type='hidden' name='install_step' value='config_detail'/>\n";
echo " <input type='hidden' name='event_host' value='$event_host'/>\n";
echo " <input type='hidden' name='event_port' value='$event_port'/>\n";
echo " <input type='hidden' name='event_password' value='$event_password'/>\n";
echo " <div style='text-align:right'>\n";
echo " <button type='button' onclick=\"history.go(-1);\">".$text['button-back']."</button>\n";
echo " <button type='submit' id='next'>".$text['button-next']."</button>\n";
echo " </div>\n";
echo "</form>\n";
}
}
elseif($install_step == 'config_detail'){
if(!$domain_name){
//get the domain
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
}
include "resources/page_parts/install_config_detail.php";
}
elseif($install_step == 'config_database'){
include "resources/page_parts/install_config_database.php";
}
elseif($install_step == 'execute'){
echo "<p><b>".$text['header-installing']."</b></p>\n";
//$protocol = 'http';
//if($_SERVER['HTTPS']) { $protocol = 'https'; }
//echo "<iframe src='$protocol://$domain_name/core/install/install_first_time.php' style='border:solid 1px #000;width:100%;height:auto'></iframe>";
require_once "core/install/resources/classes/detect_switch.php";
$switch_detect = new detect_switch($event_host, $event_port, $event_password);
$detect_ok = true;
try {
$switch_detect->detect();
} catch(Exception $e){
echo "<p>Failed to detect confgiuration detect_switch reported: " . $e->getMessage() . "</p>\n";
$detect_ok = false;
}
if($detect_ok){
$install_ok = true;
echo "<pre>\n";
function error_handler($err_severity, $errstr, $errfile, $errline ) {
if (0 === error_reporting()) { return false;}
switch($err_severity)
{
case E_ERROR: throw new Exception ($errstr . " in $errfile line: $errline");
case E_PARSE: throw new Exception ($errstr . " in $errfile line: $errline");
case E_CORE_ERROR: throw new Exception ($errstr . " in $errfile line: $errline");
case E_COMPILE_ERROR: throw new Exception ($errstr . " in $errfile line: $errline");
case E_USER_ERROR: throw new Exception ($errstr . " in $errfile line: $errline");
case E_STRICT: throw new Exception ($errstr . " in $errfile line: $errline");
case E_RECOVERABLE_ERROR: throw new Exception ($errstr . " in $errfile line: $errline");
default: return false;
}
}
set_error_handler("error_handler");
try {
$domain_uuid = uuid();
require_once "resources/classes/install_fusionpbx.php";
$fusionPBX = new install_fusionpbx($domain_name, $domain_uuid, $switch_detect);
$fusionPBX->debug = true;
$fusionPBX->admin_username = $admin_username;
$fusionPBX->admin_password = $admin_password;
$fusionPBX->default_country = $install_default_country;
$fusionPBX->install_language = $install_language;
$fusionPBX->template_name = $install_template_name;
foreach($_POST as $key=>$value){
if(substr($key,0,3) == "db_"){
$fusionPBX->$key = $value;
}
}
$fusionPBX->install();
require_once "resources/classes/install_switch.php";
$switch = new install_switch($domain_name, $domain_uuid, $switch_detect);
$switch->debug = true;
$switch->install();
}catch(Exception $e){
echo "</pre>\n";
echo "<p><b>Failed to install</b><br/>" . $e->getMessage() . "</p>\n";
try {
require_once "resources/classes/install_fusionpbx.php";
$fusionPBX = new install_fusionpbx($domain_name, $domain_uuid, $switch_detect);
$fusionPBX->remove_config();
}catch(Exception $e){
echo "<p><b>Failed to remove config:</b> " . $e->getMessage() . "</p>\n";
}
$install_ok = false;
}
restore_error_handler();
if($install_ok){
echo "</pre>\n";
header("Location: ".PROJECT_PATH."/logout.php");
$_SESSION['message'] = 'Install complete';
}else{
echo "<form method='post' name='frm' action=''>\n";
echo " <div style='text-align:right'>\n";
echo " <button type='button' onclick=\"history.go(-1);\">".$text['button-back']."</button>\n";
echo " <button type='button' onclick=\"location.reload(true);\">".$text['button-install_execute']."</button>\n";
echo " </div>\n";
echo "</form>\n";
}
}
}else{
echo "<p>Unkown install_step '$install_step'</p>\n";
}
// add the content to the template and then send output
$body = ob_get_contents(); //get the output from the buffer
ob_end_clean(); //clean the buffer
//replace known used constants
$body = str_replace ("<!--{project_path}-->", PROJECT_PATH, $body); //defined in /resources/menu.php
ob_start();
eval('?>' . $template . '<?php ');
$template = ob_get_contents(); //get the output from the buffer
ob_end_clean(); //clean the buffer
$custom_head = '';
$output = str_replace ("<!--{title}-->", $document['title'], $template); //<!--{title}--> defined in each individual page
$output = str_replace ("<!--{head}-->", $custom_head, $output); //<!--{head}--> defined in each individual page
$output = str_replace ("<!--{menu}-->", $_SESSION["menu"], $output); //defined in /resources/menu.php
$output = str_replace ("<!--{project_path}-->", PROJECT_PATH, $output); //defined in /resources/menu.php
$pos = strrpos($output, "<!--{body}-->");
if ($pos === false) {
$output = $body; //if tag not found just show the body
}
else {
//replace the body
$output = str_replace ("<!--{body}-->", $body, $output);
}
echo $output;
unset($output);
?>

View File

@ -0,0 +1,155 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2010-2015
All Rights Reserved.
Contributor(s):
Matthew Vale <github@mafoo.org>
*/
require_once "root.php";
require_once "resources/classes/EventSocket.php";
//define the install class
class detect_switch {
// version information
protected $_major;
protected $_minor;
// folders
protected $_base_dir = '';
protected $_cache_dir = '';
protected $_certs_dir = '';
protected $_conf_dir = '';
protected $_db_dir = '';
protected $_external_ssl_dir = '';
protected $_grammar_dir = '';
protected $_htdocs_dir = '';
protected $_internal_ssl_dir = '';
protected $_log_dir = '';
protected $_mod_dir = '';
protected $_recordings_dir = '';
protected $_run_dir = '';
protected $_script_dir = '';
protected $_sounds_dir = '';
protected $_storage_dir = '';
protected $_temp_dir = '';
function major() { return $this->_major; }
function minor() { return $this->_minor; }
function base_dir() { return $this->_base_dir; }
function cache_dir() { return $this->_cache_dir; }
function certs_dir() { return $this->_certs_dir; }
function conf_dir() { return $this->_conf_dir; }
function db_dir() { return $this->_db_dir; }
function external_ssl_dir() { return $this->_external_ssl_dir; }
function grammar_dir() { return $this->_grammar_dir; }
function htdocs_dir() { return $this->_htdocs_dir; }
function internal_ssl_dir() { return $this->_internal_ssl_dir; }
function log_dir() { return $this->_log_dir; }
function mod_dir() { return $this->_mod_dir; }
function recordings_dir() { return $this->_recordings_dir; }
function run_dir() { return $this->_run_dir; }
function script_dir() { return $this->_script_dir; }
function sounds_dir() { return $this->_sounds_dir; }
function storage_dir() { return $this->_storage_dir; }
function temp_dir() { return $this->_temp_dir; }
// event socket
public $event_host = 'localhost';
public $event_port = '8021';
public $event_password = 'ClueCon';
protected $event_socket;
public function __construct($event_host, $event_port, $event_password) {
if($event_host){ $this->event_host = $event_host; }
if($event_port){ $this->event_port = $event_port; }
if($event_password){ $this->event_password = $event_password; }
$this->connect_event_socket();
if(!$this->event_socket){
$this->detect_event_socket();
}
}
protected function detect_event_socket() {
//perform searches for user's config here
}
public function detect() {
$this->connect_event_socket();
if(!$this->event_socket){
throw new Exception('Failed to use event socket');
}
$FS_Version = $this->event_socket_request('api version');
preg_match("/FreeSWITCH Version (\d+)\.(\d(?:\.\d+)?)/", $FS_Version, $matches);
$this->_major = $matches[1];
$this->_minor = $matches[2];
$FS_Vars = $this->event_socket_request('api global_getvar');
foreach (explode("\n",$FS_Vars) as $FS_Var){
preg_match("/(\w+_dir)=(.*)/", $FS_Var, $matches);
if(count($matches) > 0 and property_exists($this, "_" . $matches[1])){
$field = "_" . $matches[1];
$this->$field = $matches[2];
}
}
}
public function show_config() {
$buffer = '';
$buffer .= "FreeSWITCH Verson => " . $this->_major . "." . $this->_minor . "\n";
$buffer .= "base_dir => " . $this->_base_dir ."\n";
$buffer .= "cache_dir => " . $this->_cache_dir ."\n";
$buffer .= "certs_dir => " . $this->_certs_dir ."\n";
$buffer .= "conf_dir => " . $this->_conf_dir ."\n";
$buffer .= "db_dir => " . $this->_db_dir ."\n";
$buffer .= "external_ssl_dir => " . $this->_external_ssl_dir ."\n";
$buffer .= "grammar_dir => " . $this->_grammar_dir ."\n";
$buffer .= "htdocs_dir => " . $this->_htdocs_dir ."\n";
$buffer .= "internal_ssl_dir => " . $this->_internal_ssl_dir ."\n";
$buffer .= "log_dir => " . $this->_log_dir ."\n";
$buffer .= "mod_dir => " . $this->_mod_dir ."\n";
$buffer .= "recordings_dir => " . $this->_recordings_dir ."\n";
$buffer .= "run_dir => " . $this->_run_dir ."\n";
$buffer .= "script_dir => " . $this->_script_dir ."\n";
$buffer .= "sounds_dir => " . $this->_sounds_dir ."\n";
$buffer .= "storage_dir => " . $this->_storage_dir ."\n";
$buffer .= "temp_dir => " . $this->_temp_dir ."\n";
return $buffer;
}
protected function connect_event_socket(){
$esl = new EventSocket;
if ($esl->connect($this->event_host, $this->event_port, $this->event_password)) {
$this->event_socket = $esl->reset_fp();
return true;
}
return false;
}
protected function event_socket_request($cmd) {
$esl = new EventSocket($this->event_socket);
$result = $esl->request($cmd);
$esl->reset_fp();
return $result;
}
}
?>

View File

@ -0,0 +1,992 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2010-2015
All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Matthew Vale <github@mafoo.org>
*/
include "root.php";
//define the install class
class install_fusionpbx {
protected $domain_uuid;
protected $domain_name;
protected $detect_switch;
protected $config_php;
protected $menu_uuid = 'b4750c3f-2a86-b00d-b7d0-345c14eca286';
protected $dbh;
public $debug = false;
public $install_msg;
public $install_language = 'en-us';
public $admin_username;
public $admin_password;
public $default_country = 'US';
public $template_name = 'enhanced';
public $db_type;
public $db_path;
public $db_host;
public $db_port;
public $db_name;
public $db_username;
public $db_password;
function __construct($domain_name, $domain_uuid, $detect_switch) {
if(!is_a($detect_switch, 'detect_switch')){
throw new Exception('The parameter $detect_switch must be a detect_switch object (or a subclass of)');
}
$this->domain_uuid = $domain_uuid;
$this->domain_name = $domain_name;
$this->detect_switch = $detect_switch;
if (is_dir("/etc/fusionpbx")){
$this->config_php = "/etc/fusionpbx/config.php";
} elseif (is_dir("/usr/local/etc/fusionpbx")){
$this->config_php = "/usr/local/etc/fusionpbx/config.php";
}
elseif (is_dir($_SERVER['DOCUMENT_ROOT'].PROJECT_PATH."/resources")) {
$this->config_php = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php";
}
else {
$this->config_php = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/config.php";
}
}
function write_debug($message) {
if($this->debug){
echo "$message\n";
}
}
function write_progress($message) {
echo "$message\n";
}
function install() {
ini_set('max_execution_time',3600);
$this->create_config_php();
$this->create_database();
$this->create_domain();
$this->create_superuser();
require "resources/require.php";
$this->create_menus();
$this->post_create();
}
protected function create_config_php() {
$tmp_config = "<?php\n";
$tmp_config .= "/* \$Id\$ */\n";
$tmp_config .= "/*\n";
$tmp_config .= " config.php\n";
$tmp_config .= " Copyright (C) 2008, 2013 Mark J Crane\n";
$tmp_config .= " All rights reserved.\n";
$tmp_config .= "\n";
$tmp_config .= " Redistribution and use in source and binary forms, with or without\n";
$tmp_config .= " modification, are permitted provided that the following conditions are met:\n";
$tmp_config .= "\n";
$tmp_config .= " 1. Redistributions of source code must retain the above copyright notice,\n";
$tmp_config .= " this list of conditions and the following disclaimer.\n";
$tmp_config .= "\n";
$tmp_config .= " 2. Redistributions in binary form must reproduce the above copyright\n";
$tmp_config .= " notice, this list of conditions and the following disclaimer in the\n";
$tmp_config .= " documentation and/or other materials provided with the distribution.\n";
$tmp_config .= "\n";
$tmp_config .= " THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,\n";
$tmp_config .= " INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY\n";
$tmp_config .= " AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n";
$tmp_config .= " AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n";
$tmp_config .= " OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n";
$tmp_config .= " SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n";
$tmp_config .= " INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n";
$tmp_config .= " CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n";
$tmp_config .= " ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n";
$tmp_config .= " POSSIBILITY OF SUCH DAMAGE.\n";
$tmp_config .= "*/\n";
$tmp_config .= "\n";
$tmp_config .= "//-----------------------------------------------------\n";
$tmp_config .= "// settings:\n";
$tmp_config .= "//-----------------------------------------------------\n";
$tmp_config .= "\n";
$tmp_config .= " //set the database type\n";
$tmp_config .= " \$db_type = '".$this->db_type."'; //sqlite, mysql, pgsql, others with a manually created PDO connection\n";
$tmp_config .= "\n";
if ($this->db_type == "sqlite") {
$tmp_config .= " //sqlite: the db_name and db_path are automatically assigned however the values can be overidden by setting the values here.\n";
$tmp_config .= " \$db_name = '".$this->db_name."'; //host name/ip address + '.db' is the default database filename\n";
$tmp_config .= " \$db_path = '".$this->db_path."'; //the path is determined by a php variable\n";
}
$tmp_config .= "\n";
$tmp_config .= " //mysql: database connection information\n";
if ($this->db_type == "mysql") {
if ($this->db_host == "localhost") {
//if localhost is used it defaults to a Unix Socket which doesn't seem to work.
//replace localhost with 127.0.0.1 so that it will connect using TCP
$this->db_host = "127.0.0.1";
}
$tmp_config .= " \$db_host = '".$this->db_host."';\n";
$tmp_config .= " \$db_port = '".$this->db_port."';\n";
$tmp_config .= " \$db_name = '".$this->db_name."';\n";
$tmp_config .= " \$db_username = '".$this->db_username."';\n";
$tmp_config .= " \$db_password = '".$this->db_password."';\n";
}
else {
$tmp_config .= " //\$db_host = '';\n";
$tmp_config .= " //\$db_port = '';\n";
$tmp_config .= " //\$db_name = '';\n";
$tmp_config .= " //\$db_username = '';\n";
$tmp_config .= " //\$db_password = '';\n";
}
$tmp_config .= "\n";
$tmp_config .= " //pgsql: database connection information\n";
if ($this->db_type == "pgsql") {
$tmp_config .= " \$db_host = '".$this->db_host."'; //set the host only if the database is not local\n";
$tmp_config .= " \$db_port = '".$this->db_port."';\n";
$tmp_config .= " \$db_name = '".$this->db_name."';\n";
$tmp_config .= " \$db_username = '".$this->db_username."';\n";
$tmp_config .= " \$db_password = '".$this->db_password."';\n";
}
else {
$tmp_config .= " //\$db_host = '".$this->db_host."'; //set the host only if the database is not local\n";
$tmp_config .= " //\$db_port = '".$this->db_port."';\n";
$tmp_config .= " //\$db_name = '".$this->db_name."';\n";
$tmp_config .= " //\$db_username = '".$this->db_username."';\n";
$tmp_config .= " //\$db_password = '".$this->db_password."';\n";
}
$tmp_config .= "\n";
$tmp_config .= " //show errors\n";
$tmp_config .= " ini_set('display_errors', '1');\n";
$tmp_config .= " //error_reporting (E_ALL); // Report everything\n";
$tmp_config .= " //error_reporting (E_ALL ^ E_NOTICE); // Report everything\n";
$tmp_config .= " error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING ); //hide notices and warnings";
$tmp_config .= "\n";
$tmp_config .= "?>";
if((file_exists($this->config_php) and !is_writable($this->config_php))
or !is_writable(dirname($this->config_php))
){
throw new Exception("cannot write to '" . $this->config_php . "'" );
}
$this->write_progress("Creating " . $this->config_php);
$fout = fopen($this->config_php,"w");
fwrite($fout, $tmp_config);
unset($tmp_config);
fclose($fout);
}
protected function create_database() {
require $this->config_php;
$this->write_progress("creating database as " . $this->db_type);
$function = "create_database_" . $this->db_type;
$this->$function();
global $db;
$db = $this->dbh;
}
protected function create_database_sqlite() {
//sqlite database will be created when the config.php is loaded and only if the database file does not exist
try {
$this->dbh = new PDO('sqlite:'.$this->db_path.'/'.$this->db_name); //sqlite 3
//$this->dbh = new PDO('sqlite::memory:'); //sqlite 3
}
catch (PDOException $error) {
throw Exception("Failed to create database: " . $error->getMessage());
}
//add additional functions to SQLite - bool PDO::sqliteCreateFunction ( string function_name, callback callback [, int num_args] )
if (!function_exists('php_now')) {
function php_now() {
if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) {
@date_default_timezone_set(@date_default_timezone_get());
}
return date("Y-m-d H:i:s");
}
}
$this->dbh->sqliteCreateFunction('now', 'php_now', 0);
//add the database structure
require_once "resources/classes/schema.php";
$schema = new schema;
$schema->db = $this->dbh;
$schema->db_type = $this->db_type;
$schema->sql();
$schema->exec();
//get the contents of the sql file
if (file_exists('/usr/share/examples/fusionpbx/resources/install/sql/sqlite.sql')){
$filename = "/usr/share/examples/fusionpbx/resources/install/sql/sqlite.sql";
}
else {
$filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/sqlite.sql';
}
$file_contents = file_get_contents($filename);
unset($filename);
//replace \r\n with \n then explode on \n
$file_contents = str_replace("\r\n", "\n", $file_contents);
//loop line by line through all the lines of sql code
$this->dbh->beginTransaction();
$string_array = explode("\n", $file_contents);
$x = 0;
foreach($string_array as $sql) {
try {
$this->dbh->query($sql);
}
catch (PDOException $error) {
throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql );
}
$x++;
}
unset ($file_contents, $sql);
$this->dbh->commit();
//set the file permissions
chmod($this->db_path.'/'.$this->db_name, 0777);
}
protected function create_database_pgsql() {
//if $this->db_create_username provided, attempt to create new PG role and database
if (strlen($this->db_create_username) > 0) {
try {
if (strlen($this->db_port) == 0) { $this->db_port = "5432"; }
if (strlen($this->db_host) > 0) {
$this->dbh = new PDO("pgsql:host={$this->db_host} port={$this->db_port} user={".$this->db_create_username."} password={".$this->db_create_password."} dbname=template1");
} else {
$this->dbh = new PDO("pgsql:host=localhost port={$this->db_port} user={".$this->db_create_username."} password={".$this->db_create_password."} dbname=template1");
}
} catch (PDOException $error) {
throw new Exception("error connecting to database: " . $error->getMessage());
}
//create the database, user, grant perms
$this->dbh->exec("CREATE DATABASE {$this->db_name}");
$this->dbh->exec("CREATE USER {$this->db_username} WITH PASSWORD '{$this->db_password}'");
$this->dbh->exec("GRANT ALL ON {$this->db_name} TO {$this->db_username}");
//close database connection_aborted
$this->dbh = null;
}
//open database connection with $this->db_name
try {
if (strlen($this->db_port) == 0) { $this->db_port = "5432"; }
if (strlen($this->db_host) > 0) {
$this->dbh = new PDO("pgsql:host={$this->db_host} port={$this->db_port} dbname={$this->db_name} user={$this->db_username} password={$this->db_password}");
} else {
$this->dbh = new PDO("pgsql:host=localhost port={$this->db_port} user={$this->db_username} password={$this->db_password} dbname={$this->db_name}");
}
}
catch (PDOException $error) {
throw new Exception("error connecting to database: " . $error->getMessage());
}
//add the database structure
require_once "resources/classes/schema.php";
$schema = new schema;
$schema->db = $this->dbh;
$schema->db_type = $this->db_type;
$schema->sql();
$schema->exec();
//get the contents of the sql file
if (file_exists('/usr/share/examples/fusionpbx/resources/install/sql/pgsql.sql')){
$filename = "/usr/share/examples/fusionpbx/resources/install/sql/pgsql.sql";
}
else {
$filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/pgsql.sql';
}
$file_contents = file_get_contents($filename);
//replace \r\n with \n then explode on \n
$file_contents = str_replace("\r\n", "\n", $file_contents);
//loop line by line through all the lines of sql code
$string_array = explode("\n", $file_contents);
$x = 0;
foreach($string_array as $sql) {
if (strlen($sql) > 3) {
try {
$this->dbh->query($sql);
}
catch (PDOException $error) {
throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql );
}
}
$x++;
}
unset ($file_contents, $sql);
}
protected function create_database_mysql() {
//database connection
try {
if (strlen($this->db_host) == 0 && strlen($this->db_port) == 0) {
//if both host and port are empty use the unix socket
if (strlen($this->db_create_username) == 0) {
$this->dbh = new PDO("mysql:host=$this->db_host;unix_socket=/var/run/mysqld/mysqld.sock;", $this->db_username, $this->db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
else {
$this->dbh = new PDO("mysql:host=$this->db_host;unix_socket=/var/run/mysqld/mysqld.sock;", $this->db_create_username, $this->db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
}
else {
if (strlen($this->db_port) == 0) {
//leave out port if it is empty
if (strlen($this->db_create_username) == 0) {
$this->dbh = new PDO("mysql:host=$this->db_host;", $this->db_username, $this->db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
else {
$this->dbh = new PDO("mysql:host=$this->db_host;", $this->db_create_username, $this->db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); }
}
else {
if (strlen($this->db_create_username) == 0) {
$this->dbh = new PDO("mysql:host=$this->db_host;port=$this->db_port;", $this->db_username, $this->db_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
else {
$this->dbh = new PDO("mysql:host=$this->db_host;port=$this->db_port;", $this->db_create_username, $this->db_create_password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
}
}
}
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
}
catch (PDOException $error) {
throw new Exception("error creating database: " . $error->getMessage() . "\n" . $sql );
}
//create the table, user and set the permissions only if the db_create_username was provided
if (strlen($this->db_create_username) > 0) {
//select the mysql database
try {
$this->dbh->query("USE mysql;");
}
catch (PDOException $error) {
if ($this->debug) {
throw new Exception("error conencting to database: " . $error->getMessage());
}
}
//create user and set the permissions
try {
$tmp_sql = "CREATE USER '".$this->db_username."'@'%' IDENTIFIED BY '".$this->db_password."'; ";
$this->dbh->query($tmp_sql);
}
catch (PDOException $error) {
if ($this->debug) {
print "error: " . $error->getMessage() . "<br/>";
}
}
//set account to unlimited use
try {
if ($this->db_host == "localhost" || $this->db_host == "127.0.0.1") {
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'localhost' ";
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' ";
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
$this->dbh->query($tmp_sql);
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'127.0.0.1' ";
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' ";
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
$this->dbh->query($tmp_sql);
}
else {
$tmp_sql = "GRANT USAGE ON * . * TO '".$this->db_username."'@'".$this->db_host."' ";
$tmp_sql .= "IDENTIFIED BY '".$this->db_password."' ";
$tmp_sql .= "WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; ";
$this->dbh->query($tmp_sql);
}
}
catch (PDOException $error) {
if ($this->debug) {
print "error: " . $error->getMessage() . "<br/>";
}
}
//create the database and set the create user with permissions
try {
$tmp_sql = "CREATE DATABASE IF NOT EXISTS ".$this->db_name."; ";
$this->dbh->query($tmp_sql);
}
catch (PDOException $error) {
if ($this->debug) {
print "error: " . $error->getMessage() . "<br/>";
}
}
//set user permissions
try {
$this->dbh->query("GRANT ALL PRIVILEGES ON ".$this->db_name.".* TO '".$this->db_username."'@'%'; ");
}
catch (PDOException $error) {
if ($this->debug) {
print "error: " . $error->getMessage() . "<br/>";
}
}
//make the changes active
try {
$tmp_sql = "FLUSH PRIVILEGES; ";
$this->dbh->query($tmp_sql);
}
catch (PDOException $error) {
if ($this->debug) {
print "error: " . $error->getMessage() . "<br/>";
}
}
} //if (strlen($this->db_create_username) > 0)
//select the database
try {
$this->dbh->query("USE ".$this->db_name.";");
}
catch (PDOException $error) {
if ($this->debug) {
print "error: " . $error->getMessage() . "<br/>";
}
}
//add the database structure
require_once "resources/classes/schema.php";
$schema = new schema;
$schema->db = $this->dbh;
$schema->db_type = $this->db_type;
$schema->sql();
$schema->exec();
//add the defaults data into the database
//get the contents of the sql file
if (file_exists('/usr/share/examples/fusionpbx/resources/install/sql/mysql.sql')){
$filename = "/usr/share/examples/fusionpbx/resources/install/sql/mysql.sql";
}
else {
$filename = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/sql/mysql.sql';
}
$file_contents = file_get_contents($filename);
//replace \r\n with \n then explode on \n
$file_contents = str_replace("\r\n", "\n", $file_contents);
//loop line by line through all the lines of sql code
$string_array = explode("\n", $file_contents);
$x = 0;
foreach($string_array as $sql) {
if (strlen($sql) > 3) {
try {
if ($this->debug) {
$this->write_debug( $sql."\n");
}
$this->dbh->query($sql);
}
catch (PDOException $error) {
//echo "error on line $x: " . $error->getMessage() . " sql: $sql<br/>";
//die();
}
}
$x++;
}
unset ($file_contents, $sql);
}
protected function create_domain() {
$this->write_progress("checking if domain exists '" . $this->domain_name . "'");
$sql = "select count(*) from v_domains ";
$sql .= "where domain_name = '".$this->domain_name."' ";
$this->write_debug($sql);
$prep_statement = $this->dbh->prepare(check_sql($sql));
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset($sql, $prep_statement);
if ($row['num_rows'] == 0) {
$this->write_progress("creating domain '" . $this->domain_name . "'");
$sql = "insert into v_domains ";
$sql .= "(";
$sql .= "domain_uuid, ";
$sql .= "domain_name, ";
$sql .= "domain_description ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".$this->domain_uuid."', ";
$sql .= "'".$this->domain_name."', ";
$sql .= "'' ";
$sql .= ");";
$this->write_debug($sql);
$this->dbh->exec(check_sql($sql));
unset($sql);
//domain settings
$x = 0;
$tmp[$x]['name'] = 'uuid';
$tmp[$x]['value'] = $this->menu_uuid;
$tmp[$x]['category'] = 'domain';
$tmp[$x]['subcategory'] = 'menu';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'name';
$tmp[$x]['category'] = 'domain';
$tmp[$x]['subcategory'] = 'time_zone';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'code';
$tmp[$x]['value'] = 'en-us';
$tmp[$x]['category'] = 'domain';
$tmp[$x]['subcategory'] = 'language';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'iso_code';
$tmp[$x]['value'] = $this->default_country;
$tmp[$x]['category'] = 'domain';
$tmp[$x]['subcategory'] = 'country';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'name';
$tmp[$x]['value'] = $this->template_name;
$tmp[$x]['category'] = 'domain';
$tmp[$x]['subcategory'] = 'template';
$tmp[$x]['enabled'] = 'true';
$x++;
//switch settings
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $switch_bin_dir;
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'bin';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->base_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'base';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->conf_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'conf';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->db_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'db';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->log_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'log';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->mod_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'mod';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->script_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'scripts';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->grammar_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'grammar';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->storage_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'storage';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->storage_dir(), 'voicemail');
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'voicemail';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->recordings_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'recordings';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->sounds_dir();
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'sounds';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = '';
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'provision';
$tmp[$x]['enabled'] = 'false';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->conf_dir(), "/directory");
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'extensions';
$tmp[$x]['enabled'] = 'false';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->conf_dir(), "/sip_profiles");
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'sip_profiles';
$tmp[$x]['enabled'] = 'false';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = join( DIRECTORY_SEPARATOR, $this->detect_switch->conf_dir(), "/dialplan");
$tmp[$x]['category'] = 'switch';
$tmp[$x]['subcategory'] = 'dialplan';
$tmp[$x]['enabled'] = 'false';
$x++;
//server settings
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = $this->detect_switch->temp_dir();
$tmp[$x]['category'] = 'server';
$tmp[$x]['subcategory'] = 'temp';
$tmp[$x]['enabled'] = 'true';
$x++;
#throw new Exception("I don't know how to find /etc/init.d for server > startup_scripts");
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = '';
$tmp[$x]['category'] = 'server';
$tmp[$x]['subcategory'] = 'startup_script';
$tmp[$x]['enabled'] = 'true';
$x++;
$tmp[$x]['name'] = 'dir';
$tmp[$x]['value'] = sys_get_temp_dir();
$tmp[$x]['category'] = 'server';
$tmp[$x]['subcategory'] = 'backup';
$tmp[$x]['enabled'] = 'true';
$x++;
$this->dbh->beginTransaction();
foreach($tmp as $row) {
$sql = "insert into v_default_settings ";
$sql .= "(";
$sql .= "default_setting_uuid, ";
$sql .= "default_setting_name, ";
$sql .= "default_setting_value, ";
$sql .= "default_setting_category, ";
$sql .= "default_setting_subcategory, ";
$sql .= "default_setting_enabled ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".uuid()."', ";
$sql .= "'".$row['name']."', ";
$sql .= "'".$row['value']."', ";
$sql .= "'".$row['category']."', ";
$sql .= "'".$row['subcategory']."', ";
$sql .= "'".$row['enabled']."' ";
$sql .= ");";
$this->write_debug($sql);
$this->dbh->exec(check_sql($sql));
unset($sql);
}
$this->dbh->commit();
unset($tmp);
//get the list of installed apps from the core and mod directories
$config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php");
$x=0;
foreach ($config_list as $config_path) {
include($config_path);
$x++;
}
//add the groups
$x = 0;
$tmp[$x]['group_name'] = 'superadmin';
$tmp[$x]['group_description'] = 'Super Administrator Group';
$x++;
$tmp[$x]['group_name'] = 'admin';
$tmp[$x]['group_description'] = 'Administrator Group';
$x++;
$tmp[$x]['group_name'] = 'user';
$tmp[$x]['group_description'] = 'User Group';
$x++;
$tmp[$x]['group_name'] = 'public';
$tmp[$x]['group_description'] = 'Public Group';
$x++;
$tmp[$x]['group_name'] = 'agent';
$tmp[$x]['group_description'] = 'Call Center Agent Group';
$this->dbh->beginTransaction();
foreach($tmp as $row) {
$sql = "insert into v_groups ";
$sql .= "(";
$sql .= "group_uuid, ";
$sql .= "group_name, ";
$sql .= "group_description ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".uuid()."', ";
$sql .= "'".$row['group_name']."', ";
$sql .= "'".$row['group_description']."' ";
$sql .= ");";
$this->write_debug($sql);
$this->dbh->exec(check_sql($sql));
unset($sql);
}
unset($tmp);
$this->dbh->commit();
//assign the default permissions to the groups
$this->dbh->beginTransaction();
foreach($apps as $app) {
if ($app['permissions']) {
foreach ($app['permissions'] as $row) {
if ($this->debug) {
$this->write_debug( "v_group_permissions\n");
$this->write_debug( json_encode($row)."\n\n");
}
if ($row['groups']) {
foreach ($row['groups'] as $group) {
//add the record
$sql = "insert into v_group_permissions ";
$sql .= "(";
$sql .= "group_permission_uuid, ";
$sql .= "permission_name, ";
$sql .= "group_name ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".uuid()."', ";
$sql .= "'".$row['name']."', ";
$sql .= "'".$group."' ";
$sql .= ");";
if ($this->debug) {
$this->write_debug( $sql."\n");
}
$this->dbh->exec(check_sql($sql));
unset($sql);
}
}
}
}
}
$this->dbh->commit();
}
}
protected function create_superuser() {
//check if it exists first?
$this->write_progress("creating super user '" . $this->admin_username . "'");
//add a user and then add the user to the superadmin group
//prepare the values
$this->admin_uuid = uuid();
$contact_uuid = uuid();
//set a sessiong variable
$_SESSION["user_uuid"] = $user_uuid;
//salt used with the password to create a one way hash
$salt = generate_password('20', '4');
//add the user account
$sql = "insert into v_users ";
$sql .= "(";
$sql .= "domain_uuid, ";
$sql .= "user_uuid, ";
$sql .= "contact_uuid, ";
$sql .= "username, ";
$sql .= "password, ";
$sql .= "salt, ";
$sql .= "add_date, ";
$sql .= "add_user ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".$this->domain_uuid."', ";
$sql .= "'".$this->admin_uuid."', ";
$sql .= "'$contact_uuid', ";
$sql .= "'".$this->admin_username."', ";
$sql .= "'".md5($salt.$this->admin_password)."', ";
$sql .= "'$salt', ";
$sql .= "now(), ";
$sql .= "'".$this->admin_username."' ";
$sql .= ");";
$this->write_debug( $sql."\n");
$this->dbh->exec(check_sql($sql));
unset($sql);
//add to contacts
$sql = "insert into v_contacts ";
$sql .= "(";
$sql .= "domain_uuid, ";
$sql .= "contact_uuid, ";
$sql .= "contact_type, ";
$sql .= "contact_name_given, ";
$sql .= "contact_nickname ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".$this->domain_uuid."', ";
$sql .= "'$contact_uuid', ";
$sql .= "'user', ";
$sql .= "'".$this->admin_username."', ";
$sql .= "'".$this->admin_username."' ";
$sql .= ")";
$this->dbh->exec(check_sql($sql));
unset($sql);
//add the user to the superadmin group
$sql = "insert into v_group_users ";
$sql .= "(";
$sql .= "group_user_uuid, ";
$sql .= "domain_uuid, ";
$sql .= "user_uuid, ";
$sql .= "group_name ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".uuid()."', ";
$sql .= "'".$this->domain_uuid."', ";
$sql .= "'".$this->admin_uuid."', ";
$sql .= "'superadmin' ";
$sql .= ");";
$this->write_debug( $sql."\n");
$this->dbh->exec(check_sql($sql));
unset($sql);
}
protected function create_menus() {
$this->write_progress("creating menus");
//set the defaults
$menu_name = 'default';
$menu_language = 'en-us';
$menu_description = 'Default Menu Set';
//add the parent menu
$sql = "insert into v_menus ";
$sql .= "(";
$sql .= "menu_uuid, ";
$sql .= "menu_name, ";
$sql .= "menu_language, ";
$sql .= "menu_description ";
$sql .= ") ";
$sql .= "values ";
$sql .= "(";
$sql .= "'".$this->menu_uuid."', ";
$sql .= "'$menu_name', ";
$sql .= "'$menu_language', ";
$sql .= "'$menu_description' ";
$sql .= ");";
if ($this->debug) {
$this->write_debug( $sql."\n");
}
$this->dbh->exec(check_sql($sql));
unset($sql);
//add the menu items
require_once "resources/classes/menu.php";
$menu = new menu;
$menu->db = $this->dbh;
$menu->menu_uuid = $this->menu_uuid;
$menu->restore();
unset($menu);
}
protected function post_create() {
$this->write_progress("running post steps");
//login the user account
$_SESSION["username"] = $this->admin_username;
//get the groups assigned to the user and then set the groups in $_SESSION["groups"]
$sql = "SELECT * FROM v_group_users ";
$sql .= "where domain_uuid=:domain_uuid ";
$sql .= "and user_uuid=:user_uuid ";
$prep_statement = $this->dbh->prepare(check_sql($sql));
$prep_statement->bindParam(':domain_uuid', $this->domain_uuid);
$prep_statement->bindParam(':user_uuid', $this->admin_uuid);
$prep_statement->execute();
$result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
$_SESSION["groups"] = $result;
unset($sql, $row_count, $prep_statement);
//get the permissions assigned to the groups that the user is a member of set the permissions in $_SESSION['permissions']
$x = 0;
$sql = "select distinct(permission_name) from v_group_permissions ";
foreach($_SESSION["groups"] as $field) {
if (strlen($field['group_name']) > 0) {
if ($x == 0) {
$sql .= "where (domain_uuid = '".$this->domain_uuid."' and group_name = '".$field['group_name']."') ";
}
else {
$sql .= "or (domain_uuid = '".$this->domain_uuid."' and group_name = '".$field['group_name']."') ";
}
$x++;
}
}
$prep_statementsub = $this->dbh->prepare($sql);
$prep_statementsub->execute();
$_SESSION['permissions'] = $prep_statementsub->fetchAll(PDO::FETCH_NAMED);
unset($sql, $prep_statementsub);
//make sure the database schema and installation have performed all necessary tasks
$display_results = false;
$display_type = 'none';
require_once "resources/classes/schema.php";
$obj = new schema;
$obj->schema($this->dbh, $this->db_type, $this->db_name, $display_type);
//run all app_defaults.php files
$default_language = $this->install_language;
require_once "resources/classes/domains.php";
$domain = new domains;
$domain->upgrade();
//synchronize the config with the saved settings
save_switch_xml();
//do not show the apply settings reminder on the login page
$_SESSION["reload_xml"] = false;
//clear the menu
$_SESSION["menu"] = "";
}
public function remove_config() {
if (file_exists('/bin/rm')) {
$this->write_debug('rm -f ' . $this->config_php);
exec ('rm -f ' . $this->config_php);
}
elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
$this->write_debug("del /S /F /Q '$dir'");
exec("del /F /Q '" . $this->config_php . "'");
}
else {
$this->write_debug("delete file: ".$file);
unlink($this->config_php);
}
clearstatcache();
}
}
?>

View File

@ -0,0 +1,252 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Copyright (C) 2010-2015
All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
include "root.php";
//define the install class
class install_switch {
protected $domain_uuid;
protected $domain_name;
protected $detect_switch;
public $debug = false;
function __construct($domain_name, $domain_uuid, $detect_switch) {
if(!is_a($detect_switch, 'detect_switch')){
throw new Exception('The parameter $detect_switch must be a detect_switch object (or a subclass of)');
}
$this->domain_uuid = $domain_uuid;
$this->domain = $domain_name;
$this->detect_switch = $detect_switch;
}
//utility Functions
function write_debug($message) {
if($this->debug){
echo "$message\n";
}
}
function write_progress($message) {
echo "$message\n";
}
//$options '-n' --no-clobber
protected function recursive_copy($src, $dst, $options = '') {
if (file_exists('/bin/cp')) {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'SUN') {
//copy -R recursive, preserve attributes for SUN
$cmd = 'cp -Rp '.$src.'/* '.$dst;
} else {
//copy -R recursive, -L follow symbolic links, -p preserve attributes for other Posix systemss
$cmd = 'cp -RLp '.$options.' '.$src.'/* '.$dst;
}
$this->write_debug($cmd);
exec ($cmd);
}
elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
exec("copy /L '$src' '$dst'");
}
else {
$dir = opendir($src);
if (!$dir) {
if (!mkdir($src, 0755, true)) {
throw new Exception("recursive_copy() source directory '".$src."' does not exist.");
}
}
if (!is_dir($dst)) {
if (!mkdir($dst, 0755, true)) {
throw new Exception("recursive_copy() failed to create destination directory '".$dst."'");
}
}
//This looks wrong, essentially if we can't use /bin/cp it manually fils dirs, not correct
$scripts_dir_target = $_SESSION['switch']['scripts']['dir'];
$scripts_dir_source = realpath($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/scripts');
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($src)) as $file_path_source) {
if (
substr_count($file_path_source, '/..') == 0 &&
substr_count($file_path_source, '/.') == 0 &&
substr_count($file_path_source, '/.svn') == 0 &&
substr_count($file_path_source, '/.git') == 0
) {
if ($dst != $src.'/resources/config.lua') {
$this->write_debug($file_path_source.' ---> '.$dst);
copy($file_path_source, $dst);
chmod($dst, 0755);
}
}
}
while(false !== ($file = readdir($dir))) {
if (($file != '.') && ($file != '..')) {
if (is_dir($src.'/'.$file)) {
$this->recursive_copy($src.'/'.$file, $dst.'/'.$file);
}
else {
//copy only missing files -n --no-clobber
if (strpos($options,'-n') !== false) {
if (!file_exists($dst.'/'.$file)) {
$this->write_debug("copy(".$src."/".$file.", ".$dst."/".$file.")");
copy($src.'/'.$file, $dst.'/'.$file);
}
}
else {
copy($src.'/'.$file, $dst.'/'.$file);
}
}
}
}
closedir($dir);
}
}
protected function recursive_delete($dir) {
if (file_exists('/bin/rm')) {
$this->write_debug('rm -Rf '.$dir.'/*');
exec ('rm -Rf '.$dir.'/*');
}
elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
$this->write_debug("del /S /F /Q '$dir'");
exec("del /S /F /Q '$dir'");
}
else {
foreach (glob($dir) as $file) {
if (is_dir($file)) {
$this->write_debug("rm dir: ".$file);
$this->recursive_delete("$file/*");
rmdir($file);
} else {
$this->write_debug("delete file: ".$file);
unlink($file);
}
}
}
clearstatcache();
}
protected function backup_dir($dir, $backup_name){
if (!is_readable($dir)) {
throw new Exception("backup_dir() source directory '".$dir."' does not exist.");
}
$dst_tar = join( DIRECTORY_SEPARATOR, array(sys_get_temp_dir(), "$backup_name.tar"));
//pharData is the correct ay to do it, but it keeps creating incomplete archives
//$tar = new PharData($dst_tar);
//$tar->buildFromDirectory($dir);
$this->write_debug("backingup to $dst_tar");
if (file_exists('/bin/tar')) {
exec('tar -cvf ' .$dst_tar. ' -C '.$dir .' .');
}else{
$this->write_debug('WARN: old config could not be compressed');
$dst_dir = join( DIRECTORY_SEPARATOR, array(sys_get_temp_dir(), "$backup_name"));
recursive_copy($dir, $dst_dir);
}
}
function install() {
$this->copy_conf();
$this->copy_scripts();
}
function upgrade() {
$this->copy_scripts();
}
function copy_conf() {
$this->write_progress("Copying Config");
//make a backup of the config
if (file_exists($this->detect_switch->conf_dir())) {
$this->backup_dir($this->detect_switch->conf_dir(), 'fusionpbx_switch_config');
$this->recursive_delete($this->detect_switch->conf_dir());
}
//make sure the conf directory exists
if (!is_dir($this->detect_switch->conf_dir())) {
if (!mkdir($this->detect_switch->conf_dir(), 0774, true)) {
throw new Exception("Failed to create the switch conf directory '".$this->detect_switch->conf_dir()."'. ");
}
}
//copy resources/templates/conf to the freeswitch conf dir
if (file_exists('/usr/share/examples/fusionpbx/resources/templates/conf')){
$src_dir = "/usr/share/examples/fusionpbx/resources/templates/conf";
}
else {
$src_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/resources/templates/conf";
}
$dst_dir = $this->detect_switch->conf_dir();
if (is_readable($dst_dir)) {
$this->recursive_copy($src_dir, $dst_dir);
unset($src_dir, $dst_dir);
}
$fax_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->storage_dir(), 'fax'));
if (!is_readable($fax_dir)) { mkdir($fax_dir,0777,true); }
$voicemail_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->storage_dir(), 'voicemail'));
if (!is_readable($voicemail_dir)) { mkdir($voicemail_dir,0777,true); }
//create the dialplan/default.xml for single tenant or dialplan/domain.xml
if (file_exists($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/app/dialplan")) {
$dialplan = new dialplan;
$dialplan->domain_uuid = $this->domain_uuid;
$dialplan->domain = $this->domain_name;
$dialplan->switch_dialplan_dir = join( DIRECTORY_SEPARATOR, array($this->detect_switch->conf_dir(), "/dialplan"));
$dialplan->restore_advanced_xml();
if($this->_debug){
print_r($dialplan->result, $message);
$this->write_debug($message);
}
}
//write the xml_cdr.conf.xml file
if (file_exists($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/app/xml_cdr")) {
xml_cdr_conf_xml();
}
//write the switch.conf.xml file
if (file_exists($this->detect_switch->conf_dir())) {
switch_conf_xml();
}
}
function copy_scripts() {
$this->write_progress("Copying Scripts");
if (file_exists($this->detect_switch->script_dir())) {
if (file_exists('/usr/share/examples/fusionpbx/resources/install/scripts')){
$src_dir = '/usr/share/examples/fusionpbx/resources/install/scripts';
}
else {
$src_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/resources/install/scripts';
}
$dst_dir = $this->detect_switch->script_dir();
if (is_readable($this->detect_switch->script_dir())) {
$this->recursive_copy($src_dir, $dst_dir, $_SESSION['scripts']['options']['text']);
unset($src_dir, $dst_dir);
}
chmod($dst_dir, 0774);
}
}
}
?>

View File

@ -0,0 +1,250 @@
<?php
$iso_countries = array
(
'AF' => 'Afghanistan',
'AX' => 'Aland Islands',
'AL' => 'Albania',
'DZ' => 'Algeria',
'AS' => 'American Samoa',
'AD' => 'Andorra',
'AO' => 'Angola',
'AI' => 'Anguilla',
'AQ' => 'Antarctica',
'AG' => 'Antigua And Barbuda',
'AR' => 'Argentina',
'AM' => 'Armenia',
'AW' => 'Aruba',
'AU' => 'Australia',
'AT' => 'Austria',
'AZ' => 'Azerbaijan',
'BS' => 'Bahamas',
'BH' => 'Bahrain',
'BD' => 'Bangladesh',
'BB' => 'Barbados',
'BY' => 'Belarus',
'BE' => 'Belgium',
'BZ' => 'Belize',
'BJ' => 'Benin',
'BM' => 'Bermuda',
'BT' => 'Bhutan',
'BO' => 'Bolivia',
'BA' => 'Bosnia And Herzegovina',
'BW' => 'Botswana',
'BV' => 'Bouvet Island',
'BR' => 'Brazil',
'IO' => 'British Indian Ocean Territory',
'BN' => 'Brunei Darussalam',
'BG' => 'Bulgaria',
'BF' => 'Burkina Faso',
'BI' => 'Burundi',
'KH' => 'Cambodia',
'CM' => 'Cameroon',
'CA' => 'Canada',
'CV' => 'Cape Verde',
'KY' => 'Cayman Islands',
'CF' => 'Central African Republic',
'TD' => 'Chad',
'CL' => 'Chile',
'CN' => 'China',
'CX' => 'Christmas Island',
'CC' => 'Cocos (Keeling) Islands',
'CO' => 'Colombia',
'KM' => 'Comoros',
'CG' => 'Congo',
'CD' => 'Congo, Democratic Republic',
'CK' => 'Cook Islands',
'CR' => 'Costa Rica',
'CI' => 'Cote D\'Ivoire',
'HR' => 'Croatia',
'CU' => 'Cuba',
'CY' => 'Cyprus',
'CZ' => 'Czech Republic',
'DK' => 'Denmark',
'DJ' => 'Djibouti',
'DM' => 'Dominica',
'DO' => 'Dominican Republic',
'EC' => 'Ecuador',
'EG' => 'Egypt',
'SV' => 'El Salvador',
'GQ' => 'Equatorial Guinea',
'ER' => 'Eritrea',
'EE' => 'Estonia',
'ET' => 'Ethiopia',
'FK' => 'Falkland Islands (Malvinas)',
'FO' => 'Faroe Islands',
'FJ' => 'Fiji',
'FI' => 'Finland',
'FR' => 'France',
'GF' => 'French Guiana',
'PF' => 'French Polynesia',
'TF' => 'French Southern Territories',
'GA' => 'Gabon',
'GM' => 'Gambia',
'GE' => 'Georgia',
'DE' => 'Germany',
'GH' => 'Ghana',
'GI' => 'Gibraltar',
'GR' => 'Greece',
'GL' => 'Greenland',
'GD' => 'Grenada',
'GP' => 'Guadeloupe',
'GU' => 'Guam',
'GT' => 'Guatemala',
'GG' => 'Guernsey',
'GN' => 'Guinea',
'GW' => 'Guinea-Bissau',
'GY' => 'Guyana',
'HT' => 'Haiti',
'HM' => 'Heard Island & Mcdonald Islands',
'VA' => 'Holy See (Vatican City State)',
'HN' => 'Honduras',
'HK' => 'Hong Kong',
'HU' => 'Hungary',
'IS' => 'Iceland',
'IN' => 'India',
'ID' => 'Indonesia',
'IR' => 'Iran, Islamic Republic Of',
'IQ' => 'Iraq',
'IE' => 'Ireland',
'IM' => 'Isle Of Man',
'IL' => 'Israel',
'IT' => 'Italy',
'JM' => 'Jamaica',
'JP' => 'Japan',
'JE' => 'Jersey',
'JO' => 'Jordan',
'KZ' => 'Kazakhstan',
'KE' => 'Kenya',
'KI' => 'Kiribati',
'KR' => 'Korea',
'KW' => 'Kuwait',
'KG' => 'Kyrgyzstan',
'LA' => 'Lao People\'s Democratic Republic',
'LV' => 'Latvia',
'LB' => 'Lebanon',
'LS' => 'Lesotho',
'LR' => 'Liberia',
'LY' => 'Libyan Arab Jamahiriya',
'LI' => 'Liechtenstein',
'LT' => 'Lithuania',
'LU' => 'Luxembourg',
'MO' => 'Macao',
'MK' => 'Macedonia',
'MG' => 'Madagascar',
'MW' => 'Malawi',
'MY' => 'Malaysia',
'MV' => 'Maldives',
'ML' => 'Mali',
'MT' => 'Malta',
'MH' => 'Marshall Islands',
'MQ' => 'Martinique',
'MR' => 'Mauritania',
'MU' => 'Mauritius',
'YT' => 'Mayotte',
'MX' => 'Mexico',
'FM' => 'Micronesia, Federated States Of',
'MD' => 'Moldova',
'MC' => 'Monaco',
'MN' => 'Mongolia',
'ME' => 'Montenegro',
'MS' => 'Montserrat',
'MA' => 'Morocco',
'MZ' => 'Mozambique',
'MM' => 'Myanmar',
'NA' => 'Namibia',
'NR' => 'Nauru',
'NP' => 'Nepal',
'NL' => 'Netherlands',
'AN' => 'Netherlands Antilles',
'NC' => 'New Caledonia',
'NZ' => 'New Zealand',
'NI' => 'Nicaragua',
'NE' => 'Niger',
'NG' => 'Nigeria',
'NU' => 'Niue',
'NF' => 'Norfolk Island',
'MP' => 'Northern Mariana Islands',
'NO' => 'Norway',
'OM' => 'Oman',
'PK' => 'Pakistan',
'PW' => 'Palau',
'PS' => 'Palestinian Territory, Occupied',
'PA' => 'Panama',
'PG' => 'Papua New Guinea',
'PY' => 'Paraguay',
'PE' => 'Peru',
'PH' => 'Philippines',
'PN' => 'Pitcairn',
'PL' => 'Poland',
'PT' => 'Portugal',
'PR' => 'Puerto Rico',
'QA' => 'Qatar',
'RE' => 'Reunion',
'RO' => 'Romania',
'RU' => 'Russian Federation',
'RW' => 'Rwanda',
'BL' => 'Saint Barthelemy',
'SH' => 'Saint Helena',
'KN' => 'Saint Kitts And Nevis',
'LC' => 'Saint Lucia',
'MF' => 'Saint Martin',
'PM' => 'Saint Pierre And Miquelon',
'VC' => 'Saint Vincent And Grenadines',
'WS' => 'Samoa',
'SM' => 'San Marino',
'ST' => 'Sao Tome And Principe',
'SA' => 'Saudi Arabia',
'SN' => 'Senegal',
'RS' => 'Serbia',
'SC' => 'Seychelles',
'SL' => 'Sierra Leone',
'SG' => 'Singapore',
'SK' => 'Slovakia',
'SI' => 'Slovenia',
'SB' => 'Solomon Islands',
'SO' => 'Somalia',
'ZA' => 'South Africa',
'GS' => 'South Georgia And Sandwich Isl.',
'ES' => 'Spain',
'LK' => 'Sri Lanka',
'SD' => 'Sudan',
'SR' => 'Suriname',
'SJ' => 'Svalbard And Jan Mayen',
'SZ' => 'Swaziland',
'SE' => 'Sweden',
'CH' => 'Switzerland',
'SY' => 'Syrian Arab Republic',
'TW' => 'Taiwan',
'TJ' => 'Tajikistan',
'TZ' => 'Tanzania',
'TH' => 'Thailand',
'TL' => 'Timor-Leste',
'TG' => 'Togo',
'TK' => 'Tokelau',
'TO' => 'Tonga',
'TT' => 'Trinidad And Tobago',
'TN' => 'Tunisia',
'TR' => 'Turkey',
'TM' => 'Turkmenistan',
'TC' => 'Turks And Caicos Islands',
'TV' => 'Tuvalu',
'UG' => 'Uganda',
'UA' => 'Ukraine',
'AE' => 'United Arab Emirates',
'GB' => 'United Kingdom',
'US' => 'United States',
'UM' => 'United States Outlying Islands',
'UY' => 'Uruguay',
'UZ' => 'Uzbekistan',
'VU' => 'Vanuatu',
'VE' => 'Venezuela',
'VN' => 'Viet Nam',
'VG' => 'Virgin Islands, British',
'VI' => 'Virgin Islands, U.S.',
'WF' => 'Wallis And Futuna',
'EH' => 'Western Sahara',
'YE' => 'Yemen',
'ZM' => 'Zambia',
'ZW' => 'Zimbabwe',
);
?>

View File

@ -0,0 +1,251 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Matthew Vale <github@mafoo.org>
*/
echo "<form method='post' name='frm' action=''>\n";
echo "<input type='hidden' name='install_language' value='".$_SESSION['domain']['language']['code']."'/>\n";
echo "<input type='hidden' name='return_install_step' value='config_database'/>\n";
echo "<input type='hidden' name='install_step' value='execute'/>\n";
echo "<input type='hidden' name='event_host' value='$event_host'/>\n";
echo "<input type='hidden' name='event_port' value='$event_host'/>\n";
echo "<input type='hidden' name='event_password' value='$event_password'/>\n";
echo "<input type='hidden' name='db_type' value='$db_type'/>\n";
echo "<input type='hidden' name='admin_username' value='$admin_username'/>\n";
echo "<input type='hidden' name='admin_password' value='$admin_password'/>\n";
echo "<input type='hidden' name='install_default_country' value='$install_default_country'/>\n";
echo "<input type='hidden' name='install_template_name' value='$install_template_name'/>\n";
echo "<input type='hidden' name='domain_name' value='$domain_name'/>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td align='left' width='30%' nowrap><b>".$text['header-config_database']."</b></td>\n";
echo "<td width='70%' align='right'>&nbsp;</td>\n";
echo "</tr>\n";
if ($db_type == "sqlite") {
echo "<tr>\n";
echo "<td class='vncell' 'valign='top' align='left' nowrap>\n";
echo " Database Filename\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_name' maxlength='255' value=\"$db_name\"><br />\n";
echo " Set the database filename. The file extension should be '.db'.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' 'valign='top' align='left' nowrap>\n";
echo " Database Directory\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_path' maxlength='255' value=\"$db_path\"><br />\n";
echo " Set the path to the database directory.\n";
echo "</td>\n";
echo "</tr>\n";
}
if ($db_type == "mysql") {
//set defaults
if (strlen($db_host) == 0) { $db_host = 'localhost'; }
if (strlen($db_port) == 0) { $db_port = '3306'; }
//if (strlen($db_name) == 0) { $db_name = 'fusionpbx'; }
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Host\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_host' maxlength='255' value=\"$db_host\"><br />\n";
echo " Enter the host address for the database server.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " Database Port\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_port' maxlength='255' value=\"$db_port\"><br />\n";
echo " Enter the port number. It is optional if the database is using the default port.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Name\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_name' maxlength='255' value=\"$db_name\"><br />\n";
echo " Enter the name of the database.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Username\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_username' maxlength='255' value=\"$db_username\"><br />\n";
echo " Enter the database username. \n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Password\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_password' maxlength='255' value=\"$db_password\"><br />\n";
echo " Enter the database password.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " Create Database Username\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_create_username' maxlength='255' value=\"$db_create_username\"><br />\n";
echo " Optional, this username is used to create the database, a database user and set the permissions. \n";
echo " By default this username is 'root' however it can be any account with permission to add a database, user, and grant permissions. \n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " Create Database Password\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_create_password' maxlength='255' value=\"$db_create_password\"><br />\n";
echo " Enter the create database password.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
}
if ($db_type == "pgsql") {
if (strlen($db_host) == 0) { $db_host = 'localhost'; }
if (strlen($db_port) == 0) { $db_port = '5432'; }
if (strlen($db_name) == 0) { $db_name = 'fusionpbx'; }
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Host\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_host' maxlength='255' value=\"$db_host\"><br />\n";
echo " Enter the host address for the database server.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " Database Port\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_port' maxlength='255' value=\"$db_port\"><br />\n";
echo " Enter the port number. It is optional if the database is using the default port.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Name\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_name' maxlength='255' value=\"$db_name\"><br />\n";
echo " Enter the name of the database.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Username\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_username' maxlength='255' value=\"$db_username\"><br />\n";
echo " Enter the database username.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Password\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_password' maxlength='255' value=\"$db_password\"><br />\n";
echo " Enter the database password.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " Create Database Username\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_create_username' maxlength='255' value=\"$db_create_username\"><br />\n";
echo " Optional, this username is used to create the database, a database user and set the permissions. \n";
echo " By default this username is 'pgsql' however it can be any account with permission to add a database, user, and grant permissions. \n";
echo " Leave blank if the user and empty database already exist and you do not want them created. \n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " Create Database Password\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='db_create_password' maxlength='255' value=\"$db_create_password\"><br />\n";
echo " Enter the create database password.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
}
echo "</table>";
echo " <div style='text-align:right'>\n";
echo " <button type='button' onclick=\"history.go(-1);\">".$text['button-back']."</button>\n";
echo " <button type='submit'>".$text['button-install_execute']."</button>\n";
echo " </div>\n";
echo "</form>\n";
?>

View File

@ -0,0 +1,146 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
Matthew Vale <github@mafoo.org>
*/
echo "<form method='post' name='frm' action=''>\n";
echo "<input type='hidden' name='install_language' value='".$_SESSION['domain']['language']['code']."'/>\n";
echo "<input type='hidden' name='return_install_step' value='config_detail'/>\n";
echo "<input type='hidden' name='install_step' value='config_database'/>\n";
echo "<input type='hidden' name='event_host' value='$event_host'/>\n";
echo "<input type='hidden' name='event_port' value='$event_host'/>\n";
echo "<input type='hidden' name='event_password' value='$event_password'/>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td align='left' width='30%' nowrap><b>".$text['header-config_detail']."</b></td>\n";
echo "<td width='70%' align='right'>&nbsp;</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " Username\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='admin_username' maxlength='255' value=\"$admin_username\"><br />\n";
echo " Enter the username to use when logging in with the browser.<br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " Password\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='admin_password' maxlength='255' value=\"$admin_password\"><br />\n";
echo " Enter the password to use when logging in with the browser.<br />\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
echo " Country\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select id='install_default_country' name='install_default_country' class='formfld' style=''>\n";
require_once "resources/classes/iso_countries.php";
foreach ($iso_countries as $iso_code => $iso_country ){
if($iso_code == $install_default_country){
echo " <option value='$iso_code' selected='selected'>$iso_country</option>\n";
}else{
echo " <option value='$iso_code'>$iso_country</option>\n";
}
}
echo " </select>\n";
echo " <br />\n";
echo " Select ISO country code used to initialize calling contry code variables.<br />\n";
echo "</td>\n";
echo "</tr>\n";
echo " <tr>\n";
echo " <td width='20%' class=\"vncellreq\" align='left' nowrap='nowrap'>\n";
echo " Theme: \n";
echo " </td>\n";
echo " <td class=\"vtable\" align='left'>\n";
echo " <select id='install_template_name' name='install_template_name' class='formfld' style=''>\n";
echo " <option value=''></option>\n";
//add all the themes to the list
$theme_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/themes';
if ($handle = opendir($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/themes')) {
while (false !== ($dir_name = readdir($handle))) {
if ($dir_name != "." && $dir_name != ".." && $dir_name != ".svn" && $dir_name != ".git" && $dir_name != "flags" && is_readable($theme_dir.'/'.$dir_name)) {
$dir_label = str_replace('_', ' ', $dir_name);
$dir_label = str_replace('-', ' ', $dir_label);
if ($dir_name == 'enhanced') {
echo " <option value='$dir_name' selected='selected'>$dir_label</option>\n";
}
else {
echo " <option value='$dir_name'>$dir_label</option>\n";
}
}
}
closedir($handle);
}
echo " </select>\n";
echo " <br />\n";
echo " Select a theme to set as the default.<br />\n";
echo " </td>\n";
echo " </tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Domain name\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='domain_name' maxlength='255' value=\"$domain_name\"><br />\n";
echo " Enter the default domain name. \n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " Database Type\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select name='db_type' id='db_type' class='formfld' id='form_tag' onchange='db_type_onchange();'>\n";
if (extension_loaded('pdo_pgsql')) { echo " <option value='pgsql'>postgresql</option>\n"; }
if (extension_loaded('pdo_mysql')) { echo " <option value='mysql'>mysql</option>\n"; }
if (extension_loaded('pdo_sqlite')) { echo " <option value='sqlite' selected='selected'>sqlite</option>\n"; } //set sqlite as the default
echo " </select><br />\n";
echo " Select the database type.\n";
echo "\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>";
echo " <div style='text-align:right'>\n";
echo " <button type='button' onclick=\"history.go(-1);\">".$text['button-back']."</button>\n";
echo " <button type='submit' id='next'>".$text['button-next']."</button>\n";
echo " </div>\n";
echo "</form>\n";
?>

View File

@ -0,0 +1,101 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Matthew Vale <github@mafoo.org>
*/
echo "<p>Detected Configuration</p>";
//fetch the values
require_once "core/install/resources/classes/detect_switch.php";
$switch_detect = new detect_switch($event_host, $event_port, $event_password);
//$switch_detect->event_port = 2021;
echo "<pre>";
$detect_ok = true;
try {
$switch_detect->detect();
} catch(Exception $e){
echo "Failed to detect confgiuration detect_switch reported: " . $e->getMessage() . "\n";
$detect_ok = false;
}
if($detect_ok){
echo $switch_detect->show_config();
}
echo "</pre>";
echo "<form method='post' name='frm' action=''>\n";
echo "<input type='hidden' name='install_language' value='".$_SESSION['domain']['language']['code']."'/>\n";
echo "<input type='hidden' name='install_step' value='detect_config'/>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td width='30%' align='left' nowrap><b>".$text['header-event_socket']."</b><br><br></td>\n";
echo "<td width='70%' align='right'>";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-detect']."'/>\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " ".$text['label-event_host']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='event_host' maxlength='255' value=\"".$switch_detect->event_host."\" onchange='JavaScript:disable_next()'/>\n";
echo "<br />\n";
echo $text['description-event_host']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " ".$text['label-event_port']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='text' name='event_port' maxlength='255' value=\"".$switch_detect->event_port."\" onchange='JavaScript:disable_next()'/>\n";
echo "<br />\n";
echo $text['description-event_port']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " ".$text['label-event_password']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <input class='formfld' type='password' name='event_password' maxlength='255' value=\"".$switch_detect->event_password."\" onchange='JavaScript:disable_next()'/>\n";
echo "<br />\n";
echo $text['description-event_password']."\n";
echo "</td>\n";
echo "</tr>\n";
echo " <tr>\n";
echo " <td colspan='2' align='right'>\n";
echo " <br>";
echo " </td>\n";
echo " </tr>";
echo "</table>";
echo "</form>";
?><script type='text/javascript'>
function disable_next() {
document.getElementById("next").style.display = 'none';
}
</script>

View File

@ -0,0 +1,69 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Matthew Vale <github@mafoo.org>
*/
echo "<form method='post' name='frm' action=''>\n";
echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
echo "<tr>\n";
echo "<td width='30%' align='left' nowrap><b>".$text['header-select_language']."</b><br><br></td>\n";
echo "<td width='70%' align='right'>";
echo " <input type='submit' name='submit' class='btn' value='".$text['button-select']."'/>\n";
echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='vncellreq' valign='top' align='left' nowrap>\n";
echo " ".$text['label-select_language']."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo "<fieldset style='border:none;padding:0;margin:0;'>";
foreach($_SESSION['app']['languages'] as $lang_code){
echo "<fieldset style='border:none;padding:0;margin:0;width:32%;display:inline-block;margin:1px'>";
echo " <label style='display:block;width:100%;border:solid 1px;padding:2px;-webkit-border-radius: 3px;-moz-border-radius: 3px;border-radius: 3px;box-sizing:border-box;'>";
echo "<input type='radio' name='install_language' value='$lang_code' id='lang_$lang_code'";
if($lang_code == $_SESSION['domain']['language']['code'])
{
echo " checked='checked'";
}
echo "/>";
echo "<img src='<!--{project_path}-->/themes/flags/$lang_code.png' alt='$lang_code'/>&nbsp;".$text["language-$lang_code"];
echo "</label>\n";
echo "</fieldset>";
}
echo "</fieldset>";
echo "<br />\n";
echo $text['description-select_language']."\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>";
echo "<br><br>";
echo "</form>";
?><script type='text/javascript'>
function disable_next() {
document.getElementById("next").style.display = 'none';
}
</script>

50
core/install/root.php Normal file
View File

@ -0,0 +1,50 @@
<?php
/*
FusionPBX
Version: MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
for the specific language governing rights and limitations under the
License.
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2012
the Initial Developer. All Rights Reserved.
Contributor(s):
Mark J Crane <markjcrane@fusionpbx.com>
*/
// make sure the PATH_SEPARATOR is defined
if (!defined("PATH_SEPARATOR")) {
if ( strpos( $_ENV[ "OS" ], "Win" ) !== false ) { define("PATH_SEPARATOR", ";"); } else { define("PATH_SEPARATOR", ":"); }
}
// make sure the document_root is set
$_SERVER["SCRIPT_FILENAME"] = str_replace("\\", "/", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = str_replace($_SERVER["PHP_SELF"], "", $_SERVER["SCRIPT_FILENAME"]);
$_SERVER["DOCUMENT_ROOT"] = realpath($_SERVER["DOCUMENT_ROOT"]);
//echo "DOCUMENT_ROOT: ".$_SERVER["DOCUMENT_ROOT"]."<br />\n";
//echo "PHP_SELF: ".$_SERVER["PHP_SELF"]."<br />\n";
//echo "SCRIPT_FILENAME: ".$_SERVER["SCRIPT_FILENAME"]."<br />\n";
// if the project directory exists then add it to the include path otherwise add the document root to the include path
if (is_dir($_SERVER["DOCUMENT_ROOT"].'/fusionpbx')){
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', '/fusionpbx'); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER["DOCUMENT_ROOT"].'/fusionpbx' );
}
else {
if(!defined('PROJECT_PATH')) { define('PROJECT_PATH', ''); }
set_include_path( get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] );
}
?>

View File

@ -41,7 +41,7 @@ include "root.php";
} elseif (file_exists("/usr/local/etc/fusionpbx/config.php")) {
//bsd
} else {
header("Location: ".PROJECT_PATH."/resources/install.php");
header("Location: ".PROJECT_PATH."/core/install/install_first_time.php");
exit;
}

View File

@ -182,24 +182,37 @@ if ($domains_processed == 1) {
$array[$x]['default_setting_enabled'] = 'false';
$array[$x]['default_setting_description'] = 'Set the opacity of the main menu (decimal, Minimized theme only).';
//iterate and add each, if necessary
foreach ($array as $index => $default_settings) {
//add theme default settings
$sql = "select count(*) as num_rows from v_default_settings ";
$sql .= "where default_setting_category = 'theme' ";
$sql .= "and default_setting_subcategory = '".$default_settings['default_setting_subcategory']."' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset($prep_statement);
if ($row['num_rows'] == 0) {
$orm = new orm;
$orm->name('default_settings');
$orm->save($array[$index]);
$message = $orm->message;
if($set_session_theme){
foreach ($array as $index => $default_settings) {
$sub_category = $array[$index]['default_setting_subcategory'];
$name = $array[$index]['default_setting_name'];
if($array[$index]['default_setting_enabled'] == 'true'){
$_SESSION['theme'][$sub_category][$name] = $array[$index]['default_setting_value'];
}else{
$_SESSION['theme'][$sub_category][$name] = '';
}
}
}
else{
//iterate and add each, if necessary
foreach ($array as $index => $default_settings) {
//add theme default settings
$sql = "select count(*) as num_rows from v_default_settings ";
$sql .= "where default_setting_category = 'theme' ";
$sql .= "and default_setting_subcategory = '".$default_settings['default_setting_subcategory']."' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset($prep_statement);
if ($row['num_rows'] == 0) {
$orm = new orm;
$orm->name('default_settings');
$orm->save($array[$index]);
$message = $orm->message;
}
unset($row);
}
unset($row);
}
}
@ -222,25 +235,37 @@ if ($domains_processed == 1) {
$array[$x]['default_setting_enabled'] = 'true';
$array[$x]['default_setting_description'] = 'Set a secondary background (HTML compatible) color, for a gradient effect.';
//add secondary background color separately, if missing
$sql = "select count(*) as num_rows from v_default_settings ";
$sql .= "where default_setting_category = 'theme' ";
$sql .= "and default_setting_subcategory = 'background_color' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset($prep_statement);
if ($row['num_rows'] == 0) {
$orm = new orm;
$orm->name('default_settings');
foreach ($array as $index => $null) {
$orm->save($array[$index]);
if($set_session_theme){
foreach ($array as $index => $default_settings) {
$sub_category = $array[$index]['default_setting_subcategory'];
$idx = $array[$index]['default_setting_order'];
if($array[$index]['default_setting_enabled'] == 'true'){
$_SESSION['theme'][$sub_category][$idx] = $array[$index]['default_setting_value'];
}
$message = $orm->message;
//print_r($message);
}
unset($row);
return;
}
else{
//add secondary background color separately, if missing
$sql = "select count(*) as num_rows from v_default_settings ";
$sql .= "where default_setting_category = 'theme' ";
$sql .= "and default_setting_subcategory = 'background_color' ";
$prep_statement = $db->prepare($sql);
if ($prep_statement) {
$prep_statement->execute();
$row = $prep_statement->fetch(PDO::FETCH_ASSOC);
unset($prep_statement);
if ($row['num_rows'] == 0) {
$orm = new orm;
$orm->name('default_settings');
foreach ($array as $index => $null) {
$orm->save($array[$index]);
}
$message = $orm->message;
//print_r($message);
}
unset($row);
}
}
//get the background images