Ολοκλήρωση της διαδικασίας επεξεργασίας και ακύρωσης ενός ραντεβού για τον πελάτη, μέσω του link που έρχεται μαζί με το book success email.

This commit is contained in:
alextselegidis@gmail.com 2013-06-08 09:54:45 +00:00
parent f9a6b20052
commit e8725a9b1d
28 changed files with 2162 additions and 1090 deletions

View file

@ -1,9 +1,9 @@
VERSION 0.2
===========
- Use the PHPMailer class for sending HTML emails.
- Display error message to users.
- Includes complete Google Sync protocol document.
- Customers can book appointments only for the available hours.
- Generation of code documentation.
- Unit test the controller classes.
- Generation of code documentation.
- Customers can edit the application through unique links (from their emails).
- Minor Fixes

View file

@ -3,7 +3,7 @@
-- http://www.phpmyadmin.net
--
-- Φιλοξενητής: localhost
-- Χρόνος δημιουργίας: 08 Μάη 2013 στις 17:29:41
-- Χρόνος δημιουργίας: 08 Ιουν 2013 στις 12:49:21
-- Έκδοση διακομιστή: 5.5.24-log
-- Έκδοση PHP: 5.4.3
@ -28,9 +28,11 @@ SET time_zone = "+00:00";
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,
`id_users_provider` bigint(20) unsigned NOT NULL,
`id_users_customer` bigint(20) unsigned NOT NULL,
`id_services` bigint(20) unsigned NOT NULL,
@ -38,48 +40,14 @@ CREATE TABLE IF NOT EXISTS `ea_appointments` (
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=50 ;
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=43 ;
--
-- Άδειασμα δεδομένων του πίνακα `ea_appointments`
--
INSERT INTO `ea_appointments` (`id`, `start_datetime`, `end_datetime`, `notes`, `id_users_provider`, `id_users_customer`, `id_services`) VALUES
(14, '2013-04-26 12:40:00', '2013-04-26 12:40:00', '', 2, 1, 1),
(15, '2013-04-26 16:00:00', '2013-04-26 16:00:00', '', 2, 1, 1),
(16, '2013-04-26 13:00:00', '2013-04-26 13:00:00', 'Something else here ...', 2, 19, 1),
(17, '2013-04-26 14:00:00', '2013-04-26 14:00:00', '', 2, 20, 1),
(18, '2013-04-26 14:20:00', '2013-04-26 14:20:00', '', 2, 19, 1),
(19, '2013-04-26 14:20:00', '2013-04-26 14:20:00', 'Some notes ...', 2, 20, 1),
(20, '2013-04-26 14:30:00', '2013-04-26 14:30:00', 'ooo', 3, 20, 2),
(21, '2013-04-26 15:40:00', '2013-04-26 15:40:00', '', 2, 21, 1),
(22, '2013-04-26 16:40:00', '2013-04-26 16:40:00', '', 2, 21, 1),
(23, '2013-04-26 14:40:00', '2013-04-26 14:40:00', '', 2, 21, 1),
(24, '2013-05-01 18:00:00', '2013-05-01 18:00:00', '', 2, 19, 1),
(25, '2013-05-01 18:20:00', '2013-05-01 18:20:00', '', 2, 19, 1),
(26, '2013-05-01 18:40:00', '2013-05-01 18:40:00', '', 2, 19, 1),
(27, '2013-05-02 00:00:00', '2013-05-02 19:01:00', '', 2, 19, 1),
(28, '2013-05-03 13:00:00', '2013-05-03 13:00:00', '', 2, 19, 1),
(29, '2013-05-03 13:40:00', '2013-05-03 13:40:00', '', 2, 19, 1),
(30, '2013-05-03 14:20:00', '2013-05-03 14:20:00', '', 2, 19, 1),
(31, '2013-05-04 08:00:00', '2013-05-04 08:00:00', '', 3, 19, 3),
(32, '2013-05-03 00:00:00', '2013-05-03 20:45:00', '', 3, 19, 2),
(33, '2013-05-04 08:20:00', '2013-05-04 08:20:00', '', 2, 19, 1),
(34, '2013-05-04 09:20:00', '2013-05-04 09:20:00', '', 2, 19, 1),
(35, '2013-05-04 12:40:00', '2013-05-04 12:40:00', '', 2, 19, 1),
(36, '2013-05-04 13:20:00', '2013-05-04 13:20:00', '', 2, 19, 1),
(37, '2013-05-04 08:00:00', '2013-05-04 08:00:00', '', 2, 19, 1),
(38, '2013-05-03 00:00:00', '2013-05-03 23:18:00', '', 2, 19, 1),
(40, '2013-05-04 11:20:00', '2013-05-04 11:20:00', '', 2, 19, 1),
(41, '2013-05-04 12:00:00', '2013-05-04 12:00:00', '', 2, 19, 1),
(42, '2013-05-04 17:30:00', '2013-05-04 17:30:00', '', 3, 19, 2),
(43, '2013-05-04 19:00:00', '2013-05-04 19:00:00', '', 3, 19, 3),
(44, '2013-05-04 18:30:00', '2013-05-04 18:30:00', '', 4, 20, 2),
(45, '2013-05-07 11:00:00', '2013-05-07 11:00:00', 'Some notes ...', 2, 19, 1),
(46, '2013-05-07 11:20:00', '2013-05-07 11:20:00', '', 2, 19, 1),
(47, '2013-05-07 14:40:00', '2013-05-07 14:40:00', '', 2, 19, 1),
(48, '2013-05-07 15:00:00', '2013-05-07 15:00:00', '', 2, 20, 1),
(49, '2013-05-07 11:40:00', '2013-05-07 11:40:00', '', 2, 19, 1);
INSERT INTO `ea_appointments` (`id`, `book_datetime`, `start_datetime`, `end_datetime`, `notes`, `hash`, `id_users_provider`, `id_users_customer`, `id_services`) VALUES
(10, NULL, '2013-06-07 15:30:00', '2013-06-07 15:50:00', '', 'c4baf9ea27dcd0fdc5449eb91b0ee2c5', 2, 20, 1);
-- --------------------------------------------------------
@ -125,7 +93,7 @@ CREATE TABLE IF NOT EXISTS `ea_services` (
`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=4 ;
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;
--
-- Άδειασμα δεδομένων του πίνακα `ea_services`
@ -134,7 +102,8 @@ CREATE TABLE IF NOT EXISTS `ea_services` (
INSERT INTO `ea_services` (`id`, `name`, `duration`, `price`, `currency`, `description`, `id_service_categories`) VALUES
(1, 'Γενική Εξέταση', 20, '50.00', 'euro', 'Γενική εξέταση του ασθενή.', NULL),
(2, 'Εξέταση Καρδιάς', 30, '40.00', 'euro', 'Εξέταση του ασθενή για νοσήματα καρδιάς.', NULL),
(3, 'Νευρολογική Εξέταση', 20, '35.00', 'euro', 'Νευρολογική εξέταση του ασθενή.', NULL);
(3, 'Νευρολογική Εξέταση', 20, '35.00', 'euro', 'Νευρολογική εξέταση του ασθενή.', NULL),
(9, 'General Examination', 30, '50.00', 'euro', 'This is some service description.', NULL);
-- --------------------------------------------------------
@ -187,16 +156,18 @@ CREATE TABLE IF NOT EXISTS `ea_settings` (
`name` varchar(512) DEFAULT NULL,
`value` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;
--
-- Άδειασμα δεδομένων του πίνακα `ea_settings`
--
INSERT INTO `ea_settings` (`id`, `name`, `value`) VALUES
(1, 'business_name', 'Javation & Co'),
(2, 'business_working_hours', '{}'),
(3, 'business_email', 'alextselegidis@gmail.com');
(1, 'company_name', 'Javation & Co'),
(2, 'company_working_plan', '{"monday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"tuesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"wednesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"thursday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"friday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"saturday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"sunday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]}}'),
(3, 'company_email', 'alextselegidis@gmail.com'),
(8, 'company_link', 'http://google.gr'),
(9, 'book_advance_timeout', '30');
-- --------------------------------------------------------
@ -206,8 +177,6 @@ INSERT INTO `ea_settings` (`id`, `name`, `value`) VALUES
CREATE TABLE IF NOT EXISTS `ea_users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(256) DEFAULT NULL,
`password` varchar(512) DEFAULT NULL,
`first_name` varchar(256) DEFAULT NULL,
`last_name` varchar(512) DEFAULT NULL,
`email` varchar(512) DEFAULT NULL,
@ -221,20 +190,44 @@ CREATE TABLE IF NOT EXISTS `ea_users` (
`id_roles` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `id_roles` (`id_roles`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=116 ;
--
-- Άδειασμα δεδομένων του πίνακα `ea_users`
--
INSERT INTO `ea_users` (`id`, `username`, `password`, `first_name`, `last_name`, `email`, `mobile_number`, `phone_number`, `address`, `city`, `state`, `zip_code`, `notes`, `id_roles`) VALUES
(1, 'admin', 'admin', '', '1', 'alextselegidis@gmail.com', '123456789', '1', '', '', NULL, '', 'This is me making Easy!Appointments', 1),
(2, 'provider_1', 'provider_1', 'Γεώργιος', 'Παπαδόπουλος', 'alextselegidis@gmail.com', '1212121212', '1', '', '', NULL, '', 'This is a test provider', 2),
(3, 'provider_2', 'provider_2', 'Νίκος', 'Αναστασίου', 'prov2@test.gr', '1313133113131', '32132165146', 'Some Street 3', NULL, NULL, NULL, NULL, 2),
(4, 'provider_3', 'provider_3', 'Ηρώ', 'Καριοφύλη', 'prov3@test.gr', '239203490', '029340923', 'John Doe 3 ', NULL, NULL, NULL, NULL, 2),
(19, NULL, NULL, '', 'a', 'alextselegidis@gmail.com', NULL, 'a', '', '', NULL, '', NULL, 3),
(20, NULL, NULL, 'Alex', 'Tselegidis', 'alextselegidis@yahoo.gr', NULL, '6988589365', '', '', NULL, '', NULL, 3),
(21, NULL, NULL, '', '1', 'black-sabbath1967@hotmail.com', NULL, '1', '', '', NULL, '', NULL, 3);
INSERT INTO `ea_users` (`id`, `first_name`, `last_name`, `email`, `mobile_number`, `phone_number`, `address`, `city`, `state`, `zip_code`, `notes`, `id_roles`) VALUES
(1, '', '1', 'alextselegidis@gmail.com', '123456789', '1', '', '', NULL, '', 'This is me making Easy!Appointments', 1),
(2, 'Γεώργιος', 'Παπαδόπουλος', 'alextselegidis@gmail.com', '1212121212', '1', '', '', NULL, '', 'This is a test provider', 2),
(3, 'Νίκος', 'Αναστασίου', 'prov2@test.gr', '1313133113131', '32132165146', 'Some Street 3', NULL, NULL, NULL, NULL, 2),
(4, 'Ηρώ', 'Καριοφύλη', 'prov3@test.gr', '239203490', '029340923', 'John Doe 3 ', NULL, NULL, NULL, NULL, 2),
(20, 'Alex', 'Tselegidis', 'alextselegidis@yahoo.gr', NULL, '123456789', 'Some Str', 'Some City', NULL, '12345', NULL, 3),
(76, '', 'a', 'alextselegidis@yahoo.gr', NULL, 'a', '', '', NULL, '', NULL, 3);
-- --------------------------------------------------------
--
-- Δομή πίνακα για τον πίνακα `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,
`working_plan` text,
`notifications` text,
`google_sync` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id_users`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Άδειασμα δεδομένων του πίνακα `ea_user_settings`
--
INSERT INTO `ea_user_settings` (`id_users`, `username`, `password`, `working_plan`, `notifications`, `google_sync`) VALUES
(2, 'provider_1', 'provider_1', '{"monday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"tuesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"wednesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"thursday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"friday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"saturday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"sunday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]}}', NULL, 0),
(3, 'provider_2', 'provider_2', '{"monday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"tuesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"wednesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"thursday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"friday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"saturday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"sunday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]}}', NULL, 0),
(4, 'provider_3', 'provider_3', '{"monday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"tuesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"wednesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"thursday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"friday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"saturday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"sunday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]}}', NULL, 0);
--
-- Περιορισμοί για άχρηστους πίνακες
@ -267,6 +260,12 @@ ALTER TABLE `ea_services_providers`
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 */;

View file

@ -30,7 +30,7 @@
bookAppointment
</h2>
<div class="class-description">Implelements the js part of the appointment booking page.</div>
<div class="class-description">Implements the js part of the appointment booking page.</div>
</header>
@ -49,9 +49,9 @@
<div class="description">
This class implements the book appointment page functionality.
Once the initialize() method is called the page is fully functional
and can serve the appointment booking process.
This class implements the book appointment page functionality. Once
the initialize() method is called the page is fully functional and
can serve the appointment booking process.
</div>
@ -123,12 +123,266 @@ and can serve the appointment booking process.
<h3 class="subsection-title">Members</h3>
<dl>
<dt>
<h4 class="name" id="manageMode"><span class="type-signature">&lt;static> </span>manageMode<span class="type-signature"> :Boolean</span></h4>
</dt>
<dd>
<div class="description">
Determines the functionality of the page.
</div>
<h5>Type:</h5>
<ul>
<li>
<span class="param-type">Boolean</span>
</li>
</ul>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line14">line 14</a>
</li></ul></dd>
</dl>
</dd>
</dl>
<h3 class="subsection-title">Methods</h3>
<dl>
<dt>
<h4 class="name" id="applyAppointmentData"><span class="type-signature">&lt;static> </span>applyAppointmentData<span class="signature">(appointmentData, providerData, customerData)</span><span class="type-signature"> &rarr; {bool}</span></h4>
</dt>
<dd>
<div class="description">
This method applies the appointment's data to the wizard so
that the user can start making changes on an existing record.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>appointmentData</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">Selected appointment's data.</td>
</tr>
<tr>
<td class="name"><code>providerData</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">Selected provider's data.</td>
</tr>
<tr>
<td class="name"><code>customerData</code></td>
<td class="type">
<span class="param-type">object</span>
</td>
<td class="description last">Selected customer's data.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line398">line 398</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Returns the operation result.
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">bool</span>
</dd>
</dl>
</dd>
<dt>
<h4 class="name" id="bindEventHandlers"><span class="type-signature">&lt;static> </span>bindEventHandlers<span class="signature">()</span><span class="type-signature"></span></h4>
@ -138,8 +392,8 @@ and can serve the appointment booking process.
<div class="description">
This method binds the necessary event handlers
for the book appointments page.
This method binds the necessary event handlers for the book
appointments page.
</div>
@ -172,7 +426,7 @@ for the book appointments page.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line55">line 55</a>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line77">line 77</a>
</li></ul></dd>
@ -242,7 +496,7 @@ End datetime is depending on the service and start datetime fieldss.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line288">line 288</a>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line363">line 363</a>
</li></ul></dd>
@ -383,7 +637,7 @@ hours we need to receive.</td>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line155">line 155</a>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line194">line 194</a>
</li></ul></dd>
@ -411,7 +665,7 @@ hours we need to receive.</td>
<dt>
<h4 class="name" id="initialize"><span class="type-signature">&lt;static> </span>initialize<span class="signature">(bindEventHandlers)</span><span class="type-signature"></span></h4>
<h4 class="name" id="initialize"><span class="type-signature">&lt;static> </span>initialize<span class="signature">(bindEventHandlers, manageMode)</span><span class="type-signature"></span></h4>
</dt>
@ -469,11 +723,36 @@ hours we need to receive.</td>
<td class="description last">(OPTIONAL) Determines wether
<td class="description last">(OPTIONAL) Determines whether
the default event handlers will be binded to the dom elements.</td>
</tr>
<tr>
<td class="name"><code>manageMode</code></td>
<td class="type">
<span class="param-type">bool</span>
</td>
<td class="description last">(OPTIONAL) Determines whether the customer
is going to make changes to an existing appointment rather than
booking a new one.</td>
</tr>
</tbody>
</table>
@ -501,7 +780,7 @@ the default event handlers will be binded to the dom elements.</td>
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line15">line 15</a>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line25">line 25</a>
</li></ul></dd>
@ -529,7 +808,7 @@ the default event handlers will be binded to the dom elements.</td>
<dt>
<h4 class="name" id="updateConfirmData"><span class="type-signature">&lt;static> </span>updateConfirmData<span class="signature">()</span><span class="type-signature"></span></h4>
<h4 class="name" id="updateConfirmFrame"><span class="type-signature">&lt;static> </span>updateConfirmFrame<span class="signature">()</span><span class="type-signature"></span></h4>
</dt>
@ -572,7 +851,7 @@ booking.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line233">line 233</a>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line301">line 301</a>
</li></ul></dd>
@ -600,7 +879,7 @@ booking.
<dt>
<h4 class="name" id="validateCustomerDataForm"><span class="type-signature">&lt;static> </span>validateCustomerDataForm<span class="signature">()</span><span class="type-signature"> &rarr; {bool}</span></h4>
<h4 class="name" id="validateCustomerForm"><span class="type-signature">&lt;static> </span>validateCustomerForm<span class="signature">()</span><span class="type-signature"> &rarr; {bool}</span></h4>
</dt>
@ -642,7 +921,7 @@ It only checks for empty fields by the time.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line214">line 214</a>
<a href="book_appointment.js.html">frontend/book_appointment.js</a>, <a href="book_appointment.js.html#line282">line 282</a>
</li></ul></dd>
@ -711,7 +990,7 @@ It only checks for empty fields by the time.
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Mon May 20 2013 18:38:06 GMT+0300 (EEST)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Sat Jun 08 2013 12:49:54 GMT+0300 (EEST)
</footer>
<script> prettyPrint(); </script>

View file

@ -26,24 +26,40 @@
<section>
<article>
<pre class="prettyprint source"><code>/**
* This class implements the book appointment page functionality.
* Once the initialize() method is called the page is fully functional
* and can serve the appointment booking process.
* This class implements the book appointment page functionality. Once
* the initialize() method is called the page is fully functional and
* can serve the appointment booking process.
*
* @class Implelements the js part of the appointment booking page.
* @class Implements the js part of the appointment booking page.
*/
var bookAppointment = {
/**
* Determines the functionality of the page.
*
* @type Boolean
*/
manageMode : false,
/**
* This method initializes the book appointment page.
*
* @param {bool} bindEventHandlers (OPTIONAL) Determines wether
* @param {bool} bindEventHandlers (OPTIONAL) Determines whether
* the default event handlers will be binded to the dom elements.
* @param {bool} manageMode (OPTIONAL) Determines whether the customer
* is going to make changes to an existing appointment rather than
* booking a new one.
*/
initialize : function(bindEventHandlers) {
if (bindEventHandlers == undefined) {
bindEventHandlers = true; // Default value
initialize : function(bindEventHandlers, manageMode) {
if (bindEventHandlers === undefined) {
bindEventHandlers = true; // Default Value
}
if (manageMode === undefined) {
manageMode = false; // Default Value
}
bookAppointment.manageMode = manageMode;
// Initialize page's components (tooltips, datepickers etc).
$('.book-step').qtip({
position: {
@ -61,7 +77,7 @@ var bookAppointment = {
defaultDate : Date.today(),
onSelect : function(dateText, instance) {
bookAppointment.getAvailableHours(dateText);
bookAppointment.updateConfirmData();
bookAppointment.updateConfirmFrame();
}
});
@ -70,22 +86,31 @@ var bookAppointment = {
if (bindEventHandlers) {
bookAppointment.bindEventHandlers();
}
// Execute other necessary operations on startup.
$('#select-service').trigger('change');
// If the manage mode is true, the appointments data should be
// loaded by default.
if (bookAppointment.manageMode) {
bookAppointment.applyAppointmentData(GlobalVariables.appointmentData,
GlobalVariables.providerData, GlobalVariables.customerData);
} else {
$('#select-service').trigger('change'); // Load the available hours.
}
},
/**
* This method binds the necessary event handlers
* for the book appointments page.
* This method binds the necessary event handlers for the book
* appointments page.
*/
bindEventHandlers : function() {
/**
* Event : Selected Provider "Changed"
*
* Whenever the provider changes the available appointment
* date - time periods must be updated.
*/
$('#select-provider').change(function() {
bookAppointment.getAvailableHours(Date.today().toString('dd-MM-yyyy'));
bookAppointment.updateConfirmData();
bookAppointment.updateConfirmFrame();
});
/**
@ -98,21 +123,21 @@ var bookAppointment = {
var currServiceId = $('#select-service').val();
$('#select-provider').empty();
$.each(GlobalVariables.providers, function(indexProvider, provider) {
$.each(GlobalVariables.availableProviders, function(indexProvider, provider) {
$.each(provider['services'], function(indexService, serviceId) {
// If the current provider is able to provide the selected
// service, add him to the listbox.
// If the current provider is able to provide the selected service,
// add him to the listbox.
if (serviceId == currServiceId) {
var optionHtml = '&lt;option value="' + provider['id'] + '">'
+ provider['last_name'] + ' ' + provider['first_name']
+ '&lt;/option>';
+ provider['last_name'] + ' ' + provider['first_name']
+ '&lt;/option>';
$('#select-provider').append(optionHtml);
}
});
});
bookAppointment.getAvailableHours(Date.today().toString('dd-MM-yyyy'));
bookAppointment.updateConfirmData();
bookAppointment.updateConfirmFrame();
});
/**
@ -123,13 +148,27 @@ var bookAppointment = {
* be perfomed, depending the current wizard step.
*/
$('.button-next').click(function() {
// If we are on the 2nd tab then the user should have
// an appointment hour selected.
if ($(this).attr('data-step_index') === '2') {
if ($('.selected-hour').length == 0) {
if ($('#select-hour-prompt').length == 0) {
$('#available-hours').append('&lt;br>&lt;br>'
+ '&lt;strong id="select-hour-prompt" class="text-error">'
+ 'Please select an appointment hour before continuing!'
+ '&lt;/strong>');
}
return;
}
}
// If we are on the 3rd tab then we will need to validate the user's
// input before proceeding to the next step.
if ($(this).attr('data-step_index') == '3') {
if (!bookAppointment.validateCustomerDataForm()) {
if ($(this).attr('data-step_index') === '3') {
if (!bookAppointment.validateCustomerForm()) {
return; // Validation failed, do not continue.
} else {
bookAppointment.updateConfirmData();
bookAppointment.updateConfirmFrame();
}
}
@ -139,7 +178,7 @@ var bookAppointment = {
$(this).parents().eq(1).hide('fade', function() {
$('.active-step').removeClass('active-step');
$('#step-' + nextTabIndex).addClass('active-step');
$('#book-appointment-' + nextTabIndex).show('fade');
$('#wizard-frame-' + nextTabIndex).show('fade');
});
});
@ -155,7 +194,7 @@ var bookAppointment = {
$(this).parents().eq(1).hide('fade', function() {
$('.active-step').removeClass('active-step');
$('#step-' + prevTabIndex).addClass('active-step');
$('#book-appointment-' + prevTabIndex).show('fade');
$('#wizard-frame-' + prevTabIndex).show('fade');
});
});
@ -168,7 +207,7 @@ var bookAppointment = {
$('#available-hours').on('click', '.available-hour', function() {
$('.selected-hour').removeClass('selected-hour');
$(this).addClass('selected-hour');
bookAppointment.updateConfirmData();
bookAppointment.updateConfirmFrame();
});
},
@ -183,24 +222,31 @@ var bookAppointment = {
// Find the selected service duration (it is going to
// be send within the "postData" object.
var selServiceDuration = 15; // Default value of duration (in minutes).
$.each(GlobalVariables.services, function(index, service) {
$.each(GlobalVariables.availableServices, function(index, service) {
if (service['id'] == $('#select-service').val()) {
selServiceDuration = service['duration'];
}
});
// If the manage mode is true then the appointment's start
// date should return as available too.
var appointmentId = (bookAppointment.manageMode)
? GlobalVariables.appointmentData['id'] : undefined;
var postData = {
'service_id' : $('#select-service').val(),
'provider_id' : $('#select-provider').val(),
'selected_date' : selDate,
'service_duration' : selServiceDuration
'service_id' : $('#select-service').val(),
'provider_id' : $('#select-provider').val(),
'selected_date' : selDate,
'service_duration' : selServiceDuration,
'manage_mode' : bookAppointment.manageMode,
'appointment_id' : appointmentId
};
// Make ajax post request and get the available hours.
var ajaxurl = GlobalVariables.baseUrl + 'appointments/ajax_get_available_hours';
jQuery.post(ajaxurl, postData, function(postResponse) {
////////////////////////////////////////////////////////////////////////////////
console.log('\n\n Get Available Hours Post Response :', postResponse, '\n\n');
//console.log('\n\n Get Available Hours Post Response :', postResponse, '\n\n');
////////////////////////////////////////////////////////////////////////////////
try {
@ -209,25 +255,47 @@ var bookAppointment = {
//console.log('\n\n Get Available Hours JSON Response :', jsonResponse, '\n\n');
////////////////////////////////////////////////////////////////////////////////
// Fill the available time div
var currColumn = 1;
$('#available-hours').html('&lt;div style="width:50px; float:left;">&lt;/div>');
$.each(jsonResponse, function(index, availableHour) {
if ((currColumn * 10) &lt; (index + 1)) {
currColumn++;
$('#available-hours').append('&lt;div style="width:50px; float:left;">&lt;/div>');
if (jsonResponse.length > 0) {
// Fill the available time div
var currColumn = 1;
$('#available-hours').html('&lt;div style="width:50px; float:left;">&lt;/div>');
$.each(jsonResponse, function(index, availableHour) {
if ((currColumn * 10) &lt; (index + 1)) {
currColumn++;
$('#available-hours')
.append('&lt;div style="width:50px; float:left;">&lt;/div>');
}
$('#available-hours div:eq(' + (currColumn - 1) + ')')
.append('&lt;span class="available-hour">' + availableHour
+ '&lt;/span>&lt;br/>');
});
if (bookAppointment.manageMode) {
// Set the appointment start time as selected.
$('.available-hour').removeClass('selected-hour');
$('.available-hour').filter(function() {
return $(this).text() === Date.parseExact(
GlobalVariables.appointmentData['start_datetime'],
'yyyy-MM-dd HH:mm:ss').toString('HH:mm');
}).addClass('selected-hour');
} else {
// Set the first item as selected.
$('.available-hour:eq(0)').addClass('selected-hour');
}
$('#available-hours div:eq(' + (currColumn - 1) + ')')
.append('&lt;span class="available-hour">' + availableHour + '&lt;/span>&lt;br/>');
});
// Set the first item as selected.
$('.available-hour:eq(0)').addClass('selected-hour');
bookAppointment.updateConfirmData();
bookAppointment.updateConfirmFrame();
} else {
$('#available-hours').text('There are no available appointment'
+ 'hours for the selected date. Please choose another '
+ 'date.');
}
} catch(exception) {
GeneralFunctions.displayMessageBox('Unexpected Error', 'An unexpected error occured '
+ 'during the available hours calculation. Please refresh the page and try again.');
GeneralFunctions.displayMessageBox('Unexpected Error', 'An unexpected '
+ 'error occured during the available hours calculation. Please '
+ 'refresh the page and try again.');
}
});
},
@ -238,7 +306,7 @@ var bookAppointment = {
*
* @return {bool} Returns the validation result.
*/
validateCustomerDataForm : function() {
validateCustomerForm : function() {
var validationResult = true;
$('.required').css('border', '');
@ -257,7 +325,7 @@ var bookAppointment = {
* page with the latest customer settigns and input for the appointment
* booking.
*/
updateConfirmData : function() {
updateConfirmFrame : function() {
/*** SET APPOINTMENT INFO ***/
var selectedDate = $('#select-date').datepicker('getDate');
if (selectedDate !== null) {
@ -303,6 +371,13 @@ var bookAppointment = {
'id_services' : $('#select-service').val()
};
postData['manage_mode'] = bookAppointment.manageMode;
if (bookAppointment.manageMode) {
postData['appointment']['id'] = GlobalVariables.appointmentData['id'];
postData['customer']['id'] = GlobalVariables.customerData['id'];
}
$('input[name="post_data"]').val(JSON.stringify(postData));
},
@ -316,7 +391,7 @@ var bookAppointment = {
// Find selected service duration.
var selServiceDuration = undefined;
$.each(GlobalVariables.services, function(index, service) {
$.each(GlobalVariables.availableServices, function(index, service) {
if (service.id == $('#select-service').val()) {
selServiceDuration = service.duration;
return; // Stop searching ...
@ -336,6 +411,47 @@ var bookAppointment = {
}
return endDatetime.toString('yyyy-MM-dd HH:mm:ss');
},
/**
* This method applies the appointment's data to the wizard so
* that the user can start making changes on an existing record.
*
* @param {object} appointmentData Selected appointment's data.
* @param {object} providerData Selected provider's data.
* @param {object} customerData Selected customer's data.
* @returns {bool} Returns the operation result.
*/
applyAppointmentData : function(appointmentData, providerData, customerData) {
try {
// Select Service & Provider
$('#select-service').val(appointmentData['id_services']).trigger('change');
$('#select-provider').val(appointmentData['id_users_provider']);
// Set Appointment Date
$('#select-date').datepicker('setDate', Date.parseExact(
appointmentData['start_datetime'], 'yyyy-MM-dd HH:mm:ss'));
bookAppointment.getAvailableHours($('#select-date').val());
// Apply Customer's Data
$('#last-name').val(customerData['last_name']);
$('#first-name').val(customerData['first_name']);
$('#email').val(customerData['email']);
$('#phone-number').val(customerData['phone_number']);
$('#address').val(customerData['address']);
$('#city').val(customerData['city']);
$('#zip-code').val(customerData['zip_code']);
var appointmentNotes = (appointmentData['notes'] !== null) ? appointmentData['notes'] : '';
$('#notes').val(appointmentNotes);
bookAppointment.updateConfirmFrame();
return true;
} catch(exc) {
console.log(exc);
return false;
}
}
}</code></pre>
</article>
@ -353,7 +469,7 @@ var bookAppointment = {
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Mon May 20 2013 18:38:05 GMT+0300 (EEST)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Sat Jun 08 2013 12:49:54 GMT+0300 (EEST)
</footer>
<script> prettyPrint(); </script>

View file

@ -115,7 +115,7 @@ end of the application.</div>
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Mon May 20 2013 18:38:06 GMT+0300 (EEST)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Sat Jun 08 2013 12:49:55 GMT+0300 (EEST)
</footer>
<script> prettyPrint(); </script>

View file

@ -109,6 +109,26 @@ GeneralFunctions.centerElementOnPage = function(elementHandle) {
});
});
$(window).resize();
}
/**
* This function retrieves a parameter from a "GET" formed url.
*
* @link http://www.netlobo.com/url_query_string_javascript.html
*
* @param {string} url The selected url.
* @param {string} name The parameter name.
* @returns {String} Returns the parameter value.
*/
GeneralFunctions.getUrlParameter = function(url, parameterName) {
parameterName = parameterName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\#&]"+parameterName+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( url );
if( results == null )
return "";
else
return results[1];
}</code></pre>
</article>
</section>
@ -125,7 +145,7 @@ GeneralFunctions.centerElementOnPage = function(elementHandle) {
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Mon May 20 2013 18:38:05 GMT+0300 (EEST)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Sat Jun 08 2013 12:49:54 GMT+0300 (EEST)
</footer>
<script> prettyPrint(); </script>

View file

@ -54,7 +54,7 @@
<br clear="both">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Mon May 20 2013 18:38:05 GMT+0300 (EEST)
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.0-dev</a> on Sat Jun 08 2013 12:49:54 GMT+0300 (EEST)
</footer>
<script> prettyPrint(); </script>

View file

@ -105,7 +105,7 @@ CI_Controller
<b>Located at</b> <a href="source-class-Appointments.html#3-217" title="Go to source code">appointments.php</a><br />
<b>Located at</b> <a href="source-class-Appointments.html#3-369" title="Go to source code">appointments.php</a><br />
</div>
@ -123,20 +123,71 @@ CI_Controller
<td class="name"><div>
<a class="anchor" href="#_index">#</a>
<code><a href="source-class-Appointments.html#4-50" title="Go to source code">index</a>( )</code>
<code><a href="source-class-Appointments.html#4-104" title="Go to source code">index</a>( <span>string <var>$appointment_hash</var> = <span class="php-quote">''</span></span> )</code>
<div class="description short">
<p>This page displays the book appointment wizard for the customers.</p>
<p>Default callback method of the application.</p>
</div>
<div class="description detailed hidden">
<p>This page displays the book appointment wizard for the customers.</p>
<p>Default callback method of the application.</p>
<p>This method creates the appointment book wizard. If an appointment hash is
provided then it means that the customer followed the appointment manage link
that was send with the book success email.</p>
<h4>Parameters</h4>
<div class="list"><dl>
<dt><var>$appointment_hash</var></dt>
<dd><code>string</code><br>$appointment_hash The db appointment hash of an existing record.</dd>
</dl></div>
</div>
</div></td>
</tr>
<tr data-order="cancel" id="_cancel">
<td class="attributes"><code>
public
</code>
</td>
<td class="name"><div>
<a class="anchor" href="#_cancel">#</a>
<code><a href="source-class-Appointments.html#106-152" title="Go to source code">cancel</a>( <span>string <var>$appointment_hash</var></span> )</code>
<div class="description short">
<p>Cancel an existing appointment.</p>
</div>
<div class="description detailed hidden">
<p>Cancel an existing appointment.</p>
<p>This method removes an appointment from the company's schedule. In order for
the appointment to be deleted, the hash string must be provided. The customer
can only cancel the appointment if the edit time period is not over yet.</p>
<h4>Parameters</h4>
<div class="list"><dl>
<dt><var>$appointment_hash</var></dt>
<dd><code>string</code><br>$appointment_hash This is used to distinguish the appointment record.</dd>
</dl></div>
@ -156,7 +207,7 @@ CI_Controller
<td class="name"><div>
<a class="anchor" href="#_ajax_get_available_hours">#</a>
<code><a href="source-class-Appointments.html#52-190" title="Go to source code">ajax_get_available_hours</a>( )</code>
<code><a href="source-class-Appointments.html#154-341" title="Go to source code">ajax_get_available_hours</a>( )</code>
<div class="description short">
@ -196,7 +247,7 @@ the given service, provider and date.</p>
<td class="name"><div>
<a class="anchor" href="#_google_sync">#</a>
<code><a href="source-class-Appointments.html#192-216" title="Go to source code">google_sync</a>( <span>mixed <var>$appointment_id</var></span> )</code>
<code><a href="source-class-Appointments.html#343-368" title="Go to source code">google_sync</a>( <span>mixed <var>$appointment_id</var></span> )</code>
<div class="description short">

View file

@ -105,7 +105,7 @@ CI_Model
<b>Located at</b> <a href="source-class-Appointments_Model.html#3-290" title="Go to source code">appointments_model.php</a><br />
<b>Located at</b> <a href="source-class-Appointments_Model.html#3-332" title="Go to source code">appointments_model.php</a><br />
</div>
@ -156,7 +156,7 @@ CI_Model
<td class="name"><div>
<a class="anchor" href="#_add">#</a>
<code><a href="source-class-Appointments_Model.html#11-39" title="Go to source code">add</a>( <span>array <var>$appointment_data</var></span> )</code>
<code><a href="source-class-Appointments_Model.html#11-41" title="Go to source code">add</a>( <span>array <var>$appointment_data</var></span> )</code>
<div class="description short">
@ -177,7 +177,7 @@ updated.</p>
<h4>Parameters</h4>
<div class="list"><dl>
<dt><var>$appointment_data</var></dt>
<dd><code>array</code><br>$appointment_data Associative array with the appointmet's data. Each key has the
<dd><code>array</code><br>$appointment_data Associative array with the appointment data. Each key has the
same name with the database fields.</dd>
</dl></div>
@ -189,8 +189,9 @@ same name with the database fields.</dd>
<h4>ExpectedException</h4>
<div class="list">
ValidationException<br />
DatabaseException<br />
ValidationException Raises when the appointment data are invalid.<br />
DatabaseException Raises when the insert or update operation fail to complete
successfully.<br />
</div>
@ -208,7 +209,7 @@ same name with the database fields.</dd>
<td class="name"><div>
<a class="anchor" href="#_exists">#</a>
<code><a href="source-class-Appointments_Model.html#41-74" title="Go to source code">exists</a>( <span>array <var>$appointment_data</var></span> )</code>
<code><a href="source-class-Appointments_Model.html#43-77" title="Go to source code">exists</a>( <span>array <var>$appointment_data</var></span> )</code>
<div class="description short">
@ -261,7 +262,7 @@ necessary field.<br />
<td class="name"><div>
<a class="anchor" href="#_find_record_id">#</a>
<code><a href="source-class-Appointments_Model.html#115-147" title="Go to source code">find_record_id</a>( <span>array <var>$appointment_data</var></span> )</code>
<code><a href="source-class-Appointments_Model.html#119-153" title="Go to source code">find_record_id</a>( <span>array <var>$appointment_data</var></span> )</code>
<div class="description short">
@ -274,8 +275,8 @@ necessary field.<br />
<p>Find the database id of an appointment record.</p>
<p>The appointment data should include the following fields in order to get the
unique id from the database: start_datetime, end_datetime, id_users_provider,
id_users_customer, id_services.</p>
unique id from the database: "start_datetime", "end_datetime",
"id_users_provider", "id_users_customer", "id_services".</p>
<p>&lt;strong&gt;IMPORTANT!&lt;/strong&gt; The record must already exists in the
database, otherwise an exception is raised.</p>
@ -291,13 +292,14 @@ have the same names as the db fields.</dd>
<h4>Returns</h4>
<div class="list">
<code>integer</code><br>Returns the id.<br />
<code>integer</code><br>Returns the db id of the record that matches the apppointment data.<br />
</div>
<h4>ExpectedException</h4>
<div class="list">
DatabaseException<br />
DatabaseException Raises when this method cannot find any record that matches
the given data.<br />
</div>
@ -315,18 +317,18 @@ have the same names as the db fields.</dd>
<td class="name"><div>
<a class="anchor" href="#_validate_data">#</a>
<code><a href="source-class-Appointments_Model.html#149-203" title="Go to source code">validate_data</a>( <span>array <var>$appointment_data</var></span> )</code>
<code><a href="source-class-Appointments_Model.html#155-221" title="Go to source code">validate_data</a>( <span>array <var>$appointment_data</var></span> )</code>
<div class="description short">
<p>Validate appointment data before the insert or update operation is
<p>Validate appointment data before the insert or update operations are
executed.</p>
</div>
<div class="description detailed hidden">
<p>Validate appointment data before the insert or update operation is
<p>Validate appointment data before the insert or update operations are
executed.</p>
@ -359,7 +361,7 @@ executed.</p>
<td class="name"><div>
<a class="anchor" href="#_delete">#</a>
<code><a href="source-class-Appointments_Model.html#205-227" title="Go to source code">delete</a>( <span>integer <var>$appointment_id</var></span> )</code>
<code><a href="source-class-Appointments_Model.html#223-247" title="Go to source code">delete</a>( <span>integer <var>$appointment_id</var></span> )</code>
<div class="description short">
@ -405,7 +407,7 @@ executed.</p>
<td class="name"><div>
<a class="anchor" href="#_get_row">#</a>
<code><a href="source-class-Appointments_Model.html#229-242" title="Go to source code">get_row</a>( <span>integer <var>$appointment_id</var></span> )</code>
<code><a href="source-class-Appointments_Model.html#249-264" title="Go to source code">get_row</a>( <span>integer <var>$appointment_id</var></span> )</code>
<div class="description short">
@ -448,7 +450,7 @@ same name as the database field names.<br />
<td class="name"><div>
<a class="anchor" href="#_get_value">#</a>
<code><a href="source-class-Appointments_Model.html#244-272" title="Go to source code">get_value</a>( <span>string <var>$field_name</var></span>, <span>integer <var>$appointment_id</var></span> )</code>
<code><a href="source-class-Appointments_Model.html#266-299" title="Go to source code">get_value</a>( <span>string <var>$field_name</var></span>, <span>integer <var>$appointment_id</var></span> )</code>
<div class="description short">
@ -492,7 +494,7 @@ same name as the database field names.<br />
<td class="name"><div>
<a class="anchor" href="#_get_batch">#</a>
<code><a href="source-class-Appointments_Model.html#274-289" title="Go to source code">get_batch</a>( <span>string <var>$where_clause</var> = <span class="php-quote">''</span></span> )</code>
<code><a href="source-class-Appointments_Model.html#301-316" title="Go to source code">get_batch</a>( <span>string <var>$where_clause</var> = <span class="php-quote">''</span></span> )</code>
<div class="description short">
@ -525,6 +527,47 @@ INCLUDE 'WHERE' KEYWORD.</dd>
</div>
</div>
</div></td>
</tr>
<tr data-order="generate_hash" id="_generate_hash">
<td class="attributes"><code>
public
string
</code>
</td>
<td class="name"><div>
<a class="anchor" href="#_generate_hash">#</a>
<code><a href="source-class-Appointments_Model.html#318-331" title="Go to source code">generate_hash</a>( )</code>
<div class="description short">
<p>Generate a unique hash for the given appointment data.</p>
</div>
<div class="description detailed hidden">
<p>Generate a unique hash for the given appointment data.</p>
<p>This method uses the current date-time to generate a unique hash string that
is later used to identify this appointment. Hash is needed when the email is
send to the user with an edit link.</p>
<h4>Returns</h4>
<div class="list">
<code>string</code><br>Returns the unique appointment hash.<br />
</div>
</div>
</div></td>
</tr>

View file

@ -105,7 +105,7 @@ CI_Model
<b>Located at</b> <a href="source-class-Customers_Model.html#3-283" title="Go to source code">customers_model.php</a><br />
<b>Located at</b> <a href="source-class-Customers_Model.html#3-297" title="Go to source code">customers_model.php</a><br />
</div>
@ -258,7 +258,7 @@ necessary fields.<br />
<td class="name"><div>
<a class="anchor" href="#_find_record_id">#</a>
<code><a href="source-class-Customers_Model.html#119-154" title="Go to source code">find_record_id</a>( <span>array <var>$customer_data</var></span> )</code>
<code><a href="source-class-Customers_Model.html#115-150" title="Go to source code">find_record_id</a>( <span>array <var>$customer_data</var></span> )</code>
<div class="description short">
@ -311,7 +311,7 @@ the same names as the db fields.</dd>
<td class="name"><div>
<a class="anchor" href="#_validate_data">#</a>
<code><a href="source-class-Customers_Model.html#156-185" title="Go to source code">validate_data</a>( <span>array <var>$customer_data</var></span> )</code>
<code><a href="source-class-Customers_Model.html#152-191" title="Go to source code">validate_data</a>( <span>array <var>$customer_data</var></span> )</code>
<div class="description short">
@ -353,7 +353,7 @@ the same names as the db fields.</dd>
<td class="name"><div>
<a class="anchor" href="#_delete">#</a>
<code><a href="source-class-Customers_Model.html#187-208" title="Go to source code">delete</a>( <span>integer <var>$customer_id</var></span> )</code>
<code><a href="source-class-Customers_Model.html#193-215" title="Go to source code">delete</a>( <span>integer <var>$customer_id</var></span> )</code>
<div class="description short">
@ -399,7 +399,7 @@ the same names as the db fields.</dd>
<td class="name"><div>
<a class="anchor" href="#_get_row">#</a>
<code><a href="source-class-Customers_Model.html#210-223" title="Go to source code">get_row</a>( <span>integer <var>$customer_id</var></span> )</code>
<code><a href="source-class-Customers_Model.html#217-231" title="Go to source code">get_row</a>( <span>integer <var>$customer_id</var></span> )</code>
<div class="description short">
@ -442,7 +442,7 @@ same name as the database field names.<br />
<td class="name"><div>
<a class="anchor" href="#_get_value">#</a>
<code><a href="source-class-Customers_Model.html#225-252" title="Go to source code">get_value</a>( <span>string <var>$field_name</var></span>, <span>integer <var>$customer_id</var></span> )</code>
<code><a href="source-class-Customers_Model.html#233-266" title="Go to source code">get_value</a>( <span>string <var>$field_name</var></span>, <span>integer <var>$customer_id</var></span> )</code>
<div class="description short">
@ -486,7 +486,7 @@ same name as the database field names.<br />
<td class="name"><div>
<a class="anchor" href="#_get_batch">#</a>
<code><a href="source-class-Customers_Model.html#254-273" title="Go to source code">get_batch</a>( <span>string <var>$where_clause</var> = <span class="php-quote">''</span></span> )</code>
<code><a href="source-class-Customers_Model.html#268-287" title="Go to source code">get_batch</a>( <span>string <var>$where_clause</var> = <span class="php-quote">''</span></span> )</code>
<div class="description short">
@ -533,7 +533,7 @@ INCLUDE 'WHERE' KEYWORD.</dd>
<td class="name"><div>
<a class="anchor" href="#_get_customers_role_id">#</a>
<code><a href="source-class-Customers_Model.html#275-282" title="Go to source code">get_customers_role_id</a>( )</code>
<code><a href="source-class-Customers_Model.html#289-296" title="Go to source code">get_customers_role_id</a>( )</code>
<div class="description short">

View file

@ -105,7 +105,7 @@ CI_Model
<b>Located at</b> <a href="source-class-Providers_Model.html#3-120" title="Go to source code">providers_model.php</a><br />
<b>Located at</b> <a href="source-class-Providers_Model.html#3-138" title="Go to source code">providers_model.php</a><br />
</div>
@ -199,7 +199,7 @@ same name as the database field names.<br />
<td class="name"><div>
<a class="anchor" href="#_get_value">#</a>
<code><a href="source-class-Providers_Model.html#26-53" title="Go to source code">get_value</a>( <span>string <var>$field_name</var></span>, <span>integer <var>$provider_id</var></span> )</code>
<code><a href="source-class-Providers_Model.html#26-58" title="Go to source code">get_value</a>( <span>string <var>$field_name</var></span>, <span>integer <var>$provider_id</var></span> )</code>
<div class="description short">
@ -243,7 +243,7 @@ same name as the database field names.<br />
<td class="name"><div>
<a class="anchor" href="#_get_batch">#</a>
<code><a href="source-class-Providers_Model.html#55-74" title="Go to source code">get_batch</a>( <span>string <var>$where_clause</var> = <span class="php-quote">''</span></span> )</code>
<code><a href="source-class-Providers_Model.html#60-79" title="Go to source code">get_batch</a>( <span>string <var>$where_clause</var> = <span class="php-quote">''</span></span> )</code>
<div class="description short">
@ -290,7 +290,7 @@ INCLUDE 'WHERE' KEYWORD.</dd>
<td class="name"><div>
<a class="anchor" href="#_get_available_providers">#</a>
<code><a href="source-class-Providers_Model.html#76-110" title="Go to source code">get_available_providers</a>( )</code>
<code><a href="source-class-Providers_Model.html#81-115" title="Go to source code">get_available_providers</a>( )</code>
<div class="description short">
@ -329,7 +329,7 @@ provide.</p>
<td class="name"><div>
<a class="anchor" href="#_get_providers_role_id">#</a>
<code><a href="source-class-Providers_Model.html#112-119" title="Go to source code">get_providers_role_id</a>( )</code>
<code><a href="source-class-Providers_Model.html#117-124" title="Go to source code">get_providers_role_id</a>( )</code>
<div class="description short">
@ -352,6 +352,50 @@ provide.</p>
</div>
</div></td>
</tr>
<tr data-order="get_setting" id="_get_setting">
<td class="attributes"><code>
public
string
</code>
</td>
<td class="name"><div>
<a class="anchor" href="#_get_setting">#</a>
<code><a href="source-class-Providers_Model.html#126-137" title="Go to source code">get_setting</a>( <span>string <var>$setting_name</var></span>, <span>integer <var>$provider_id</var></span> )</code>
<div class="description short">
<p>Get a providers setting from the database.</p>
</div>
<div class="description detailed hidden">
<p>Get a providers setting from the database.</p>
<h4>Parameters</h4>
<div class="list"><dl>
<dt><var>$setting_name</var></dt>
<dd><code>string</code><br>$setting_name The setting name that is going to be returned.</dd>
<dt><var>$provider_id</var></dt>
<dd><code>integer</code><br>$provider_id The selected provider id.</dd>
</dl></div>
<h4>Returns</h4>
<div class="list">
<code>string</code><br>Returs the value of the selected user setting.<br />
</div>
</div>
</div></td>
</tr>

View file

@ -79,222 +79,374 @@
</span><span id="2" class="l"><a class="l" href="#2"> 2: </a>
</span><span id="3" class="l"><a class="l" href="#3"> 3: </a><span class="php-keyword1">class</span> <a id="Appointments" href="#Appointments">Appointments</a> <span class="php-keyword1">extends</span> CI_Controller {
</span><span id="4" class="l"><a class="l" href="#4"> 4: </a> <span class="php-comment">/**
</span></span><span id="5" class="l"><a class="l" href="#5"> 5: </a><span class="php-comment"> * This page displays the book appointment wizard
</span></span><span id="6" class="l"><a class="l" href="#6"> 6: </a><span class="php-comment"> * for the customers.
</span></span><span id="7" class="l"><a class="l" href="#7"> 7: </a><span class="php-comment"> */</span>
</span><span id="8" class="l"><a class="l" href="#8"> 8: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_index" href="#_index">index</a>() {
</span><span id="9" class="l"><a class="l" href="#9"> 9: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">strtoupper</span>(<span class="php-var">$_SERVER</span>[<span class="php-quote">'REQUEST_METHOD'</span>]) != <span class="php-quote">'POST'</span>) {
</span><span id="10" class="l"><a class="l" href="#10"> 10: </a> <span class="php-comment">// Display the appointment booking page to the customer.</span>
</span><span id="11" class="l"><a class="l" href="#11"> 11: </a> <span class="php-comment">// Get business name.</span>
</span><span id="12" class="l"><a class="l" href="#12"> 12: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Settings_Model'</span>);
</span><span id="13" class="l"><a class="l" href="#13"> 13: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'company_name'</span>] = <span class="php-var">$this</span>-&gt;Settings_Model-&gt;get_setting(<span class="php-quote">'company_name'</span>);
</span><span id="14" class="l"><a class="l" href="#14"> 14: </a>
</span><span id="15" class="l"><a class="l" href="#15"> 15: </a> <span class="php-comment">// Get the available services and providers.</span>
</span><span id="16" class="l"><a class="l" href="#16"> 16: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Services_Model'</span>);
</span><span id="17" class="l"><a class="l" href="#17"> 17: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'available_services'</span>] = <span class="php-var">$this</span>-&gt;Services_Model-&gt;get_available_services();
</span><span id="18" class="l"><a class="l" href="#18"> 18: </a>
</span><span id="19" class="l"><a class="l" href="#19"> 19: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Providers_Model'</span>);
</span><span id="20" class="l"><a class="l" href="#20"> 20: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'available_providers'</span>] = <span class="php-var">$this</span>-&gt;Providers_Model-&gt;get_available_providers();
</span><span id="21" class="l"><a class="l" href="#21"> 21: </a>
</span><span id="22" class="l"><a class="l" href="#22"> 22: </a> <span class="php-comment">// Load the book appointment view.</span>
</span><span id="23" class="l"><a class="l" href="#23"> 23: </a> <span class="php-var">$this</span>-&gt;load-&gt;view(<span class="php-quote">'appointments/book'</span>, <span class="php-var">$view_data</span>);
</span><span id="24" class="l"><a class="l" href="#24"> 24: </a> } <span class="php-keyword1">else</span> {
</span><span id="25" class="l"><a class="l" href="#25"> 25: </a> <span class="php-var">$post_data</span> = <span class="php-keyword2">json_decode</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'post_data'</span>], <span class="php-keyword1">true</span>);
</span><span id="26" class="l"><a class="l" href="#26"> 26: </a>
</span><span id="27" class="l"><a class="l" href="#27"> 27: </a> <span class="php-comment">// Add customer </span>
</span><span id="28" class="l"><a class="l" href="#28"> 28: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Customers_Model'</span>);
</span><span id="29" class="l"><a class="l" href="#29"> 29: </a> <span class="php-var">$customer_id</span> = <span class="php-var">$this</span>-&gt;Customers_Model-&gt;add(<span class="php-var">$post_data</span>[<span class="php-quote">'customer'</span>]);
</span><span id="30" class="l"><a class="l" href="#30"> 30: </a>
</span><span id="31" class="l"><a class="l" href="#31"> 31: </a> <span class="php-comment">// Add appointment</span>
</span><span id="32" class="l"><a class="l" href="#32"> 32: </a> <span class="php-var">$post_data</span>[<span class="php-quote">'appointment'</span>][<span class="php-quote">'id_users_customer'</span>] = <span class="php-var">$customer_id</span>;
</span><span id="33" class="l"><a class="l" href="#33"> 33: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Appointments_Model'</span>);
</span><span id="34" class="l"><a class="l" href="#34"> 34: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'appointment_id'</span>] = <span class="php-var">$this</span>-&gt;Appointments_Model-&gt;add(<span class="php-var">$post_data</span>[<span class="php-quote">'appointment'</span>]);
</span><span id="35" class="l"><a class="l" href="#35"> 35: </a>
</span><span id="36" class="l"><a class="l" href="#36"> 36: </a> <span class="php-comment">// Send an email to the customer with the appointment info.</span>
</span><span id="37" class="l"><a class="l" href="#37"> 37: </a> <span class="php-var">$this</span>-&gt;load-&gt;library(<span class="php-quote">'Notifications'</span>);
</span><span id="38" class="l"><a class="l" href="#38"> 38: </a> <span class="php-keyword1">try</span> {
</span><span id="39" class="l"><a class="l" href="#39"> 39: </a> <span class="php-var">$this</span>-&gt;notifications-&gt;send_book_success(<span class="php-var">$post_data</span>[<span class="php-quote">'customer'</span>], <span class="php-var">$post_data</span>[<span class="php-quote">'appointment'</span>]);
</span><span id="40" class="l"><a class="l" href="#40"> 40: </a> <span class="php-var">$this</span>-&gt;notifications-&gt;send_new_appointment(<span class="php-var">$post_data</span>[<span class="php-quote">'customer'</span>], <span class="php-var">$post_data</span>[<span class="php-quote">'appointment'</span>]);
</span><span id="41" class="l"><a class="l" href="#41"> 41: </a> } <span class="php-keyword1">catch</span> (NotificationException <span class="php-var">$not_exc</span>) {
</span><span id="42" class="l"><a class="l" href="#42"> 42: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'notification_error'</span>] = <span class="php-quote">'&lt;br&gt;&lt;br&gt;&lt;pre&gt;An unexpected error occured while sending '</span>
</span><span id="43" class="l"><a class="l" href="#43"> 43: </a> . <span class="php-quote">'you an email. Please backup the appointment details so that you can restore them '</span>
</span><span id="44" class="l"><a class="l" href="#44"> 44: </a> . <span class="php-quote">'later. &lt;br&gt;&lt;br&gt;Error:&lt;br&gt;'</span> . <span class="php-var">$not_exc</span>-&gt;getMessage() . <span class="php-quote">'&lt;/pre&gt;'</span>;
</span><span id="45" class="l"><a class="l" href="#45"> 45: </a> }
</span><span id="46" class="l"><a class="l" href="#46"> 46: </a>
</span><span id="47" class="l"><a class="l" href="#47"> 47: </a> <span class="php-comment">// Load the book appointment view.</span>
</span><span id="48" class="l"><a class="l" href="#48"> 48: </a> <span class="php-var">$this</span>-&gt;load-&gt;view(<span class="php-quote">'appointments/book_success'</span>, <span class="php-var">$view_data</span>);
</span><span id="49" class="l"><a class="l" href="#49"> 49: </a> }
</span><span id="50" class="l"><a class="l" href="#50"> 50: </a> }
</span><span id="51" class="l"><a class="l" href="#51"> 51: </a>
</span><span id="52" class="l"><a class="l" href="#52"> 52: </a> <span class="php-comment">/**
</span></span><span id="53" class="l"><a class="l" href="#53"> 53: </a><span class="php-comment"> * [AJAX] Get the available appointment hours for the given date.
</span></span><span id="54" class="l"><a class="l" href="#54"> 54: </a><span class="php-comment"> *
</span></span><span id="55" class="l"><a class="l" href="#55"> 55: </a><span class="php-comment"> * This method answers to an AJAX request. It calculates the
</span></span><span id="56" class="l"><a class="l" href="#56"> 56: </a><span class="php-comment"> * available hours for the given service, provider and date.
</span></span><span id="57" class="l"><a class="l" href="#57"> 57: </a><span class="php-comment"> *
</span></span><span id="58" class="l"><a class="l" href="#58"> 58: </a><span class="php-comment"> * @param array $_POST['post_data'] An associative array that
</span></span><span id="59" class="l"><a class="l" href="#59"> 59: </a><span class="php-comment"> * contains the user selected 'service_id', 'provider_id',
</span></span><span id="60" class="l"><a class="l" href="#60"> 60: </a><span class="php-comment"> * 'selected_date' and 'service_duration' in minutes.
</span></span><span id="61" class="l"><a class="l" href="#61"> 61: </a><span class="php-comment"> * @return Returns a json object with the available hours.
</span></span><span id="62" class="l"><a class="l" href="#62"> 62: </a><span class="php-comment"> */</span>
</span><span id="63" class="l"><a class="l" href="#63"> 63: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_ajax_get_available_hours" href="#_ajax_get_available_hours">ajax_get_available_hours</a>() {
</span><span id="64" class="l"><a class="l" href="#64"> 64: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Providers_Model'</span>);
</span><span id="65" class="l"><a class="l" href="#65"> 65: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Appointments_Model'</span>);
</span><span id="66" class="l"><a class="l" href="#66"> 66: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Settings_Model'</span>);
</span><span id="67" class="l"><a class="l" href="#67"> 67: </a>
</span><span id="68" class="l"><a class="l" href="#68"> 68: </a> <span class="php-comment">// Get the provider's working plan and reserved appointments. </span>
</span><span id="69" class="l"><a class="l" href="#69"> 69: </a> <span class="php-var">$working_plan</span> = <span class="php-keyword2">json_decode</span>(<span class="php-var">$this</span>-&gt;Providers_Model
</span><span id="70" class="l"><a class="l" href="#70"> 70: </a> -&gt;get_value(<span class="php-quote">'working_plan'</span>, <span class="php-var">$_POST</span>[<span class="php-quote">'provider_id'</span>]), <span class="php-keyword1">true</span>);
</span><span id="71" class="l"><a class="l" href="#71"> 71: </a>
</span><span id="72" class="l"><a class="l" href="#72"> 72: </a> <span class="php-var">$reserved_appointments</span> = <span class="php-var">$this</span>-&gt;Appointments_Model-&gt;get_batch(
</span><span id="73" class="l"><a class="l" href="#73"> 73: </a> <span class="php-keyword1">array</span>(
</span><span id="74" class="l"><a class="l" href="#74"> 74: </a> <span class="php-quote">'DATE(start_datetime)'</span> =&gt; <span class="php-keyword2">date</span>(<span class="php-quote">'Y-m-d'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>])),
</span><span id="75" class="l"><a class="l" href="#75"> 75: </a> <span class="php-quote">'id_users_provider'</span> =&gt; <span class="php-var">$_POST</span>[<span class="php-quote">'provider_id'</span>],
</span><span id="76" class="l"><a class="l" href="#76"> 76: </a> <span class="php-quote">'id_services'</span> =&gt; <span class="php-var">$_POST</span>[<span class="php-quote">'service_id'</span>]
</span><span id="77" class="l"><a class="l" href="#77"> 77: </a> ));
</span><span id="78" class="l"><a class="l" href="#78"> 78: </a>
</span><span id="79" class="l"><a class="l" href="#79"> 79: </a> <span class="php-comment">// Find the empty spaces on the plan. The first split between </span>
</span><span id="80" class="l"><a class="l" href="#80"> 80: </a> <span class="php-comment">// the plan is due to a break (if exist). After that every reserved </span>
</span><span id="81" class="l"><a class="l" href="#81"> 81: </a> <span class="php-comment">// appointment is considered to be a taken space in the plan.</span>
</span><span id="82" class="l"><a class="l" href="#82"> 82: </a> <span class="php-var">$sel_date_working_plan</span> = <span class="php-var">$working_plan</span>[<span class="php-keyword2">strtolower</span>(<span class="php-keyword2">date</span>(<span class="php-quote">'l'</span>,
</span><span id="83" class="l"><a class="l" href="#83"> 83: </a> <span class="php-keyword2">strtotime</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>])))];
</span><span id="84" class="l"><a class="l" href="#84"> 84: </a> <span class="php-var">$empty_spaces_with_breaks</span> = <span class="php-keyword1">array</span>();
</span><span id="85" class="l"><a class="l" href="#85"> 85: </a>
</span><span id="86" class="l"><a class="l" href="#86"> 86: </a> <span class="php-keyword1">if</span> (<span class="php-keyword1">isset</span>(<span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>])) {
</span><span id="87" class="l"><a class="l" href="#87"> 87: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>] <span class="php-keyword1">as</span> <span class="php-var">$index</span>=&gt;<span class="php-var">$break</span>) {
</span><span id="88" class="l"><a class="l" href="#88"> 88: </a> <span class="php-comment">// Split the working plan to available time periods that do not</span>
</span><span id="89" class="l"><a class="l" href="#89"> 89: </a> <span class="php-comment">// contain the breaks in them.</span>
</span><span id="90" class="l"><a class="l" href="#90"> 90: </a> <span class="php-var">$last_break_index</span> = <span class="php-var">$index</span> - <span class="php-num">1</span>;
</span></span><span id="5" class="l"><a class="l" href="#5"> 5: </a><span class="php-comment"> * Default callback method of the application.
</span></span><span id="6" class="l"><a class="l" href="#6"> 6: </a><span class="php-comment"> *
</span></span><span id="7" class="l"><a class="l" href="#7"> 7: </a><span class="php-comment"> * This method creates the appointment book wizard. If an appointment hash
</span></span><span id="8" class="l"><a class="l" href="#8"> 8: </a><span class="php-comment"> * is provided then it means that the customer followed the appointment
</span></span><span id="9" class="l"><a class="l" href="#9"> 9: </a><span class="php-comment"> * manage link that was send with the book success email.
</span></span><span id="10" class="l"><a class="l" href="#10"> 10: </a><span class="php-comment"> *
</span></span><span id="11" class="l"><a class="l" href="#11"> 11: </a><span class="php-comment"> * @param string $appointment_hash The db appointment hash of an existing
</span></span><span id="12" class="l"><a class="l" href="#12"> 12: </a><span class="php-comment"> * record.
</span></span><span id="13" class="l"><a class="l" href="#13"> 13: </a><span class="php-comment"> */</span>
</span><span id="14" class="l"><a class="l" href="#14"> 14: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_index" href="#_index">index</a>(<span class="php-var">$appointment_hash</span> = <span class="php-quote">''</span>) {
</span><span id="15" class="l"><a class="l" href="#15"> 15: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">strtoupper</span>(<span class="php-var">$_SERVER</span>[<span class="php-quote">'REQUEST_METHOD'</span>]) !== <span class="php-quote">'POST'</span>) {
</span><span id="16" class="l"><a class="l" href="#16"> 16: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Settings_Model'</span>);
</span><span id="17" class="l"><a class="l" href="#17"> 17: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Services_Model'</span>);
</span><span id="18" class="l"><a class="l" href="#18"> 18: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Providers_Model'</span>);
</span><span id="19" class="l"><a class="l" href="#19"> 19: </a>
</span><span id="20" class="l"><a class="l" href="#20"> 20: </a> <span class="php-var">$company_name</span> = <span class="php-var">$this</span>-&gt;Settings_Model-&gt;get_setting(<span class="php-quote">'company_name'</span>);
</span><span id="21" class="l"><a class="l" href="#21"> 21: </a> <span class="php-var">$available_services</span> = <span class="php-var">$this</span>-&gt;Services_Model-&gt;get_available_services();
</span><span id="22" class="l"><a class="l" href="#22"> 22: </a> <span class="php-var">$available_providers</span> = <span class="php-var">$this</span>-&gt;Providers_Model-&gt;get_available_providers();
</span><span id="23" class="l"><a class="l" href="#23"> 23: </a>
</span><span id="24" class="l"><a class="l" href="#24"> 24: </a> <span class="php-comment">// If an appointment hash is provided then it means that the customer </span>
</span><span id="25" class="l"><a class="l" href="#25"> 25: </a> <span class="php-comment">// is trying to edit a registered record.</span>
</span><span id="26" class="l"><a class="l" href="#26"> 26: </a> <span class="php-keyword1">if</span> (<span class="php-var">$appointment_hash</span> !== <span class="php-quote">''</span>){
</span><span id="27" class="l"><a class="l" href="#27"> 27: </a> <span class="php-comment">// Load the appointments data and set the manage mode of the page.</span>
</span><span id="28" class="l"><a class="l" href="#28"> 28: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Appointments_Model'</span>);
</span><span id="29" class="l"><a class="l" href="#29"> 29: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Customers_Model'</span>);
</span><span id="30" class="l"><a class="l" href="#30"> 30: </a>
</span><span id="31" class="l"><a class="l" href="#31"> 31: </a> <span class="php-var">$manage_mode</span> = <span class="php-keyword1">TRUE</span>;
</span><span id="32" class="l"><a class="l" href="#32"> 32: </a>
</span><span id="33" class="l"><a class="l" href="#33"> 33: </a> <span class="php-var">$appointment_data</span> = <span class="php-var">$this</span>-&gt;Appointments_Model
</span><span id="34" class="l"><a class="l" href="#34"> 34: </a> -&gt;get_batch(<span class="php-keyword1">array</span>(<span class="php-quote">'hash'</span> =&gt; <span class="php-var">$appointment_hash</span>))[<span class="php-num">0</span>];
</span><span id="35" class="l"><a class="l" href="#35"> 35: </a> <span class="php-var">$provider_data</span> = <span class="php-var">$this</span>-&gt;Providers_Model
</span><span id="36" class="l"><a class="l" href="#36"> 36: </a> -&gt;get_row(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>]);
</span><span id="37" class="l"><a class="l" href="#37"> 37: </a> <span class="php-var">$customer_data</span> = <span class="php-var">$this</span>-&gt;Customers_Model
</span><span id="38" class="l"><a class="l" href="#38"> 38: </a> -&gt;get_row(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>]);
</span><span id="39" class="l"><a class="l" href="#39"> 39: </a> } <span class="php-keyword1">else</span> {
</span><span id="40" class="l"><a class="l" href="#40"> 40: </a> <span class="php-comment">// The customer is going to book an appointment so there is no </span>
</span><span id="41" class="l"><a class="l" href="#41"> 41: </a> <span class="php-comment">// need for the manage functionality to be initialized.</span>
</span><span id="42" class="l"><a class="l" href="#42"> 42: </a> <span class="php-var">$manage_mode</span> = <span class="php-keyword1">FALSE</span>;
</span><span id="43" class="l"><a class="l" href="#43"> 43: </a> <span class="php-var">$appointment_data</span> = <span class="php-keyword1">array</span>();
</span><span id="44" class="l"><a class="l" href="#44"> 44: </a> <span class="php-var">$provider_data</span> = <span class="php-keyword1">array</span>();
</span><span id="45" class="l"><a class="l" href="#45"> 45: </a> <span class="php-var">$customer_data</span> = <span class="php-keyword1">array</span>();
</span><span id="46" class="l"><a class="l" href="#46"> 46: </a> }
</span><span id="47" class="l"><a class="l" href="#47"> 47: </a>
</span><span id="48" class="l"><a class="l" href="#48"> 48: </a> <span class="php-comment">// Load the book appointment view.</span>
</span><span id="49" class="l"><a class="l" href="#49"> 49: </a> <span class="php-var">$view_data</span> = <span class="php-keyword1">array</span> (
</span><span id="50" class="l"><a class="l" href="#50"> 50: </a> <span class="php-quote">'available_services'</span> =&gt; <span class="php-var">$available_services</span>,
</span><span id="51" class="l"><a class="l" href="#51"> 51: </a> <span class="php-quote">'available_providers'</span> =&gt; <span class="php-var">$available_providers</span>,
</span><span id="52" class="l"><a class="l" href="#52"> 52: </a> <span class="php-quote">'company_name'</span> =&gt; <span class="php-var">$company_name</span>,
</span><span id="53" class="l"><a class="l" href="#53"> 53: </a> <span class="php-quote">'manage_mode'</span> =&gt; <span class="php-var">$manage_mode</span>,
</span><span id="54" class="l"><a class="l" href="#54"> 54: </a> <span class="php-quote">'appointment_data'</span> =&gt; <span class="php-var">$appointment_data</span>,
</span><span id="55" class="l"><a class="l" href="#55"> 55: </a> <span class="php-quote">'provider_data'</span> =&gt; <span class="php-var">$provider_data</span>,
</span><span id="56" class="l"><a class="l" href="#56"> 56: </a> <span class="php-quote">'customer_data'</span> =&gt; <span class="php-var">$customer_data</span>
</span><span id="57" class="l"><a class="l" href="#57"> 57: </a> );
</span><span id="58" class="l"><a class="l" href="#58"> 58: </a> <span class="php-var">$this</span>-&gt;load-&gt;view(<span class="php-quote">'appointments/book'</span>, <span class="php-var">$view_data</span>);
</span><span id="59" class="l"><a class="l" href="#59"> 59: </a> } <span class="php-keyword1">else</span> {
</span><span id="60" class="l"><a class="l" href="#60"> 60: </a> <span class="php-comment">// The page is a post-back. Register the appointment and send</span>
</span><span id="61" class="l"><a class="l" href="#61"> 61: </a> <span class="php-comment">// notification emails to the provider and the customer that are</span>
</span><span id="62" class="l"><a class="l" href="#62"> 62: </a> <span class="php-comment">// related to the appointment.</span>
</span><span id="63" class="l"><a class="l" href="#63"> 63: </a> <span class="php-var">$post_data</span> = <span class="php-keyword2">json_decode</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'post_data'</span>], <span class="php-keyword1">true</span>);
</span><span id="64" class="l"><a class="l" href="#64"> 64: </a> <span class="php-var">$appointment_data</span> = <span class="php-var">$post_data</span>[<span class="php-quote">'appointment'</span>];
</span><span id="65" class="l"><a class="l" href="#65"> 65: </a> <span class="php-var">$customer_data</span> = <span class="php-var">$post_data</span>[<span class="php-quote">'customer'</span>];
</span><span id="66" class="l"><a class="l" href="#66"> 66: </a>
</span><span id="67" class="l"><a class="l" href="#67"> 67: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Customers_Model'</span>);
</span><span id="68" class="l"><a class="l" href="#68"> 68: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Appointments_Model'</span>);
</span><span id="69" class="l"><a class="l" href="#69"> 69: </a>
</span><span id="70" class="l"><a class="l" href="#70"> 70: </a> <span class="php-var">$customer_id</span> = <span class="php-var">$this</span>-&gt;Customers_Model-&gt;add(<span class="php-var">$customer_data</span>);
</span><span id="71" class="l"><a class="l" href="#71"> 71: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>] = <span class="php-var">$customer_id</span>;
</span><span id="72" class="l"><a class="l" href="#72"> 72: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;Appointments_Model-&gt;add(<span class="php-var">$appointment_data</span>);
</span><span id="73" class="l"><a class="l" href="#73"> 73: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'hash'</span>] = <span class="php-var">$this</span>-&gt;Appointments_Model
</span><span id="74" class="l"><a class="l" href="#74"> 74: </a> -&gt;get_value(<span class="php-quote">'hash'</span>, <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="75" class="l"><a class="l" href="#75"> 75: </a>
</span><span id="76" class="l"><a class="l" href="#76"> 76: </a> <span class="php-comment">// Send an email to the customer with the appointment info.</span>
</span><span id="77" class="l"><a class="l" href="#77"> 77: </a> <span class="php-var">$this</span>-&gt;load-&gt;library(<span class="php-quote">'Notifications'</span>);
</span><span id="78" class="l"><a class="l" href="#78"> 78: </a> <span class="php-keyword1">try</span> {
</span><span id="79" class="l"><a class="l" href="#79"> 79: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$post_data</span>[<span class="php-quote">'manage_mode'</span>]) {
</span><span id="80" class="l"><a class="l" href="#80"> 80: </a> <span class="php-var">$customer_title</span> = <span class="php-quote">'Your appointment has been successfully booked!'</span>;
</span><span id="81" class="l"><a class="l" href="#81"> 81: </a> <span class="php-var">$provider_title</span> = <span class="php-quote">'A new appointment has been added to your plan.'</span>;
</span><span id="82" class="l"><a class="l" href="#82"> 82: </a> } <span class="php-keyword1">else</span> {
</span><span id="83" class="l"><a class="l" href="#83"> 83: </a> <span class="php-var">$customer_title</span> = <span class="php-quote">'Appointment changes saved successfully!'</span>;
</span><span id="84" class="l"><a class="l" href="#84"> 84: </a> <span class="php-var">$provider_title</span> = <span class="php-quote">'Appointment details have changed.'</span>;
</span><span id="85" class="l"><a class="l" href="#85"> 85: </a> }
</span><span id="86" class="l"><a class="l" href="#86"> 86: </a>
</span><span id="87" class="l"><a class="l" href="#87"> 87: </a> <span class="php-var">$this</span>-&gt;notifications-&gt;send_book_success(
</span><span id="88" class="l"><a class="l" href="#88"> 88: </a> <span class="php-var">$customer_data</span>, <span class="php-var">$appointment_data</span>, <span class="php-var">$customer_title</span>);
</span><span id="89" class="l"><a class="l" href="#89"> 89: </a> <span class="php-var">$this</span>-&gt;notifications-&gt;send_new_appointment(
</span><span id="90" class="l"><a class="l" href="#90"> 90: </a> <span class="php-var">$customer_data</span>, <span class="php-var">$appointment_data</span>, <span class="php-var">$provider_title</span>);
</span><span id="91" class="l"><a class="l" href="#91"> 91: </a>
</span><span id="92" class="l"><a class="l" href="#92"> 92: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">count</span>(<span class="php-var">$empty_spaces_with_breaks</span>) === <span class="php-num">0</span>) {
</span><span id="93" class="l"><a class="l" href="#93"> 93: </a> <span class="php-var">$start_hour</span> = <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'start'</span>];
</span><span id="94" class="l"><a class="l" href="#94"> 94: </a> <span class="php-var">$end_hour</span> = <span class="php-var">$break</span>[<span class="php-quote">'start'</span>];
</span><span id="95" class="l"><a class="l" href="#95"> 95: </a> } <span class="php-keyword1">else</span> {
</span><span id="96" class="l"><a class="l" href="#96"> 96: </a> <span class="php-var">$start_hour</span> = <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>][<span class="php-var">$last_break_index</span>][<span class="php-quote">'end'</span>];
</span><span id="97" class="l"><a class="l" href="#97"> 97: </a> <span class="php-var">$end_hour</span> = <span class="php-var">$break</span>[<span class="php-quote">'start'</span>];
</span><span id="98" class="l"><a class="l" href="#98"> 98: </a> }
</span><span id="99" class="l"><a class="l" href="#99"> 99: </a>
</span><span id="100" class="l"><a class="l" href="#100">100: </a> <span class="php-var">$empty_spaces_with_breaks</span>[] = <span class="php-keyword1">array</span>(
</span><span id="101" class="l"><a class="l" href="#101">101: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$start_hour</span>,
</span><span id="102" class="l"><a class="l" href="#102">102: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$end_hour</span>
</span><span id="103" class="l"><a class="l" href="#103">103: </a> );
</span><span id="104" class="l"><a class="l" href="#104">104: </a> }
</span><span id="105" class="l"><a class="l" href="#105">105: </a>
</span><span id="106" class="l"><a class="l" href="#106">106: </a> <span class="php-comment">// Add the space from the last break to the end of the day.</span>
</span><span id="107" class="l"><a class="l" href="#107">107: </a> <span class="php-var">$empty_spaces_with_breaks</span>[] = <span class="php-keyword1">array</span>(
</span><span id="108" class="l"><a class="l" href="#108">108: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>][<span class="php-var">$index</span>][<span class="php-quote">'end'</span>],
</span><span id="109" class="l"><a class="l" href="#109">109: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'end'</span>]
</span><span id="110" class="l"><a class="l" href="#110">110: </a> );
</span><span id="111" class="l"><a class="l" href="#111">111: </a> }
</span><span id="112" class="l"><a class="l" href="#112">112: </a>
</span><span id="113" class="l"><a class="l" href="#113">113: </a> <span class="php-comment">// Break the empty spaces with the reserved appointments.</span>
</span><span id="114" class="l"><a class="l" href="#114">114: </a> <span class="php-var">$empty_spaces_with_appointments</span> = <span class="php-keyword1">array</span>();
</span><span id="115" class="l"><a class="l" href="#115">115: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">count</span>(<span class="php-var">$reserved_appointments</span>) &gt; <span class="php-num">0</span>) {
</span><span id="116" class="l"><a class="l" href="#116">116: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$empty_spaces_with_breaks</span> <span class="php-keyword1">as</span> <span class="php-var">$space</span>) {
</span><span id="117" class="l"><a class="l" href="#117">117: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$reserved_appointments</span> <span class="php-keyword1">as</span> <span class="php-var">$index</span>=&gt;<span class="php-var">$appointment</span>) {
</span><span id="118" class="l"><a class="l" href="#118">118: </a> <span class="php-var">$appointment_start</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$appointment</span>[<span class="php-quote">'start_datetime'</span>]));
</span><span id="119" class="l"><a class="l" href="#119">119: </a> <span class="php-var">$appointment_end</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$appointment</span>[<span class="php-quote">'end_datetime'</span>]));
</span><span id="120" class="l"><a class="l" href="#120">120: </a> <span class="php-var">$space_start</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$space</span>[<span class="php-quote">'start'</span>]));
</span><span id="121" class="l"><a class="l" href="#121">121: </a> <span class="php-var">$space_end</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$space</span>[<span class="php-quote">'end'</span>]));
</span><span id="122" class="l"><a class="l" href="#122">122: </a>
</span><span id="123" class="l"><a class="l" href="#123">123: </a> <span class="php-keyword1">if</span> (<span class="php-var">$space_start</span> &lt; <span class="php-var">$appointment_start</span> &amp;&amp; <span class="php-var">$space_end</span> &gt; <span class="php-var">$appointment_end</span>) {
</span><span id="124" class="l"><a class="l" href="#124">124: </a> <span class="php-comment">// Current appointment is within the current empty space. So </span>
</span><span id="125" class="l"><a class="l" href="#125">125: </a> <span class="php-comment">// we need to break the empty space into two other spaces that </span>
</span><span id="126" class="l"><a class="l" href="#126">126: </a> <span class="php-comment">// don't include the appointment.</span>
</span><span id="127" class="l"><a class="l" href="#127">127: </a> <span class="php-var">$empty_spaces_with_appointments</span>[] = <span class="php-keyword1">array</span>(
</span><span id="128" class="l"><a class="l" href="#128">128: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$space_start</span>,
</span><span id="129" class="l"><a class="l" href="#129">129: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$appointment_start</span>
</span><span id="130" class="l"><a class="l" href="#130">130: </a> );
</span><span id="131" class="l"><a class="l" href="#131">131: </a> <span class="php-var">$empty_spaces_with_appointments</span>[] = <span class="php-keyword1">array</span>(
</span><span id="132" class="l"><a class="l" href="#132">132: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$appointment_end</span>,
</span><span id="133" class="l"><a class="l" href="#133">133: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$space_end</span>
</span><span id="134" class="l"><a class="l" href="#134">134: </a> );
</span><span id="135" class="l"><a class="l" href="#135">135: </a> } <span class="php-keyword1">else</span> {
</span><span id="136" class="l"><a class="l" href="#136">136: </a> <span class="php-var">$empty_spaces_with_appointments</span>[] = <span class="php-keyword1">array</span>(
</span><span id="137" class="l"><a class="l" href="#137">137: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$space_start</span>,
</span><span id="138" class="l"><a class="l" href="#138">138: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$space_end</span>
</span><span id="139" class="l"><a class="l" href="#139">139: </a> );
</span><span id="140" class="l"><a class="l" href="#140">140: </a> }
</span><span id="141" class="l"><a class="l" href="#141">141: </a> }
</span><span id="142" class="l"><a class="l" href="#142">142: </a> }
</span><span id="143" class="l"><a class="l" href="#143">143: </a> } <span class="php-keyword1">else</span> {
</span><span id="144" class="l"><a class="l" href="#144">144: </a> <span class="php-var">$empty_spaces_with_appointments</span> = <span class="php-var">$empty_spaces_with_breaks</span>;
</span><span id="145" class="l"><a class="l" href="#145">145: </a> }
</span><span id="146" class="l"><a class="l" href="#146">146: </a>
</span><span id="147" class="l"><a class="l" href="#147">147: </a> <span class="php-var">$empty_spaces</span> = <span class="php-var">$empty_spaces_with_appointments</span>;
</span><span id="148" class="l"><a class="l" href="#148">148: </a>
</span><span id="149" class="l"><a class="l" href="#149">149: </a> <span class="php-comment">// Calculate the available appointment hours for the given date. </span>
</span><span id="150" class="l"><a class="l" href="#150">150: </a> <span class="php-comment">// The empty spaces are broken down to 15 min and if the service</span>
</span><span id="151" class="l"><a class="l" href="#151">151: </a> <span class="php-comment">// fit in each quarter then a new available hour is added to the</span>
</span><span id="152" class="l"><a class="l" href="#152">152: </a> <span class="php-comment">// $available hours array.</span>
</span><span id="153" class="l"><a class="l" href="#153">153: </a> <span class="php-var">$available_hours</span> = <span class="php-keyword1">array</span>();
</span><span id="154" class="l"><a class="l" href="#154">154: </a>
</span><span id="155" class="l"><a class="l" href="#155">155: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$empty_spaces</span> <span class="php-keyword1">as</span> <span class="php-var">$space</span>) {
</span><span id="156" class="l"><a class="l" href="#156">156: </a> <span class="php-var">$start_hour</span> = <span class="php-keyword1">new</span> DateTime(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>] . <span class="php-quote">' '</span> . <span class="php-var">$space</span>[<span class="php-quote">'start'</span>]);
</span><span id="157" class="l"><a class="l" href="#157">157: </a> <span class="php-var">$end_hour</span> = <span class="php-keyword1">new</span> DateTime(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>] . <span class="php-quote">' '</span> . <span class="php-var">$space</span>[<span class="php-quote">'end'</span>]);
</span><span id="158" class="l"><a class="l" href="#158">158: </a> <span class="php-var">$curr_hour</span> = <span class="php-var">$start_hour</span>;
</span><span id="159" class="l"><a class="l" href="#159">159: </a>
</span><span id="160" class="l"><a class="l" href="#160">160: </a> <span class="php-var">$diff</span> = <span class="php-var">$curr_hour</span>-&gt;diff(<span class="php-var">$end_hour</span>);
</span><span id="161" class="l"><a class="l" href="#161">161: </a> <span class="php-keyword1">while</span>((<span class="php-var">$diff</span>-&gt;h * <span class="php-num">60</span> + <span class="php-var">$diff</span>-&gt;i) &gt; <span class="php-keyword2">intval</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'service_duration'</span>])) {
</span><span id="162" class="l"><a class="l" href="#162">162: </a> <span class="php-var">$available_hours</span>[] = <span class="php-var">$curr_hour</span>-&gt;format(<span class="php-quote">'H:i'</span>);
</span><span id="163" class="l"><a class="l" href="#163">163: </a> <span class="php-var">$curr_hour</span>-&gt;add(<span class="php-keyword1">new</span> DateInterval(<span class="php-quote">&quot;PT15M&quot;</span>));
</span><span id="164" class="l"><a class="l" href="#164">164: </a> <span class="php-var">$diff</span> = <span class="php-var">$curr_hour</span>-&gt;diff(<span class="php-var">$end_hour</span>);
</span><span id="165" class="l"><a class="l" href="#165">165: </a> }
</span><span id="166" class="l"><a class="l" href="#166">166: </a> }
</span><span id="167" class="l"><a class="l" href="#167">167: </a>
</span><span id="168" class="l"><a class="l" href="#168">168: </a> <span class="php-comment">// If the selected date is today, remove past hours. It is important </span>
</span><span id="169" class="l"><a class="l" href="#169">169: </a> <span class="php-comment">// include the timeout before booking that is set in the backoffice</span>
</span><span id="170" class="l"><a class="l" href="#170">170: </a> <span class="php-comment">// the system. Normally we might want the customer to book an appointment</span>
</span><span id="171" class="l"><a class="l" href="#171">171: </a> <span class="php-comment">// that is at least half or one hour from now. The setting is stored in </span>
</span><span id="172" class="l"><a class="l" href="#172">172: </a> <span class="php-comment">// minutes.</span>
</span><span id="173" class="l"><a class="l" href="#173">173: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">date</span>(<span class="php-quote">'m/d/Y'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>])) == <span class="php-keyword2">date</span>(<span class="php-quote">'m/d/Y'</span>)) {
</span><span id="174" class="l"><a class="l" href="#174">174: </a> <span class="php-var">$book_advance_timeout</span> = <span class="php-var">$this</span>-&gt;Settings_Model-&gt;get_setting(<span class="php-quote">'book_advance_timeout'</span>);
</span><span id="175" class="l"><a class="l" href="#175">175: </a>
</span><span id="176" class="l"><a class="l" href="#176">176: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$available_hours</span> <span class="php-keyword1">as</span> <span class="php-var">$index</span>=&gt;<span class="php-var">$value</span>) {
</span><span id="177" class="l"><a class="l" href="#177">177: </a> <span class="php-var">$available_hour</span> = <span class="php-keyword2">strtotime</span>(<span class="php-var">$value</span>);
</span><span id="178" class="l"><a class="l" href="#178">178: </a> <span class="php-var">$current_hour</span> = <span class="php-keyword2">strtotime</span>(<span class="php-quote">'+'</span> . <span class="php-var">$book_advance_timeout</span>
</span><span id="179" class="l"><a class="l" href="#179">179: </a> . <span class="php-quote">' minutes'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-quote">'now'</span>));
</span><span id="92" class="l"><a class="l" href="#92"> 92: </a> } <span class="php-keyword1">catch</span> (NotificationException <span class="php-var">$not_exc</span>) {
</span><span id="93" class="l"><a class="l" href="#93"> 93: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'notification_error'</span>] = <span class="php-quote">'&lt;br&gt;&lt;br&gt;'</span>
</span><span id="94" class="l"><a class="l" href="#94"> 94: </a> . <span class="php-quote">'&lt;pre&gt;An unexpected error occured while sending you an '</span>
</span><span id="95" class="l"><a class="l" href="#95"> 95: </a> . <span class="php-quote">'email. Please backup the appointment details so that '</span>
</span><span id="96" class="l"><a class="l" href="#96"> 96: </a> . <span class="php-quote">'you can restore them later. &lt;br&gt;&lt;br&gt;Error: &lt;br&gt;'</span>
</span><span id="97" class="l"><a class="l" href="#97"> 97: </a> . <span class="php-var">$not_exc</span>-&gt;getMessage() . <span class="php-quote">'&lt;/pre&gt;'</span>;
</span><span id="98" class="l"><a class="l" href="#98"> 98: </a> }
</span><span id="99" class="l"><a class="l" href="#99"> 99: </a>
</span><span id="100" class="l"><a class="l" href="#100">100: </a> <span class="php-comment">// Load the book appointment view.</span>
</span><span id="101" class="l"><a class="l" href="#101">101: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'appointment_id'</span>] = <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>];
</span><span id="102" class="l"><a class="l" href="#102">102: </a> <span class="php-var">$this</span>-&gt;load-&gt;view(<span class="php-quote">'appointments/book_success'</span>, <span class="php-var">$view_data</span>);
</span><span id="103" class="l"><a class="l" href="#103">103: </a> }
</span><span id="104" class="l"><a class="l" href="#104">104: </a> }
</span><span id="105" class="l"><a class="l" href="#105">105: </a>
</span><span id="106" class="l"><a class="l" href="#106">106: </a> <span class="php-comment">/**
</span></span><span id="107" class="l"><a class="l" href="#107">107: </a><span class="php-comment"> * Cancel an existing appointment.
</span></span><span id="108" class="l"><a class="l" href="#108">108: </a><span class="php-comment"> *
</span></span><span id="109" class="l"><a class="l" href="#109">109: </a><span class="php-comment"> * This method removes an appointment from the company's schedule.
</span></span><span id="110" class="l"><a class="l" href="#110">110: </a><span class="php-comment"> * In order for the appointment to be deleted, the hash string must
</span></span><span id="111" class="l"><a class="l" href="#111">111: </a><span class="php-comment"> * be provided. The customer can only cancel the appointment if the
</span></span><span id="112" class="l"><a class="l" href="#112">112: </a><span class="php-comment"> * edit time period is not over yet.
</span></span><span id="113" class="l"><a class="l" href="#113">113: </a><span class="php-comment"> *
</span></span><span id="114" class="l"><a class="l" href="#114">114: </a><span class="php-comment"> * @param string $appointment_hash This is used to distinguish the
</span></span><span id="115" class="l"><a class="l" href="#115">115: </a><span class="php-comment"> * appointment record.
</span></span><span id="116" class="l"><a class="l" href="#116">116: </a><span class="php-comment"> */</span>
</span><span id="117" class="l"><a class="l" href="#117">117: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_cancel" href="#_cancel">cancel</a>(<span class="php-var">$appointment_hash</span>) {
</span><span id="118" class="l"><a class="l" href="#118">118: </a> <span class="php-keyword1">try</span> {
</span><span id="119" class="l"><a class="l" href="#119">119: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Appointments_Model'</span>);
</span><span id="120" class="l"><a class="l" href="#120">120: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Providers_Model'</span>);
</span><span id="121" class="l"><a class="l" href="#121">121: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Customers_Model'</span>);
</span><span id="122" class="l"><a class="l" href="#122">122: </a>
</span><span id="123" class="l"><a class="l" href="#123">123: </a> <span class="php-comment">// Check whether the appointment hash exists in the database.</span>
</span><span id="124" class="l"><a class="l" href="#124">124: </a> <span class="php-var">$records</span> = <span class="php-var">$this</span>-&gt;Appointments_Model-&gt;get_batch(<span class="php-keyword1">array</span>(<span class="php-quote">'hash'</span> =&gt; <span class="php-var">$appointment_hash</span>));
</span><span id="125" class="l"><a class="l" href="#125">125: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">count</span>(<span class="php-var">$records</span>) == <span class="php-num">0</span>) {
</span><span id="126" class="l"><a class="l" href="#126">126: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'No record matches the provided hash.'</span>);
</span><span id="127" class="l"><a class="l" href="#127">127: </a> }
</span><span id="128" class="l"><a class="l" href="#128">128: </a>
</span><span id="129" class="l"><a class="l" href="#129">129: </a> <span class="php-var">$appointment_data</span> = <span class="php-var">$records</span>[<span class="php-num">0</span>];
</span><span id="130" class="l"><a class="l" href="#130">130: </a>
</span><span id="131" class="l"><a class="l" href="#131">131: </a> <span class="php-comment">// Delete the appointment from the database.</span>
</span><span id="132" class="l"><a class="l" href="#132">132: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;Appointments_Model-&gt;<span class="php-keyword2">delete</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>])) {
</span><span id="133" class="l"><a class="l" href="#133">133: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment could not be deleted from the database.'</span>);
</span><span id="134" class="l"><a class="l" href="#134">134: </a> }
</span><span id="135" class="l"><a class="l" href="#135">135: </a>
</span><span id="136" class="l"><a class="l" href="#136">136: </a> <span class="php-comment">// Send notification emails to the customer and provider.</span>
</span><span id="137" class="l"><a class="l" href="#137">137: </a> <span class="php-var">$provider_email</span> = <span class="php-var">$this</span>-&gt;Providers_Model-&gt;get_value(<span class="php-quote">'email'</span>,
</span><span id="138" class="l"><a class="l" href="#138">138: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>]);
</span><span id="139" class="l"><a class="l" href="#139">139: </a> <span class="php-var">$customer_email</span> = <span class="php-var">$this</span>-&gt;Customers_Model-&gt;get_value(<span class="php-quote">'email'</span>,
</span><span id="140" class="l"><a class="l" href="#140">140: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>]);
</span><span id="141" class="l"><a class="l" href="#141">141: </a>
</span><span id="142" class="l"><a class="l" href="#142">142: </a> <span class="php-var">$this</span>-&gt;load-&gt;library(<span class="php-quote">'Notifications'</span>);
</span><span id="143" class="l"><a class="l" href="#143">143: </a> <span class="php-var">$this</span>-&gt;notifications-&gt;send_cancel_appointment(<span class="php-var">$appointment_data</span>, <span class="php-var">$provider_email</span>);
</span><span id="144" class="l"><a class="l" href="#144">144: </a> <span class="php-var">$this</span>-&gt;notifications-&gt;send_cancel_appointment(<span class="php-var">$appointment_data</span>, <span class="php-var">$customer_email</span>);
</span><span id="145" class="l"><a class="l" href="#145">145: </a>
</span><span id="146" class="l"><a class="l" href="#146">146: </a> } <span class="php-keyword1">catch</span>(Exception <span class="php-var">$exc</span>) {
</span><span id="147" class="l"><a class="l" href="#147">147: </a> <span class="php-comment">// Display the error message to the customer.</span>
</span><span id="148" class="l"><a class="l" href="#148">148: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'error_message'</span>] = <span class="php-var">$exc</span>-&gt;getMessage();
</span><span id="149" class="l"><a class="l" href="#149">149: </a> }
</span><span id="150" class="l"><a class="l" href="#150">150: </a>
</span><span id="151" class="l"><a class="l" href="#151">151: </a> <span class="php-var">$this</span>-&gt;load-&gt;view(<span class="php-quote">'appointments/cancel'</span>);
</span><span id="152" class="l"><a class="l" href="#152">152: </a> }
</span><span id="153" class="l"><a class="l" href="#153">153: </a>
</span><span id="154" class="l"><a class="l" href="#154">154: </a> <span class="php-comment">/**
</span></span><span id="155" class="l"><a class="l" href="#155">155: </a><span class="php-comment"> * [AJAX] Get the available appointment hours for the given date.
</span></span><span id="156" class="l"><a class="l" href="#156">156: </a><span class="php-comment"> *
</span></span><span id="157" class="l"><a class="l" href="#157">157: </a><span class="php-comment"> * This method answers to an AJAX request. It calculates the
</span></span><span id="158" class="l"><a class="l" href="#158">158: </a><span class="php-comment"> * available hours for the given service, provider and date.
</span></span><span id="159" class="l"><a class="l" href="#159">159: </a><span class="php-comment"> *
</span></span><span id="160" class="l"><a class="l" href="#160">160: </a><span class="php-comment"> * @param array $_POST['post_data'] An associative array that
</span></span><span id="161" class="l"><a class="l" href="#161">161: </a><span class="php-comment"> * contains the user selected 'service_id', 'provider_id',
</span></span><span id="162" class="l"><a class="l" href="#162">162: </a><span class="php-comment"> * 'selected_date' and 'service_duration' in minutes.
</span></span><span id="163" class="l"><a class="l" href="#163">163: </a><span class="php-comment"> * @return Returns a json object with the available hours.
</span></span><span id="164" class="l"><a class="l" href="#164">164: </a><span class="php-comment"> */</span>
</span><span id="165" class="l"><a class="l" href="#165">165: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_ajax_get_available_hours" href="#_ajax_get_available_hours">ajax_get_available_hours</a>() {
</span><span id="166" class="l"><a class="l" href="#166">166: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Providers_Model'</span>);
</span><span id="167" class="l"><a class="l" href="#167">167: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Appointments_Model'</span>);
</span><span id="168" class="l"><a class="l" href="#168">168: </a> <span class="php-var">$this</span>-&gt;load-&gt;model(<span class="php-quote">'Settings_Model'</span>);
</span><span id="169" class="l"><a class="l" href="#169">169: </a>
</span><span id="170" class="l"><a class="l" href="#170">170: </a> <span class="php-comment">// Get the provider's working plan and reserved appointments. </span>
</span><span id="171" class="l"><a class="l" href="#171">171: </a> <span class="php-var">$working_plan</span> = <span class="php-keyword2">json_decode</span>(<span class="php-var">$this</span>-&gt;Providers_Model
</span><span id="172" class="l"><a class="l" href="#172">172: </a> -&gt;get_setting(<span class="php-quote">'working_plan'</span>, <span class="php-var">$_POST</span>[<span class="php-quote">'provider_id'</span>]), <span class="php-keyword1">true</span>);
</span><span id="173" class="l"><a class="l" href="#173">173: </a>
</span><span id="174" class="l"><a class="l" href="#174">174: </a> <span class="php-var">$where_clause</span> = <span class="php-keyword1">array</span>(
</span><span id="175" class="l"><a class="l" href="#175">175: </a> <span class="php-quote">'DATE(start_datetime)'</span> =&gt; <span class="php-keyword2">date</span>(<span class="php-quote">'Y-m-d'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>])),
</span><span id="176" class="l"><a class="l" href="#176">176: </a> <span class="php-quote">'id_users_provider'</span> =&gt; <span class="php-var">$_POST</span>[<span class="php-quote">'provider_id'</span>]
</span><span id="177" class="l"><a class="l" href="#177">177: </a> );
</span><span id="178" class="l"><a class="l" href="#178">178: </a>
</span><span id="179" class="l"><a class="l" href="#179">179: </a> <span class="php-var">$reserved_appointments</span> = <span class="php-var">$this</span>-&gt;Appointments_Model-&gt;get_batch(<span class="php-var">$where_clause</span>);
</span><span id="180" class="l"><a class="l" href="#180">180: </a>
</span><span id="181" class="l"><a class="l" href="#181">181: </a> <span class="php-keyword1">if</span> (<span class="php-var">$available_hour</span> &lt;= <span class="php-var">$current_hour</span>) {
</span><span id="182" class="l"><a class="l" href="#182">182: </a> <span class="php-keyword1">unset</span>(<span class="php-var">$available_hours</span>[<span class="php-var">$index</span>]);
</span><span id="183" class="l"><a class="l" href="#183">183: </a> }
</span><span id="184" class="l"><a class="l" href="#184">184: </a> }
</span><span id="185" class="l"><a class="l" href="#185">185: </a> }
</span><span id="186" class="l"><a class="l" href="#186">186: </a>
</span><span id="187" class="l"><a class="l" href="#187">187: </a> <span class="php-var">$available_hours</span> = <span class="php-keyword2">array_values</span>(<span class="php-var">$available_hours</span>);
</span><span id="188" class="l"><a class="l" href="#188">188: </a>
</span><span id="189" class="l"><a class="l" href="#189">189: </a> <span class="php-keyword1">echo</span> <span class="php-keyword2">json_encode</span>(<span class="php-var">$available_hours</span>);
</span><span id="190" class="l"><a class="l" href="#190">190: </a> }
</span><span id="191" class="l"><a class="l" href="#191">191: </a>
</span><span id="192" class="l"><a class="l" href="#192">192: </a> <span class="php-comment">/**
</span></span><span id="193" class="l"><a class="l" href="#193">193: </a><span class="php-comment"> * Synchronize appointment with its' providers google calendar.
</span></span><span id="194" class="l"><a class="l" href="#194">194: </a><span class="php-comment"> *
</span></span><span id="195" class="l"><a class="l" href="#195">195: </a><span class="php-comment"> * This method syncs the registered appointment with the
</span></span><span id="196" class="l"><a class="l" href="#196">196: </a><span class="php-comment"> * google calendar of the user.
</span></span><span id="197" class="l"><a class="l" href="#197">197: </a><span class="php-comment"> *
</span></span><span id="198" class="l"><a class="l" href="#198">198: </a><span class="php-comment"> * @task This method needs to be changed. Everytime a customer
</span></span><span id="199" class="l"><a class="l" href="#199">199: </a><span class="php-comment"> * books a new appointment the synchronization process must be
</span></span><span id="200" class="l"><a class="l" href="#200">200: </a><span class="php-comment"> * executed.
</span></span><span id="201" class="l"><a class="l" href="#201">201: </a><span class="php-comment"> */</span>
</span><span id="202" class="l"><a class="l" href="#202">202: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_google_sync" href="#_google_sync">google_sync</a>(<span class="php-var">$appointment_id</span>) {
</span><span id="203" class="l"><a class="l" href="#203">203: </a> <span class="php-keyword1">try</span> {
</span><span id="204" class="l"><a class="l" href="#204">204: </a> <span class="php-var">$this</span>-&gt;load-&gt;library(<span class="php-quote">'Google_Sync'</span>);
</span><span id="205" class="l"><a class="l" href="#205">205: </a> <span class="php-var">$this</span>-&gt;google_sync-&gt;sync_appointment(<span class="php-var">$appointment_id</span>);
</span><span id="206" class="l"><a class="l" href="#206">206: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'message'</span>] = <span class="php-quote">'Your appointment has been successfully added to Google Calendar!'</span>;
</span><span id="207" class="l"><a class="l" href="#207">207: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'image'</span>] = <span class="php-quote">'success.png'</span>;
</span><span id="208" class="l"><a class="l" href="#208">208: </a> } <span class="php-keyword1">catch</span> (Exception <span class="php-var">$exc</span>) {
</span><span id="209" class="l"><a class="l" href="#209">209: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'message'</span>] = <span class="php-quote">'An unexpected error occured during the sync '</span>
</span><span id="210" class="l"><a class="l" href="#210">210: </a> . <span class="php-quote">'operation: &lt;br/&gt;&lt;pre&gt;'</span> . <span class="php-var">$exc</span>-&gt;getMessage() . <span class="php-quote">'&lt;br/&gt;'</span>
</span><span id="211" class="l"><a class="l" href="#211">211: </a> . <span class="php-var">$exc</span>-&gt;getTraceAsString() . <span class="php-quote">'&lt;/pre&gt;'</span>;
</span><span id="212" class="l"><a class="l" href="#212">212: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'image'</span>] = <span class="php-quote">'error.png'</span>;
</span><span id="213" class="l"><a class="l" href="#213">213: </a> }
</span><span id="214" class="l"><a class="l" href="#214">214: </a>
</span><span id="215" class="l"><a class="l" href="#215">215: </a> <span class="php-var">$this</span>-&gt;load-&gt;view(<span class="php-quote">'appointments/google_sync'</span>, <span class="php-var">$view_data</span>);
</span><span id="216" class="l"><a class="l" href="#216">216: </a> }
</span><span id="217" class="l"><a class="l" href="#217">217: </a>}
</span><span id="218" class="l"><a class="l" href="#218">218: </a>
</span><span id="219" class="l"><a class="l" href="#219">219: </a><span class="php-comment">/* End of file appointments.php */</span>
</span><span id="220" class="l"><a class="l" href="#220">220: </a></span><span class="php-comment">/* Location: ./application/controllers/appointments.php */</span></code></pre>
</span><span id="181" class="l"><a class="l" href="#181">181: </a> <span class="php-keyword1">if</span> (<span class="php-var">$_POST</span>[<span class="php-quote">'manage_mode'</span>] === <span class="php-quote">'true'</span>) {
</span><span id="182" class="l"><a class="l" href="#182">182: </a> <span class="php-comment">// Current record id shouldn't be included as reserved time,</span>
</span><span id="183" class="l"><a class="l" href="#183">183: </a> <span class="php-comment">// whent the manage mode is true.</span>
</span><span id="184" class="l"><a class="l" href="#184">184: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$reserved_appointments</span> <span class="php-keyword1">as</span> <span class="php-var">$index</span>=&gt;<span class="php-var">$appointment</span>) {
</span><span id="185" class="l"><a class="l" href="#185">185: </a> <span class="php-keyword1">if</span> (<span class="php-var">$appointment</span>[<span class="php-quote">'id'</span>] == <span class="php-var">$_POST</span>[<span class="php-quote">'appointment_id'</span>]) {
</span><span id="186" class="l"><a class="l" href="#186">186: </a> <span class="php-keyword1">unset</span>(<span class="php-var">$reserved_appointments</span>[<span class="php-var">$index</span>]);
</span><span id="187" class="l"><a class="l" href="#187">187: </a> }
</span><span id="188" class="l"><a class="l" href="#188">188: </a> }
</span><span id="189" class="l"><a class="l" href="#189">189: </a> }
</span><span id="190" class="l"><a class="l" href="#190">190: </a>
</span><span id="191" class="l"><a class="l" href="#191">191: </a> <span class="php-comment">// Find the empty spaces on the plan. The first split between </span>
</span><span id="192" class="l"><a class="l" href="#192">192: </a> <span class="php-comment">// the plan is due to a break (if exist). After that every reserved </span>
</span><span id="193" class="l"><a class="l" href="#193">193: </a> <span class="php-comment">// appointment is considered to be a taken space in the plan.</span>
</span><span id="194" class="l"><a class="l" href="#194">194: </a> <span class="php-var">$sel_date_working_plan</span> = <span class="php-var">$working_plan</span>[<span class="php-keyword2">strtolower</span>(<span class="php-keyword2">date</span>(<span class="php-quote">'l'</span>,
</span><span id="195" class="l"><a class="l" href="#195">195: </a> <span class="php-keyword2">strtotime</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>])))];
</span><span id="196" class="l"><a class="l" href="#196">196: </a> <span class="php-var">$empty_spaces_with_breaks</span> = <span class="php-keyword1">array</span>();
</span><span id="197" class="l"><a class="l" href="#197">197: </a>
</span><span id="198" class="l"><a class="l" href="#198">198: </a> <span class="php-keyword1">if</span> (<span class="php-keyword1">isset</span>(<span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>])) {
</span><span id="199" class="l"><a class="l" href="#199">199: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>] <span class="php-keyword1">as</span> <span class="php-var">$index</span>=&gt;<span class="php-var">$break</span>) {
</span><span id="200" class="l"><a class="l" href="#200">200: </a> <span class="php-comment">// Split the working plan to available time periods that do not</span>
</span><span id="201" class="l"><a class="l" href="#201">201: </a> <span class="php-comment">// contain the breaks in them.</span>
</span><span id="202" class="l"><a class="l" href="#202">202: </a> <span class="php-var">$last_break_index</span> = <span class="php-var">$index</span> - <span class="php-num">1</span>;
</span><span id="203" class="l"><a class="l" href="#203">203: </a>
</span><span id="204" class="l"><a class="l" href="#204">204: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">count</span>(<span class="php-var">$empty_spaces_with_breaks</span>) === <span class="php-num">0</span>) {
</span><span id="205" class="l"><a class="l" href="#205">205: </a> <span class="php-var">$start_hour</span> = <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'start'</span>];
</span><span id="206" class="l"><a class="l" href="#206">206: </a> <span class="php-var">$end_hour</span> = <span class="php-var">$break</span>[<span class="php-quote">'start'</span>];
</span><span id="207" class="l"><a class="l" href="#207">207: </a> } <span class="php-keyword1">else</span> {
</span><span id="208" class="l"><a class="l" href="#208">208: </a> <span class="php-var">$start_hour</span> = <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>][<span class="php-var">$last_break_index</span>][<span class="php-quote">'end'</span>];
</span><span id="209" class="l"><a class="l" href="#209">209: </a> <span class="php-var">$end_hour</span> = <span class="php-var">$break</span>[<span class="php-quote">'start'</span>];
</span><span id="210" class="l"><a class="l" href="#210">210: </a> }
</span><span id="211" class="l"><a class="l" href="#211">211: </a>
</span><span id="212" class="l"><a class="l" href="#212">212: </a> <span class="php-var">$empty_spaces_with_breaks</span>[] = <span class="php-keyword1">array</span>(
</span><span id="213" class="l"><a class="l" href="#213">213: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$start_hour</span>,
</span><span id="214" class="l"><a class="l" href="#214">214: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$end_hour</span>
</span><span id="215" class="l"><a class="l" href="#215">215: </a> );
</span><span id="216" class="l"><a class="l" href="#216">216: </a> }
</span><span id="217" class="l"><a class="l" href="#217">217: </a>
</span><span id="218" class="l"><a class="l" href="#218">218: </a> <span class="php-comment">// Add the space from the last break to the end of the day.</span>
</span><span id="219" class="l"><a class="l" href="#219">219: </a> <span class="php-var">$empty_spaces_with_breaks</span>[] = <span class="php-keyword1">array</span>(
</span><span id="220" class="l"><a class="l" href="#220">220: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'breaks'</span>][<span class="php-var">$index</span>][<span class="php-quote">'end'</span>],
</span><span id="221" class="l"><a class="l" href="#221">221: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$sel_date_working_plan</span>[<span class="php-quote">'end'</span>]
</span><span id="222" class="l"><a class="l" href="#222">222: </a> );
</span><span id="223" class="l"><a class="l" href="#223">223: </a> }
</span><span id="224" class="l"><a class="l" href="#224">224: </a> <span class="php-comment">// PROBLEM</span>
</span><span id="225" class="l"><a class="l" href="#225">225: </a> <span class="php-comment">// Break the empty spaces with the reserved appointments.</span>
</span><span id="226" class="l"><a class="l" href="#226">226: </a> <span class="php-var">$empty_spaces_with_appointments</span> = <span class="php-keyword1">array</span>();
</span><span id="227" class="l"><a class="l" href="#227">227: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">count</span>(<span class="php-var">$reserved_appointments</span>) &gt; <span class="php-num">0</span>) {
</span><span id="228" class="l"><a class="l" href="#228">228: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$empty_spaces_with_breaks</span> <span class="php-keyword1">as</span> <span class="php-var">$space</span>) {
</span><span id="229" class="l"><a class="l" href="#229">229: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$reserved_appointments</span> <span class="php-keyword1">as</span> <span class="php-var">$index</span>=&gt;<span class="php-var">$appointment</span>) {
</span><span id="230" class="l"><a class="l" href="#230">230: </a> <span class="php-var">$appointment_start</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$appointment</span>[<span class="php-quote">'start_datetime'</span>]));
</span><span id="231" class="l"><a class="l" href="#231">231: </a> <span class="php-var">$appointment_end</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$appointment</span>[<span class="php-quote">'end_datetime'</span>]));
</span><span id="232" class="l"><a class="l" href="#232">232: </a> <span class="php-var">$space_start</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$space</span>[<span class="php-quote">'start'</span>]));
</span><span id="233" class="l"><a class="l" href="#233">233: </a> <span class="php-var">$space_end</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$space</span>[<span class="php-quote">'end'</span>]));
</span><span id="234" class="l"><a class="l" href="#234">234: </a>
</span><span id="235" class="l"><a class="l" href="#235">235: </a> <span class="php-keyword1">if</span> (<span class="php-var">$space_start</span> &lt; <span class="php-var">$appointment_start</span> &amp;&amp; <span class="php-var">$space_end</span> &gt; <span class="php-var">$appointment_end</span>) {
</span><span id="236" class="l"><a class="l" href="#236">236: </a> <span class="php-comment">// Current appointment is within the current empty space. So </span>
</span><span id="237" class="l"><a class="l" href="#237">237: </a> <span class="php-comment">// we need to break the empty space into two other spaces that </span>
</span><span id="238" class="l"><a class="l" href="#238">238: </a> <span class="php-comment">// don't include the appointment.</span>
</span><span id="239" class="l"><a class="l" href="#239">239: </a> <span class="php-var">$empty_spaces_with_appointments</span>[] = <span class="php-keyword1">array</span>(
</span><span id="240" class="l"><a class="l" href="#240">240: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$space_start</span>,
</span><span id="241" class="l"><a class="l" href="#241">241: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$appointment_start</span>
</span><span id="242" class="l"><a class="l" href="#242">242: </a> );
</span><span id="243" class="l"><a class="l" href="#243">243: </a> <span class="php-var">$empty_spaces_with_appointments</span>[] = <span class="php-keyword1">array</span>(
</span><span id="244" class="l"><a class="l" href="#244">244: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$appointment_end</span>,
</span><span id="245" class="l"><a class="l" href="#245">245: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$space_end</span>
</span><span id="246" class="l"><a class="l" href="#246">246: </a> );
</span><span id="247" class="l"><a class="l" href="#247">247: </a> } <span class="php-keyword1">else</span> {
</span><span id="248" class="l"><a class="l" href="#248">248: </a> <span class="php-comment">// Check if there are any other appointments between this </span>
</span><span id="249" class="l"><a class="l" href="#249">249: </a> <span class="php-comment">// time space. If not, it is going to be added as it is.</span>
</span><span id="250" class="l"><a class="l" href="#250">250: </a> <span class="php-var">$found</span> = <span class="php-keyword1">FALSE</span>;
</span><span id="251" class="l"><a class="l" href="#251">251: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$reserved_appointments</span> <span class="php-keyword1">as</span> <span class="php-var">$appt</span>) {
</span><span id="252" class="l"><a class="l" href="#252">252: </a> <span class="php-var">$appt_start</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$appt</span>[<span class="php-quote">'start_datetime'</span>]));
</span><span id="253" class="l"><a class="l" href="#253">253: </a> <span class="php-var">$appt_end</span> = <span class="php-keyword2">date</span>(<span class="php-quote">'H:i'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$appt</span>[<span class="php-quote">'end_datetime'</span>]));
</span><span id="254" class="l"><a class="l" href="#254">254: </a> <span class="php-keyword1">if</span> (<span class="php-var">$space_start</span> &lt; <span class="php-var">$appt_start</span> &amp;&amp; <span class="php-var">$space_end</span> &gt; <span class="php-var">$appt_end</span>) {
</span><span id="255" class="l"><a class="l" href="#255">255: </a> <span class="php-var">$found</span> = <span class="php-keyword1">TRUE</span>;
</span><span id="256" class="l"><a class="l" href="#256">256: </a> }
</span><span id="257" class="l"><a class="l" href="#257">257: </a> }
</span><span id="258" class="l"><a class="l" href="#258">258: </a>
</span><span id="259" class="l"><a class="l" href="#259">259: </a> <span class="php-comment">// It is also necessary to check that this time period doesn't</span>
</span><span id="260" class="l"><a class="l" href="#260">260: </a> <span class="php-comment">// already exist in the &quot;$empty_spaces_with_appointments&quot; array.</span>
</span><span id="261" class="l"><a class="l" href="#261">261: </a> <span class="php-var">$empty_space</span> = <span class="php-keyword1">array</span>(
</span><span id="262" class="l"><a class="l" href="#262">262: </a> <span class="php-quote">'start'</span> =&gt; <span class="php-var">$space_start</span>,
</span><span id="263" class="l"><a class="l" href="#263">263: </a> <span class="php-quote">'end'</span> =&gt; <span class="php-var">$space_end</span>
</span><span id="264" class="l"><a class="l" href="#264">264: </a> );
</span><span id="265" class="l"><a class="l" href="#265">265: </a> <span class="php-var">$already_exist</span> = <span class="php-keyword2">in_array</span>(<span class="php-var">$empty_space</span>, <span class="php-var">$empty_spaces_with_appointments</span>);
</span><span id="266" class="l"><a class="l" href="#266">266: </a> <span class="php-keyword1">if</span> (<span class="php-var">$found</span> === <span class="php-keyword1">FALSE</span> &amp;&amp; <span class="php-var">$already_exist</span> === <span class="php-keyword1">FALSE</span>) {
</span><span id="267" class="l"><a class="l" href="#267">267: </a> <span class="php-var">$empty_spaces_with_appointments</span>[] = <span class="php-var">$empty_space</span>;
</span><span id="268" class="l"><a class="l" href="#268">268: </a> }
</span><span id="269" class="l"><a class="l" href="#269">269: </a> }
</span><span id="270" class="l"><a class="l" href="#270">270: </a> }
</span><span id="271" class="l"><a class="l" href="#271">271: </a> }
</span><span id="272" class="l"><a class="l" href="#272">272: </a> } <span class="php-keyword1">else</span> {
</span><span id="273" class="l"><a class="l" href="#273">273: </a> <span class="php-var">$empty_spaces_with_appointments</span> = <span class="php-var">$empty_spaces_with_breaks</span>;
</span><span id="274" class="l"><a class="l" href="#274">274: </a> }
</span><span id="275" class="l"><a class="l" href="#275">275: </a>
</span><span id="276" class="l"><a class="l" href="#276">276: </a> <span class="php-var">$empty_spaces</span> = <span class="php-var">$empty_spaces_with_appointments</span>;
</span><span id="277" class="l"><a class="l" href="#277">277: </a>
</span><span id="278" class="l"><a class="l" href="#278">278: </a> <span class="php-comment">// Calculate the available appointment hours for the given date. </span>
</span><span id="279" class="l"><a class="l" href="#279">279: </a> <span class="php-comment">// The empty spaces are broken down to 15 min and if the service</span>
</span><span id="280" class="l"><a class="l" href="#280">280: </a> <span class="php-comment">// fit in each quarter then a new available hour is added to the</span>
</span><span id="281" class="l"><a class="l" href="#281">281: </a> <span class="php-comment">// $available hours array.</span>
</span><span id="282" class="l"><a class="l" href="#282">282: </a> <span class="php-var">$available_hours</span> = <span class="php-keyword1">array</span>();
</span><span id="283" class="l"><a class="l" href="#283">283: </a>
</span><span id="284" class="l"><a class="l" href="#284">284: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$empty_spaces</span> <span class="php-keyword1">as</span> <span class="php-var">$space</span>) {
</span><span id="285" class="l"><a class="l" href="#285">285: </a> <span class="php-var">$start_hour</span> = <span class="php-keyword1">new</span> DateTime(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>] . <span class="php-quote">' '</span> . <span class="php-var">$space</span>[<span class="php-quote">'start'</span>]);
</span><span id="286" class="l"><a class="l" href="#286">286: </a> <span class="php-var">$end_hour</span> = <span class="php-keyword1">new</span> DateTime(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>] . <span class="php-quote">' '</span> . <span class="php-var">$space</span>[<span class="php-quote">'end'</span>]);
</span><span id="287" class="l"><a class="l" href="#287">287: </a>
</span><span id="288" class="l"><a class="l" href="#288">288: </a> <span class="php-var">$minutes</span> = <span class="php-var">$start_hour</span>-&gt;format(<span class="php-quote">'i'</span>);
</span><span id="289" class="l"><a class="l" href="#289">289: </a>
</span><span id="290" class="l"><a class="l" href="#290">290: </a> <span class="php-keyword1">if</span> (<span class="php-var">$minutes</span> % <span class="php-num">15</span> != <span class="php-num">0</span>) {
</span><span id="291" class="l"><a class="l" href="#291">291: </a> <span class="php-comment">// Change the start hour of the current space in order to be</span>
</span><span id="292" class="l"><a class="l" href="#292">292: </a> <span class="php-comment">// on of the following: 00, 15, 30, 45.</span>
</span><span id="293" class="l"><a class="l" href="#293">293: </a> <span class="php-keyword1">if</span> (<span class="php-var">$minutes</span> &lt; <span class="php-num">15</span>) {
</span><span id="294" class="l"><a class="l" href="#294">294: </a> <span class="php-var">$start_hour</span>-&gt;setTime(<span class="php-var">$start_hour</span>-&gt;format(<span class="php-quote">'H'</span>), <span class="php-num">15</span>);
</span><span id="295" class="l"><a class="l" href="#295">295: </a> } <span class="php-keyword1">else</span> <span class="php-keyword1">if</span> (<span class="php-var">$minutes</span> &lt; <span class="php-num">30</span>) {
</span><span id="296" class="l"><a class="l" href="#296">296: </a> <span class="php-var">$start_hour</span>-&gt;setTime(<span class="php-var">$start_hour</span>-&gt;format(<span class="php-quote">'H'</span>), <span class="php-num">30</span>);
</span><span id="297" class="l"><a class="l" href="#297">297: </a> } <span class="php-keyword1">else</span> <span class="php-keyword1">if</span> (<span class="php-var">$minutes</span> &lt; <span class="php-num">45</span>) {
</span><span id="298" class="l"><a class="l" href="#298">298: </a> <span class="php-var">$start_hour</span>-&gt;setTime(<span class="php-var">$start_hour</span>-&gt;format(<span class="php-quote">'H'</span>), <span class="php-num">45</span>);
</span><span id="299" class="l"><a class="l" href="#299">299: </a> } <span class="php-keyword1">else</span> {
</span><span id="300" class="l"><a class="l" href="#300">300: </a> <span class="php-var">$start_hour</span>-&gt;setTime(<span class="php-var">$start_hour</span>-&gt;format(<span class="php-quote">'H'</span>) + <span class="php-num">1</span>, <span class="php-num">00</span>);
</span><span id="301" class="l"><a class="l" href="#301">301: </a> }
</span><span id="302" class="l"><a class="l" href="#302">302: </a> }
</span><span id="303" class="l"><a class="l" href="#303">303: </a>
</span><span id="304" class="l"><a class="l" href="#304">304: </a> <span class="php-var">$curr_hour</span> = <span class="php-var">$start_hour</span>;
</span><span id="305" class="l"><a class="l" href="#305">305: </a>
</span><span id="306" class="l"><a class="l" href="#306">306: </a> <span class="php-var">$diff</span> = <span class="php-var">$curr_hour</span>-&gt;diff(<span class="php-var">$end_hour</span>);
</span><span id="307" class="l"><a class="l" href="#307">307: </a> <span class="php-keyword1">while</span>((<span class="php-var">$diff</span>-&gt;h * <span class="php-num">60</span> + <span class="php-var">$diff</span>-&gt;i) &gt; <span class="php-keyword2">intval</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'service_duration'</span>])) {
</span><span id="308" class="l"><a class="l" href="#308">308: </a> <span class="php-var">$available_hours</span>[] = <span class="php-var">$curr_hour</span>-&gt;format(<span class="php-quote">'H:i'</span>);
</span><span id="309" class="l"><a class="l" href="#309">309: </a> <span class="php-var">$curr_hour</span>-&gt;add(<span class="php-keyword1">new</span> DateInterval(<span class="php-quote">&quot;PT15M&quot;</span>));
</span><span id="310" class="l"><a class="l" href="#310">310: </a> <span class="php-var">$diff</span> = <span class="php-var">$curr_hour</span>-&gt;diff(<span class="php-var">$end_hour</span>);
</span><span id="311" class="l"><a class="l" href="#311">311: </a> }
</span><span id="312" class="l"><a class="l" href="#312">312: </a> }
</span><span id="313" class="l"><a class="l" href="#313">313: </a>
</span><span id="314" class="l"><a class="l" href="#314">314: </a> <span class="php-comment">// If the selected date is today, remove past hours. It is important </span>
</span><span id="315" class="l"><a class="l" href="#315">315: </a> <span class="php-comment">// include the timeout before booking that is set in the backoffice</span>
</span><span id="316" class="l"><a class="l" href="#316">316: </a> <span class="php-comment">// the system. Normally we might want the customer to book an appointment</span>
</span><span id="317" class="l"><a class="l" href="#317">317: </a> <span class="php-comment">// that is at least half or one hour from now. The setting is stored in </span>
</span><span id="318" class="l"><a class="l" href="#318">318: </a> <span class="php-comment">// minutes.</span>
</span><span id="319" class="l"><a class="l" href="#319">319: </a> <span class="php-keyword1">if</span> (<span class="php-keyword2">date</span>(<span class="php-quote">'m/d/Y'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-var">$_POST</span>[<span class="php-quote">'selected_date'</span>])) == <span class="php-keyword2">date</span>(<span class="php-quote">'m/d/Y'</span>)) {
</span><span id="320" class="l"><a class="l" href="#320">320: </a> <span class="php-keyword1">if</span> (<span class="php-var">$_POST</span>[<span class="php-quote">'manage_mode'</span>] === <span class="php-quote">'true'</span>) {
</span><span id="321" class="l"><a class="l" href="#321">321: </a> <span class="php-var">$book_advance_timeout</span> = <span class="php-num">0</span>;
</span><span id="322" class="l"><a class="l" href="#322">322: </a> } <span class="php-keyword1">else</span> {
</span><span id="323" class="l"><a class="l" href="#323">323: </a> <span class="php-var">$book_advance_timeout</span> = <span class="php-var">$this</span>-&gt;Settings_Model
</span><span id="324" class="l"><a class="l" href="#324">324: </a> -&gt;get_setting(<span class="php-quote">'book_advance_timeout'</span>);
</span><span id="325" class="l"><a class="l" href="#325">325: </a> }
</span><span id="326" class="l"><a class="l" href="#326">326: </a>
</span><span id="327" class="l"><a class="l" href="#327">327: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$available_hours</span> <span class="php-keyword1">as</span> <span class="php-var">$index</span>=&gt;<span class="php-var">$value</span>) {
</span><span id="328" class="l"><a class="l" href="#328">328: </a> <span class="php-var">$available_hour</span> = <span class="php-keyword2">strtotime</span>(<span class="php-var">$value</span>);
</span><span id="329" class="l"><a class="l" href="#329">329: </a> <span class="php-var">$current_hour</span> = <span class="php-keyword2">strtotime</span>(<span class="php-quote">'+'</span> . <span class="php-var">$book_advance_timeout</span>
</span><span id="330" class="l"><a class="l" href="#330">330: </a> . <span class="php-quote">' minutes'</span>, <span class="php-keyword2">strtotime</span>(<span class="php-quote">'now'</span>));
</span><span id="331" class="l"><a class="l" href="#331">331: </a>
</span><span id="332" class="l"><a class="l" href="#332">332: </a> <span class="php-keyword1">if</span> (<span class="php-var">$available_hour</span> &lt;= <span class="php-var">$current_hour</span>) {
</span><span id="333" class="l"><a class="l" href="#333">333: </a> <span class="php-keyword1">unset</span>(<span class="php-var">$available_hours</span>[<span class="php-var">$index</span>]);
</span><span id="334" class="l"><a class="l" href="#334">334: </a> }
</span><span id="335" class="l"><a class="l" href="#335">335: </a> }
</span><span id="336" class="l"><a class="l" href="#336">336: </a> }
</span><span id="337" class="l"><a class="l" href="#337">337: </a>
</span><span id="338" class="l"><a class="l" href="#338">338: </a> <span class="php-var">$available_hours</span> = <span class="php-keyword2">array_values</span>(<span class="php-var">$available_hours</span>);
</span><span id="339" class="l"><a class="l" href="#339">339: </a>
</span><span id="340" class="l"><a class="l" href="#340">340: </a> <span class="php-keyword1">echo</span> <span class="php-keyword2">json_encode</span>(<span class="php-var">$available_hours</span>);
</span><span id="341" class="l"><a class="l" href="#341">341: </a> }
</span><span id="342" class="l"><a class="l" href="#342">342: </a>
</span><span id="343" class="l"><a class="l" href="#343">343: </a> <span class="php-comment">/**
</span></span><span id="344" class="l"><a class="l" href="#344">344: </a><span class="php-comment"> * Synchronize appointment with its' providers google calendar.
</span></span><span id="345" class="l"><a class="l" href="#345">345: </a><span class="php-comment"> *
</span></span><span id="346" class="l"><a class="l" href="#346">346: </a><span class="php-comment"> * This method syncs the registered appointment with the
</span></span><span id="347" class="l"><a class="l" href="#347">347: </a><span class="php-comment"> * google calendar of the user.
</span></span><span id="348" class="l"><a class="l" href="#348">348: </a><span class="php-comment"> *
</span></span><span id="349" class="l"><a class="l" href="#349">349: </a><span class="php-comment"> * @task This method needs to be changed. Everytime a customer
</span></span><span id="350" class="l"><a class="l" href="#350">350: </a><span class="php-comment"> * books a new appointment the synchronization process must be
</span></span><span id="351" class="l"><a class="l" href="#351">351: </a><span class="php-comment"> * executed.
</span></span><span id="352" class="l"><a class="l" href="#352">352: </a><span class="php-comment"> */</span>
</span><span id="353" class="l"><a class="l" href="#353">353: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_google_sync" href="#_google_sync">google_sync</a>(<span class="php-var">$appointment_id</span>) {
</span><span id="354" class="l"><a class="l" href="#354">354: </a> <span class="php-keyword1">try</span> {
</span><span id="355" class="l"><a class="l" href="#355">355: </a> <span class="php-var">$this</span>-&gt;load-&gt;library(<span class="php-quote">'Google_Sync'</span>);
</span><span id="356" class="l"><a class="l" href="#356">356: </a> <span class="php-var">$this</span>-&gt;google_sync-&gt;sync_appointment(<span class="php-var">$appointment_id</span>);
</span><span id="357" class="l"><a class="l" href="#357">357: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'message'</span>] = <span class="php-quote">'Your appointment has been successfully added'</span>
</span><span id="358" class="l"><a class="l" href="#358">358: </a> . <span class="php-quote">'to Google Calendar!'</span>;
</span><span id="359" class="l"><a class="l" href="#359">359: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'image'</span>] = <span class="php-quote">'success.png'</span>;
</span><span id="360" class="l"><a class="l" href="#360">360: </a> } <span class="php-keyword1">catch</span> (Exception <span class="php-var">$exc</span>) {
</span><span id="361" class="l"><a class="l" href="#361">361: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'message'</span>] = <span class="php-quote">'An unexpected error occured during the sync '</span>
</span><span id="362" class="l"><a class="l" href="#362">362: </a> . <span class="php-quote">'operation: &lt;br/&gt;&lt;pre&gt;'</span> . <span class="php-var">$exc</span>-&gt;getMessage() . <span class="php-quote">'&lt;br/&gt;'</span>
</span><span id="363" class="l"><a class="l" href="#363">363: </a> . <span class="php-var">$exc</span>-&gt;getTraceAsString() . <span class="php-quote">'&lt;/pre&gt;'</span>;
</span><span id="364" class="l"><a class="l" href="#364">364: </a> <span class="php-var">$view_data</span>[<span class="php-quote">'image'</span>] = <span class="php-quote">'error.png'</span>;
</span><span id="365" class="l"><a class="l" href="#365">365: </a> }
</span><span id="366" class="l"><a class="l" href="#366">366: </a>
</span><span id="367" class="l"><a class="l" href="#367">367: </a> <span class="php-var">$this</span>-&gt;load-&gt;view(<span class="php-quote">'appointments/google_sync'</span>, <span class="php-var">$view_data</span>);
</span><span id="368" class="l"><a class="l" href="#368">368: </a> }
</span><span id="369" class="l"><a class="l" href="#369">369: </a>}
</span><span id="370" class="l"><a class="l" href="#370">370: </a>
</span><span id="371" class="l"><a class="l" href="#371">371: </a><span class="php-comment">/* End of file appointments.php */</span>
</span><span id="372" class="l"><a class="l" href="#372">372: </a></span><span class="php-comment">/* Location: ./application/controllers/appointments.php */</span></code></pre>
<div id="footer">
API documentation generated by <a href="http://apigen.org">ApiGen 2.8.0</a>

View file

@ -92,282 +92,324 @@
</span></span><span id="15" class="l"><a class="l" href="#15"> 15: </a><span class="php-comment"> * appointment doesn't exists it is going to be inserted, otherwise
</span></span><span id="16" class="l"><a class="l" href="#16"> 16: </a><span class="php-comment"> * the record is going to be updated.
</span></span><span id="17" class="l"><a class="l" href="#17"> 17: </a><span class="php-comment"> *
</span></span><span id="18" class="l"><a class="l" href="#18"> 18: </a><span class="php-comment"> * @expectedException ValidationException
</span></span><span id="19" class="l"><a class="l" href="#19"> 19: </a><span class="php-comment"> * @expectedException DatabaseException
</span></span><span id="20" class="l"><a class="l" href="#20"> 20: </a><span class="php-comment"> *
</span></span><span id="21" class="l"><a class="l" href="#21"> 21: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointmet's
</span></span><span id="22" class="l"><a class="l" href="#22"> 22: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="23" class="l"><a class="l" href="#23"> 23: </a><span class="php-comment"> * @return int Returns the appointments id.
</span></span><span id="24" class="l"><a class="l" href="#24"> 24: </a><span class="php-comment"> */</span>
</span><span id="25" class="l"><a class="l" href="#25"> 25: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_add" href="#_add">add</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="26" class="l"><a class="l" href="#26"> 26: </a> <span class="php-comment">// Validate the appointment data before doing anything.</span>
</span><span id="27" class="l"><a class="l" href="#27"> 27: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;validate_data(<span class="php-var">$appointment_data</span>)) {
</span><span id="28" class="l"><a class="l" href="#28"> 28: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> ValidationException(<span class="php-quote">'Appointment data are not valid'</span>);
</span><span id="29" class="l"><a class="l" href="#29"> 29: </a> }
</span><span id="30" class="l"><a class="l" href="#30"> 30: </a>
</span><span id="31" class="l"><a class="l" href="#31"> 31: </a> <span class="php-comment">// Insert or update the appointment data.</span>
</span><span id="32" class="l"><a class="l" href="#32"> 32: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;exists(<span class="php-var">$appointment_data</span>)) {
</span><span id="33" class="l"><a class="l" href="#33"> 33: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;insert(<span class="php-var">$appointment_data</span>);
</span><span id="34" class="l"><a class="l" href="#34"> 34: </a> } <span class="php-keyword1">else</span> {
</span><span id="35" class="l"><a class="l" href="#35"> 35: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;update(<span class="php-var">$appointment_data</span>);
</span><span id="36" class="l"><a class="l" href="#36"> 36: </a> }
</span><span id="37" class="l"><a class="l" href="#37"> 37: </a>
</span><span id="38" class="l"><a class="l" href="#38"> 38: </a> <span class="php-keyword1">return</span> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>];
</span><span id="39" class="l"><a class="l" href="#39"> 39: </a> }
</span><span id="40" class="l"><a class="l" href="#40"> 40: </a>
</span><span id="41" class="l"><a class="l" href="#41"> 41: </a> <span class="php-comment">/**
</span></span><span id="42" class="l"><a class="l" href="#42"> 42: </a><span class="php-comment"> * Check if a particular appointment record already exists.
</span></span><span id="43" class="l"><a class="l" href="#43"> 43: </a><span class="php-comment"> *
</span></span><span id="44" class="l"><a class="l" href="#44"> 44: </a><span class="php-comment"> * This method checks wether the given appointment already exists
</span></span><span id="45" class="l"><a class="l" href="#45"> 45: </a><span class="php-comment"> * in the database. It doesn't search with the id, but by using the
</span></span><span id="46" class="l"><a class="l" href="#46"> 46: </a><span class="php-comment"> * following fields: &quot;start_datetime&quot;, &quot;end_datetime&quot;, &quot;id_users_provider&quot;,
</span></span><span id="47" class="l"><a class="l" href="#47"> 47: </a><span class="php-comment"> * &quot;id_users_customer&quot;, &quot;id_services&quot;.
</span></span><span id="48" class="l"><a class="l" href="#48"> 48: </a><span class="php-comment"> *
</span></span><span id="49" class="l"><a class="l" href="#49"> 49: </a><span class="php-comment"> * @expectedException InvalidArgumentException When the $appointment_data
</span></span><span id="50" class="l"><a class="l" href="#50"> 50: </a><span class="php-comment"> * array does not contain the necessary field.
</span></span><span id="51" class="l"><a class="l" href="#51"> 51: </a><span class="php-comment"> *
</span></span><span id="52" class="l"><a class="l" href="#52"> 52: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointment's
</span></span><span id="53" class="l"><a class="l" href="#53"> 53: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="54" class="l"><a class="l" href="#54"> 54: </a><span class="php-comment"> * @return bool Returns wether the record exists or not.
</span></span><span id="55" class="l"><a class="l" href="#55"> 55: </a><span class="php-comment"> */</span>
</span><span id="56" class="l"><a class="l" href="#56"> 56: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_exists" href="#_exists">exists</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="57" class="l"><a class="l" href="#57"> 57: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>])
</span><span id="58" class="l"><a class="l" href="#58"> 58: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>])
</span><span id="59" class="l"><a class="l" href="#59"> 59: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>])
</span><span id="60" class="l"><a class="l" href="#60"> 60: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>])
</span><span id="61" class="l"><a class="l" href="#61"> 61: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>])) {
</span><span id="62" class="l"><a class="l" href="#62"> 62: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Not all appointment field values are provided : '</span> . <span class="php-keyword2">print_r</span>(<span class="php-var">$appointment_data</span>, <span class="php-keyword1">TRUE</span>));
</span><span id="63" class="l"><a class="l" href="#63"> 63: </a> }
</span><span id="64" class="l"><a class="l" href="#64"> 64: </a>
</span><span id="65" class="l"><a class="l" href="#65"> 65: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>, <span class="php-keyword1">array</span>(
</span><span id="66" class="l"><a class="l" href="#66"> 66: </a> <span class="php-quote">'start_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>],
</span><span id="67" class="l"><a class="l" href="#67"> 67: </a> <span class="php-quote">'end_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>],
</span><span id="68" class="l"><a class="l" href="#68"> 68: </a> <span class="php-quote">'id_users_provider'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>],
</span><span id="69" class="l"><a class="l" href="#69"> 69: </a> <span class="php-quote">'id_users_customer'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>],
</span><span id="70" class="l"><a class="l" href="#70"> 70: </a> <span class="php-quote">'id_services'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>],
</span><span id="71" class="l"><a class="l" href="#71"> 71: </a> ))-&gt;num_rows();
</span><span id="72" class="l"><a class="l" href="#72"> 72: </a>
</span><span id="73" class="l"><a class="l" href="#73"> 73: </a> <span class="php-keyword1">return</span> (<span class="php-var">$num_rows</span> &gt; <span class="php-num">0</span>) ? <span class="php-keyword1">TRUE</span> : <span class="php-keyword1">FALSE</span>;
</span><span id="74" class="l"><a class="l" href="#74"> 74: </a> }
</span><span id="75" class="l"><a class="l" href="#75"> 75: </a>
</span><span id="76" class="l"><a class="l" href="#76"> 76: </a> <span class="php-comment">/**
</span></span><span id="77" class="l"><a class="l" href="#77"> 77: </a><span class="php-comment"> * Insert a new appointment record to the database.
</span></span><span id="78" class="l"><a class="l" href="#78"> 78: </a><span class="php-comment"> *
</span></span><span id="79" class="l"><a class="l" href="#79"> 79: </a><span class="php-comment"> * @expectedException DatabaseException
</span></span><span id="80" class="l"><a class="l" href="#80"> 80: </a><span class="php-comment"> *
</span></span><span id="81" class="l"><a class="l" href="#81"> 81: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointment's
</span></span><span id="82" class="l"><a class="l" href="#82"> 82: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="83" class="l"><a class="l" href="#83"> 83: </a><span class="php-comment"> * @return int Returns the id of the new record.
</span></span><span id="84" class="l"><a class="l" href="#84"> 84: </a><span class="php-comment"> */</span>
</span><span id="85" class="l"><a class="l" href="#85"> 85: </a> <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> <a id="_insert" href="#_insert">insert</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="86" class="l"><a class="l" href="#86"> 86: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;db-&gt;insert(<span class="php-quote">'ea_appointments'</span>, <span class="php-var">$appointment_data</span>)) {
</span><span id="87" class="l"><a class="l" href="#87"> 87: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not insert appointment record.'</span>);
</span><span id="88" class="l"><a class="l" href="#88"> 88: </a> }
</span><span id="89" class="l"><a class="l" href="#89"> 89: </a> <span class="php-keyword1">return</span> <span class="php-keyword2">intval</span>(<span class="php-var">$this</span>-&gt;db-&gt;insert_id());
</span><span id="90" class="l"><a class="l" href="#90"> 90: </a> }
</span><span id="91" class="l"><a class="l" href="#91"> 91: </a>
</span><span id="92" class="l"><a class="l" href="#92"> 92: </a> <span class="php-comment">/**
</span></span><span id="93" class="l"><a class="l" href="#93"> 93: </a><span class="php-comment"> * Update an existing appointment record in the database.
</span></span><span id="94" class="l"><a class="l" href="#94"> 94: </a><span class="php-comment"> *
</span></span><span id="95" class="l"><a class="l" href="#95"> 95: </a><span class="php-comment"> * The appointment data argument should already include the record
</span></span><span id="96" class="l"><a class="l" href="#96"> 96: </a><span class="php-comment"> * id in order to process the update operation.
</span></span><span id="97" class="l"><a class="l" href="#97"> 97: </a><span class="php-comment"> *
</span></span><span id="98" class="l"><a class="l" href="#98"> 98: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointment's
</span></span><span id="99" class="l"><a class="l" href="#99"> 99: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="100" class="l"><a class="l" href="#100">100: </a><span class="php-comment"> * @return int Returns the id of the updated record.
</span></span><span id="101" class="l"><a class="l" href="#101">101: </a><span class="php-comment"> */</span>
</span><span id="102" class="l"><a class="l" href="#102">102: </a> <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> <a id="_update" href="#_update">update</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="103" class="l"><a class="l" href="#103">103: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>])) {
</span><span id="104" class="l"><a class="l" href="#104">104: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;find_record_id(<span class="php-var">$appointment_data</span>);
</span><span id="105" class="l"><a class="l" href="#105">105: </a> }
</span><span id="106" class="l"><a class="l" href="#106">106: </a>
</span><span id="107" class="l"><a class="l" href="#107">107: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="108" class="l"><a class="l" href="#108">108: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;db-&gt;update(<span class="php-quote">'ea_appointments'</span>, <span class="php-var">$appointment_data</span>)) {
</span><span id="109" class="l"><a class="l" href="#109">109: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not update appointment record.'</span>);
</span><span id="110" class="l"><a class="l" href="#110">110: </a> }
</span><span id="111" class="l"><a class="l" href="#111">111: </a>
</span><span id="112" class="l"><a class="l" href="#112">112: </a> <span class="php-keyword1">return</span> <span class="php-keyword2">intval</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="113" class="l"><a class="l" href="#113">113: </a> }
</span><span id="114" class="l"><a class="l" href="#114">114: </a>
</span><span id="115" class="l"><a class="l" href="#115">115: </a> <span class="php-comment">/**
</span></span><span id="116" class="l"><a class="l" href="#116">116: </a><span class="php-comment"> * Find the database id of an appointment record.
</span></span><span id="117" class="l"><a class="l" href="#117">117: </a><span class="php-comment"> *
</span></span><span id="118" class="l"><a class="l" href="#118">118: </a><span class="php-comment"> * The appointment data should include the following fields in order to
</span></span><span id="119" class="l"><a class="l" href="#119">119: </a><span class="php-comment"> * get the unique id from the database: start_datetime, end_datetime,
</span></span><span id="120" class="l"><a class="l" href="#120">120: </a><span class="php-comment"> * id_users_provider, id_users_customer, id_services.
</span></span><span id="18" class="l"><a class="l" href="#18"> 18: </a><span class="php-comment"> * @expectedException ValidationException Raises when the appointment data
</span></span><span id="19" class="l"><a class="l" href="#19"> 19: </a><span class="php-comment"> * are invalid.
</span></span><span id="20" class="l"><a class="l" href="#20"> 20: </a><span class="php-comment"> * @expectedException DatabaseException Raises when the insert or update
</span></span><span id="21" class="l"><a class="l" href="#21"> 21: </a><span class="php-comment"> * operation fail to complete successfully.
</span></span><span id="22" class="l"><a class="l" href="#22"> 22: </a><span class="php-comment"> *
</span></span><span id="23" class="l"><a class="l" href="#23"> 23: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointment
</span></span><span id="24" class="l"><a class="l" href="#24"> 24: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="25" class="l"><a class="l" href="#25"> 25: </a><span class="php-comment"> * @return int Returns the appointments id.
</span></span><span id="26" class="l"><a class="l" href="#26"> 26: </a><span class="php-comment"> */</span>
</span><span id="27" class="l"><a class="l" href="#27"> 27: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_add" href="#_add">add</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="28" class="l"><a class="l" href="#28"> 28: </a> <span class="php-comment">// Validate the appointment data before doing anything.</span>
</span><span id="29" class="l"><a class="l" href="#29"> 29: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;validate_data(<span class="php-var">$appointment_data</span>)) {
</span><span id="30" class="l"><a class="l" href="#30"> 30: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> ValidationException(<span class="php-quote">'Appointment data are invalid.'</span>);
</span><span id="31" class="l"><a class="l" href="#31"> 31: </a> }
</span><span id="32" class="l"><a class="l" href="#32"> 32: </a>
</span><span id="33" class="l"><a class="l" href="#33"> 33: </a> <span class="php-comment">// Perform insert() or update() operation.</span>
</span><span id="34" class="l"><a class="l" href="#34"> 34: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>])) {
</span><span id="35" class="l"><a class="l" href="#35"> 35: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;insert(<span class="php-var">$appointment_data</span>);
</span><span id="36" class="l"><a class="l" href="#36"> 36: </a> } <span class="php-keyword1">else</span> {
</span><span id="37" class="l"><a class="l" href="#37"> 37: </a> <span class="php-var">$this</span>-&gt;update(<span class="php-var">$appointment_data</span>);
</span><span id="38" class="l"><a class="l" href="#38"> 38: </a> }
</span><span id="39" class="l"><a class="l" href="#39"> 39: </a>
</span><span id="40" class="l"><a class="l" href="#40"> 40: </a> <span class="php-keyword1">return</span> <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>];
</span><span id="41" class="l"><a class="l" href="#41"> 41: </a> }
</span><span id="42" class="l"><a class="l" href="#42"> 42: </a>
</span><span id="43" class="l"><a class="l" href="#43"> 43: </a> <span class="php-comment">/**
</span></span><span id="44" class="l"><a class="l" href="#44"> 44: </a><span class="php-comment"> * Check if a particular appointment record already exists.
</span></span><span id="45" class="l"><a class="l" href="#45"> 45: </a><span class="php-comment"> *
</span></span><span id="46" class="l"><a class="l" href="#46"> 46: </a><span class="php-comment"> * This method checks wether the given appointment already exists
</span></span><span id="47" class="l"><a class="l" href="#47"> 47: </a><span class="php-comment"> * in the database. It doesn't search with the id, but by using the
</span></span><span id="48" class="l"><a class="l" href="#48"> 48: </a><span class="php-comment"> * following fields: &quot;start_datetime&quot;, &quot;end_datetime&quot;, &quot;id_users_provider&quot;,
</span></span><span id="49" class="l"><a class="l" href="#49"> 49: </a><span class="php-comment"> * &quot;id_users_customer&quot;, &quot;id_services&quot;.
</span></span><span id="50" class="l"><a class="l" href="#50"> 50: </a><span class="php-comment"> *
</span></span><span id="51" class="l"><a class="l" href="#51"> 51: </a><span class="php-comment"> * @expectedException InvalidArgumentException When the $appointment_data
</span></span><span id="52" class="l"><a class="l" href="#52"> 52: </a><span class="php-comment"> * array does not contain the necessary field.
</span></span><span id="53" class="l"><a class="l" href="#53"> 53: </a><span class="php-comment"> *
</span></span><span id="54" class="l"><a class="l" href="#54"> 54: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointment's
</span></span><span id="55" class="l"><a class="l" href="#55"> 55: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="56" class="l"><a class="l" href="#56"> 56: </a><span class="php-comment"> * @return bool Returns wether the record exists or not.
</span></span><span id="57" class="l"><a class="l" href="#57"> 57: </a><span class="php-comment"> */</span>
</span><span id="58" class="l"><a class="l" href="#58"> 58: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_exists" href="#_exists">exists</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="59" class="l"><a class="l" href="#59"> 59: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>])
</span><span id="60" class="l"><a class="l" href="#60"> 60: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>])
</span><span id="61" class="l"><a class="l" href="#61"> 61: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>])
</span><span id="62" class="l"><a class="l" href="#62"> 62: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>])
</span><span id="63" class="l"><a class="l" href="#63"> 63: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>])) {
</span><span id="64" class="l"><a class="l" href="#64"> 64: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Not all appointment field values '</span>
</span><span id="65" class="l"><a class="l" href="#65"> 65: </a> . <span class="php-quote">'are provided : '</span> . <span class="php-keyword2">print_r</span>(<span class="php-var">$appointment_data</span>, <span class="php-keyword1">TRUE</span>));
</span><span id="66" class="l"><a class="l" href="#66"> 66: </a> }
</span><span id="67" class="l"><a class="l" href="#67"> 67: </a>
</span><span id="68" class="l"><a class="l" href="#68"> 68: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>, <span class="php-keyword1">array</span>(
</span><span id="69" class="l"><a class="l" href="#69"> 69: </a> <span class="php-quote">'start_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>],
</span><span id="70" class="l"><a class="l" href="#70"> 70: </a> <span class="php-quote">'end_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>],
</span><span id="71" class="l"><a class="l" href="#71"> 71: </a> <span class="php-quote">'id_users_provider'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>],
</span><span id="72" class="l"><a class="l" href="#72"> 72: </a> <span class="php-quote">'id_users_customer'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>],
</span><span id="73" class="l"><a class="l" href="#73"> 73: </a> <span class="php-quote">'id_services'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>],))
</span><span id="74" class="l"><a class="l" href="#74"> 74: </a> -&gt;num_rows();
</span><span id="75" class="l"><a class="l" href="#75"> 75: </a>
</span><span id="76" class="l"><a class="l" href="#76"> 76: </a> <span class="php-keyword1">return</span> (<span class="php-var">$num_rows</span> &gt; <span class="php-num">0</span>) ? <span class="php-keyword1">TRUE</span> : <span class="php-keyword1">FALSE</span>;
</span><span id="77" class="l"><a class="l" href="#77"> 77: </a> }
</span><span id="78" class="l"><a class="l" href="#78"> 78: </a>
</span><span id="79" class="l"><a class="l" href="#79"> 79: </a> <span class="php-comment">/**
</span></span><span id="80" class="l"><a class="l" href="#80"> 80: </a><span class="php-comment"> * Insert a new appointment record to the database.
</span></span><span id="81" class="l"><a class="l" href="#81"> 81: </a><span class="php-comment"> *
</span></span><span id="82" class="l"><a class="l" href="#82"> 82: </a><span class="php-comment"> * @expectedException DatabaseException Raises when the insert operation
</span></span><span id="83" class="l"><a class="l" href="#83"> 83: </a><span class="php-comment"> * failes to complete successfully.
</span></span><span id="84" class="l"><a class="l" href="#84"> 84: </a><span class="php-comment"> *
</span></span><span id="85" class="l"><a class="l" href="#85"> 85: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointment's
</span></span><span id="86" class="l"><a class="l" href="#86"> 86: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="87" class="l"><a class="l" href="#87"> 87: </a><span class="php-comment"> * @return int Returns the id of the new record.
</span></span><span id="88" class="l"><a class="l" href="#88"> 88: </a><span class="php-comment"> */</span>
</span><span id="89" class="l"><a class="l" href="#89"> 89: </a> <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> <a id="_insert" href="#_insert">insert</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="90" class="l"><a class="l" href="#90"> 90: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'book_datetime'</span>] = <span class="php-keyword2">date</span>(<span class="php-quote">'Y-m-d H:i:s'</span>);
</span><span id="91" class="l"><a class="l" href="#91"> 91: </a> <span class="php-var">$appointment_data</span>[<span class="php-quote">'hash'</span>] = <span class="php-var">$this</span>-&gt;generate_hash();
</span><span id="92" class="l"><a class="l" href="#92"> 92: </a>
</span><span id="93" class="l"><a class="l" href="#93"> 93: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;db-&gt;insert(<span class="php-quote">'ea_appointments'</span>, <span class="php-var">$appointment_data</span>)) {
</span><span id="94" class="l"><a class="l" href="#94"> 94: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not insert appointment record.'</span>);
</span><span id="95" class="l"><a class="l" href="#95"> 95: </a> }
</span><span id="96" class="l"><a class="l" href="#96"> 96: </a>
</span><span id="97" class="l"><a class="l" href="#97"> 97: </a> <span class="php-keyword1">return</span> <span class="php-keyword2">intval</span>(<span class="php-var">$this</span>-&gt;db-&gt;insert_id());
</span><span id="98" class="l"><a class="l" href="#98"> 98: </a> }
</span><span id="99" class="l"><a class="l" href="#99"> 99: </a>
</span><span id="100" class="l"><a class="l" href="#100">100: </a> <span class="php-comment">/**
</span></span><span id="101" class="l"><a class="l" href="#101">101: </a><span class="php-comment"> * Update an existing appointment record in the database.
</span></span><span id="102" class="l"><a class="l" href="#102">102: </a><span class="php-comment"> *
</span></span><span id="103" class="l"><a class="l" href="#103">103: </a><span class="php-comment"> * The appointment data argument should already include the record
</span></span><span id="104" class="l"><a class="l" href="#104">104: </a><span class="php-comment"> * id in order to process the update operation.
</span></span><span id="105" class="l"><a class="l" href="#105">105: </a><span class="php-comment"> *
</span></span><span id="106" class="l"><a class="l" href="#106">106: </a><span class="php-comment"> * @expectedException DatabaseException Raises when the update operation
</span></span><span id="107" class="l"><a class="l" href="#107">107: </a><span class="php-comment"> * failes to complete successfully.
</span></span><span id="108" class="l"><a class="l" href="#108">108: </a><span class="php-comment"> *
</span></span><span id="109" class="l"><a class="l" href="#109">109: </a><span class="php-comment"> * @param array $appointment_data Associative array with the appointment's
</span></span><span id="110" class="l"><a class="l" href="#110">110: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="111" class="l"><a class="l" href="#111">111: </a><span class="php-comment"> */</span>
</span><span id="112" class="l"><a class="l" href="#112">112: </a> <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> <a id="_update" href="#_update">update</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="113" class="l"><a class="l" href="#113">113: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="114" class="l"><a class="l" href="#114">114: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;db-&gt;update(<span class="php-quote">'ea_appointments'</span>, <span class="php-var">$appointment_data</span>)) {
</span><span id="115" class="l"><a class="l" href="#115">115: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not update appointment record.'</span>);
</span><span id="116" class="l"><a class="l" href="#116">116: </a> }
</span><span id="117" class="l"><a class="l" href="#117">117: </a> }
</span><span id="118" class="l"><a class="l" href="#118">118: </a>
</span><span id="119" class="l"><a class="l" href="#119">119: </a> <span class="php-comment">/**
</span></span><span id="120" class="l"><a class="l" href="#120">120: </a><span class="php-comment"> * Find the database id of an appointment record.
</span></span><span id="121" class="l"><a class="l" href="#121">121: </a><span class="php-comment"> *
</span></span><span id="122" class="l"><a class="l" href="#122">122: </a><span class="php-comment"> * &lt;strong&gt;IMPORTANT!&lt;/strong&gt; The record must already exists in the
</span></span><span id="123" class="l"><a class="l" href="#123">123: </a><span class="php-comment"> * database, otherwise an exception is raised.
</span></span><span id="124" class="l"><a class="l" href="#124">124: </a><span class="php-comment"> *
</span></span><span id="125" class="l"><a class="l" href="#125">125: </a><span class="php-comment"> * @expectedException DatabaseException
</span></span><span id="126" class="l"><a class="l" href="#126">126: </a><span class="php-comment"> *
</span></span><span id="127" class="l"><a class="l" href="#127">127: </a><span class="php-comment"> * @param array $appointment_data Array with the appointment data. The
</span></span><span id="128" class="l"><a class="l" href="#128">128: </a><span class="php-comment"> * keys of the array should have the same names as the db fields.
</span></span><span id="129" class="l"><a class="l" href="#129">129: </a><span class="php-comment"> * @return int Returns the id.
</span></span><span id="130" class="l"><a class="l" href="#130">130: </a><span class="php-comment"> */</span>
</span><span id="131" class="l"><a class="l" href="#131">131: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_find_record_id" href="#_find_record_id">find_record_id</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="132" class="l"><a class="l" href="#132">132: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-keyword1">array</span>(
</span><span id="133" class="l"><a class="l" href="#133">133: </a> <span class="php-quote">'start_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>],
</span><span id="134" class="l"><a class="l" href="#134">134: </a> <span class="php-quote">'end_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>],
</span><span id="135" class="l"><a class="l" href="#135">135: </a> <span class="php-quote">'id_users_provider'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>],
</span><span id="136" class="l"><a class="l" href="#136">136: </a> <span class="php-quote">'id_users_customer'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>],
</span><span id="137" class="l"><a class="l" href="#137">137: </a> <span class="php-quote">'id_services'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>]
</span><span id="138" class="l"><a class="l" href="#138">138: </a> ));
</span><span id="139" class="l"><a class="l" href="#139">139: </a>
</span><span id="140" class="l"><a class="l" href="#140">140: </a> <span class="php-var">$result</span> = <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_appointments'</span>);
</span><span id="141" class="l"><a class="l" href="#141">141: </a>
</span><span id="142" class="l"><a class="l" href="#142">142: </a> <span class="php-keyword1">if</span> (<span class="php-var">$result</span>-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="143" class="l"><a class="l" href="#143">143: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not find appointment record id.'</span>);
</span><span id="144" class="l"><a class="l" href="#144">144: </a> }
</span></span><span id="122" class="l"><a class="l" href="#122">122: </a><span class="php-comment"> * The appointment data should include the following fields in order
</span></span><span id="123" class="l"><a class="l" href="#123">123: </a><span class="php-comment"> * to get the unique id from the database: &quot;start_datetime&quot;, &quot;end_datetime&quot;,
</span></span><span id="124" class="l"><a class="l" href="#124">124: </a><span class="php-comment"> * &quot;id_users_provider&quot;, &quot;id_users_customer&quot;, &quot;id_services&quot;.
</span></span><span id="125" class="l"><a class="l" href="#125">125: </a><span class="php-comment"> *
</span></span><span id="126" class="l"><a class="l" href="#126">126: </a><span class="php-comment"> * &lt;strong&gt;IMPORTANT!&lt;/strong&gt; The record must already exists in the
</span></span><span id="127" class="l"><a class="l" href="#127">127: </a><span class="php-comment"> * database, otherwise an exception is raised.
</span></span><span id="128" class="l"><a class="l" href="#128">128: </a><span class="php-comment"> *
</span></span><span id="129" class="l"><a class="l" href="#129">129: </a><span class="php-comment"> * @expectedException DatabaseException Raises when this method cannot
</span></span><span id="130" class="l"><a class="l" href="#130">130: </a><span class="php-comment"> * find any record that matches the given data.
</span></span><span id="131" class="l"><a class="l" href="#131">131: </a><span class="php-comment"> *
</span></span><span id="132" class="l"><a class="l" href="#132">132: </a><span class="php-comment"> * @param array $appointment_data Array with the appointment data. The
</span></span><span id="133" class="l"><a class="l" href="#133">133: </a><span class="php-comment"> * keys of the array should have the same names as the db fields.
</span></span><span id="134" class="l"><a class="l" href="#134">134: </a><span class="php-comment"> * @return int Returns the db id of the record that matches the apppointment
</span></span><span id="135" class="l"><a class="l" href="#135">135: </a><span class="php-comment"> * data.
</span></span><span id="136" class="l"><a class="l" href="#136">136: </a><span class="php-comment"> */</span>
</span><span id="137" class="l"><a class="l" href="#137">137: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_find_record_id" href="#_find_record_id">find_record_id</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="138" class="l"><a class="l" href="#138">138: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-keyword1">array</span>(
</span><span id="139" class="l"><a class="l" href="#139">139: </a> <span class="php-quote">'start_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>],
</span><span id="140" class="l"><a class="l" href="#140">140: </a> <span class="php-quote">'end_datetime'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>],
</span><span id="141" class="l"><a class="l" href="#141">141: </a> <span class="php-quote">'id_users_provider'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>],
</span><span id="142" class="l"><a class="l" href="#142">142: </a> <span class="php-quote">'id_users_customer'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>],
</span><span id="143" class="l"><a class="l" href="#143">143: </a> <span class="php-quote">'id_services'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>]
</span><span id="144" class="l"><a class="l" href="#144">144: </a> ));
</span><span id="145" class="l"><a class="l" href="#145">145: </a>
</span><span id="146" class="l"><a class="l" href="#146">146: </a> <span class="php-keyword1">return</span> <span class="php-var">$result</span>-&gt;row()-&gt;id;
</span><span id="147" class="l"><a class="l" href="#147">147: </a> }
</span><span id="148" class="l"><a class="l" href="#148">148: </a>
</span><span id="149" class="l"><a class="l" href="#149">149: </a> <span class="php-comment">/**
</span></span><span id="150" class="l"><a class="l" href="#150">150: </a><span class="php-comment"> * Validate appointment data before the insert or
</span></span><span id="151" class="l"><a class="l" href="#151">151: </a><span class="php-comment"> * update operation is executed.
</span></span><span id="152" class="l"><a class="l" href="#152">152: </a><span class="php-comment"> *
</span></span><span id="153" class="l"><a class="l" href="#153">153: </a><span class="php-comment"> * @param array $appointment_data Contains the appointment data.
</span></span><span id="154" class="l"><a class="l" href="#154">154: </a><span class="php-comment"> * @return bool Returns the validation result.
</span></span><span id="155" class="l"><a class="l" href="#155">155: </a><span class="php-comment"> */</span>
</span><span id="156" class="l"><a class="l" href="#156">156: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_validate_data" href="#_validate_data">validate_data</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="157" class="l"><a class="l" href="#157">157: </a> <span class="php-var">$this</span>-&gt;load-&gt;helper(<span class="php-quote">'data_validation'</span>);
</span><span id="158" class="l"><a class="l" href="#158">158: </a>
</span><span id="159" class="l"><a class="l" href="#159">159: </a> <span class="php-keyword1">try</span> {
</span><span id="160" class="l"><a class="l" href="#160">160: </a> <span class="php-comment">// Check if appointment dates are valid.</span>
</span><span id="161" class="l"><a class="l" href="#161">161: </a> <span class="php-keyword1">if</span> (!validate_mysql_datetime(<span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>])) {
</span><span id="162" class="l"><a class="l" href="#162">162: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment start datetime is invalid.'</span>);
</span><span id="163" class="l"><a class="l" href="#163">163: </a> }
</span><span id="164" class="l"><a class="l" href="#164">164: </a>
</span><span id="165" class="l"><a class="l" href="#165">165: </a> <span class="php-keyword1">if</span> (!validate_mysql_datetime(<span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>])) {
</span><span id="166" class="l"><a class="l" href="#166">166: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment end datetime is invalid.'</span>);
</span><span id="167" class="l"><a class="l" href="#167">167: </a> }
</span><span id="168" class="l"><a class="l" href="#168">168: </a>
</span><span id="169" class="l"><a class="l" href="#169">169: </a> <span class="php-comment">// Check if the provider's id is valid. </span>
</span><span id="170" class="l"><a class="l" href="#170">170: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db
</span><span id="171" class="l"><a class="l" href="#171">171: </a> -&gt;select(<span class="php-quote">'*'</span>)
</span><span id="172" class="l"><a class="l" href="#172">172: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="173" class="l"><a class="l" href="#173">173: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="174" class="l"><a class="l" href="#174">174: </a> -&gt;where(<span class="php-quote">'ea_users.id'</span>, <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>])
</span><span id="175" class="l"><a class="l" href="#175">175: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, DB_SLUG_PROVIDER)
</span><span id="176" class="l"><a class="l" href="#176">176: </a> -&gt;get()-&gt;num_rows();
</span><span id="177" class="l"><a class="l" href="#177">177: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="178" class="l"><a class="l" href="#178">178: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment provider id is invalid.'</span>);
</span><span id="179" class="l"><a class="l" href="#179">179: </a> }
</span><span id="180" class="l"><a class="l" href="#180">180: </a>
</span><span id="181" class="l"><a class="l" href="#181">181: </a> <span class="php-comment">// Check if the customer's id is valid.</span>
</span><span id="182" class="l"><a class="l" href="#182">182: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db
</span><span id="183" class="l"><a class="l" href="#183">183: </a> -&gt;select(<span class="php-quote">'*'</span>)
</span><span id="184" class="l"><a class="l" href="#184">184: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="185" class="l"><a class="l" href="#185">185: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="186" class="l"><a class="l" href="#186">186: </a> -&gt;where(<span class="php-quote">'ea_users.id'</span>, <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>])
</span><span id="187" class="l"><a class="l" href="#187">187: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, DB_SLUG_CUSTOMER)
</span><span id="188" class="l"><a class="l" href="#188">188: </a> -&gt;get()-&gt;num_rows();
</span><span id="189" class="l"><a class="l" href="#189">189: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="190" class="l"><a class="l" href="#190">190: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment customer id is invalid.'</span>);
</span><span id="191" class="l"><a class="l" href="#191">191: </a> }
</span><span id="192" class="l"><a class="l" href="#192">192: </a>
</span><span id="193" class="l"><a class="l" href="#193">193: </a> <span class="php-comment">// Check if the service id is valid.</span>
</span><span id="194" class="l"><a class="l" href="#194">194: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_services'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>]))-&gt;num_rows();
</span><span id="195" class="l"><a class="l" href="#195">195: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="196" class="l"><a class="l" href="#196">196: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment customer id is invalid.'</span>);
</span><span id="197" class="l"><a class="l" href="#197">197: </a> }
</span><span id="198" class="l"><a class="l" href="#198">198: </a>
</span><span id="199" class="l"><a class="l" href="#199">199: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">TRUE</span>;
</span><span id="200" class="l"><a class="l" href="#200">200: </a> } <span class="php-keyword1">catch</span> (Exception <span class="php-var">$exc</span>) {
</span><span id="201" class="l"><a class="l" href="#201">201: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>;
</span><span id="202" class="l"><a class="l" href="#202">202: </a> }
</span><span id="203" class="l"><a class="l" href="#203">203: </a> }
</span><span id="204" class="l"><a class="l" href="#204">204: </a>
</span><span id="205" class="l"><a class="l" href="#205">205: </a> <span class="php-comment">/**
</span></span><span id="206" class="l"><a class="l" href="#206">206: </a><span class="php-comment"> * Delete an existing appointment record from the database.
</span></span><span id="207" class="l"><a class="l" href="#207">207: </a><span class="php-comment"> *
</span></span><span id="208" class="l"><a class="l" href="#208">208: </a><span class="php-comment"> * @expectedException InvalidArgumentException Raises when the $appointment_id
</span></span><span id="209" class="l"><a class="l" href="#209">209: </a><span class="php-comment"> * is not an integer.
</span></span><span id="210" class="l"><a class="l" href="#210">210: </a><span class="php-comment"> *
</span></span><span id="211" class="l"><a class="l" href="#211">211: </a><span class="php-comment"> * @param int $appointment_id The record id to be deleted.
</span></span><span id="212" class="l"><a class="l" href="#212">212: </a><span class="php-comment"> * @return bool Returns the delete operation result.
</span></span><span id="213" class="l"><a class="l" href="#213">213: </a><span class="php-comment"> */</span>
</span><span id="214" class="l"><a class="l" href="#214">214: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <span class="php-keyword2">delete</span>(<span class="php-var">$appointment_id</span>) {
</span><span id="215" class="l"><a class="l" href="#215">215: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$appointment_id</span>)) {
</span><span id="216" class="l"><a class="l" href="#216">216: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument type $appointment_id : '</span> . <span class="php-var">$appointment_id</span>);
</span><span id="217" class="l"><a class="l" href="#217">217: </a> }
</span><span id="218" class="l"><a class="l" href="#218">218: </a>
</span><span id="219" class="l"><a class="l" href="#219">219: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;num_rows();
</span><span id="220" class="l"><a class="l" href="#220">220: </a>
</span><span id="221" class="l"><a class="l" href="#221">221: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="222" class="l"><a class="l" href="#222">222: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>; <span class="php-comment">// Record does not exist.</span>
</span><span id="223" class="l"><a class="l" href="#223">223: </a> }
</span><span id="224" class="l"><a class="l" href="#224">224: </a>
</span><span id="225" class="l"><a class="l" href="#225">225: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$appointment_id</span>);
</span><span id="226" class="l"><a class="l" href="#226">226: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;<span class="php-keyword2">delete</span>(<span class="php-quote">'ea_appointments'</span>);
</span><span id="227" class="l"><a class="l" href="#227">227: </a> }
</span><span id="228" class="l"><a class="l" href="#228">228: </a>
</span><span id="229" class="l"><a class="l" href="#229">229: </a> <span class="php-comment">/**
</span></span><span id="230" class="l"><a class="l" href="#230">230: </a><span class="php-comment"> * Get a specific row from the appointments table.
</span></span><span id="231" class="l"><a class="l" href="#231">231: </a><span class="php-comment"> *
</span></span><span id="232" class="l"><a class="l" href="#232">232: </a><span class="php-comment"> * @param int $appointment_id The record's id to be returned.
</span></span><span id="233" class="l"><a class="l" href="#233">233: </a><span class="php-comment"> * @return array Returns an associative array with the selected
</span></span><span id="234" class="l"><a class="l" href="#234">234: </a><span class="php-comment"> * record's data. Each key has the same name as the database
</span></span><span id="235" class="l"><a class="l" href="#235">235: </a><span class="php-comment"> * field names.
</span></span><span id="236" class="l"><a class="l" href="#236">236: </a><span class="php-comment"> */</span>
</span><span id="237" class="l"><a class="l" href="#237">237: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_row" href="#_get_row">get_row</a>(<span class="php-var">$appointment_id</span>) {
</span><span id="238" class="l"><a class="l" href="#238">238: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$appointment_id</span>)) {
</span><span id="239" class="l"><a class="l" href="#239">239: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument given. Expected integer for the $appointment_id : '</span> . <span class="php-var">$appointment_id</span>);
</span><span id="240" class="l"><a class="l" href="#240">240: </a> }
</span><span id="241" class="l"><a class="l" href="#241">241: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;row_array();
</span><span id="242" class="l"><a class="l" href="#242">242: </a> }
</span><span id="243" class="l"><a class="l" href="#243">243: </a>
</span><span id="244" class="l"><a class="l" href="#244">244: </a> <span class="php-comment">/**
</span></span><span id="245" class="l"><a class="l" href="#245">245: </a><span class="php-comment"> * Get a specific field value from the database.
</span></span><span id="246" class="l"><a class="l" href="#246">246: </a><span class="php-comment"> *
</span></span><span id="247" class="l"><a class="l" href="#247">247: </a><span class="php-comment"> * @param string $field_name The field name of the value to be
</span></span><span id="248" class="l"><a class="l" href="#248">248: </a><span class="php-comment"> * returned.
</span></span><span id="249" class="l"><a class="l" href="#249">249: </a><span class="php-comment"> * @param int $appointment_id The selected record's id.
</span></span><span id="250" class="l"><a class="l" href="#250">250: </a><span class="php-comment"> * @return string Returns the records value from the database.
</span></span><span id="251" class="l"><a class="l" href="#251">251: </a><span class="php-comment"> */</span>
</span><span id="252" class="l"><a class="l" href="#252">252: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_value" href="#_get_value">get_value</a>(<span class="php-var">$field_name</span>, <span class="php-var">$appointment_id</span>) {
</span><span id="253" class="l"><a class="l" href="#253">253: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$appointment_id</span>)) {
</span><span id="254" class="l"><a class="l" href="#254">254: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument given, expected integer for the $appointment_id : '</span> . <span class="php-var">$appointment_id</span>);
</span><span id="255" class="l"><a class="l" href="#255">255: </a> }
</span><span id="256" class="l"><a class="l" href="#256">256: </a>
</span><span id="257" class="l"><a class="l" href="#257">257: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_string</span>(<span class="php-var">$field_name</span>)) {
</span><span id="258" class="l"><a class="l" href="#258">258: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument given, expected string for the $field_name : '</span> . <span class="php-var">$field_name</span>);
</span><span id="259" class="l"><a class="l" href="#259">259: </a> }
</span><span id="260" class="l"><a class="l" href="#260">260: </a>
</span><span id="261" class="l"><a class="l" href="#261">261: </a> <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="262" class="l"><a class="l" href="#262">262: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The record with the provided id does not exist in the database : '</span> . <span class="php-var">$appointment_id</span>);
</span><span id="263" class="l"><a class="l" href="#263">263: </a> }
</span><span id="264" class="l"><a class="l" href="#264">264: </a>
</span><span id="265" class="l"><a class="l" href="#265">265: </a> <span class="php-var">$row_data</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;row_array();
</span><span id="266" class="l"><a class="l" href="#266">266: </a>
</span><span id="267" class="l"><a class="l" href="#267">267: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>])) {
</span><span id="268" class="l"><a class="l" href="#268">268: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The given field name does not exist in the database : '</span> . <span class="php-var">$field_name</span>);
</span><span id="269" class="l"><a class="l" href="#269">269: </a> }
</span><span id="270" class="l"><a class="l" href="#270">270: </a>
</span><span id="271" class="l"><a class="l" href="#271">271: </a> <span class="php-keyword1">return</span> <span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>];
</span><span id="272" class="l"><a class="l" href="#272">272: </a> }
</span><span id="273" class="l"><a class="l" href="#273">273: </a>
</span><span id="274" class="l"><a class="l" href="#274">274: </a> <span class="php-comment">/**
</span></span><span id="275" class="l"><a class="l" href="#275">275: </a><span class="php-comment"> * Get all, or specific records from appointment's table.
</span></span><span id="276" class="l"><a class="l" href="#276">276: </a><span class="php-comment"> *
</span></span><span id="277" class="l"><a class="l" href="#277">277: </a><span class="php-comment"> * @example $this-&gt;Model-&gt;getBatch('id = ' . $recordId);
</span></span><span id="278" class="l"><a class="l" href="#278">278: </a><span class="php-comment"> *
</span></span><span id="279" class="l"><a class="l" href="#279">279: </a><span class="php-comment"> * @param string $where_clause (OPTIONAL) The WHERE clause of
</span></span><span id="280" class="l"><a class="l" href="#280">280: </a><span class="php-comment"> * the query to be executed. DO NOT INCLUDE 'WHERE' KEYWORD.
</span></span><span id="281" class="l"><a class="l" href="#281">281: </a><span class="php-comment"> * @return array Returns the rows from the database.
</span></span><span id="282" class="l"><a class="l" href="#282">282: </a><span class="php-comment"> */</span>
</span><span id="283" class="l"><a class="l" href="#283">283: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_batch" href="#_get_batch">get_batch</a>(<span class="php-var">$where_clause</span> = <span class="php-quote">''</span>) {
</span><span id="284" class="l"><a class="l" href="#284">284: </a> <span class="php-keyword1">if</span> (<span class="php-var">$where_clause</span> != <span class="php-quote">''</span>) {
</span><span id="285" class="l"><a class="l" href="#285">285: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-var">$where_clause</span>);
</span><span id="286" class="l"><a class="l" href="#286">286: </a> }
</span><span id="287" class="l"><a class="l" href="#287">287: </a>
</span><span id="288" class="l"><a class="l" href="#288">288: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_appointments'</span>)-&gt;result_array();
</span><span id="289" class="l"><a class="l" href="#289">289: </a> }
</span><span id="290" class="l"><a class="l" href="#290">290: </a>}
</span><span id="291" class="l"><a class="l" href="#291">291: </a>
</span><span id="292" class="l"><a class="l" href="#292">292: </a><span class="php-comment">/* End of file appointments_model.php */</span>
</span><span id="293" class="l"><a class="l" href="#293">293: </a></span><span class="php-comment">/* Location: ./application/models/appointments_model.php */</span></code></pre>
</span><span id="146" class="l"><a class="l" href="#146">146: </a> <span class="php-var">$result</span> = <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_appointments'</span>);
</span><span id="147" class="l"><a class="l" href="#147">147: </a>
</span><span id="148" class="l"><a class="l" href="#148">148: </a> <span class="php-keyword1">if</span> (<span class="php-var">$result</span>-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="149" class="l"><a class="l" href="#149">149: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not find appointment record id.'</span>);
</span><span id="150" class="l"><a class="l" href="#150">150: </a> }
</span><span id="151" class="l"><a class="l" href="#151">151: </a>
</span><span id="152" class="l"><a class="l" href="#152">152: </a> <span class="php-keyword1">return</span> <span class="php-var">$result</span>-&gt;row()-&gt;id;
</span><span id="153" class="l"><a class="l" href="#153">153: </a> }
</span><span id="154" class="l"><a class="l" href="#154">154: </a>
</span><span id="155" class="l"><a class="l" href="#155">155: </a> <span class="php-comment">/**
</span></span><span id="156" class="l"><a class="l" href="#156">156: </a><span class="php-comment"> * Validate appointment data before the insert or update operations
</span></span><span id="157" class="l"><a class="l" href="#157">157: </a><span class="php-comment"> * are executed.
</span></span><span id="158" class="l"><a class="l" href="#158">158: </a><span class="php-comment"> *
</span></span><span id="159" class="l"><a class="l" href="#159">159: </a><span class="php-comment"> * @param array $appointment_data Contains the appointment data.
</span></span><span id="160" class="l"><a class="l" href="#160">160: </a><span class="php-comment"> * @return bool Returns the validation result.
</span></span><span id="161" class="l"><a class="l" href="#161">161: </a><span class="php-comment"> */</span>
</span><span id="162" class="l"><a class="l" href="#162">162: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_validate_data" href="#_validate_data">validate_data</a>(<span class="php-var">$appointment_data</span>) {
</span><span id="163" class="l"><a class="l" href="#163">163: </a> <span class="php-var">$this</span>-&gt;load-&gt;helper(<span class="php-quote">'data_validation'</span>);
</span><span id="164" class="l"><a class="l" href="#164">164: </a>
</span><span id="165" class="l"><a class="l" href="#165">165: </a> <span class="php-keyword1">try</span> {
</span><span id="166" class="l"><a class="l" href="#166">166: </a> <span class="php-comment">// If a appointment id is given, check wether the record exists</span>
</span><span id="167" class="l"><a class="l" href="#167">167: </a> <span class="php-comment">// in the database.</span>
</span><span id="168" class="l"><a class="l" href="#168">168: </a> <span class="php-keyword1">if</span> (<span class="php-keyword1">isset</span>(<span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>])) {
</span><span id="169" class="l"><a class="l" href="#169">169: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>,
</span><span id="170" class="l"><a class="l" href="#170">170: </a> <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id'</span>]))-&gt;num_rows();
</span><span id="171" class="l"><a class="l" href="#171">171: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="172" class="l"><a class="l" href="#172">172: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Provided appointment id does not '</span>
</span><span id="173" class="l"><a class="l" href="#173">173: </a> . <span class="php-quote">'exist in the database.'</span>);
</span><span id="174" class="l"><a class="l" href="#174">174: </a> }
</span><span id="175" class="l"><a class="l" href="#175">175: </a> }
</span><span id="176" class="l"><a class="l" href="#176">176: </a>
</span><span id="177" class="l"><a class="l" href="#177">177: </a> <span class="php-comment">// Check if appointment dates are valid.</span>
</span><span id="178" class="l"><a class="l" href="#178">178: </a> <span class="php-keyword1">if</span> (!validate_mysql_datetime(<span class="php-var">$appointment_data</span>[<span class="php-quote">'start_datetime'</span>])) {
</span><span id="179" class="l"><a class="l" href="#179">179: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment start datetime is invalid.'</span>);
</span><span id="180" class="l"><a class="l" href="#180">180: </a> }
</span><span id="181" class="l"><a class="l" href="#181">181: </a>
</span><span id="182" class="l"><a class="l" href="#182">182: </a> <span class="php-keyword1">if</span> (!validate_mysql_datetime(<span class="php-var">$appointment_data</span>[<span class="php-quote">'end_datetime'</span>])) {
</span><span id="183" class="l"><a class="l" href="#183">183: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment end datetime is invalid.'</span>);
</span><span id="184" class="l"><a class="l" href="#184">184: </a> }
</span><span id="185" class="l"><a class="l" href="#185">185: </a>
</span><span id="186" class="l"><a class="l" href="#186">186: </a> <span class="php-comment">// Check if the provider's id is valid. </span>
</span><span id="187" class="l"><a class="l" href="#187">187: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db
</span><span id="188" class="l"><a class="l" href="#188">188: </a> -&gt;select(<span class="php-quote">'*'</span>)
</span><span id="189" class="l"><a class="l" href="#189">189: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="190" class="l"><a class="l" href="#190">190: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="191" class="l"><a class="l" href="#191">191: </a> -&gt;where(<span class="php-quote">'ea_users.id'</span>, <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_provider'</span>])
</span><span id="192" class="l"><a class="l" href="#192">192: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, DB_SLUG_PROVIDER)
</span><span id="193" class="l"><a class="l" href="#193">193: </a> -&gt;get()-&gt;num_rows();
</span><span id="194" class="l"><a class="l" href="#194">194: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="195" class="l"><a class="l" href="#195">195: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment provider id is invalid.'</span>);
</span><span id="196" class="l"><a class="l" href="#196">196: </a> }
</span><span id="197" class="l"><a class="l" href="#197">197: </a>
</span><span id="198" class="l"><a class="l" href="#198">198: </a> <span class="php-comment">// Check if the customer's id is valid.</span>
</span><span id="199" class="l"><a class="l" href="#199">199: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db
</span><span id="200" class="l"><a class="l" href="#200">200: </a> -&gt;select(<span class="php-quote">'*'</span>)
</span><span id="201" class="l"><a class="l" href="#201">201: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="202" class="l"><a class="l" href="#202">202: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="203" class="l"><a class="l" href="#203">203: </a> -&gt;where(<span class="php-quote">'ea_users.id'</span>, <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_users_customer'</span>])
</span><span id="204" class="l"><a class="l" href="#204">204: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, DB_SLUG_CUSTOMER)
</span><span id="205" class="l"><a class="l" href="#205">205: </a> -&gt;get()-&gt;num_rows();
</span><span id="206" class="l"><a class="l" href="#206">206: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="207" class="l"><a class="l" href="#207">207: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment customer id is invalid.'</span>);
</span><span id="208" class="l"><a class="l" href="#208">208: </a> }
</span><span id="209" class="l"><a class="l" href="#209">209: </a>
</span><span id="210" class="l"><a class="l" href="#210">210: </a> <span class="php-comment">// Check if the service id is valid.</span>
</span><span id="211" class="l"><a class="l" href="#211">211: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_services'</span>,
</span><span id="212" class="l"><a class="l" href="#212">212: </a> <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_data</span>[<span class="php-quote">'id_services'</span>]))-&gt;num_rows();
</span><span id="213" class="l"><a class="l" href="#213">213: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="214" class="l"><a class="l" href="#214">214: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Appointment customer id is invalid.'</span>);
</span><span id="215" class="l"><a class="l" href="#215">215: </a> }
</span><span id="216" class="l"><a class="l" href="#216">216: </a>
</span><span id="217" class="l"><a class="l" href="#217">217: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">TRUE</span>;
</span><span id="218" class="l"><a class="l" href="#218">218: </a> } <span class="php-keyword1">catch</span> (Exception <span class="php-var">$exc</span>) {
</span><span id="219" class="l"><a class="l" href="#219">219: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>;
</span><span id="220" class="l"><a class="l" href="#220">220: </a> }
</span><span id="221" class="l"><a class="l" href="#221">221: </a> }
</span><span id="222" class="l"><a class="l" href="#222">222: </a>
</span><span id="223" class="l"><a class="l" href="#223">223: </a> <span class="php-comment">/**
</span></span><span id="224" class="l"><a class="l" href="#224">224: </a><span class="php-comment"> * Delete an existing appointment record from the database.
</span></span><span id="225" class="l"><a class="l" href="#225">225: </a><span class="php-comment"> *
</span></span><span id="226" class="l"><a class="l" href="#226">226: </a><span class="php-comment"> * @expectedException InvalidArgumentException Raises when the $appointment_id
</span></span><span id="227" class="l"><a class="l" href="#227">227: </a><span class="php-comment"> * is not an integer.
</span></span><span id="228" class="l"><a class="l" href="#228">228: </a><span class="php-comment"> *
</span></span><span id="229" class="l"><a class="l" href="#229">229: </a><span class="php-comment"> * @param int $appointment_id The record id to be deleted.
</span></span><span id="230" class="l"><a class="l" href="#230">230: </a><span class="php-comment"> * @return bool Returns the delete operation result.
</span></span><span id="231" class="l"><a class="l" href="#231">231: </a><span class="php-comment"> */</span>
</span><span id="232" class="l"><a class="l" href="#232">232: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <span class="php-keyword2">delete</span>(<span class="php-var">$appointment_id</span>) {
</span><span id="233" class="l"><a class="l" href="#233">233: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$appointment_id</span>)) {
</span><span id="234" class="l"><a class="l" href="#234">234: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument type $appointment_id : '</span>
</span><span id="235" class="l"><a class="l" href="#235">235: </a> . <span class="php-var">$appointment_id</span>);
</span><span id="236" class="l"><a class="l" href="#236">236: </a> }
</span><span id="237" class="l"><a class="l" href="#237">237: </a>
</span><span id="238" class="l"><a class="l" href="#238">238: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>,
</span><span id="239" class="l"><a class="l" href="#239">239: </a> <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;num_rows();
</span><span id="240" class="l"><a class="l" href="#240">240: </a>
</span><span id="241" class="l"><a class="l" href="#241">241: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="242" class="l"><a class="l" href="#242">242: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>; <span class="php-comment">// Record does not exist.</span>
</span><span id="243" class="l"><a class="l" href="#243">243: </a> }
</span><span id="244" class="l"><a class="l" href="#244">244: </a>
</span><span id="245" class="l"><a class="l" href="#245">245: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$appointment_id</span>);
</span><span id="246" class="l"><a class="l" href="#246">246: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;<span class="php-keyword2">delete</span>(<span class="php-quote">'ea_appointments'</span>);
</span><span id="247" class="l"><a class="l" href="#247">247: </a> }
</span><span id="248" class="l"><a class="l" href="#248">248: </a>
</span><span id="249" class="l"><a class="l" href="#249">249: </a> <span class="php-comment">/**
</span></span><span id="250" class="l"><a class="l" href="#250">250: </a><span class="php-comment"> * Get a specific row from the appointments table.
</span></span><span id="251" class="l"><a class="l" href="#251">251: </a><span class="php-comment"> *
</span></span><span id="252" class="l"><a class="l" href="#252">252: </a><span class="php-comment"> * @param int $appointment_id The record's id to be returned.
</span></span><span id="253" class="l"><a class="l" href="#253">253: </a><span class="php-comment"> * @return array Returns an associative array with the selected
</span></span><span id="254" class="l"><a class="l" href="#254">254: </a><span class="php-comment"> * record's data. Each key has the same name as the database
</span></span><span id="255" class="l"><a class="l" href="#255">255: </a><span class="php-comment"> * field names.
</span></span><span id="256" class="l"><a class="l" href="#256">256: </a><span class="php-comment"> */</span>
</span><span id="257" class="l"><a class="l" href="#257">257: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_row" href="#_get_row">get_row</a>(<span class="php-var">$appointment_id</span>) {
</span><span id="258" class="l"><a class="l" href="#258">258: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$appointment_id</span>)) {
</span><span id="259" class="l"><a class="l" href="#259">259: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument given. Expected '</span>
</span><span id="260" class="l"><a class="l" href="#260">260: </a> . <span class="php-quote">'integer for the $appointment_id : '</span> . <span class="php-var">$appointment_id</span>);
</span><span id="261" class="l"><a class="l" href="#261">261: </a> }
</span><span id="262" class="l"><a class="l" href="#262">262: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>,
</span><span id="263" class="l"><a class="l" href="#263">263: </a> <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;row_array();
</span><span id="264" class="l"><a class="l" href="#264">264: </a> }
</span><span id="265" class="l"><a class="l" href="#265">265: </a>
</span><span id="266" class="l"><a class="l" href="#266">266: </a> <span class="php-comment">/**
</span></span><span id="267" class="l"><a class="l" href="#267">267: </a><span class="php-comment"> * Get a specific field value from the database.
</span></span><span id="268" class="l"><a class="l" href="#268">268: </a><span class="php-comment"> *
</span></span><span id="269" class="l"><a class="l" href="#269">269: </a><span class="php-comment"> * @param string $field_name The field name of the value to be returned.
</span></span><span id="270" class="l"><a class="l" href="#270">270: </a><span class="php-comment"> * @param int $appointment_id The selected record's id.
</span></span><span id="271" class="l"><a class="l" href="#271">271: </a><span class="php-comment"> * @return string Returns the records value from the database.
</span></span><span id="272" class="l"><a class="l" href="#272">272: </a><span class="php-comment"> */</span>
</span><span id="273" class="l"><a class="l" href="#273">273: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_value" href="#_get_value">get_value</a>(<span class="php-var">$field_name</span>, <span class="php-var">$appointment_id</span>) {
</span><span id="274" class="l"><a class="l" href="#274">274: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$appointment_id</span>)) {
</span><span id="275" class="l"><a class="l" href="#275">275: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument given, expected '</span>
</span><span id="276" class="l"><a class="l" href="#276">276: </a> . <span class="php-quote">'integer for the $appointment_id : '</span> . <span class="php-var">$appointment_id</span>);
</span><span id="277" class="l"><a class="l" href="#277">277: </a> }
</span><span id="278" class="l"><a class="l" href="#278">278: </a>
</span><span id="279" class="l"><a class="l" href="#279">279: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_string</span>(<span class="php-var">$field_name</span>)) {
</span><span id="280" class="l"><a class="l" href="#280">280: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument given, expected '</span>
</span><span id="281" class="l"><a class="l" href="#281">281: </a> . <span class="php-quote">'string for the $field_name : '</span> . <span class="php-var">$field_name</span>);
</span><span id="282" class="l"><a class="l" href="#282">282: </a> }
</span><span id="283" class="l"><a class="l" href="#283">283: </a>
</span><span id="284" class="l"><a class="l" href="#284">284: </a> <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>,
</span><span id="285" class="l"><a class="l" href="#285">285: </a> <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="286" class="l"><a class="l" href="#286">286: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The record with the provided id '</span>
</span><span id="287" class="l"><a class="l" href="#287">287: </a> . <span class="php-quote">'does not exist in the database : '</span> . <span class="php-var">$appointment_id</span>);
</span><span id="288" class="l"><a class="l" href="#288">288: </a> }
</span><span id="289" class="l"><a class="l" href="#289">289: </a>
</span><span id="290" class="l"><a class="l" href="#290">290: </a> <span class="php-var">$row_data</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_appointments'</span>,
</span><span id="291" class="l"><a class="l" href="#291">291: </a> <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$appointment_id</span>))-&gt;row_array();
</span><span id="292" class="l"><a class="l" href="#292">292: </a>
</span><span id="293" class="l"><a class="l" href="#293">293: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>])) {
</span><span id="294" class="l"><a class="l" href="#294">294: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The given field name does not '</span>
</span><span id="295" class="l"><a class="l" href="#295">295: </a> . <span class="php-quote">'exist in the database : '</span> . <span class="php-var">$field_name</span>);
</span><span id="296" class="l"><a class="l" href="#296">296: </a> }
</span><span id="297" class="l"><a class="l" href="#297">297: </a>
</span><span id="298" class="l"><a class="l" href="#298">298: </a> <span class="php-keyword1">return</span> <span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>];
</span><span id="299" class="l"><a class="l" href="#299">299: </a> }
</span><span id="300" class="l"><a class="l" href="#300">300: </a>
</span><span id="301" class="l"><a class="l" href="#301">301: </a> <span class="php-comment">/**
</span></span><span id="302" class="l"><a class="l" href="#302">302: </a><span class="php-comment"> * Get all, or specific records from appointment's table.
</span></span><span id="303" class="l"><a class="l" href="#303">303: </a><span class="php-comment"> *
</span></span><span id="304" class="l"><a class="l" href="#304">304: </a><span class="php-comment"> * @example $this-&gt;Model-&gt;getBatch('id = ' . $recordId);
</span></span><span id="305" class="l"><a class="l" href="#305">305: </a><span class="php-comment"> *
</span></span><span id="306" class="l"><a class="l" href="#306">306: </a><span class="php-comment"> * @param string $where_clause (OPTIONAL) The WHERE clause of
</span></span><span id="307" class="l"><a class="l" href="#307">307: </a><span class="php-comment"> * the query to be executed. DO NOT INCLUDE 'WHERE' KEYWORD.
</span></span><span id="308" class="l"><a class="l" href="#308">308: </a><span class="php-comment"> * @return array Returns the rows from the database.
</span></span><span id="309" class="l"><a class="l" href="#309">309: </a><span class="php-comment"> */</span>
</span><span id="310" class="l"><a class="l" href="#310">310: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_batch" href="#_get_batch">get_batch</a>(<span class="php-var">$where_clause</span> = <span class="php-quote">''</span>) {
</span><span id="311" class="l"><a class="l" href="#311">311: </a> <span class="php-keyword1">if</span> (<span class="php-var">$where_clause</span> != <span class="php-quote">''</span>) {
</span><span id="312" class="l"><a class="l" href="#312">312: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-var">$where_clause</span>);
</span><span id="313" class="l"><a class="l" href="#313">313: </a> }
</span><span id="314" class="l"><a class="l" href="#314">314: </a>
</span><span id="315" class="l"><a class="l" href="#315">315: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_appointments'</span>)-&gt;result_array();
</span><span id="316" class="l"><a class="l" href="#316">316: </a> }
</span><span id="317" class="l"><a class="l" href="#317">317: </a>
</span><span id="318" class="l"><a class="l" href="#318">318: </a> <span class="php-comment">/**
</span></span><span id="319" class="l"><a class="l" href="#319">319: </a><span class="php-comment"> * Generate a unique hash for the given appointment data.
</span></span><span id="320" class="l"><a class="l" href="#320">320: </a><span class="php-comment"> *
</span></span><span id="321" class="l"><a class="l" href="#321">321: </a><span class="php-comment"> * This method uses the current date-time to generate a unique
</span></span><span id="322" class="l"><a class="l" href="#322">322: </a><span class="php-comment"> * hash string that is later used to identify this appointment.
</span></span><span id="323" class="l"><a class="l" href="#323">323: </a><span class="php-comment"> * Hash is needed when the email is send to the user with an
</span></span><span id="324" class="l"><a class="l" href="#324">324: </a><span class="php-comment"> * edit link.
</span></span><span id="325" class="l"><a class="l" href="#325">325: </a><span class="php-comment"> *
</span></span><span id="326" class="l"><a class="l" href="#326">326: </a><span class="php-comment"> * @return string Returns the unique appointment hash.
</span></span><span id="327" class="l"><a class="l" href="#327">327: </a><span class="php-comment"> */</span>
</span><span id="328" class="l"><a class="l" href="#328">328: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_generate_hash" href="#_generate_hash">generate_hash</a>() {
</span><span id="329" class="l"><a class="l" href="#329">329: </a> <span class="php-var">$current_date</span> = <span class="php-keyword1">new</span> DateTime();
</span><span id="330" class="l"><a class="l" href="#330">330: </a> <span class="php-keyword1">return</span> <span class="php-keyword2">md5</span>(<span class="php-var">$current_date</span>-&gt;getTimestamp());
</span><span id="331" class="l"><a class="l" href="#331">331: </a> }
</span><span id="332" class="l"><a class="l" href="#332">332: </a>}
</span><span id="333" class="l"><a class="l" href="#333">333: </a>
</span><span id="334" class="l"><a class="l" href="#334">334: </a><span class="php-comment">/* End of file appointments_model.php */</span>
</span><span id="335" class="l"><a class="l" href="#335">335: </a></span><span class="php-comment">/* Location: ./application/models/appointments_model.php */</span></code></pre>
<div id="footer">
API documentation generated by <a href="http://apigen.org">ApiGen 2.8.0</a>

View file

@ -100,15 +100,15 @@
</span></span><span id="23" class="l"><a class="l" href="#23"> 23: </a><span class="php-comment"> * @return int Returns the customer id.
</span></span><span id="24" class="l"><a class="l" href="#24"> 24: </a><span class="php-comment"> */</span>
</span><span id="25" class="l"><a class="l" href="#25"> 25: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_add" href="#_add">add</a>(<span class="php-var">$customer_data</span>) {
</span><span id="26" class="l"><a class="l" href="#26"> 26: </a> <span class="php-comment">// Validate the appointment data before doing anything.</span>
</span><span id="26" class="l"><a class="l" href="#26"> 26: </a> <span class="php-comment">// Validate the customer data before doing anything.</span>
</span><span id="27" class="l"><a class="l" href="#27"> 27: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;validate_data(<span class="php-var">$customer_data</span>)) {
</span><span id="28" class="l"><a class="l" href="#28"> 28: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> ValidationException(<span class="php-quote">'Customer data are not valid.'</span>);
</span><span id="29" class="l"><a class="l" href="#29"> 29: </a> }
</span><span id="30" class="l"><a class="l" href="#30"> 30: </a>
</span><span id="31" class="l"><a class="l" href="#31"> 31: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;exists(<span class="php-var">$customer_data</span>)) {
</span><span id="31" class="l"><a class="l" href="#31"> 31: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>])) {
</span><span id="32" class="l"><a class="l" href="#32"> 32: </a> <span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;insert(<span class="php-var">$customer_data</span>);
</span><span id="33" class="l"><a class="l" href="#33"> 33: </a> } <span class="php-keyword1">else</span> {
</span><span id="34" class="l"><a class="l" href="#34"> 34: </a> <span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;update(<span class="php-var">$customer_data</span>);
</span><span id="34" class="l"><a class="l" href="#34"> 34: </a> <span class="php-var">$this</span>-&gt;update(<span class="php-var">$customer_data</span>);
</span><span id="35" class="l"><a class="l" href="#35"> 35: </a> }
</span><span id="36" class="l"><a class="l" href="#36"> 36: </a>
</span><span id="37" class="l"><a class="l" href="#37"> 37: </a> <span class="php-keyword1">return</span> <span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>];
@ -180,187 +180,201 @@
</span></span><span id="103" class="l"><a class="l" href="#103">103: </a><span class="php-comment"> * data. Each key has the same name with the database fields.
</span></span><span id="104" class="l"><a class="l" href="#104">104: </a><span class="php-comment"> * @return int Returns the updated record id.
</span></span><span id="105" class="l"><a class="l" href="#105">105: </a><span class="php-comment"> */</span>
</span><span id="106" class="l"><a class="l" href="#106">106: </a> <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> <a id="_update" href="#_update">update</a>(<span class="php-var">$customer_data</span>) {
</span><span id="107" class="l"><a class="l" href="#107">107: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>])) {
</span><span id="108" class="l"><a class="l" href="#108">108: </a> <span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>] = <span class="php-var">$this</span>-&gt;find_record_id(<span class="php-var">$customer_data</span>);
</span><span id="109" class="l"><a class="l" href="#109">109: </a> }
</span><span id="110" class="l"><a class="l" href="#110">110: </a>
</span><span id="111" class="l"><a class="l" href="#111">111: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="112" class="l"><a class="l" href="#112">112: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;db-&gt;update(<span class="php-quote">'ea_users'</span>, <span class="php-var">$customer_data</span>)) {
</span><span id="113" class="l"><a class="l" href="#113">113: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not update customer to the database.'</span>);
</span><span id="114" class="l"><a class="l" href="#114">114: </a> }
</span><span id="115" class="l"><a class="l" href="#115">115: </a>
</span><span id="116" class="l"><a class="l" href="#116">116: </a> <span class="php-keyword1">return</span> <span class="php-keyword2">intval</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="117" class="l"><a class="l" href="#117">117: </a> }
</span><span id="118" class="l"><a class="l" href="#118">118: </a>
</span><span id="119" class="l"><a class="l" href="#119">119: </a> <span class="php-comment">/**
</span></span><span id="120" class="l"><a class="l" href="#120">120: </a><span class="php-comment"> * Find the database id of a customer record.
</span></span><span id="121" class="l"><a class="l" href="#121">121: </a><span class="php-comment"> *
</span></span><span id="122" class="l"><a class="l" href="#122">122: </a><span class="php-comment"> * The customer data should include the following fields in order to
</span></span><span id="123" class="l"><a class="l" href="#123">123: </a><span class="php-comment"> * get the unique id from the database: &quot;email&quot;
</span></span><span id="124" class="l"><a class="l" href="#124">124: </a><span class="php-comment"> *
</span></span><span id="125" class="l"><a class="l" href="#125">125: </a><span class="php-comment"> * &lt;strong&gt;IMPORTANT!&lt;/strong&gt; The record must already exists in the
</span></span><span id="126" class="l"><a class="l" href="#126">126: </a><span class="php-comment"> * database, otherwise an exception is raised.
</span></span><span id="127" class="l"><a class="l" href="#127">127: </a><span class="php-comment"> *
</span></span><span id="128" class="l"><a class="l" href="#128">128: </a><span class="php-comment"> * @expectedException DatabaseException When the record is not found.
</span></span><span id="129" class="l"><a class="l" href="#129">129: </a><span class="php-comment"> *
</span></span><span id="130" class="l"><a class="l" href="#130">130: </a><span class="php-comment"> * @param array $customer_data Array with the customer data. The
</span></span><span id="131" class="l"><a class="l" href="#131">131: </a><span class="php-comment"> * keys of the array should have the same names as the db fields.
</span></span><span id="132" class="l"><a class="l" href="#132">132: </a><span class="php-comment"> * @return int Returns the id.
</span></span><span id="133" class="l"><a class="l" href="#133">133: </a><span class="php-comment"> */</span>
</span><span id="134" class="l"><a class="l" href="#134">134: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_find_record_id" href="#_find_record_id">find_record_id</a>(<span class="php-var">$customer_data</span>) {
</span><span id="135" class="l"><a class="l" href="#135">135: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>])) {
</span><span id="136" class="l"><a class="l" href="#136">136: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Customer\'s email was not provided : '</span>
</span><span id="137" class="l"><a class="l" href="#137">137: </a> . <span class="php-keyword2">print_r</span>(<span class="php-var">$customer_data</span>, <span class="php-keyword1">TRUE</span>));
</span><span id="138" class="l"><a class="l" href="#138">138: </a> }
</span><span id="139" class="l"><a class="l" href="#139">139: </a>
</span><span id="140" class="l"><a class="l" href="#140">140: </a> <span class="php-comment">// Get customer's role id</span>
</span><span id="141" class="l"><a class="l" href="#141">141: </a> <span class="php-var">$result</span> = <span class="php-var">$this</span>-&gt;db
</span><span id="142" class="l"><a class="l" href="#142">142: </a> -&gt;select(<span class="php-quote">'ea_users.id'</span>)
</span><span id="143" class="l"><a class="l" href="#143">143: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="144" class="l"><a class="l" href="#144">144: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="145" class="l"><a class="l" href="#145">145: </a> -&gt;where(<span class="php-quote">'ea_users.email'</span>, <span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>])
</span><span id="146" class="l"><a class="l" href="#146">146: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, DB_SLUG_CUSTOMER)
</span><span id="147" class="l"><a class="l" href="#147">147: </a> -&gt;get();
</span><span id="106" class="l"><a class="l" href="#106">106: </a> <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> <a id="_update" href="#_update">update</a>(<span class="php-var">$customer_data</span>) {
</span><span id="107" class="l"><a class="l" href="#107">107: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="108" class="l"><a class="l" href="#108">108: </a> <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;db-&gt;update(<span class="php-quote">'ea_users'</span>, <span class="php-var">$customer_data</span>)) {
</span><span id="109" class="l"><a class="l" href="#109">109: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not update customer to the database.'</span>);
</span><span id="110" class="l"><a class="l" href="#110">110: </a> }
</span><span id="111" class="l"><a class="l" href="#111">111: </a>
</span><span id="112" class="l"><a class="l" href="#112">112: </a> <span class="php-keyword1">return</span> <span class="php-keyword2">intval</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>]);
</span><span id="113" class="l"><a class="l" href="#113">113: </a> }
</span><span id="114" class="l"><a class="l" href="#114">114: </a>
</span><span id="115" class="l"><a class="l" href="#115">115: </a> <span class="php-comment">/**
</span></span><span id="116" class="l"><a class="l" href="#116">116: </a><span class="php-comment"> * Find the database id of a customer record.
</span></span><span id="117" class="l"><a class="l" href="#117">117: </a><span class="php-comment"> *
</span></span><span id="118" class="l"><a class="l" href="#118">118: </a><span class="php-comment"> * The customer data should include the following fields in order to
</span></span><span id="119" class="l"><a class="l" href="#119">119: </a><span class="php-comment"> * get the unique id from the database: &quot;email&quot;
</span></span><span id="120" class="l"><a class="l" href="#120">120: </a><span class="php-comment"> *
</span></span><span id="121" class="l"><a class="l" href="#121">121: </a><span class="php-comment"> * &lt;strong&gt;IMPORTANT!&lt;/strong&gt; The record must already exists in the
</span></span><span id="122" class="l"><a class="l" href="#122">122: </a><span class="php-comment"> * database, otherwise an exception is raised.
</span></span><span id="123" class="l"><a class="l" href="#123">123: </a><span class="php-comment"> *
</span></span><span id="124" class="l"><a class="l" href="#124">124: </a><span class="php-comment"> * @expectedException DatabaseException When the record is not found.
</span></span><span id="125" class="l"><a class="l" href="#125">125: </a><span class="php-comment"> *
</span></span><span id="126" class="l"><a class="l" href="#126">126: </a><span class="php-comment"> * @param array $customer_data Array with the customer data. The
</span></span><span id="127" class="l"><a class="l" href="#127">127: </a><span class="php-comment"> * keys of the array should have the same names as the db fields.
</span></span><span id="128" class="l"><a class="l" href="#128">128: </a><span class="php-comment"> * @return int Returns the id.
</span></span><span id="129" class="l"><a class="l" href="#129">129: </a><span class="php-comment"> */</span>
</span><span id="130" class="l"><a class="l" href="#130">130: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_find_record_id" href="#_find_record_id">find_record_id</a>(<span class="php-var">$customer_data</span>) {
</span><span id="131" class="l"><a class="l" href="#131">131: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>])) {
</span><span id="132" class="l"><a class="l" href="#132">132: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Customer\'s email was not provided : '</span>
</span><span id="133" class="l"><a class="l" href="#133">133: </a> . <span class="php-keyword2">print_r</span>(<span class="php-var">$customer_data</span>, <span class="php-keyword1">TRUE</span>));
</span><span id="134" class="l"><a class="l" href="#134">134: </a> }
</span><span id="135" class="l"><a class="l" href="#135">135: </a>
</span><span id="136" class="l"><a class="l" href="#136">136: </a> <span class="php-comment">// Get customer's role id</span>
</span><span id="137" class="l"><a class="l" href="#137">137: </a> <span class="php-var">$result</span> = <span class="php-var">$this</span>-&gt;db
</span><span id="138" class="l"><a class="l" href="#138">138: </a> -&gt;select(<span class="php-quote">'ea_users.id'</span>)
</span><span id="139" class="l"><a class="l" href="#139">139: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="140" class="l"><a class="l" href="#140">140: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="141" class="l"><a class="l" href="#141">141: </a> -&gt;where(<span class="php-quote">'ea_users.email'</span>, <span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>])
</span><span id="142" class="l"><a class="l" href="#142">142: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, DB_SLUG_CUSTOMER)
</span><span id="143" class="l"><a class="l" href="#143">143: </a> -&gt;get();
</span><span id="144" class="l"><a class="l" href="#144">144: </a>
</span><span id="145" class="l"><a class="l" href="#145">145: </a> <span class="php-keyword1">if</span> (<span class="php-var">$result</span>-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="146" class="l"><a class="l" href="#146">146: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not find appointment record id.'</span>);
</span><span id="147" class="l"><a class="l" href="#147">147: </a> }
</span><span id="148" class="l"><a class="l" href="#148">148: </a>
</span><span id="149" class="l"><a class="l" href="#149">149: </a> <span class="php-keyword1">if</span> (<span class="php-var">$result</span>-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="150" class="l"><a class="l" href="#150">150: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> DatabaseException(<span class="php-quote">'Could not find appointment record id.'</span>);
</span><span id="151" class="l"><a class="l" href="#151">151: </a> }
</span><span id="152" class="l"><a class="l" href="#152">152: </a>
</span><span id="153" class="l"><a class="l" href="#153">153: </a> <span class="php-keyword1">return</span> <span class="php-var">$result</span>-&gt;row()-&gt;id;
</span><span id="154" class="l"><a class="l" href="#154">154: </a> }
</span><span id="155" class="l"><a class="l" href="#155">155: </a>
</span><span id="156" class="l"><a class="l" href="#156">156: </a> <span class="php-comment">/**
</span></span><span id="157" class="l"><a class="l" href="#157">157: </a><span class="php-comment"> * Validate customer data before the insert or
</span></span><span id="158" class="l"><a class="l" href="#158">158: </a><span class="php-comment"> * update operation is executed.
</span></span><span id="159" class="l"><a class="l" href="#159">159: </a><span class="php-comment"> *
</span></span><span id="160" class="l"><a class="l" href="#160">160: </a><span class="php-comment"> * @param array $customer_data Contains the customer data.
</span></span><span id="161" class="l"><a class="l" href="#161">161: </a><span class="php-comment"> * @return bool Returns the validation result.
</span></span><span id="162" class="l"><a class="l" href="#162">162: </a><span class="php-comment"> */</span>
</span><span id="163" class="l"><a class="l" href="#163">163: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_validate_data" href="#_validate_data">validate_data</a>(<span class="php-var">$customer_data</span>) {
</span><span id="164" class="l"><a class="l" href="#164">164: </a> <span class="php-var">$this</span>-&gt;load-&gt;helper(<span class="php-quote">'data_validation'</span>);
</span><span id="165" class="l"><a class="l" href="#165">165: </a>
</span><span id="166" class="l"><a class="l" href="#166">166: </a> <span class="php-keyword1">try</span> {
</span><span id="167" class="l"><a class="l" href="#167">167: </a> <span class="php-comment">// Validate required fields</span>
</span><span id="168" class="l"><a class="l" href="#168">168: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'last_name'</span>])
</span><span id="169" class="l"><a class="l" href="#169">169: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>])
</span><span id="170" class="l"><a class="l" href="#170">170: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'phone_number'</span>])) {
</span><span id="171" class="l"><a class="l" href="#171">171: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Not all required fields are provided : '</span>
</span><span id="172" class="l"><a class="l" href="#172">172: </a> . <span class="php-keyword2">print_r</span>(<span class="php-var">$customer_data</span>, <span class="php-keyword1">TRUE</span>));
</span><span id="173" class="l"><a class="l" href="#173">173: </a> }
</span><span id="174" class="l"><a class="l" href="#174">174: </a>
</span><span id="175" class="l"><a class="l" href="#175">175: </a> <span class="php-comment">// Validate email address</span>
</span><span id="176" class="l"><a class="l" href="#176">176: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">filter_var</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>], FILTER_VALIDATE_EMAIL)) {
</span><span id="177" class="l"><a class="l" href="#177">177: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Invalid email address provided : '</span> . <span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>]);
</span><span id="178" class="l"><a class="l" href="#178">178: </a> }
</span><span id="179" class="l"><a class="l" href="#179">179: </a>
</span><span id="180" class="l"><a class="l" href="#180">180: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">TRUE</span>;
</span><span id="181" class="l"><a class="l" href="#181">181: </a> } <span class="php-keyword1">catch</span> (Exception <span class="php-var">$exc</span>) {
</span><span id="182" class="l"><a class="l" href="#182">182: </a> <span class="php-keyword1">echo</span> <span class="php-var">$exc</span>-&gt;getMessage();
</span><span id="183" class="l"><a class="l" href="#183">183: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>;
</span><span id="184" class="l"><a class="l" href="#184">184: </a> }
</span><span id="185" class="l"><a class="l" href="#185">185: </a> }
</span><span id="186" class="l"><a class="l" href="#186">186: </a>
</span><span id="187" class="l"><a class="l" href="#187">187: </a> <span class="php-comment">/**
</span></span><span id="188" class="l"><a class="l" href="#188">188: </a><span class="php-comment"> * Delete an existing customer record from the database.
</span></span><span id="189" class="l"><a class="l" href="#189">189: </a><span class="php-comment"> *
</span></span><span id="190" class="l"><a class="l" href="#190">190: </a><span class="php-comment"> * @expectedException InvalidArgumentException Raises when
</span></span><span id="191" class="l"><a class="l" href="#191">191: </a><span class="php-comment"> * the $customer_id is not an integer.
</span></span><span id="192" class="l"><a class="l" href="#192">192: </a><span class="php-comment"> *
</span></span><span id="193" class="l"><a class="l" href="#193">193: </a><span class="php-comment"> * @param int $customer_id The record id to be deleted.
</span></span><span id="194" class="l"><a class="l" href="#194">194: </a><span class="php-comment"> * @return bool Returns the delete operation result.
</span></span><span id="195" class="l"><a class="l" href="#195">195: </a><span class="php-comment"> */</span>
</span><span id="196" class="l"><a class="l" href="#196">196: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <span class="php-keyword2">delete</span>(<span class="php-var">$customer_id</span>) {
</span><span id="197" class="l"><a class="l" href="#197">197: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$customer_id</span>)) {
</span><span id="198" class="l"><a class="l" href="#198">198: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument type $customer_id : '</span> . <span class="php-var">$customer_id</span>);
</span><span id="199" class="l"><a class="l" href="#199">199: </a> }
</span><span id="200" class="l"><a class="l" href="#200">200: </a>
</span><span id="201" class="l"><a class="l" href="#201">201: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;num_rows();
</span><span id="202" class="l"><a class="l" href="#202">202: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="203" class="l"><a class="l" href="#203">203: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>;
</span><span id="204" class="l"><a class="l" href="#204">204: </a> }
</span><span id="205" class="l"><a class="l" href="#205">205: </a>
</span><span id="206" class="l"><a class="l" href="#206">206: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$customer_id</span>);
</span><span id="207" class="l"><a class="l" href="#207">207: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;<span class="php-keyword2">delete</span>(<span class="php-quote">'ea_users'</span>);
</span><span id="208" class="l"><a class="l" href="#208">208: </a> }
</span><span id="209" class="l"><a class="l" href="#209">209: </a>
</span><span id="210" class="l"><a class="l" href="#210">210: </a> <span class="php-comment">/**
</span></span><span id="211" class="l"><a class="l" href="#211">211: </a><span class="php-comment"> * Get a specific row from the appointments table.
</span></span><span id="212" class="l"><a class="l" href="#212">212: </a><span class="php-comment"> *
</span></span><span id="213" class="l"><a class="l" href="#213">213: </a><span class="php-comment"> * @param int $customer_id The record's id to be returned.
</span></span><span id="214" class="l"><a class="l" href="#214">214: </a><span class="php-comment"> * @return array Returns an associative array with the selected
</span></span><span id="215" class="l"><a class="l" href="#215">215: </a><span class="php-comment"> * record's data. Each key has the same name as the database
</span></span><span id="216" class="l"><a class="l" href="#216">216: </a><span class="php-comment"> * field names.
</span></span><span id="217" class="l"><a class="l" href="#217">217: </a><span class="php-comment"> */</span>
</span><span id="218" class="l"><a class="l" href="#218">218: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_row" href="#_get_row">get_row</a>(<span class="php-var">$customer_id</span>) {
</span><span id="219" class="l"><a class="l" href="#219">219: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$customer_id</span>)) {
</span><span id="220" class="l"><a class="l" href="#220">220: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument provided as $customer_id : '</span> . <span class="php-var">$customer_id</span>);
</span><span id="221" class="l"><a class="l" href="#221">221: </a> }
</span><span id="222" class="l"><a class="l" href="#222">222: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;row_array();
</span><span id="223" class="l"><a class="l" href="#223">223: </a> }
</span><span id="224" class="l"><a class="l" href="#224">224: </a>
</span><span id="225" class="l"><a class="l" href="#225">225: </a> <span class="php-comment">/**
</span></span><span id="226" class="l"><a class="l" href="#226">226: </a><span class="php-comment"> * Get a specific field value from the database.
</span></span><span id="227" class="l"><a class="l" href="#227">227: </a><span class="php-comment"> *
</span></span><span id="228" class="l"><a class="l" href="#228">228: </a><span class="php-comment"> * @param string $field_name The field name of the value to be
</span></span><span id="229" class="l"><a class="l" href="#229">229: </a><span class="php-comment"> * returned.
</span></span><span id="230" class="l"><a class="l" href="#230">230: </a><span class="php-comment"> * @param int $customer_id The selected record's id.
</span></span><span id="231" class="l"><a class="l" href="#231">231: </a><span class="php-comment"> * @return string Returns the records value from the database.
</span></span><span id="232" class="l"><a class="l" href="#232">232: </a><span class="php-comment"> */</span>
</span><span id="233" class="l"><a class="l" href="#233">233: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_value" href="#_get_value">get_value</a>(<span class="php-var">$field_name</span>, <span class="php-var">$customer_id</span>) {
</span><span id="234" class="l"><a class="l" href="#234">234: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$customer_id</span>)) {
</span><span id="235" class="l"><a class="l" href="#235">235: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument provided as $customer_id : '</span> . <span class="php-var">$customer_id</span>);
</span><span id="236" class="l"><a class="l" href="#236">236: </a> }
</span><span id="237" class="l"><a class="l" href="#237">237: </a>
</span><span id="238" class="l"><a class="l" href="#238">238: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_string</span>(<span class="php-var">$field_name</span>)) {
</span><span id="239" class="l"><a class="l" href="#239">239: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'$field_name argument is not a string : '</span> . <span class="php-var">$field_name</span>);
</span><span id="240" class="l"><a class="l" href="#240">240: </a> }
</span><span id="241" class="l"><a class="l" href="#241">241: </a>
</span><span id="242" class="l"><a class="l" href="#242">242: </a> <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="243" class="l"><a class="l" href="#243">243: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The record with the $customer_id argument does not exist in the database : '</span> . <span class="php-var">$customer_id</span>);
</span><span id="244" class="l"><a class="l" href="#244">244: </a> }
</span><span id="245" class="l"><a class="l" href="#245">245: </a>
</span><span id="246" class="l"><a class="l" href="#246">246: </a> <span class="php-var">$row_data</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;row_array();
</span><span id="247" class="l"><a class="l" href="#247">247: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>])) {
</span><span id="248" class="l"><a class="l" href="#248">248: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The given $field_name argument does not exist in the database : '</span> . <span class="php-var">$field_name</span>);
</span><span id="249" class="l"><a class="l" href="#249">249: </a> }
</span><span id="250" class="l"><a class="l" href="#250">250: </a>
</span><span id="251" class="l"><a class="l" href="#251">251: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;row_array()[<span class="php-var">$field_name</span>];
</span><span id="252" class="l"><a class="l" href="#252">252: </a> }
</span><span id="253" class="l"><a class="l" href="#253">253: </a>
</span><span id="254" class="l"><a class="l" href="#254">254: </a> <span class="php-comment">/**
</span></span><span id="255" class="l"><a class="l" href="#255">255: </a><span class="php-comment"> * Get all, or specific records from appointment's table.
</span></span><span id="256" class="l"><a class="l" href="#256">256: </a><span class="php-comment"> *
</span></span><span id="257" class="l"><a class="l" href="#257">257: </a><span class="php-comment"> * @example $this-&gt;Model-&gt;getBatch('id = ' . $recordId);
</span></span><span id="258" class="l"><a class="l" href="#258">258: </a><span class="php-comment"> *
</span></span><span id="259" class="l"><a class="l" href="#259">259: </a><span class="php-comment"> * @param string $whereClause (OPTIONAL) The WHERE clause of
</span></span><span id="260" class="l"><a class="l" href="#260">260: </a><span class="php-comment"> * the query to be executed. DO NOT INCLUDE 'WHERE' KEYWORD.
</span></span><span id="261" class="l"><a class="l" href="#261">261: </a><span class="php-comment"> * @return array Returns the rows from the database.
</span></span><span id="262" class="l"><a class="l" href="#262">262: </a><span class="php-comment"> */</span>
</span><span id="263" class="l"><a class="l" href="#263">263: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_batch" href="#_get_batch">get_batch</a>(<span class="php-var">$where_clause</span> = <span class="php-quote">''</span>) {
</span><span id="264" class="l"><a class="l" href="#264">264: </a> <span class="php-var">$customers_role_id</span> = <span class="php-var">$this</span>-&gt;get_customers_role_id();
</span><span id="265" class="l"><a class="l" href="#265">265: </a>
</span><span id="266" class="l"><a class="l" href="#266">266: </a> <span class="php-keyword1">if</span> (<span class="php-var">$where_clause</span> != <span class="php-quote">''</span>) {
</span><span id="267" class="l"><a class="l" href="#267">267: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-var">$where_clause</span>);
</span><span id="268" class="l"><a class="l" href="#268">268: </a> }
</span><span id="269" class="l"><a class="l" href="#269">269: </a>
</span><span id="270" class="l"><a class="l" href="#270">270: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id_roles'</span>, <span class="php-var">$customers_role_id</span>);
</span><span id="271" class="l"><a class="l" href="#271">271: </a>
</span><span id="272" class="l"><a class="l" href="#272">272: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_users'</span>)-&gt;result_array();
</span><span id="273" class="l"><a class="l" href="#273">273: </a> }
</span><span id="274" class="l"><a class="l" href="#274">274: </a>
</span><span id="275" class="l"><a class="l" href="#275">275: </a> <span class="php-comment">/**
</span></span><span id="276" class="l"><a class="l" href="#276">276: </a><span class="php-comment"> * Get the customers role id from the database.
</span></span><span id="277" class="l"><a class="l" href="#277">277: </a><span class="php-comment"> *
</span></span><span id="278" class="l"><a class="l" href="#278">278: </a><span class="php-comment"> * @return int Returns the role id for the customer records.
</span></span><span id="279" class="l"><a class="l" href="#279">279: </a><span class="php-comment"> */</span>
</span><span id="280" class="l"><a class="l" href="#280">280: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_customers_role_id" href="#_get_customers_role_id">get_customers_role_id</a>() {
</span><span id="281" class="l"><a class="l" href="#281">281: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_roles'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'slug'</span> =&gt; DB_SLUG_CUSTOMER))-&gt;row()-&gt;id;
</span><span id="282" class="l"><a class="l" href="#282">282: </a> }
</span><span id="283" class="l"><a class="l" href="#283">283: </a>}
</span><span id="284" class="l"><a class="l" href="#284">284: </a>
</span><span id="285" class="l"><a class="l" href="#285">285: </a><span class="php-comment">/* End of file customers_model.php */</span>
</span><span id="286" class="l"><a class="l" href="#286">286: </a></span><span class="php-comment">/* Location: ./application/models/customers_model.php */</span></code></pre>
</span><span id="149" class="l"><a class="l" href="#149">149: </a> <span class="php-keyword1">return</span> <span class="php-var">$result</span>-&gt;row()-&gt;id;
</span><span id="150" class="l"><a class="l" href="#150">150: </a> }
</span><span id="151" class="l"><a class="l" href="#151">151: </a>
</span><span id="152" class="l"><a class="l" href="#152">152: </a> <span class="php-comment">/**
</span></span><span id="153" class="l"><a class="l" href="#153">153: </a><span class="php-comment"> * Validate customer data before the insert or
</span></span><span id="154" class="l"><a class="l" href="#154">154: </a><span class="php-comment"> * update operation is executed.
</span></span><span id="155" class="l"><a class="l" href="#155">155: </a><span class="php-comment"> *
</span></span><span id="156" class="l"><a class="l" href="#156">156: </a><span class="php-comment"> * @param array $customer_data Contains the customer data.
</span></span><span id="157" class="l"><a class="l" href="#157">157: </a><span class="php-comment"> * @return bool Returns the validation result.
</span></span><span id="158" class="l"><a class="l" href="#158">158: </a><span class="php-comment"> */</span>
</span><span id="159" class="l"><a class="l" href="#159">159: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_validate_data" href="#_validate_data">validate_data</a>(<span class="php-var">$customer_data</span>) {
</span><span id="160" class="l"><a class="l" href="#160">160: </a> <span class="php-var">$this</span>-&gt;load-&gt;helper(<span class="php-quote">'data_validation'</span>);
</span><span id="161" class="l"><a class="l" href="#161">161: </a>
</span><span id="162" class="l"><a class="l" href="#162">162: </a> <span class="php-keyword1">try</span> {
</span><span id="163" class="l"><a class="l" href="#163">163: </a> <span class="php-comment">// If a customer id is provided, check whether the record</span>
</span><span id="164" class="l"><a class="l" href="#164">164: </a> <span class="php-comment">// exist in the database.</span>
</span><span id="165" class="l"><a class="l" href="#165">165: </a> <span class="php-keyword1">if</span> (<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>])) {
</span><span id="166" class="l"><a class="l" href="#166">166: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>,
</span><span id="167" class="l"><a class="l" href="#167">167: </a> <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_data</span>[<span class="php-quote">'id'</span>]))-&gt;num_rows();
</span><span id="168" class="l"><a class="l" href="#168">168: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="169" class="l"><a class="l" href="#169">169: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Provided customer id does not '</span>
</span><span id="170" class="l"><a class="l" href="#170">170: </a> . <span class="php-quote">'exist in the database.'</span>);
</span><span id="171" class="l"><a class="l" href="#171">171: </a> }
</span><span id="172" class="l"><a class="l" href="#172">172: </a> }
</span><span id="173" class="l"><a class="l" href="#173">173: </a> <span class="php-comment">// Validate required fields</span>
</span><span id="174" class="l"><a class="l" href="#174">174: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'last_name'</span>])
</span><span id="175" class="l"><a class="l" href="#175">175: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>])
</span><span id="176" class="l"><a class="l" href="#176">176: </a> || !<span class="php-keyword1">isset</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'phone_number'</span>])) {
</span><span id="177" class="l"><a class="l" href="#177">177: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Not all required fields are provided : '</span>
</span><span id="178" class="l"><a class="l" href="#178">178: </a> . <span class="php-keyword2">print_r</span>(<span class="php-var">$customer_data</span>, <span class="php-keyword1">TRUE</span>));
</span><span id="179" class="l"><a class="l" href="#179">179: </a> }
</span><span id="180" class="l"><a class="l" href="#180">180: </a>
</span><span id="181" class="l"><a class="l" href="#181">181: </a> <span class="php-comment">// Validate email address</span>
</span><span id="182" class="l"><a class="l" href="#182">182: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">filter_var</span>(<span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>], FILTER_VALIDATE_EMAIL)) {
</span><span id="183" class="l"><a class="l" href="#183">183: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> Exception(<span class="php-quote">'Invalid email address provided : '</span>
</span><span id="184" class="l"><a class="l" href="#184">184: </a> . <span class="php-var">$customer_data</span>[<span class="php-quote">'email'</span>]);
</span><span id="185" class="l"><a class="l" href="#185">185: </a> }
</span><span id="186" class="l"><a class="l" href="#186">186: </a>
</span><span id="187" class="l"><a class="l" href="#187">187: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">TRUE</span>;
</span><span id="188" class="l"><a class="l" href="#188">188: </a> } <span class="php-keyword1">catch</span> (Exception <span class="php-var">$exc</span>) {
</span><span id="189" class="l"><a class="l" href="#189">189: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>;
</span><span id="190" class="l"><a class="l" href="#190">190: </a> }
</span><span id="191" class="l"><a class="l" href="#191">191: </a> }
</span><span id="192" class="l"><a class="l" href="#192">192: </a>
</span><span id="193" class="l"><a class="l" href="#193">193: </a> <span class="php-comment">/**
</span></span><span id="194" class="l"><a class="l" href="#194">194: </a><span class="php-comment"> * Delete an existing customer record from the database.
</span></span><span id="195" class="l"><a class="l" href="#195">195: </a><span class="php-comment"> *
</span></span><span id="196" class="l"><a class="l" href="#196">196: </a><span class="php-comment"> * @expectedException InvalidArgumentException Raises when
</span></span><span id="197" class="l"><a class="l" href="#197">197: </a><span class="php-comment"> * the $customer_id is not an integer.
</span></span><span id="198" class="l"><a class="l" href="#198">198: </a><span class="php-comment"> *
</span></span><span id="199" class="l"><a class="l" href="#199">199: </a><span class="php-comment"> * @param int $customer_id The record id to be deleted.
</span></span><span id="200" class="l"><a class="l" href="#200">200: </a><span class="php-comment"> * @return bool Returns the delete operation result.
</span></span><span id="201" class="l"><a class="l" href="#201">201: </a><span class="php-comment"> */</span>
</span><span id="202" class="l"><a class="l" href="#202">202: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <span class="php-keyword2">delete</span>(<span class="php-var">$customer_id</span>) {
</span><span id="203" class="l"><a class="l" href="#203">203: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$customer_id</span>)) {
</span><span id="204" class="l"><a class="l" href="#204">204: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument type $customer_id : '</span>
</span><span id="205" class="l"><a class="l" href="#205">205: </a> . <span class="php-var">$customer_id</span>);
</span><span id="206" class="l"><a class="l" href="#206">206: </a> }
</span><span id="207" class="l"><a class="l" href="#207">207: </a>
</span><span id="208" class="l"><a class="l" href="#208">208: </a> <span class="php-var">$num_rows</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;num_rows();
</span><span id="209" class="l"><a class="l" href="#209">209: </a> <span class="php-keyword1">if</span> (<span class="php-var">$num_rows</span> == <span class="php-num">0</span>) {
</span><span id="210" class="l"><a class="l" href="#210">210: </a> <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>;
</span><span id="211" class="l"><a class="l" href="#211">211: </a> }
</span><span id="212" class="l"><a class="l" href="#212">212: </a>
</span><span id="213" class="l"><a class="l" href="#213">213: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id'</span>, <span class="php-var">$customer_id</span>);
</span><span id="214" class="l"><a class="l" href="#214">214: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;<span class="php-keyword2">delete</span>(<span class="php-quote">'ea_users'</span>);
</span><span id="215" class="l"><a class="l" href="#215">215: </a> }
</span><span id="216" class="l"><a class="l" href="#216">216: </a>
</span><span id="217" class="l"><a class="l" href="#217">217: </a> <span class="php-comment">/**
</span></span><span id="218" class="l"><a class="l" href="#218">218: </a><span class="php-comment"> * Get a specific row from the appointments table.
</span></span><span id="219" class="l"><a class="l" href="#219">219: </a><span class="php-comment"> *
</span></span><span id="220" class="l"><a class="l" href="#220">220: </a><span class="php-comment"> * @param int $customer_id The record's id to be returned.
</span></span><span id="221" class="l"><a class="l" href="#221">221: </a><span class="php-comment"> * @return array Returns an associative array with the selected
</span></span><span id="222" class="l"><a class="l" href="#222">222: </a><span class="php-comment"> * record's data. Each key has the same name as the database
</span></span><span id="223" class="l"><a class="l" href="#223">223: </a><span class="php-comment"> * field names.
</span></span><span id="224" class="l"><a class="l" href="#224">224: </a><span class="php-comment"> */</span>
</span><span id="225" class="l"><a class="l" href="#225">225: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_row" href="#_get_row">get_row</a>(<span class="php-var">$customer_id</span>) {
</span><span id="226" class="l"><a class="l" href="#226">226: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$customer_id</span>)) {
</span><span id="227" class="l"><a class="l" href="#227">227: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument provided as $customer_id : '</span>
</span><span id="228" class="l"><a class="l" href="#228">228: </a> . <span class="php-var">$customer_id</span>);
</span><span id="229" class="l"><a class="l" href="#229">229: </a> }
</span><span id="230" class="l"><a class="l" href="#230">230: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;row_array();
</span><span id="231" class="l"><a class="l" href="#231">231: </a> }
</span><span id="232" class="l"><a class="l" href="#232">232: </a>
</span><span id="233" class="l"><a class="l" href="#233">233: </a> <span class="php-comment">/**
</span></span><span id="234" class="l"><a class="l" href="#234">234: </a><span class="php-comment"> * Get a specific field value from the database.
</span></span><span id="235" class="l"><a class="l" href="#235">235: </a><span class="php-comment"> *
</span></span><span id="236" class="l"><a class="l" href="#236">236: </a><span class="php-comment"> * @param string $field_name The field name of the value to be
</span></span><span id="237" class="l"><a class="l" href="#237">237: </a><span class="php-comment"> * returned.
</span></span><span id="238" class="l"><a class="l" href="#238">238: </a><span class="php-comment"> * @param int $customer_id The selected record's id.
</span></span><span id="239" class="l"><a class="l" href="#239">239: </a><span class="php-comment"> * @return string Returns the records value from the database.
</span></span><span id="240" class="l"><a class="l" href="#240">240: </a><span class="php-comment"> */</span>
</span><span id="241" class="l"><a class="l" href="#241">241: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_value" href="#_get_value">get_value</a>(<span class="php-var">$field_name</span>, <span class="php-var">$customer_id</span>) {
</span><span id="242" class="l"><a class="l" href="#242">242: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$customer_id</span>)) {
</span><span id="243" class="l"><a class="l" href="#243">243: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument provided as $customer_id : '</span>
</span><span id="244" class="l"><a class="l" href="#244">244: </a> . <span class="php-var">$customer_id</span>);
</span><span id="245" class="l"><a class="l" href="#245">245: </a> }
</span><span id="246" class="l"><a class="l" href="#246">246: </a>
</span><span id="247" class="l"><a class="l" href="#247">247: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_string</span>(<span class="php-var">$field_name</span>)) {
</span><span id="248" class="l"><a class="l" href="#248">248: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'$field_name argument is not a string : '</span>
</span><span id="249" class="l"><a class="l" href="#249">249: </a> . <span class="php-var">$field_name</span>);
</span><span id="250" class="l"><a class="l" href="#250">250: </a> }
</span><span id="251" class="l"><a class="l" href="#251">251: </a>
</span><span id="252" class="l"><a class="l" href="#252">252: </a> <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="253" class="l"><a class="l" href="#253">253: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The record with the $customer_id argument '</span>
</span><span id="254" class="l"><a class="l" href="#254">254: </a> . <span class="php-quote">'does not exist in the database : '</span> . <span class="php-var">$customer_id</span>);
</span><span id="255" class="l"><a class="l" href="#255">255: </a> }
</span><span id="256" class="l"><a class="l" href="#256">256: </a>
</span><span id="257" class="l"><a class="l" href="#257">257: </a> <span class="php-var">$row_data</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>)
</span><span id="258" class="l"><a class="l" href="#258">258: </a> )-&gt;row_array();
</span><span id="259" class="l"><a class="l" href="#259">259: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>])) {
</span><span id="260" class="l"><a class="l" href="#260">260: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The given $field_name argument does not'</span>
</span><span id="261" class="l"><a class="l" href="#261">261: </a> . <span class="php-quote">'exist in the database : '</span> . <span class="php-var">$field_name</span>);
</span><span id="262" class="l"><a class="l" href="#262">262: </a> }
</span><span id="263" class="l"><a class="l" href="#263">263: </a>
</span><span id="264" class="l"><a class="l" href="#264">264: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$customer_id</span>))
</span><span id="265" class="l"><a class="l" href="#265">265: </a> -&gt;row_array()[<span class="php-var">$field_name</span>];
</span><span id="266" class="l"><a class="l" href="#266">266: </a> }
</span><span id="267" class="l"><a class="l" href="#267">267: </a>
</span><span id="268" class="l"><a class="l" href="#268">268: </a> <span class="php-comment">/**
</span></span><span id="269" class="l"><a class="l" href="#269">269: </a><span class="php-comment"> * Get all, or specific records from appointment's table.
</span></span><span id="270" class="l"><a class="l" href="#270">270: </a><span class="php-comment"> *
</span></span><span id="271" class="l"><a class="l" href="#271">271: </a><span class="php-comment"> * @example $this-&gt;Model-&gt;getBatch('id = ' . $recordId);
</span></span><span id="272" class="l"><a class="l" href="#272">272: </a><span class="php-comment"> *
</span></span><span id="273" class="l"><a class="l" href="#273">273: </a><span class="php-comment"> * @param string $whereClause (OPTIONAL) The WHERE clause of
</span></span><span id="274" class="l"><a class="l" href="#274">274: </a><span class="php-comment"> * the query to be executed. DO NOT INCLUDE 'WHERE' KEYWORD.
</span></span><span id="275" class="l"><a class="l" href="#275">275: </a><span class="php-comment"> * @return array Returns the rows from the database.
</span></span><span id="276" class="l"><a class="l" href="#276">276: </a><span class="php-comment"> */</span>
</span><span id="277" class="l"><a class="l" href="#277">277: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_batch" href="#_get_batch">get_batch</a>(<span class="php-var">$where_clause</span> = <span class="php-quote">''</span>) {
</span><span id="278" class="l"><a class="l" href="#278">278: </a> <span class="php-var">$customers_role_id</span> = <span class="php-var">$this</span>-&gt;get_customers_role_id();
</span><span id="279" class="l"><a class="l" href="#279">279: </a>
</span><span id="280" class="l"><a class="l" href="#280">280: </a> <span class="php-keyword1">if</span> (<span class="php-var">$where_clause</span> != <span class="php-quote">''</span>) {
</span><span id="281" class="l"><a class="l" href="#281">281: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-var">$where_clause</span>);
</span><span id="282" class="l"><a class="l" href="#282">282: </a> }
</span><span id="283" class="l"><a class="l" href="#283">283: </a>
</span><span id="284" class="l"><a class="l" href="#284">284: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id_roles'</span>, <span class="php-var">$customers_role_id</span>);
</span><span id="285" class="l"><a class="l" href="#285">285: </a>
</span><span id="286" class="l"><a class="l" href="#286">286: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_users'</span>)-&gt;result_array();
</span><span id="287" class="l"><a class="l" href="#287">287: </a> }
</span><span id="288" class="l"><a class="l" href="#288">288: </a>
</span><span id="289" class="l"><a class="l" href="#289">289: </a> <span class="php-comment">/**
</span></span><span id="290" class="l"><a class="l" href="#290">290: </a><span class="php-comment"> * Get the customers role id from the database.
</span></span><span id="291" class="l"><a class="l" href="#291">291: </a><span class="php-comment"> *
</span></span><span id="292" class="l"><a class="l" href="#292">292: </a><span class="php-comment"> * @return int Returns the role id for the customer records.
</span></span><span id="293" class="l"><a class="l" href="#293">293: </a><span class="php-comment"> */</span>
</span><span id="294" class="l"><a class="l" href="#294">294: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_customers_role_id" href="#_get_customers_role_id">get_customers_role_id</a>() {
</span><span id="295" class="l"><a class="l" href="#295">295: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_roles'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'slug'</span> =&gt; DB_SLUG_CUSTOMER))-&gt;row()-&gt;id;
</span><span id="296" class="l"><a class="l" href="#296">296: </a> }
</span><span id="297" class="l"><a class="l" href="#297">297: </a>}
</span><span id="298" class="l"><a class="l" href="#298">298: </a>
</span><span id="299" class="l"><a class="l" href="#299">299: </a><span class="php-comment">/* End of file customers_model.php */</span>
</span><span id="300" class="l"><a class="l" href="#300">300: </a></span><span class="php-comment">/* Location: ./application/models/customers_model.php */</span></code></pre>
<div id="footer">
API documentation generated by <a href="http://apigen.org">ApiGen 2.8.0</a>

View file

@ -110,94 +110,112 @@
</span></span><span id="33" class="l"><a class="l" href="#33"> 33: </a><span class="php-comment"> */</span>
</span><span id="34" class="l"><a class="l" href="#34"> 34: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_value" href="#_get_value">get_value</a>(<span class="php-var">$field_name</span>, <span class="php-var">$provider_id</span>) {
</span><span id="35" class="l"><a class="l" href="#35"> 35: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_numeric</span>(<span class="php-var">$provider_id</span>)) {
</span><span id="36" class="l"><a class="l" href="#36"> 36: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument provided as $customer_id : '</span> . <span class="php-var">$provider_id</span>);
</span><span id="37" class="l"><a class="l" href="#37"> 37: </a> }
</span><span id="38" class="l"><a class="l" href="#38"> 38: </a>
</span><span id="39" class="l"><a class="l" href="#39"> 39: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_string</span>(<span class="php-var">$field_name</span>)) {
</span><span id="40" class="l"><a class="l" href="#40"> 40: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'$field_name argument is not a string : '</span> . <span class="php-var">$field_name</span>);
</span><span id="41" class="l"><a class="l" href="#41"> 41: </a> }
</span><span id="42" class="l"><a class="l" href="#42"> 42: </a>
</span><span id="43" class="l"><a class="l" href="#43"> 43: </a> <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$provider_id</span>))-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="44" class="l"><a class="l" href="#44"> 44: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The record with the $provider_id argument does not exist in the database : '</span> . <span class="php-var">$provider_id</span>);
</span><span id="45" class="l"><a class="l" href="#45"> 45: </a> }
</span><span id="46" class="l"><a class="l" href="#46"> 46: </a>
</span><span id="47" class="l"><a class="l" href="#47"> 47: </a> <span class="php-var">$row_data</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$provider_id</span>))-&gt;row_array();
</span><span id="48" class="l"><a class="l" href="#48"> 48: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>])) {
</span><span id="49" class="l"><a class="l" href="#49"> 49: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The given $field_name argument does not exist in the database : '</span> . <span class="php-var">$field_name</span>);
</span><span id="50" class="l"><a class="l" href="#50"> 50: </a> }
</span><span id="51" class="l"><a class="l" href="#51"> 51: </a>
</span><span id="52" class="l"><a class="l" href="#52"> 52: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$provider_id</span>))-&gt;row_array()[<span class="php-var">$field_name</span>];
</span><span id="53" class="l"><a class="l" href="#53"> 53: </a> }
</span><span id="54" class="l"><a class="l" href="#54"> 54: </a>
</span><span id="55" class="l"><a class="l" href="#55"> 55: </a> <span class="php-comment">/**
</span></span><span id="56" class="l"><a class="l" href="#56"> 56: </a><span class="php-comment"> * Get all, or specific records from provider's table.
</span></span><span id="57" class="l"><a class="l" href="#57"> 57: </a><span class="php-comment"> *
</span></span><span id="58" class="l"><a class="l" href="#58"> 58: </a><span class="php-comment"> * @example $this-&gt;Model-&gt;getBatch('id = ' . $recordId);
</span></span><span id="59" class="l"><a class="l" href="#59"> 59: </a><span class="php-comment"> *
</span></span><span id="60" class="l"><a class="l" href="#60"> 60: </a><span class="php-comment"> * @param string $whereClause (OPTIONAL) The WHERE clause of
</span></span><span id="61" class="l"><a class="l" href="#61"> 61: </a><span class="php-comment"> * the query to be executed. DO NOT INCLUDE 'WHERE' KEYWORD.
</span></span><span id="62" class="l"><a class="l" href="#62"> 62: </a><span class="php-comment"> * @return array Returns the rows from the database.
</span></span><span id="63" class="l"><a class="l" href="#63"> 63: </a><span class="php-comment"> */</span>
</span><span id="64" class="l"><a class="l" href="#64"> 64: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_batch" href="#_get_batch">get_batch</a>(<span class="php-var">$where_clause</span> = <span class="php-quote">''</span>) {
</span><span id="65" class="l"><a class="l" href="#65"> 65: </a> <span class="php-var">$providers_role_id</span> = <span class="php-var">$this</span>-&gt;get_providers_role_id();
</span><span id="66" class="l"><a class="l" href="#66"> 66: </a>
</span><span id="67" class="l"><a class="l" href="#67"> 67: </a> <span class="php-keyword1">if</span> (<span class="php-var">$where_clause</span> != <span class="php-quote">''</span>) {
</span><span id="68" class="l"><a class="l" href="#68"> 68: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-var">$where_clause</span>);
</span><span id="69" class="l"><a class="l" href="#69"> 69: </a> }
</span><span id="70" class="l"><a class="l" href="#70"> 70: </a>
</span><span id="71" class="l"><a class="l" href="#71"> 71: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id_roles'</span>, <span class="php-var">$providers_role_id</span>);
</span><span id="72" class="l"><a class="l" href="#72"> 72: </a>
</span><span id="73" class="l"><a class="l" href="#73"> 73: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_users'</span>)-&gt;result_array();
</span><span id="74" class="l"><a class="l" href="#74"> 74: </a> }
</span><span id="75" class="l"><a class="l" href="#75"> 75: </a>
</span><span id="76" class="l"><a class="l" href="#76"> 76: </a> <span class="php-comment">/**
</span></span><span id="77" class="l"><a class="l" href="#77"> 77: </a><span class="php-comment"> * This method returns the available providers and
</span></span><span id="78" class="l"><a class="l" href="#78"> 78: </a><span class="php-comment"> * the services that can provide.
</span></span><span id="79" class="l"><a class="l" href="#79"> 79: </a><span class="php-comment"> *
</span></span><span id="80" class="l"><a class="l" href="#80"> 80: </a><span class="php-comment"> * @return array Returns an array with the providers
</span></span><span id="81" class="l"><a class="l" href="#81"> 81: </a><span class="php-comment"> * data.
</span></span><span id="82" class="l"><a class="l" href="#82"> 82: </a><span class="php-comment"> */</span>
</span><span id="83" class="l"><a class="l" href="#83"> 83: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_available_providers" href="#_get_available_providers">get_available_providers</a>() {
</span><span id="84" class="l"><a class="l" href="#84"> 84: </a> <span class="php-var">$this</span>-&gt;db
</span><span id="85" class="l"><a class="l" href="#85"> 85: </a> -&gt;select(<span class="php-quote">'ea_users.*'</span>)
</span><span id="86" class="l"><a class="l" href="#86"> 86: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="87" class="l"><a class="l" href="#87"> 87: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="88" class="l"><a class="l" href="#88"> 88: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, <span class="php-quote">'provider'</span>);
</span><span id="89" class="l"><a class="l" href="#89"> 89: </a>
</span><span id="90" class="l"><a class="l" href="#90"> 90: </a> <span class="php-var">$providers</span> = <span class="php-var">$this</span>-&gt;db-&gt;get()-&gt;result_array();
</span><span id="91" class="l"><a class="l" href="#91"> 91: </a>
</span><span id="92" class="l"><a class="l" href="#92"> 92: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$providers</span> <span class="php-keyword1">as</span> &amp;<span class="php-var">$provider</span>) {
</span><span id="93" class="l"><a class="l" href="#93"> 93: </a> <span class="php-var">$this</span>-&gt;db
</span><span id="94" class="l"><a class="l" href="#94"> 94: </a> -&gt;select(<span class="php-quote">'id_services'</span>)
</span><span id="95" class="l"><a class="l" href="#95"> 95: </a> -&gt;from(<span class="php-quote">'ea_services_providers'</span>)
</span><span id="96" class="l"><a class="l" href="#96"> 96: </a> -&gt;where(<span class="php-quote">'id_users'</span>, <span class="php-var">$provider</span>[<span class="php-quote">'id'</span>]);
</span><span id="97" class="l"><a class="l" href="#97"> 97: </a>
</span><span id="98" class="l"><a class="l" href="#98"> 98: </a> <span class="php-var">$provider_services</span> = <span class="php-var">$this</span>-&gt;db-&gt;get()-&gt;result_array();
</span><span id="99" class="l"><a class="l" href="#99"> 99: </a>
</span><span id="100" class="l"><a class="l" href="#100">100: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$provider</span>[<span class="php-quote">'services'</span>])) {
</span><span id="101" class="l"><a class="l" href="#101">101: </a> <span class="php-var">$provider</span>[<span class="php-quote">'services'</span>] = <span class="php-keyword1">array</span>();
</span><span id="102" class="l"><a class="l" href="#102">102: </a> }
</span><span id="103" class="l"><a class="l" href="#103">103: </a>
</span><span id="104" class="l"><a class="l" href="#104">104: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$provider_services</span> <span class="php-keyword1">as</span> <span class="php-var">$providerService</span>) {
</span><span id="105" class="l"><a class="l" href="#105">105: </a> <span class="php-var">$provider</span>[<span class="php-quote">'services'</span>][] = <span class="php-var">$providerService</span>[<span class="php-quote">'id_services'</span>];
</span><span id="106" class="l"><a class="l" href="#106">106: </a> }
</span><span id="107" class="l"><a class="l" href="#107">107: </a> }
</span><span id="108" class="l"><a class="l" href="#108">108: </a>
</span><span id="109" class="l"><a class="l" href="#109">109: </a> <span class="php-keyword1">return</span> <span class="php-var">$providers</span>;
</span><span id="110" class="l"><a class="l" href="#110">110: </a> }
</span><span id="111" class="l"><a class="l" href="#111">111: </a>
</span><span id="112" class="l"><a class="l" href="#112">112: </a> <span class="php-comment">/**
</span></span><span id="113" class="l"><a class="l" href="#113">113: </a><span class="php-comment"> * Get the providers role id from the database.
</span></span><span id="114" class="l"><a class="l" href="#114">114: </a><span class="php-comment"> *
</span></span><span id="115" class="l"><a class="l" href="#115">115: </a><span class="php-comment"> * @return int Returns the role id for the customer records.
</span></span><span id="116" class="l"><a class="l" href="#116">116: </a><span class="php-comment"> */</span>
</span><span id="117" class="l"><a class="l" href="#117">117: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_providers_role_id" href="#_get_providers_role_id">get_providers_role_id</a>() {
</span><span id="118" class="l"><a class="l" href="#118">118: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_roles'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'slug'</span> =&gt; DB_SLUG_PROVIDER))-&gt;row()-&gt;id;
</span><span id="119" class="l"><a class="l" href="#119">119: </a> }
</span><span id="120" class="l"><a class="l" href="#120">120: </a>}
</span><span id="121" class="l"><a class="l" href="#121">121: </a>
</span><span id="122" class="l"><a class="l" href="#122">122: </a><span class="php-comment">/* End of file providers_model.php */</span>
</span><span id="123" class="l"><a class="l" href="#123">123: </a></span><span class="php-comment">/* Location: ./application/models/providers_model.php */</span></code></pre>
</span><span id="36" class="l"><a class="l" href="#36"> 36: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'Invalid argument provided as $customer_id : '</span>
</span><span id="37" class="l"><a class="l" href="#37"> 37: </a> . <span class="php-var">$provider_id</span>);
</span><span id="38" class="l"><a class="l" href="#38"> 38: </a> }
</span><span id="39" class="l"><a class="l" href="#39"> 39: </a>
</span><span id="40" class="l"><a class="l" href="#40"> 40: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword2">is_string</span>(<span class="php-var">$field_name</span>)) {
</span><span id="41" class="l"><a class="l" href="#41"> 41: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'$field_name argument is not a string : '</span>
</span><span id="42" class="l"><a class="l" href="#42"> 42: </a> . <span class="php-var">$field_name</span>);
</span><span id="43" class="l"><a class="l" href="#43"> 43: </a> }
</span><span id="44" class="l"><a class="l" href="#44"> 44: </a>
</span><span id="45" class="l"><a class="l" href="#45"> 45: </a> <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$provider_id</span>))-&gt;num_rows() == <span class="php-num">0</span>) {
</span><span id="46" class="l"><a class="l" href="#46"> 46: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The record with the $provider_id argument'</span>
</span><span id="47" class="l"><a class="l" href="#47"> 47: </a> . <span class="php-quote">'does not exist in the database : '</span> . <span class="php-var">$provider_id</span>);
</span><span id="48" class="l"><a class="l" href="#48"> 48: </a> }
</span><span id="49" class="l"><a class="l" href="#49"> 49: </a>
</span><span id="50" class="l"><a class="l" href="#50"> 50: </a> <span class="php-var">$row_data</span> = <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$provider_id</span>))-&gt;row_array();
</span><span id="51" class="l"><a class="l" href="#51"> 51: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$row_data</span>[<span class="php-var">$field_name</span>])) {
</span><span id="52" class="l"><a class="l" href="#52"> 52: </a> <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidArgumentException(<span class="php-quote">'The given $field_name argument does not'</span>
</span><span id="53" class="l"><a class="l" href="#53"> 53: </a> . <span class="php-quote">'exist in the database : '</span> . <span class="php-var">$field_name</span>);
</span><span id="54" class="l"><a class="l" href="#54"> 54: </a> }
</span><span id="55" class="l"><a class="l" href="#55"> 55: </a>
</span><span id="56" class="l"><a class="l" href="#56"> 56: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_users'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id'</span> =&gt; <span class="php-var">$provider_id</span>))
</span><span id="57" class="l"><a class="l" href="#57"> 57: </a> -&gt;row_array()[<span class="php-var">$field_name</span>];
</span><span id="58" class="l"><a class="l" href="#58"> 58: </a> }
</span><span id="59" class="l"><a class="l" href="#59"> 59: </a>
</span><span id="60" class="l"><a class="l" href="#60"> 60: </a> <span class="php-comment">/**
</span></span><span id="61" class="l"><a class="l" href="#61"> 61: </a><span class="php-comment"> * Get all, or specific records from provider's table.
</span></span><span id="62" class="l"><a class="l" href="#62"> 62: </a><span class="php-comment"> *
</span></span><span id="63" class="l"><a class="l" href="#63"> 63: </a><span class="php-comment"> * @example $this-&gt;Model-&gt;getBatch('id = ' . $recordId);
</span></span><span id="64" class="l"><a class="l" href="#64"> 64: </a><span class="php-comment"> *
</span></span><span id="65" class="l"><a class="l" href="#65"> 65: </a><span class="php-comment"> * @param string $whereClause (OPTIONAL) The WHERE clause of
</span></span><span id="66" class="l"><a class="l" href="#66"> 66: </a><span class="php-comment"> * the query to be executed. DO NOT INCLUDE 'WHERE' KEYWORD.
</span></span><span id="67" class="l"><a class="l" href="#67"> 67: </a><span class="php-comment"> * @return array Returns the rows from the database.
</span></span><span id="68" class="l"><a class="l" href="#68"> 68: </a><span class="php-comment"> */</span>
</span><span id="69" class="l"><a class="l" href="#69"> 69: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_batch" href="#_get_batch">get_batch</a>(<span class="php-var">$where_clause</span> = <span class="php-quote">''</span>) {
</span><span id="70" class="l"><a class="l" href="#70"> 70: </a> <span class="php-var">$providers_role_id</span> = <span class="php-var">$this</span>-&gt;get_providers_role_id();
</span><span id="71" class="l"><a class="l" href="#71"> 71: </a>
</span><span id="72" class="l"><a class="l" href="#72"> 72: </a> <span class="php-keyword1">if</span> (<span class="php-var">$where_clause</span> != <span class="php-quote">''</span>) {
</span><span id="73" class="l"><a class="l" href="#73"> 73: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-var">$where_clause</span>);
</span><span id="74" class="l"><a class="l" href="#74"> 74: </a> }
</span><span id="75" class="l"><a class="l" href="#75"> 75: </a>
</span><span id="76" class="l"><a class="l" href="#76"> 76: </a> <span class="php-var">$this</span>-&gt;db-&gt;where(<span class="php-quote">'id_roles'</span>, <span class="php-var">$providers_role_id</span>);
</span><span id="77" class="l"><a class="l" href="#77"> 77: </a>
</span><span id="78" class="l"><a class="l" href="#78"> 78: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get(<span class="php-quote">'ea_users'</span>)-&gt;result_array();
</span><span id="79" class="l"><a class="l" href="#79"> 79: </a> }
</span><span id="80" class="l"><a class="l" href="#80"> 80: </a>
</span><span id="81" class="l"><a class="l" href="#81"> 81: </a> <span class="php-comment">/**
</span></span><span id="82" class="l"><a class="l" href="#82"> 82: </a><span class="php-comment"> * This method returns the available providers and
</span></span><span id="83" class="l"><a class="l" href="#83"> 83: </a><span class="php-comment"> * the services that can provide.
</span></span><span id="84" class="l"><a class="l" href="#84"> 84: </a><span class="php-comment"> *
</span></span><span id="85" class="l"><a class="l" href="#85"> 85: </a><span class="php-comment"> * @return array Returns an array with the providers
</span></span><span id="86" class="l"><a class="l" href="#86"> 86: </a><span class="php-comment"> * data.
</span></span><span id="87" class="l"><a class="l" href="#87"> 87: </a><span class="php-comment"> */</span>
</span><span id="88" class="l"><a class="l" href="#88"> 88: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_available_providers" href="#_get_available_providers">get_available_providers</a>() {
</span><span id="89" class="l"><a class="l" href="#89"> 89: </a> <span class="php-var">$this</span>-&gt;db
</span><span id="90" class="l"><a class="l" href="#90"> 90: </a> -&gt;select(<span class="php-quote">'ea_users.*'</span>)
</span><span id="91" class="l"><a class="l" href="#91"> 91: </a> -&gt;from(<span class="php-quote">'ea_users'</span>)
</span><span id="92" class="l"><a class="l" href="#92"> 92: </a> -&gt;<span class="php-keyword2">join</span>(<span class="php-quote">'ea_roles'</span>, <span class="php-quote">'ea_roles.id = ea_users.id_roles'</span>, <span class="php-quote">'inner'</span>)
</span><span id="93" class="l"><a class="l" href="#93"> 93: </a> -&gt;where(<span class="php-quote">'ea_roles.slug'</span>, <span class="php-quote">'provider'</span>);
</span><span id="94" class="l"><a class="l" href="#94"> 94: </a>
</span><span id="95" class="l"><a class="l" href="#95"> 95: </a> <span class="php-var">$providers</span> = <span class="php-var">$this</span>-&gt;db-&gt;get()-&gt;result_array();
</span><span id="96" class="l"><a class="l" href="#96"> 96: </a>
</span><span id="97" class="l"><a class="l" href="#97"> 97: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$providers</span> <span class="php-keyword1">as</span> &amp;<span class="php-var">$provider</span>) {
</span><span id="98" class="l"><a class="l" href="#98"> 98: </a> <span class="php-var">$this</span>-&gt;db
</span><span id="99" class="l"><a class="l" href="#99"> 99: </a> -&gt;select(<span class="php-quote">'id_services'</span>)
</span><span id="100" class="l"><a class="l" href="#100">100: </a> -&gt;from(<span class="php-quote">'ea_services_providers'</span>)
</span><span id="101" class="l"><a class="l" href="#101">101: </a> -&gt;where(<span class="php-quote">'id_users'</span>, <span class="php-var">$provider</span>[<span class="php-quote">'id'</span>]);
</span><span id="102" class="l"><a class="l" href="#102">102: </a>
</span><span id="103" class="l"><a class="l" href="#103">103: </a> <span class="php-var">$provider_services</span> = <span class="php-var">$this</span>-&gt;db-&gt;get()-&gt;result_array();
</span><span id="104" class="l"><a class="l" href="#104">104: </a>
</span><span id="105" class="l"><a class="l" href="#105">105: </a> <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$provider</span>[<span class="php-quote">'services'</span>])) {
</span><span id="106" class="l"><a class="l" href="#106">106: </a> <span class="php-var">$provider</span>[<span class="php-quote">'services'</span>] = <span class="php-keyword1">array</span>();
</span><span id="107" class="l"><a class="l" href="#107">107: </a> }
</span><span id="108" class="l"><a class="l" href="#108">108: </a>
</span><span id="109" class="l"><a class="l" href="#109">109: </a> <span class="php-keyword1">foreach</span>(<span class="php-var">$provider_services</span> <span class="php-keyword1">as</span> <span class="php-var">$providerService</span>) {
</span><span id="110" class="l"><a class="l" href="#110">110: </a> <span class="php-var">$provider</span>[<span class="php-quote">'services'</span>][] = <span class="php-var">$providerService</span>[<span class="php-quote">'id_services'</span>];
</span><span id="111" class="l"><a class="l" href="#111">111: </a> }
</span><span id="112" class="l"><a class="l" href="#112">112: </a> }
</span><span id="113" class="l"><a class="l" href="#113">113: </a>
</span><span id="114" class="l"><a class="l" href="#114">114: </a> <span class="php-keyword1">return</span> <span class="php-var">$providers</span>;
</span><span id="115" class="l"><a class="l" href="#115">115: </a> }
</span><span id="116" class="l"><a class="l" href="#116">116: </a>
</span><span id="117" class="l"><a class="l" href="#117">117: </a> <span class="php-comment">/**
</span></span><span id="118" class="l"><a class="l" href="#118">118: </a><span class="php-comment"> * Get the providers role id from the database.
</span></span><span id="119" class="l"><a class="l" href="#119">119: </a><span class="php-comment"> *
</span></span><span id="120" class="l"><a class="l" href="#120">120: </a><span class="php-comment"> * @return int Returns the role id for the customer records.
</span></span><span id="121" class="l"><a class="l" href="#121">121: </a><span class="php-comment"> */</span>
</span><span id="122" class="l"><a class="l" href="#122">122: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_providers_role_id" href="#_get_providers_role_id">get_providers_role_id</a>() {
</span><span id="123" class="l"><a class="l" href="#123">123: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_roles'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'slug'</span> =&gt; DB_SLUG_PROVIDER))-&gt;row()-&gt;id;
</span><span id="124" class="l"><a class="l" href="#124">124: </a> }
</span><span id="125" class="l"><a class="l" href="#125">125: </a>
</span><span id="126" class="l"><a class="l" href="#126">126: </a> <span class="php-comment">/**
</span></span><span id="127" class="l"><a class="l" href="#127">127: </a><span class="php-comment"> * Get a providers setting from the database.
</span></span><span id="128" class="l"><a class="l" href="#128">128: </a><span class="php-comment"> *
</span></span><span id="129" class="l"><a class="l" href="#129">129: </a><span class="php-comment"> * @param string $setting_name The setting name that is going to be
</span></span><span id="130" class="l"><a class="l" href="#130">130: </a><span class="php-comment"> * returned.
</span></span><span id="131" class="l"><a class="l" href="#131">131: </a><span class="php-comment"> * @param int $provider_id The selected provider id.
</span></span><span id="132" class="l"><a class="l" href="#132">132: </a><span class="php-comment"> * @return string Returs the value of the selected user setting.
</span></span><span id="133" class="l"><a class="l" href="#133">133: </a><span class="php-comment"> */</span>
</span><span id="134" class="l"><a class="l" href="#134">134: </a> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> <a id="_get_setting" href="#_get_setting">get_setting</a>(<span class="php-var">$setting_name</span>, <span class="php-var">$provider_id</span>) {
</span><span id="135" class="l"><a class="l" href="#135">135: </a> <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;db-&gt;get_where(<span class="php-quote">'ea_user_settings'</span>, <span class="php-keyword1">array</span>(<span class="php-quote">'id_users'</span> =&gt; <span class="php-var">$provider_id</span>))
</span><span id="136" class="l"><a class="l" href="#136">136: </a> -&gt;row_array()[<span class="php-var">$setting_name</span>];
</span><span id="137" class="l"><a class="l" href="#137">137: </a> }
</span><span id="138" class="l"><a class="l" href="#138">138: </a>}
</span><span id="139" class="l"><a class="l" href="#139">139: </a>
</span><span id="140" class="l"><a class="l" href="#140">140: </a><span class="php-comment">/* End of file providers_model.php */</span>
</span><span id="141" class="l"><a class="l" href="#141">141: </a></span><span class="php-comment">/* Location: ./application/models/providers_model.php */</span></code></pre>
<div id="footer">
API documentation generated by <a href="http://apigen.org">ApiGen 2.8.0</a>

View file

@ -34,12 +34,12 @@ class Appointments extends CI_Controller {
->get_batch(array('hash' => $appointment_hash))[0];
$provider_data = $this->Providers_Model
->get_row($appointment_data['id_users_provider']);
$customer_data = $this->Customer_Model
$customer_data = $this->Customers_Model
->get_row($appointment_data['id_users_customer']);
} else {
// The customer is going to book an appointment so there is no
// need for the manage functionality to be initialized.
$manage_mode = false;
$manage_mode = FALSE;
$appointment_data = array();
$provider_data = array();
$customer_data = array();
@ -76,8 +76,19 @@ class Appointments extends CI_Controller {
// Send an email to the customer with the appointment info.
$this->load->library('Notifications');
try {
$this->notifications->send_book_success($customer_data, $appointment_data);
$this->notifications->send_new_appointment($customer_data, $appointment_data);
if (!$post_data['manage_mode']) {
$customer_title = 'Your appointment has been successfully booked!';
$provider_title = 'A new appointment has been added to your plan.';
} else {
$customer_title = 'Appointment changes saved successfully!';
$provider_title = 'Appointment details have changed.';
}
$this->notifications->send_book_success(
$customer_data, $appointment_data, $customer_title);
$this->notifications->send_new_appointment(
$customer_data, $appointment_data, $provider_title);
} catch (NotificationException $not_exc) {
$view_data['notification_error'] = '<br><br>'
. '<pre>An unexpected error occured while sending you an '
@ -93,53 +104,51 @@ class Appointments extends CI_Controller {
}
/**
* Display the view - manage screen of an external
* appointment link.
* Cancel an existing appointment.
*
* This method loads the page that is going to be displayed
* whenever a customer, or a provider clicks on the email link
* that enables him to preview and make changes to the selected
* appointment.
*
* @param string $user_type Link user type (one of the
* DB_SLUG_CUSTOMER, ... constants).
* @param string $appointment_hash the appointment db hash. This
* is used to identify the appointment record.
* This method removes an appointment from the company's schedule.
* In order for the appointment to be deleted, the hash string must
* be provided. The customer can only cancel the appointment if the
* edit time period is not over yet.
*
* @param string $appointment_hash This is used to distinguish the
* appointment record.
*/
public function external_link($user_type, $appointment_hash) {
if (strtoupper($_SERVER['REQUEST_METHOD']) != 'POST') {
// Prepare and display the external manage view page.
public function cancel($appointment_hash) {
try {
$this->load->model('Appointments_Model');
$this->load->model('Providers_Model');
$this->load->model('Customers_Model');
$this->load->model('Services_Model');
$appointment_data = $this->Appointments_Model
->get_batch(array('hash' => $appointment_hash))[0];
$provider_data = $this->Providers_Model
->get_row($appointment_data['id_users_provider']);
$customer_data = $this->Customers_Model
->get_row($appointment_data['id_users_customer']);
// Check whether the appointment hash exists in the database.
$records = $this->Appointments_Model->get_batch(array('hash' => $appointment_hash));
if (count($records) == 0) {
throw new Exception('No record matches the provided hash.');
}
$available_providers = $this->Providers_Model->get_available_providers();
$available_services = $this->Services_Model->get_available_services();
$appointment_data = $records[0];
$view_data = array(
'appointment_data' => $appointment_data,
'customer_data' => $customer_data,
'provider_data' => $provider_data,
'user_type' => $user_type,
'available_providers' => $available_providers,
'available_services' => $available_services
);
$this->load->view('appointments/external_manage', $view_data);
} else {
// The external manage page was posted back. Save the
// changes of the user.
// Delete the appointment from the database.
if (!$this->Appointments_Model->delete($appointment_data['id'])) {
throw new Exception('Appointment could not be deleted from the database.');
}
// @task Save user changes.
// Send notification emails to the customer and provider.
$provider_email = $this->Providers_Model->get_value('email',
$appointment_data['id_users_provider']);
$customer_email = $this->Customers_Model->get_value('email',
$appointment_data['id_users_customer']);
$this->load->library('Notifications');
$this->notifications->send_cancel_appointment($appointment_data, $provider_email);
$this->notifications->send_cancel_appointment($appointment_data, $customer_email);
} catch(Exception $exc) {
// Display the error message to the customer.
$view_data['error_message'] = $exc->getMessage();
}
$this->load->view('appointments/cancel');
}
/**
@ -160,22 +169,24 @@ class Appointments extends CI_Controller {
// Get the provider's working plan and reserved appointments.
$working_plan = json_decode($this->Providers_Model
->get_value('working_plan', $_POST['provider_id']), true);
->get_setting('working_plan', $_POST['provider_id']), true);
$where_clause = array(
'DATE(start_datetime)' => date('Y-m-d', strtotime($_POST['selected_date'])),
'id_users_provider' => $_POST['provider_id'],
'id_services' => $_POST['service_id']
'id_users_provider' => $_POST['provider_id']
);
$reserved_appointments = $this->Appointments_Model->get_batch($where_clause);
if ($_POST['manage_mode']) {
if ($_POST['manage_mode'] === 'true') {
// Current record id shouldn't be included as reserved time,
// whent the manage mode is true.
$where_clause['id !='] = $_POST['appointment_id'];
foreach($reserved_appointments as $index=>$appointment) {
if ($appointment['id'] == $_POST['appointment_id']) {
unset($reserved_appointments[$index]);
}
}
}
$reserved_appointments = $this->Appointments_Model->get_batch($where_clause);
// Find the empty spaces on the plan. The first split between
// the plan is due to a break (if exist). After that every reserved
@ -272,8 +283,25 @@ class Appointments extends CI_Controller {
foreach($empty_spaces as $space) {
$start_hour = new DateTime($_POST['selected_date'] . ' ' . $space['start']);
$end_hour = new DateTime($_POST['selected_date'] . ' ' . $space['end']);
$curr_hour = $start_hour;
$end_hour = new DateTime($_POST['selected_date'] . ' ' . $space['end']);
$minutes = $start_hour->format('i');
if ($minutes % 15 != 0) {
// Change the start hour of the current space in order to be
// on of the following: 00, 15, 30, 45.
if ($minutes < 15) {
$start_hour->setTime($start_hour->format('H'), 15);
} else if ($minutes < 30) {
$start_hour->setTime($start_hour->format('H'), 30);
} else if ($minutes < 45) {
$start_hour->setTime($start_hour->format('H'), 45);
} else {
$start_hour->setTime($start_hour->format('H') + 1, 00);
}
}
$curr_hour = $start_hour;
$diff = $curr_hour->diff($end_hour);
while(($diff->h * 60 + $diff->i) > intval($_POST['service_duration'])) {
@ -289,7 +317,12 @@ class Appointments extends CI_Controller {
// that is at least half or one hour from now. The setting is stored in
// minutes.
if (date('m/d/Y', strtotime($_POST['selected_date'])) == date('m/d/Y')) {
$book_advance_timeout = $this->Settings_Model->get_setting('book_advance_timeout');
if ($_POST['manage_mode'] === 'true') {
$book_advance_timeout = 0;
} else {
$book_advance_timeout = $this->Settings_Model
->get_setting('book_advance_timeout');
}
foreach($available_hours as $index=>$value) {
$available_hour = strtotime($value);
@ -321,7 +354,8 @@ class Appointments extends CI_Controller {
try {
$this->load->library('Google_Sync');
$this->google_sync->sync_appointment($appointment_id);
$view_data['message'] = 'Your appointment has been successfully added to Google Calendar!';
$view_data['message'] = 'Your appointment has been successfully added'
. 'to Google Calendar!';
$view_data['image'] = 'success.png';
} catch (Exception $exc) {
$view_data['message'] = 'An unexpected error occured during the sync '

View file

@ -74,7 +74,12 @@ class Unit_tests_appointments_model extends CI_Driver {
// Check if the record is the one that was inserted.
$db_data = $this->CI->db->get_where('ea_appointments', array('id' => $appointment_data['id']))->row_array();
unset($db_data['hash']); // This should not be included because is generate when the record is inserted.
// These should not be included because they are generated when the
// record is inserted.
unset($db_data['hash']);
unset($db_data['book_datetime']);
$this->CI->unit->run($appointment_data, $db_data, 'Test if add() appointment (insert operation) has successfully inserted a record.');
// Delete inserted record.
@ -418,7 +423,8 @@ class Unit_tests_appointments_model extends CI_Driver {
// Get the appointment row from the database.
$db_data = $this->CI->Appointments_Model->get_row($appointment_data['id']);
unset($db_data['book_datetime']);
// Check if this is the record we seek.
$this->CI->unit->run($db_data, $appointment_data, 'Test get_row() method.');

View file

@ -51,9 +51,11 @@ class Notifications {
* data. Each key has the same name as the corresponding field in db.
* @param array $appointment_data Associative array with the appointment's
* data. Each key has the same name as the corresponding field in db.
* @param string $email_title The email title is going to inform the customer
* for the action that was taken.
* @return bool Returns the operation result.
*/
public function send_book_success($customer_data, $appointment_data) {
public function send_book_success($customer_data, $appointment_data, $email_title) {
$this->CI->load->model('Providers_Model');
$this->CI->load->model('Services_Model');
$this->CI->load->model('Settings_Model');
@ -64,11 +66,12 @@ class Notifications {
->get_row($appointment_data['id_services']);
$replace_array = array(
'$email_title' => $email_title,
'$appointment_service' => $service_data['name'],
'$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'],
'$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])),
'$appointment_duration' => $service_data['duration'] . ' minutes',
'$appointment_link' => $this->CI->config->item('base_url') . $appointment_data['hash'],
'$appointment_link' => $this->CI->config->item('base_url') . 'appointments/index/' . $appointment_data['hash'],
'$company_link' => $this->CI->Settings_Model->get_setting('company_link'),
'$company_name' => $this->CI->Settings_Model->get_setting('company_name'),
'$customer_name' => $customer_data['first_name'] . ' ' . $customer_data['last_name']
@ -83,7 +86,7 @@ class Notifications {
$mail->AddAddress($customer_data['email']); // Do not use the name argument, phpmailer crushes.
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Subject = 'Appointment Book Success!';
$mail->Subject = $email_title;
$mail->Body = $email_html;
if(!$mail->Send()) {
@ -105,9 +108,11 @@ class Notifications {
* data. Each key has the same name as the corresponding field in db.
* @param array $appointment_data Associative array with the appointment's
* data. Each key has the same name as the corresponding field in db.
* @param string $email_title The email title is going to inform the provider
* for the action that was taken.
* @return bool Returns the operation result.
*/
public function send_new_appointment($customer_data, $appointment_data) {
public function send_new_appointment($customer_data, $appointment_data, $email_title) {
$this->CI->load->model('Providers_Model');
$this->CI->load->model('Services_Model');
$this->CI->load->model('Settings_Model');
@ -116,6 +121,7 @@ class Notifications {
$service_data = $this->CI->Services_Model->get_row($appointment_data['id_services']);
$replace_array = array(
'$email_title' => $email_title,
'$appointment_service' => $service_data['name'],
'$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'],
'$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])),
@ -135,11 +141,11 @@ class Notifications {
$mail = new PHPMailer();
$mail->From = $this->CI->Settings_Model->get_setting('company_email');
$mail->FromName = $this->CI->Settings_Model->get_setting('company_name');;
$mail->FromName = $this->CI->Settings_Model->get_setting('company_name');
$mail->AddAddress($provider_data['email']); // "Name" argument crushes the phpmailer class.
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Subject = 'New Appointment';
$mail->Subject = $email_title;
$mail->Body = $email_html;
if (!$mail->Send()) {
@ -149,6 +155,52 @@ class Notifications {
return TRUE;
}
/**
* Send an email notification to a user when an appointment is cancelled.
*
* @param array $appointment_data The record data of the cancelled appointment.
* @param string $user_email The user email where the email notification is going
* to be send.
*/
public function send_cancel_appointment($appointment_data, $user_email) {
$this->CI->load->model('Providers_Model');
$this->CI->load->model('Services_Model');
$this->CI->load->model('Settings_Model');
$provider_data = $this->CI->Providers_Model->get_row($appointment_data['id_users_provider']);
$service_data = $this->CI->Services_Model->get_row($appointment_data['id_services']);
$replace_array = array(
'$email_title' => 'Appointment Cancelled',
'$appointment_service' => $service_data['name'],
'$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'],
'$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])),
'$appointment_duration' => $service_data['duration'] . ' minutes',
'$company_link' => $this->CI->Settings_Model->get_setting('company_link'),
'$company_name' => $this->CI->Settings_Model->get_setting('company_name')
);
$email_html = file_get_contents(dirname(dirname(__FILE__))
. '/views/emails/cancel_appointment.php');
$email_html = $this->replace_template_variables($replace_array, $email_html);
$mail = new PHPMailer();
$mail->From = $this->CI->Settings_Model->get_setting('company_email');
$mail->FromName = $this->CI->Settings_Model->get_setting('company_name');
$mail->AddAddress($user_email); // "Name" argument crushes the phpmailer class.
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';
$mail->Subject = 'Appointment Cancelled';
$mail->Body = $email_html;
if (!$mail->Send()) {
throw new NotificationException('Email could not been sent. '
. 'Mailer Error (Line ' . __LINE__ . '): ' . $mail->ErrorInfo);
}
return TRUE;
}
}

View file

@ -15,24 +15,26 @@ class Appointments_Model extends CI_Model {
* appointment doesn't exists it is going to be inserted, otherwise
* the record is going to be updated.
*
* @expectedException ValidationException
* @expectedException DatabaseException
* @expectedException ValidationException Raises when the appointment data
* are invalid.
* @expectedException DatabaseException Raises when the insert or update
* operation fail to complete successfully.
*
* @param array $appointment_data Associative array with the appointmet's
* @param array $appointment_data Associative array with the appointment
* data. Each key has the same name with the database fields.
* @return int Returns the appointments id.
*/
public function add($appointment_data) {
// Validate the appointment data before doing anything.
if (!$this->validate_data($appointment_data)) {
throw new ValidationException('Appointment data are not valid');
throw new ValidationException('Appointment data are invalid.');
}
// Insert or update the appointment data.
if (!$this->exists($appointment_data)) {
// Perform insert() or update() operation.
if (!isset($appointment_data['id'])) {
$appointment_data['id'] = $this->insert($appointment_data);
} else {
$appointment_data['id'] = $this->update($appointment_data);
$this->update($appointment_data);
}
return $appointment_data['id'];
@ -59,16 +61,17 @@ class Appointments_Model extends CI_Model {
|| !isset($appointment_data['id_users_provider'])
|| !isset($appointment_data['id_users_customer'])
|| !isset($appointment_data['id_services'])) {
throw new InvalidArgumentException('Not all appointment field values are provided : ' . print_r($appointment_data, TRUE));
throw new InvalidArgumentException('Not all appointment field values '
. 'are provided : ' . print_r($appointment_data, TRUE));
}
$num_rows = $this->db->get_where('ea_appointments', array(
'start_datetime' => $appointment_data['start_datetime'],
'end_datetime' => $appointment_data['end_datetime'],
'id_users_provider' => $appointment_data['id_users_provider'],
'id_users_customer' => $appointment_data['id_users_customer'],
'id_services' => $appointment_data['id_services'],
))->num_rows();
'start_datetime' => $appointment_data['start_datetime'],
'end_datetime' => $appointment_data['end_datetime'],
'id_users_provider' => $appointment_data['id_users_provider'],
'id_users_customer' => $appointment_data['id_users_customer'],
'id_services' => $appointment_data['id_services'],))
->num_rows();
return ($num_rows > 0) ? TRUE : FALSE;
}
@ -76,17 +79,21 @@ class Appointments_Model extends CI_Model {
/**
* Insert a new appointment record to the database.
*
* @expectedException DatabaseException
* @expectedException DatabaseException Raises when the insert operation
* failes to complete successfully.
*
* @param array $appointment_data Associative array with the appointment's
* data. Each key has the same name with the database fields.
* @return int Returns the id of the new record.
*/
private function insert($appointment_data) {
$appointment_data['book_datetime'] = date('Y-m-d H:i:s');
$appointment_data['hash'] = $this->generate_hash();
if (!$this->db->insert('ea_appointments', $appointment_data)) {
throw new DatabaseException('Could not insert appointment record.');
}
return intval($this->db->insert_id());
}
@ -96,38 +103,36 @@ class Appointments_Model extends CI_Model {
* The appointment data argument should already include the record
* id in order to process the update operation.
*
* @expectedException DatabaseException Raises when the update operation
* failes to complete successfully.
*
* @param array $appointment_data Associative array with the appointment's
* data. Each key has the same name with the database fields.
* @return int Returns the id of the updated record.
*/
private function update($appointment_data) {
if (!isset($appointment_data['id'])) {
$appointment_data['id'] = $this->find_record_id($appointment_data);
}
$this->db->where('id', $appointment_data['id']);
if (!$this->db->update('ea_appointments', $appointment_data)) {
throw new DatabaseException('Could not update appointment record.');
}
return intval($appointment_data['id']);
}
/**
* Find the database id of an appointment record.
*
* The appointment data should include the following fields in order to
* get the unique id from the database: start_datetime, end_datetime,
* id_users_provider, id_users_customer, id_services.
* The appointment data should include the following fields in order
* to get the unique id from the database: "start_datetime", "end_datetime",
* "id_users_provider", "id_users_customer", "id_services".
*
* <strong>IMPORTANT!</strong> The record must already exists in the
* database, otherwise an exception is raised.
*
* @expectedException DatabaseException
* @expectedException DatabaseException Raises when this method cannot
* find any record that matches the given data.
*
* @param array $appointment_data Array with the appointment data. The
* keys of the array should have the same names as the db fields.
* @return int Returns the id.
* @return int Returns the db id of the record that matches the apppointment
* data.
*/
public function find_record_id($appointment_data) {
$this->db->where(array(
@ -148,8 +153,8 @@ class Appointments_Model extends CI_Model {
}
/**
* Validate appointment data before the insert or
* update operation is executed.
* Validate appointment data before the insert or update operations
* are executed.
*
* @param array $appointment_data Contains the appointment data.
* @return bool Returns the validation result.
@ -158,6 +163,17 @@ class Appointments_Model extends CI_Model {
$this->load->helper('data_validation');
try {
// If a appointment id is given, check wether the record exists
// in the database.
if (isset($appointment_data['id'])) {
$num_rows = $this->db->get_where('ea_appointments',
array('id' => $appointment_data['id']))->num_rows();
if ($num_rows == 0) {
throw new Exception('Provided appointment id does not '
. 'exist in the database.');
}
}
// Check if appointment dates are valid.
if (!validate_mysql_datetime($appointment_data['start_datetime'])) {
throw new Exception('Appointment start datetime is invalid.');
@ -169,30 +185,31 @@ class Appointments_Model extends CI_Model {
// Check if the provider's id is valid.
$num_rows = $this->db
->select('*')
->from('ea_users')
->join('ea_roles', 'ea_roles.id = ea_users.id_roles', 'inner')
->where('ea_users.id', $appointment_data['id_users_provider'])
->where('ea_roles.slug', DB_SLUG_PROVIDER)
->get()->num_rows();
->select('*')
->from('ea_users')
->join('ea_roles', 'ea_roles.id = ea_users.id_roles', 'inner')
->where('ea_users.id', $appointment_data['id_users_provider'])
->where('ea_roles.slug', DB_SLUG_PROVIDER)
->get()->num_rows();
if ($num_rows == 0) {
throw new Exception('Appointment provider id is invalid.');
}
// Check if the customer's id is valid.
$num_rows = $this->db
->select('*')
->from('ea_users')
->join('ea_roles', 'ea_roles.id = ea_users.id_roles', 'inner')
->where('ea_users.id', $appointment_data['id_users_customer'])
->where('ea_roles.slug', DB_SLUG_CUSTOMER)
->get()->num_rows();
->select('*')
->from('ea_users')
->join('ea_roles', 'ea_roles.id = ea_users.id_roles', 'inner')
->where('ea_users.id', $appointment_data['id_users_customer'])
->where('ea_roles.slug', DB_SLUG_CUSTOMER)
->get()->num_rows();
if ($num_rows == 0) {
throw new Exception('Appointment customer id is invalid.');
}
// Check if the service id is valid.
$num_rows = $this->db->get_where('ea_services', array('id' => $appointment_data['id_services']))->num_rows();
$num_rows = $this->db->get_where('ea_services',
array('id' => $appointment_data['id_services']))->num_rows();
if ($num_rows == 0) {
throw new Exception('Appointment customer id is invalid.');
}
@ -214,10 +231,12 @@ class Appointments_Model extends CI_Model {
*/
public function delete($appointment_id) {
if (!is_numeric($appointment_id)) {
throw new InvalidArgumentException('Invalid argument type $appointment_id : ' . $appointment_id);
throw new InvalidArgumentException('Invalid argument type $appointment_id : '
. $appointment_id);
}
$num_rows = $this->db->get_where('ea_appointments', array('id' => $appointment_id))->num_rows();
$num_rows = $this->db->get_where('ea_appointments',
array('id' => $appointment_id))->num_rows();
if ($num_rows == 0) {
return FALSE; // Record does not exist.
@ -237,36 +256,43 @@ class Appointments_Model extends CI_Model {
*/
public function get_row($appointment_id) {
if (!is_numeric($appointment_id)) {
throw new InvalidArgumentException('Invalid argument given. Expected integer for the $appointment_id : ' . $appointment_id);
throw new InvalidArgumentException('Invalid argument given. Expected '
. 'integer for the $appointment_id : ' . $appointment_id);
}
return $this->db->get_where('ea_appointments', array('id' => $appointment_id))->row_array();
return $this->db->get_where('ea_appointments',
array('id' => $appointment_id))->row_array();
}
/**
* Get a specific field value from the database.
*
* @param string $field_name The field name of the value to be
* returned.
* @param string $field_name The field name of the value to be returned.
* @param int $appointment_id The selected record's id.
* @return string Returns the records value from the database.
*/
public function get_value($field_name, $appointment_id) {
if (!is_numeric($appointment_id)) {
throw new InvalidArgumentException('Invalid argument given, expected integer for the $appointment_id : ' . $appointment_id);
throw new InvalidArgumentException('Invalid argument given, expected '
. 'integer for the $appointment_id : ' . $appointment_id);
}
if (!is_string($field_name)) {
throw new InvalidArgumentException('Invalid argument given, expected string for the $field_name : ' . $field_name);
throw new InvalidArgumentException('Invalid argument given, expected '
. 'string for the $field_name : ' . $field_name);
}
if ($this->db->get_where('ea_appointments', array('id' => $appointment_id))->num_rows() == 0) {
throw new InvalidArgumentException('The record with the provided id does not exist in the database : ' . $appointment_id);
if ($this->db->get_where('ea_appointments',
array('id' => $appointment_id))->num_rows() == 0) {
throw new InvalidArgumentException('The record with the provided id '
. 'does not exist in the database : ' . $appointment_id);
}
$row_data = $this->db->get_where('ea_appointments', array('id' => $appointment_id))->row_array();
$row_data = $this->db->get_where('ea_appointments',
array('id' => $appointment_id))->row_array();
if (!isset($row_data[$field_name])) {
throw new InvalidArgumentException('The given field name does not exist in the database : ' . $field_name);
throw new InvalidArgumentException('The given field name does not '
. 'exist in the database : ' . $field_name);
}
return $row_data[$field_name];

View file

@ -23,15 +23,15 @@ class Customers_Model extends CI_Model {
* @return int Returns the customer id.
*/
public function add($customer_data) {
// Validate the appointment data before doing anything.
// Validate the customer data before doing anything.
if (!$this->validate_data($customer_data)) {
throw new ValidationException('Customer data are not valid.');
}
if (!$this->exists($customer_data)) {
if (!isset($customer_data['id'])) {
$customer_data['id'] = $this->insert($customer_data);
} else {
$customer_data['id'] = $this->update($customer_data);
$this->update($customer_data);
}
return $customer_data['id'];
@ -103,11 +103,7 @@ class Customers_Model extends CI_Model {
* data. Each key has the same name with the database fields.
* @return int Returns the updated record id.
*/
private function update($customer_data) {
if (!isset($customer_data['id'])) {
$customer_data['id'] = $this->find_record_id($customer_data);
}
private function update($customer_data) {
$this->db->where('id', $customer_data['id']);
if (!$this->db->update('ea_users', $customer_data)) {
throw new DatabaseException('Could not update customer to the database.');
@ -164,6 +160,16 @@ class Customers_Model extends CI_Model {
$this->load->helper('data_validation');
try {
// If a customer id is provided, check whether the record
// exist in the database.
if (isset($customer_data['id'])) {
$num_rows = $this->db->get_where('ea_users',
array('id' => $customer_data['id']))->num_rows();
if ($num_rows == 0) {
throw new Exception('Provided customer id does not '
. 'exist in the database.');
}
}
// Validate required fields
if (!isset($customer_data['last_name'])
|| !isset($customer_data['email'])
@ -174,7 +180,8 @@ class Customers_Model extends CI_Model {
// Validate email address
if (!filter_var($customer_data['email'], FILTER_VALIDATE_EMAIL)) {
throw new Exception('Invalid email address provided : ' . $customer_data['email']);
throw new Exception('Invalid email address provided : '
. $customer_data['email']);
}
return TRUE;
@ -194,7 +201,8 @@ class Customers_Model extends CI_Model {
*/
public function delete($customer_id) {
if (!is_numeric($customer_id)) {
throw new InvalidArgumentException('Invalid argument type $customer_id : ' . $customer_id);
throw new InvalidArgumentException('Invalid argument type $customer_id : '
. $customer_id);
}
$num_rows = $this->db->get_where('ea_users', array('id' => $customer_id))->num_rows();
@ -216,7 +224,8 @@ class Customers_Model extends CI_Model {
*/
public function get_row($customer_id) {
if (!is_numeric($customer_id)) {
throw new InvalidArgumentException('Invalid argument provided as $customer_id : ' . $customer_id);
throw new InvalidArgumentException('Invalid argument provided as $customer_id : '
. $customer_id);
}
return $this->db->get_where('ea_users', array('id' => $customer_id))->row_array();
}
@ -231,23 +240,29 @@ class Customers_Model extends CI_Model {
*/
public function get_value($field_name, $customer_id) {
if (!is_numeric($customer_id)) {
throw new InvalidArgumentException('Invalid argument provided as $customer_id : ' . $customer_id);
throw new InvalidArgumentException('Invalid argument provided as $customer_id : '
. $customer_id);
}
if (!is_string($field_name)) {
throw new InvalidArgumentException('$field_name argument is not a string : ' . $field_name);
throw new InvalidArgumentException('$field_name argument is not a string : '
. $field_name);
}
if ($this->db->get_where('ea_users', array('id' => $customer_id))->num_rows() == 0) {
throw new InvalidArgumentException('The record with the $customer_id argument does not exist in the database : ' . $customer_id);
throw new InvalidArgumentException('The record with the $customer_id argument '
. 'does not exist in the database : ' . $customer_id);
}
$row_data = $this->db->get_where('ea_users', array('id' => $customer_id))->row_array();
$row_data = $this->db->get_where('ea_users', array('id' => $customer_id)
)->row_array();
if (!isset($row_data[$field_name])) {
throw new InvalidArgumentException('The given $field_name argument does not exist in the database : ' . $field_name);
throw new InvalidArgumentException('The given $field_name argument does not'
. 'exist in the database : ' . $field_name);
}
return $this->db->get_where('ea_users', array('id' => $customer_id))->row_array()[$field_name];
return $this->db->get_where('ea_users', array('id' => $customer_id))
->row_array()[$field_name];
}
/**

View file

@ -33,23 +33,28 @@ class Providers_Model extends CI_Model {
*/
public function get_value($field_name, $provider_id) {
if (!is_numeric($provider_id)) {
throw new InvalidArgumentException('Invalid argument provided as $customer_id : ' . $provider_id);
throw new InvalidArgumentException('Invalid argument provided as $customer_id : '
. $provider_id);
}
if (!is_string($field_name)) {
throw new InvalidArgumentException('$field_name argument is not a string : ' . $field_name);
throw new InvalidArgumentException('$field_name argument is not a string : '
. $field_name);
}
if ($this->db->get_where('ea_users', array('id' => $provider_id))->num_rows() == 0) {
throw new InvalidArgumentException('The record with the $provider_id argument does not exist in the database : ' . $provider_id);
throw new InvalidArgumentException('The record with the $provider_id argument'
. 'does not exist in the database : ' . $provider_id);
}
$row_data = $this->db->get_where('ea_users', array('id' => $provider_id))->row_array();
if (!isset($row_data[$field_name])) {
throw new InvalidArgumentException('The given $field_name argument does not exist in the database : ' . $field_name);
throw new InvalidArgumentException('The given $field_name argument does not'
. 'exist in the database : ' . $field_name);
}
return $this->db->get_where('ea_users', array('id' => $provider_id))->row_array()[$field_name];
return $this->db->get_where('ea_users', array('id' => $provider_id))
->row_array()[$field_name];
}
/**
@ -117,6 +122,19 @@ class Providers_Model extends CI_Model {
public function get_providers_role_id() {
return $this->db->get_where('ea_roles', array('slug' => DB_SLUG_PROVIDER))->row()->id;
}
/**
* Get a providers setting from the database.
*
* @param string $setting_name The setting name that is going to be
* returned.
* @param int $provider_id The selected provider id.
* @return string Returs the value of the selected user setting.
*/
public function get_setting($setting_name, $provider_id) {
return $this->db->get_where('ea_user_settings', array('id_users' => $provider_id))
->row_array()[$setting_name];
}
}
/* End of file providers_model.php */

View file

@ -132,7 +132,11 @@
Press the "Cancel" button to remove the appointment
from the company schedule.
</p>
<button id="cancel-appointment" class="button">Cancel</button>
<form method="get" action="' . $this->config->item('base_url')
. 'appointments/cancel/' . $appointment_data['hash'] . '">
<button id="cancel-appointment" class="btn btn-inverse">
Cancel</button>
</form>
</div>';
}
?>

View file

@ -0,0 +1,63 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<?php // INCLUDE JS FILES ?>
<script
type="text/javascript"
src="<?php echo $this->config->base_url(); ?>assets/js/libs/jquery/jquery.min.js">
</script>
<?php // INCLUDE CSS FILES ?>
<link
rel="stylesheet"
type="text/css"
href="<?php echo $this->config->base_url(); ?>assets/css/libs/bootstrap/bootstrap.css">
<link
rel="stylesheet"
type="text/css"
href="<?php echo $this->config->base_url(); ?>assets/css/libs/bootstrap/bootstrap-responsive.css">
<?php // SET FAVICON FOR PAGE ?>
<link
rel="icon"
type="image/x-icon"
href="<?php echo $this->config->base_url(); ?>assets/images/favicon.ico">
<style>
body {
background-color: #CAEDF3;
}
#success-frame {
width: 660px;
margin: 150px auto 0 auto;
background: #FFF;
border: 1px solid #DDDADA;
min-height: 197px;
padding: 108px 10px;
}
#success-icon {
float: left;
margin: 10px 25px 100px 50px;
}
</style>
</head>
<body>
<div id="success-frame" class="frame-container">
<img id="success-icon" src="<?php echo $this->config->base_url(); ?>assets/images/success.png" />
<h2>Your appointment has been successfully cancelled.</h2>
<?php
// Display exception message (if any).
if (isset($error_message)) {
echo $error_message;
}
?>
</div>
</body>
</html>

View file

@ -11,7 +11,7 @@
</div>
<div id="content" style="padding: 10px 15px;">
<h2>Your appointment has been successfully booked!</h2>
<h2>$email_title</h2>
<p>
Thank you $customer_name for arranging an appointment with us.
Below you can see the appointment details. Click on the edit
@ -44,7 +44,7 @@
You are able to change the appointment details three hours before
the appointment.
</p>
<a href="$appointment_link">$appointment_link</a>
<a href="$appointment_link" style="width: 600px;">$appointment_link</a>
</div>
<div id="footer" style="padding: 10px; text-align: center;

View file

@ -0,0 +1,46 @@
<html>
<head>
<title>$email_title</title>
</head>
<body style="font: 13px arial, helvetica, tahoma;">
<div class="email-container" style="width: 650px;border: 1px solid #eee;">
<div id="header" style="background-color: #3DD481; border-bottom: 4px solid #1A865F;
height: 40px;padding: 10px 15px;">
<strong id="logo" style="color: white; font-size: 31px;
text-shadow: 1px 1px 1px #8F8888;">$company_name</strong>
</div>
<div id="content" style="padding: 10px 15px;">
<h2>$email_title</h2>
<p>
The following appointment was removed from the company's schedule.
</p>
<h2>Appointment Details</h2>
<table id="appointment-details">
<tr>
<td class="label" style="padding: 3px;font-weight: bold;">Service</td>
<td style="padding: 3px;">$appointment_service</td>
</tr>
<tr>
<td class="label" style="padding: 3px;font-weight: bold;">Provider</td>
<td style="padding: 3px;">$appointment_provider</td>
</tr>
<tr>
<td class="label" style="padding: 3px;font-weight: bold;">Date</td>
<td style="padding: 3px;">$appointment_date</td>
</tr>
<tr>
<td class="label" style="padding: 3px;font-weight: bold;">Duration</td>
<td style="padding: 3px;">$appointment_duration</td>
</tr>
</table>
</div>
<div id="footer" style="padding: 10px; text-align: center;
border-top: 1px solid #EEE;background: #FAFAFA;">
<a href="$company_link">$company_name</a> | Powered by Easy!Appointments
</div>
</div>
</body>
</html>

View file

@ -12,7 +12,7 @@
</div>
<div id="content" style="padding: 10px 15px;">
<h2>A new appointment has been added to your plan.</h2>
<h2>$email_title</h2>
<h2>Appointment Details</h2>
<table id="appointment-details">
<tr>
@ -55,7 +55,7 @@
<h2>Appointment Link</h2>
<p>You can make more actions by pressing the following link.</p>
<a href="$appointment_link">$appointment_link</a>
<a href="$appointment_link" style="width: 600px;">$appointment_link</a>
</div>
<div id="footer" style="padding: 10px; text-align: center;

View file

@ -142,10 +142,21 @@ body {
}
#cancel-appointment-frame {
padding: 12px 17px;
background: #F5F5F5;
border-bottom: 1px solid #E2E2E2;
}
#cancel-appointment-frame p {
display: inline-block;
margin-right: 10px;
margin-bottom: 0;
}
#cancel-appointment-frame form {
display: inline;
}

View file

@ -28,9 +28,11 @@ var bookAppointment = {
}
if (manageMode === undefined) {
bookAppointment.manageMode = false; // Default Value
manageMode = false; // Default Value
}
bookAppointment.manageMode = manageMode;
// Initialize page's components (tooltips, datepickers etc).
$('.book-step').qtip({
position: {
@ -243,8 +245,19 @@ var bookAppointment = {
+ '</span><br/>');
});
// Set the first item as selected.
$('.available-hour:eq(0)').addClass('selected-hour');
if (bookAppointment.manageMode) {
// Set the appointment start time as selected.
$('.available-hour').removeClass('selected-hour');
$('.available-hour').filter(function() {
return $(this).text() === Date.parseExact(
GlobalVariables.appointmentData['start_datetime'],
'yyyy-MM-dd HH:mm:ss').toString('HH:mm');
}).addClass('selected-hour');
} else {
// Set the first item as selected.
$('.available-hour:eq(0)').addClass('selected-hour');
}
bookAppointment.updateConfirmFrame();
} else {
$('#available-hours').text('There are no available appointment'
@ -253,8 +266,8 @@ var bookAppointment = {
}
} catch(exception) {
GeneralFunctions.displayMessageBox('Unexpected Error', 'An unexpected'
+ 'error occured during the available hours calculation. Please'
GeneralFunctions.displayMessageBox('Unexpected Error', 'An unexpected '
+ 'error occured during the available hours calculation. Please '
+ 'refresh the page and try again.');
}
});
@ -331,6 +344,13 @@ var bookAppointment = {
'id_services' : $('#select-service').val()
};
postData['manage_mode'] = bookAppointment.manageMode;
if (bookAppointment.manageMode) {
postData['appointment']['id'] = GlobalVariables.appointmentData['id'];
postData['customer']['id'] = GlobalVariables.customerData['id'];
}
$('input[name="post_data"]').val(JSON.stringify(postData));
},
@ -378,26 +398,25 @@ var bookAppointment = {
applyAppointmentData : function(appointmentData, providerData, customerData) {
try {
// Select Service & Provider
$('#select-service').val(appointmentData['id_services']);
$('#select-service').val(appointmentData['id_services']).trigger('change');
$('#select-provider').val(appointmentData['id_users_provider']);
// Set Appointment Date
$('.available-hour').removeClass('selected-hour');
$('.available-hour').filter(function() {
return $(this).text() === Date.parseExact(appointmentData['start_datetime'],
'yyyy-MM-dd HH:mm').toString('HH:mm');
}).addClass('selected-hour');
$('#select-date').datepicker('setDate', Date.parseExact(
appointmentData['start_datetime'], 'yyyy-MM-dd HH:mm:ss'));
bookAppointment.getAvailableHours($('#select-date').val());
// Apply Customer's Data
$('last-name').val(customerData['last_name']);
$('first-name').val(customerData['first_name']);
$('email').val(customerData['email']);
$('phone-number').val(customerData['phone_number']);
$('#last-name').val(customerData['last_name']);
$('#first-name').val(customerData['first_name']);
$('#email').val(customerData['email']);
$('#phone-number').val(customerData['phone_number']);
$('address').val(customerData['address']);
$('city').val(customerData['city']);
$('zip-code').val(customerData['zip_code']);
$('notes').text(customerData['notes']);
$('#address').val(customerData['address']);
$('#city').val(customerData['city']);
$('#zip-code').val(customerData['zip_code']);
var appointmentNotes = (appointmentData['notes'] !== null) ? appointmentData['notes'] : '';
$('#notes').val(appointmentNotes);
bookAppointment.updateConfirmFrame();