From a5ef8fb4919ff595ad373a3601f915b4b8dae954 Mon Sep 17 00:00:00 2001 From: "alextselegidis@gmail.com" Date: Fri, 11 Oct 2013 15:58:46 +0000 Subject: [PATCH] * Added "Forgot Password" procedure. * Started working on the installation page. * Fixed minor bugs in backend pages. --- rsc/design/logo/installation-banner.png | Bin 0 -> 11949 bytes rsc/design/logo/installation-banner.psd | Bin 0 -> 175160 bytes src/application/controllers/appointments.php | 37 +++ src/application/controllers/backend.php | 2 +- src/application/controllers/user.php | 41 +++- src/application/helpers/general_helper.php | 16 ++ src/application/libraries/notifications.php | 39 +++ src/application/models/user_model.php | 32 +++ src/application/views/appointments/book.php | 2 +- src/application/views/backend/calendar.php | 3 +- src/application/views/backend/settings.php | 10 +- src/application/views/emails/new_password.php | 24 ++ .../views/general/installation.php | 215 +++++++++++++++++ .../views/user/forgot_password.php | 131 +++++++++- src/application/views/user/logout.php | 2 +- src/assets/css/backend.css | 5 +- src/assets/images/installation-banner.png | Bin 0 -> 11949 bytes src/assets/js/backend_customers.js | 5 +- src/assets/js/backend_services.js | 6 +- src/assets/js/backend_settings.js | 2 +- src/assets/js/backend_users.js | 10 +- src/assets/js/backend_users_admins.js | 2 +- src/assets/js/backend_users_providers.js | 2 +- src/assets/js/backend_users_secretaries.js | 2 +- src/assets/sql/structure.sql | 227 ++++++++++++++++++ 25 files changed, 780 insertions(+), 35 deletions(-) create mode 100644 rsc/design/logo/installation-banner.png create mode 100644 rsc/design/logo/installation-banner.psd create mode 100644 src/application/views/emails/new_password.php create mode 100644 src/application/views/general/installation.php create mode 100644 src/assets/images/installation-banner.png create mode 100644 src/assets/sql/structure.sql diff --git a/rsc/design/logo/installation-banner.png b/rsc/design/logo/installation-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb4cab1681be8941bbb40e6085b5208b27965f8 GIT binary patch literal 11949 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 r*H(J+EZ<-k(XH`=q|xH?tgl$<`9n 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 literal 0 HcmV?d00001 diff --git a/rsc/design/logo/installation-banner.psd b/rsc/design/logo/installation-banner.psd new file mode 100644 index 0000000000000000000000000000000000000000..05bae64bc1b81de86a662cac6fa1e679dab2a3b5 GIT binary patch literal 175160 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 A9{>OV literal 0 HcmV?d00001 diff --git a/src/application/controllers/appointments.php b/src/application/controllers/appointments.php index da7d351a..ea7cbaab 100644 --- a/src/application/controllers/appointments.php +++ b/src/application/controllers/appointments.php @@ -12,6 +12,8 @@ class Appointments extends CI_Controller { * record. */ public function index($appointment_hash = '') { + if (!$this->check_installation()) return; + $this->load->model('appointments_model'); $this->load->model('providers_model'); $this->load->model('services_model'); @@ -602,6 +604,41 @@ class Appointments extends CI_Controller { return $available_periods_with_appointments; } + + /** + * This method checks whether the application is installed. + * + * This method resides in this controller because the "index()" function will + * be the first to be launched after the files are on the server. NOTE that the + * "configuration.php" file must be already set because we won't be able to + * connect to the database otherwise. + */ + public function check_installation() { + try { + if (!$this->db->table_exists('ea_users')) { + // This is the first time the website is launched an the user needs to set + // the basic settings. + + // We will use mysqli to create the database structure from the "structure.sql" file. + require_once dirname(dirname(dirname(__FILE__))) . '/configuration.php'; + $mysqli = new mysqli(SystemConfiguration::$db_host, SystemConfiguration::$db_username, + SystemConfiguration::$db_password, SystemConfiguration::$db_name); + $structure = file_get_contents($this->config->item('base_url') . 'assets/sql/structure.sql'); + $mysqli->multi_query($structure); + $mysqli->close(); + + // Display the installation view page. + $view['base_url'] = $this->config->item('base_url'); + $this->load->view('general/installation', $view); + + return FALSE; // Do not display the book appointment view file. + } else { + return TRUE; + } + } catch(Exception $exc) { + echo $exc->getTrace(); + } + } } /* End of file appointments.php */ diff --git a/src/application/controllers/backend.php b/src/application/controllers/backend.php index 6cc1ca3f..dc24c83b 100644 --- a/src/application/controllers/backend.php +++ b/src/application/controllers/backend.php @@ -174,7 +174,7 @@ class Backend extends CI_Controller { $user_id = $this->session->userdata('user_id'); $view['base_url'] = $this->config->item('base_url'); - $view['user_display_name'] = $this->user_model->get_user_display_name($this->session->userdata('user_id')); + $view['user_display_name'] = $this->user_model->get_user_display_name($user_id); $view['active_menu'] = PRIV_SYSTEM_SETTINGS; $view['company_name'] = $this->settings_model->get_setting('company_name'); $view['role_slug'] = $this->session->userdata('role_slug'); diff --git a/src/application/controllers/user.php b/src/application/controllers/user.php index 138706da..6976a8a3 100644 --- a/src/application/controllers/user.php +++ b/src/application/controllers/user.php @@ -29,12 +29,12 @@ class User extends CI_Controller { $this->session->unset_userdata('dest_url'); $view['base_url'] = $this->config->item('base_url'); - $this->load->view('user/logout', $view); } public function forgot_password() { - + $view['base_url'] = $this->config->item('base_url'); + $this->load->view('user/forgot_password', $view); } public function no_privileges() { @@ -73,6 +73,43 @@ class User extends CI_Controller { )); } } + + /** + * Regenerate a new password for the current user, only if the username and + * email address given corresond to an existing user in db. + * + * @param string $_POST['username'] + * @param string $_POST['email'] + */ + public function ajax_forgot_password() { + try { + if (!isset($_POST['username']) || !isset($_POST['email'])) { + throw new Exception('You must enter a valid username and email address in ' + . 'order to get a new password!'); + } + + $this->load->model('user_model'); + $this->load->model('settings_model'); + + $new_password = $this->user_model->regenerate_password($_POST['username'], $_POST['email']); + + if ($new_password != FALSE) { + $this->load->library('notifications'); + $company_settings = array( + 'company_name' => $this->settings_model->get_setting('company_name'), + 'company_link' => $this->settings_model->get_setting('company_link'), + 'company_email' => $this->settings_model->get_setting('company_email') + ); + $this->notifications->send_password($new_password, $_POST['email'], $company_settings); + } + + echo ($new_password != FALSE) ? json_encode(AJAX_SUCCESS) : json_encode(AJAX_FAILURE); + } catch(Exception $exc) { + echo json_encode(array( + 'exceptions' => array(exceptionToJavaScript($exc)) + )); + } + } } /* End of file user.php */ diff --git a/src/application/helpers/general_helper.php b/src/application/helpers/general_helper.php index 1a51b93f..9f665c8d 100644 --- a/src/application/helpers/general_helper.php +++ b/src/application/helpers/general_helper.php @@ -61,5 +61,21 @@ function generate_salt() { return substr($salt, 0, $max_length); } +/** + * This method generates a random string. + * + * @param int $length (OPTIONAL = 10) The length of the generated string. + * @return string Returns the randomly generated string. + * @link http://stackoverflow.com/a/4356295/1718162 + */ +function generate_random_string($length = 10) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $random_string = ''; + for ($i = 0; $i < $length; $i++) { + $random_string .= $characters[rand(0, strlen($characters) - 1)]; + } + return $random_string; +} + /* End of file general_helper.php */ /* Location: ./application/helpers/general_helper.php */ \ No newline at end of file diff --git a/src/application/libraries/notifications.php b/src/application/libraries/notifications.php index 57b3291a..26dfed65 100644 --- a/src/application/libraries/notifications.php +++ b/src/application/libraries/notifications.php @@ -164,6 +164,45 @@ class Notifications { return TRUE; } + + /** + * This method sends an email with the new password of a user. + * + * @param string $password Contains the new password. + * @param string $email The receiver's email address. + */ + public function send_password($password, $email, $company_settings) { + $replace_array = array( + '$email_title' => 'New Account Password', + '$email_message' => 'Your new account password is ' . $password . '. ' + . 'Please store this email to be able to retrieve your password if necessary. ' + . 'You can also change this password with a new one in the settings page.', + '$company_name' => $company_settings['company_name'], + '$company_email' => $company_settings['company_email'], + '$company_link' => $company_settings['company_link'] + ); + + $email_html = file_get_contents(dirname(dirname(__FILE__)) + . '/views/emails/new_password.php'); + $email_html = $this->replace_template_variables($replace_array, $email_html); + + // :: SETUP EMAIL OBJECT AND SEND NOTIFICATION + $mail = new PHPMailer(); + $mail->From = $company_settings['company_email']; + $mail->FromName = $company_settings['company_name']; + $mail->AddAddress($email); // "Name" argument crushes the phpmailer class. + $mail->IsHTML(true); + $mail->CharSet = 'UTF-8'; + $mail->Subject = 'New Account Password'; + $mail->Body = $email_html; + + if (!$mail->Send()) { + throw new Exception('Email could not been sent. ' + . 'Mailer Error (Line ' . __LINE__ . '): ' . $mail->ErrorInfo); + } + + return TRUE; + } } /* End of file notifications.php */ diff --git a/src/application/models/user_model.php b/src/application/models/user_model.php index ed85d31d..d9f826cf 100644 --- a/src/application/models/user_model.php +++ b/src/application/models/user_model.php @@ -102,6 +102,38 @@ class User_Model extends CI_Model { $user = $this->db->get_where('ea_users', array('id' => $user_id))->row_array(); return $user['first_name'] . ' ' . $user['last_name']; } + + /** + * If the given arguments correspond to an existing user record, generate a new + * password and send it with an email. + * + * @param string $username + * @param string $email + * @return string|bool Returns the new password on success or FALSE on failure. + */ + public function regenerate_password($username, $email) { + $this->load->helper('general'); + + $result = $this->db + ->select('ea_users.id') + ->from('ea_users') + ->join('ea_user_settings', 'ea_user_settings.id_users = ea_users.id', 'inner') + ->where('ea_users.email', $email) + ->where('ea_user_settings.username', $username) + ->get(); + + if ($result->num_rows() == 0) return FALSE; + + $user_id = $result->row()->id; + + // Create a new password and send it with an email to the given email address. + $new_password = generate_random_string(); + $salt = $this->db->get_where('ea_user_settings', array('id_users' => $user_id))->row()->salt; + $hash_password = hash_password($salt, $new_password); + $this->db->update('ea_user_settings', array('password' => $hash_password), array('id_users' => $user_id)); + + return $new_password; + } } /* End of file user_model.php */ diff --git a/src/application/views/appointments/book.php b/src/application/views/appointments/book.php index 8ef2ea61..81a1b769 100644 --- a/src/application/views/appointments/book.php +++ b/src/application/views/appointments/book.php @@ -346,7 +346,7 @@ // ------------------------------------------------------ ?> diff --git a/src/application/views/backend/calendar.php b/src/application/views/backend/calendar.php index 0267ad0e..5eb7e2d2 100644 --- a/src/application/views/backend/calendar.php +++ b/src/application/views/backend/calendar.php @@ -41,7 +41,8 @@
- + + + +
+ + + + \ No newline at end of file diff --git a/src/application/views/user/forgot_password.php b/src/application/views/user/forgot_password.php index b6eddc13..663f9627 100644 --- a/src/application/views/user/forgot_password.php +++ b/src/application/views/user/forgot_password.php @@ -1,7 +1,124 @@ - + + + + + + + + + + + + + + + + + + + + + + + +
+

Forgot Your Password?

+

Type your username and your email address to get your new password.

+
+ +
+ + + + + + +

+ + + + +
+
+ + \ No newline at end of file diff --git a/src/application/views/user/logout.php b/src/application/views/user/logout.php index f6d8af5c..508a682c 100644 --- a/src/application/views/user/logout.php +++ b/src/application/views/user/logout.php @@ -70,7 +70,7 @@ - + Backend Section
diff --git a/src/assets/css/backend.css b/src/assets/css/backend.css index 2386dbc1..a899c815 100644 --- a/src/assets/css/backend.css +++ b/src/assets/css/backend.css @@ -53,12 +53,13 @@ root { font-size: 16px; } -#header #header-menu .menu-item:hover { +#header #header-menu .menu-item:hover:not(.active) { background-color: #247A4B; } #header #header-menu .active { - color: #D6FF80; + color: #E7FFB3; + text-shadow: 1px 1px 0px #57814D; } #footer { diff --git a/src/assets/images/installation-banner.png b/src/assets/images/installation-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb4cab1681be8941bbb40e6085b5208b27965f8 GIT binary patch literal 11949 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 r*H(J+EZ<-k(XH`=q|xH?tgl$<`9n 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 literal 0 HcmV?d00001 diff --git a/src/assets/js/backend_customers.js b/src/assets/js/backend_customers.js index 9091c4cf..cf62813d 100644 --- a/src/assets/js/backend_customers.js +++ b/src/assets/js/backend_customers.js @@ -342,7 +342,7 @@ CustomersHelper.prototype.display = function(customer) { ''; $('#customer-appointments').append(html); }); - $('#customer-appointments').jScrollPane(); + $('#customer-appointments').jScrollPane({ mouseWheelSpeed: 70 }); }; /** @@ -375,8 +375,7 @@ CustomersHelper.prototype.filter = function(key, selectId, display) { var html = BackendCustomers.helper.getFilterHtml(customer); $('#filter-customers .results').append(html); }); - - $('#filter-customers .results').jScrollPane(); + $('#filter-customers .results').jScrollPane({ mouseWheelSpeed: 70 }); if (response.length == 0) { $('#filter-customers .results').html('No records found...'); diff --git a/src/assets/js/backend_services.js b/src/assets/js/backend_services.js index ac76da5a..9eb61b62 100644 --- a/src/assets/js/backend_services.js +++ b/src/assets/js/backend_services.js @@ -54,7 +54,7 @@ var BackendServices = { * Changes the displayed tab. */ $('.tab').click(function() { - $('.active').removeClass('active'); + $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); $('.tab-content').hide(); @@ -389,7 +389,7 @@ ServicesHelper.prototype.filter = function(key, selectId, display) { var html = ServicesHelper.prototype.getFilterHtml(service); $('#filter-services .results').append(html); }); - $('#filter-services .results').jScrollPane(); + $('#filter-services .results').jScrollPane({ mouseWheelSpeed: 70 }); if (response.length == 0) { $('#filter-services .result').html('No results found ...'); @@ -613,7 +613,7 @@ CategoriesHelper.prototype.filter = function(key, selectId, display) { var html = BackendServices.helper.getFilterHtml(category); $('#filter-categories .results').append(html); }); - $('#filter-categories .results').jScrollPane(); + $('#filter-categories .results').jScrollPane({ mouseWheelSpeed: 70 }); if (response.length == 0) { $('#filter-categories .results').html('No records found...'); diff --git a/src/assets/js/backend_settings.js b/src/assets/js/backend_settings.js index 422dfee3..8bc8d230 100644 --- a/src/assets/js/backend_settings.js +++ b/src/assets/js/backend_settings.js @@ -116,7 +116,7 @@ var BackendSettings = { // and apply it whenever the user tab is clicked.. var areNotificationsActive = $('#user-notifications').hasClass('active'); - $('.active').removeClass('active'); + $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); $('.tab-content').hide(); diff --git a/src/assets/js/backend_users.js b/src/assets/js/backend_users.js index 27a51fd8..6e2d7d55 100644 --- a/src/assets/js/backend_users.js +++ b/src/assets/js/backend_users.js @@ -49,14 +49,14 @@ var BackendUsers = { + service.name + ''; $('#provider-services').append(html); }); - $('#provider-services').jScrollPane(); + $('#provider-services').jScrollPane({ mouseWheelSpeed: 70 }); $.each(GlobalVariables.providers, function(index, provider) { var html = ''; $('#secretary-providers').append(html); }); - $('#secretary-providers').jScrollPane(); + $('#secretary-providers').jScrollPane({ mouseWheelSpeed: 70 }); // Bind event handlers. if (defaultEventHandlers) BackendUsers.bindEventHandlers(); @@ -73,7 +73,7 @@ var BackendUsers = { * Changes the displayed tab. */ $('.tab').click(function() { - $('.active').removeClass('active'); + $(this).parent().find('.active').removeClass('active'); $(this).addClass('active'); $('.tab-content').hide(); @@ -83,7 +83,7 @@ var BackendUsers = { } else if ($(this).hasClass('providers-tab')) { // display providers tab $('#providers').show(); $('#provider-services').data('jsp').destroy(); - $('#provider-services').jScrollPane(); + $('#provider-services').jScrollPane({ mouseWheelSpeed: 70 }); BackendUsers.helper = new ProvidersHelper(); } else if ($(this).hasClass('secretaries-tab')) { // display secretaries tab $('#secretaries').show(); @@ -109,7 +109,7 @@ var BackendUsers = { $('#secretary-providers').append(html); }); $('#secretary-providers input[type="checkbox"]').prop('disabled', true); - $('#secretary-providers').jScrollPane(); + $('#secretary-providers').jScrollPane({ mouseWheelSpeed: 70 }); }, 'json'); } diff --git a/src/assets/js/backend_users_admins.js b/src/assets/js/backend_users_admins.js index a6426990..83ee3259 100644 --- a/src/assets/js/backend_users_admins.js +++ b/src/assets/js/backend_users_admins.js @@ -330,7 +330,7 @@ AdminsHelper.prototype.filter = function(key, selectId, display) { var html = AdminsHelper.prototype.getFilterHtml(admin); $('#filter-admins .results').append(html); }); - $('#filter-admins .results').jScrollPane(); + $('#filter-admins .results').jScrollPane({ mouseWheelSpeed: 70 }); if (response.length == 0) { $('#filter-admins .results').html('No results found ...') diff --git a/src/assets/js/backend_users_providers.js b/src/assets/js/backend_users_providers.js index 7367065f..ef4b3b3e 100644 --- a/src/assets/js/backend_users_providers.js +++ b/src/assets/js/backend_users_providers.js @@ -397,7 +397,7 @@ ProvidersHelper.prototype.filter = function(key, selectId, display) { var html = ProvidersHelper.prototype.getFilterHtml(provider); $('#filter-providers .results').append(html); }); - $('#filter-providers .results').jScrollPane(); + $('#filter-providers .results').jScrollPane({ mouseWheelSpeed: 70 }); if (response.length == 0) { $('#filter-providers .results').html('No results found ...') diff --git a/src/assets/js/backend_users_secretaries.js b/src/assets/js/backend_users_secretaries.js index 272146e3..5494ebdf 100644 --- a/src/assets/js/backend_users_secretaries.js +++ b/src/assets/js/backend_users_secretaries.js @@ -351,7 +351,7 @@ SecretariesHelper.prototype.filter = function(key, selectId, display) { var html = SecretariesHelper.prototype.getFilterHtml(secretary); $('#filter-secretaries .results').append(html); }); - $('#filter-secretaries .results').jScrollPane(); + $('#filter-secretaries .results').jScrollPane({ mouseWheelSpeed: 70 }); if (response.length == 0) { $('#filter-secretaries .results').html('No results found ...') diff --git a/src/assets/sql/structure.sql b/src/assets/sql/structure.sql new file mode 100644 index 00000000..3fbe8c56 --- /dev/null +++ b/src/assets/sql/structure.sql @@ -0,0 +1,227 @@ +-- phpMyAdmin SQL Dump +-- version 3.5.1 +-- http://www.phpmyadmin.net +-- +-- Φιλοξενητής: localhost +-- Χρόνος δημιουργίας: 11 Οκτ 2013 στις 16:58:08 +-- Έκδοση διακομιστή: 5.5.24-log +-- Έκδοση PHP: 5.4.3 + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Βάση: `easy_appointments` +-- + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_appointments` +-- + +CREATE TABLE IF NOT EXISTS `ea_appointments` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `book_datetime` datetime DEFAULT NULL, + `start_datetime` datetime DEFAULT NULL, + `end_datetime` datetime DEFAULT NULL, + `notes` text, + `hash` text, + `is_unavailable` tinyint(4) DEFAULT '0', + `id_users_provider` bigint(20) unsigned DEFAULT NULL, + `id_users_customer` bigint(20) unsigned DEFAULT NULL, + `id_services` bigint(20) unsigned DEFAULT NULL, + `id_google_calendar` text, + PRIMARY KEY (`id`), + KEY `id_users_customer` (`id_users_customer`), + KEY `id_services` (`id_services`), + KEY `id_users_provider` (`id_users_provider`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=63 ; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_roles` +-- + +CREATE TABLE IF NOT EXISTS `ea_roles` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(256) DEFAULT NULL, + `slug` varchar(256) DEFAULT NULL, + `is_admin` tinyint(4) DEFAULT NULL COMMENT '0', + `appointments` int(4) DEFAULT NULL COMMENT '0', + `customers` int(4) DEFAULT NULL COMMENT '0', + `services` int(4) DEFAULT NULL COMMENT '0', + `users` int(4) DEFAULT NULL COMMENT '0', + `system_settings` int(4) DEFAULT NULL COMMENT '0', + `user_settings` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_secretaries_providers` +-- + +CREATE TABLE IF NOT EXISTS `ea_secretaries_providers` ( + `id_users_secretary` bigint(20) unsigned NOT NULL, + `id_users_provider` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`id_users_secretary`,`id_users_provider`), + KEY `fk_ea_secretaries_providers_1` (`id_users_secretary`), + KEY `fk_ea_secretaries_providers_2` (`id_users_provider`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_services` +-- + +CREATE TABLE IF NOT EXISTS `ea_services` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(256) DEFAULT NULL, + `duration` int(11) DEFAULT NULL, + `price` decimal(10,2) DEFAULT NULL, + `currency` varchar(32) DEFAULT NULL, + `description` text, + `id_service_categories` bigint(20) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `id_service_categories` (`id_service_categories`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_services_providers` +-- + +CREATE TABLE IF NOT EXISTS `ea_services_providers` ( + `id_users` bigint(20) unsigned NOT NULL, + `id_services` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`id_users`,`id_services`), + KEY `id_services` (`id_services`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_service_categories` +-- + +CREATE TABLE IF NOT EXISTS `ea_service_categories` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(256) DEFAULT NULL, + `description` text, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=24 ; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_settings` +-- + +CREATE TABLE IF NOT EXISTS `ea_settings` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(512) DEFAULT NULL, + `value` longtext, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_users` +-- + +CREATE TABLE IF NOT EXISTS `ea_users` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `first_name` varchar(256) DEFAULT NULL, + `last_name` varchar(512) DEFAULT NULL, + `email` varchar(512) DEFAULT NULL, + `mobile_number` varchar(128) DEFAULT NULL, + `phone_number` varchar(128) DEFAULT NULL, + `address` varchar(256) DEFAULT NULL, + `city` varchar(256) DEFAULT NULL, + `state` varchar(128) DEFAULT NULL, + `zip_code` varchar(64) DEFAULT NULL, + `notes` text, + `id_roles` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `id_roles` (`id_roles`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=84 ; + +-- -------------------------------------------------------- + +-- +-- Δομή πίνακα για τον πίνακα `ea_user_settings` +-- + +CREATE TABLE IF NOT EXISTS `ea_user_settings` ( + `id_users` bigint(20) unsigned NOT NULL, + `username` varchar(256) DEFAULT NULL, + `password` varchar(512) DEFAULT NULL, + `salt` varchar(512) DEFAULT NULL, + `working_plan` text, + `notifications` tinyint(4) DEFAULT '0', + `google_sync` tinyint(4) DEFAULT '0', + `google_token` text, + `sync_past_days` int(11) DEFAULT '5', + `sync_future_days` int(11) DEFAULT '5', + PRIMARY KEY (`id_users`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Περιορισμοί για άχρηστους πίνακες +-- + +-- +-- Περιορισμοί για πίνακα `ea_appointments` +-- +ALTER TABLE `ea_appointments` + ADD CONSTRAINT `ea_appointments_ibfk_2` FOREIGN KEY (`id_users_customer`) REFERENCES `ea_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `ea_appointments_ibfk_3` FOREIGN KEY (`id_services`) REFERENCES `ea_services` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `ea_appointments_ibfk_4` FOREIGN KEY (`id_users_provider`) REFERENCES `ea_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Περιορισμοί για πίνακα `ea_secretaries_providers` +-- +ALTER TABLE `ea_secretaries_providers` + ADD CONSTRAINT `fk_ea_secretaries_providers_1` FOREIGN KEY (`id_users_secretary`) REFERENCES `ea_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `fk_ea_secretaries_providers_2` FOREIGN KEY (`id_users_provider`) REFERENCES `ea_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Περιορισμοί για πίνακα `ea_services` +-- +ALTER TABLE `ea_services` + ADD CONSTRAINT `ea_services_ibfk_1` FOREIGN KEY (`id_service_categories`) REFERENCES `ea_service_categories` (`id`) ON DELETE SET NULL ON UPDATE CASCADE; + +-- +-- Περιορισμοί για πίνακα `ea_services_providers` +-- +ALTER TABLE `ea_services_providers` + ADD CONSTRAINT `ea_services_providers_ibfk_1` FOREIGN KEY (`id_users`) REFERENCES `ea_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `ea_services_providers_ibfk_2` FOREIGN KEY (`id_services`) REFERENCES `ea_services` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Περιορισμοί για πίνακα `ea_users` +-- +ALTER TABLE `ea_users` + ADD CONSTRAINT `ea_users_ibfk_1` FOREIGN KEY (`id_roles`) REFERENCES `ea_roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Περιορισμοί για πίνακα `ea_user_settings` +-- +ALTER TABLE `ea_user_settings` + ADD CONSTRAINT `ea_user_settings_ibfk_1` FOREIGN KEY (`id_users`) REFERENCES `ea_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;