forked from mirrors/easyappointments
* Added update algorithm.
* Fixed firefox issues
This commit is contained in:
parent
b935dd954f
commit
7ac98c1e8d
16 changed files with 95 additions and 33 deletions
Binary file not shown.
|
@ -29,8 +29,8 @@ $config['base_url'] = SystemConfiguration::$base_url;
|
|||
| the global "config" variable.
|
||||
|
|
||||
*/
|
||||
$config['ea_version'] = '1.0'; // This must be changed manually.
|
||||
$config['ea_release_title'] = 'Dev'; // Leave empty for no title or add BETA, TEST etc ...
|
||||
$config['ea_version'] = '0.7.1'; // This must be changed manually.
|
||||
$config['ea_release_title'] = 'Beta'; // Leave empty for no title or add BETA, TEST etc ...
|
||||
$config['ea_google_sync_feature'] = SystemConfiguration::$google_sync_feature;
|
||||
|
||||
/*
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
| whenever you intend to do a schema migration.
|
||||
|
|
||||
*/
|
||||
$config['migration_enabled'] = FALSE;
|
||||
$config['migration_enabled'] = TRUE;
|
||||
|
||||
|
||||
/*
|
||||
|
@ -21,7 +21,7 @@ $config['migration_enabled'] = FALSE;
|
|||
| be upgraded / downgraded to.
|
||||
|
|
||||
*/
|
||||
$config['migration_version'] = 0;
|
||||
$config['migration_version'] = 1; // current
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -252,6 +252,34 @@ class Backend extends CI_Controller {
|
|||
$view['role_slug'] = $this->session->userdata('role_slug');
|
||||
$view['privileges'] = $this->roles_model->get_privileges($this->session->userdata('role_slug'));
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will update the installation to the latest available
|
||||
* version in the server. IMPORTANT: The code files must exist in the
|
||||
* server, this method will not fetch any new files but will update
|
||||
* the database schema.
|
||||
*
|
||||
* This method can be used either by loading the page in the browser
|
||||
* or by an ajax request. But it will answer with json encoded data.
|
||||
*/
|
||||
public function update() {
|
||||
try {
|
||||
if (!$this->hasPrivileges(PRIV_SYSTEM_SETTINGS, TRUE))
|
||||
throw new Exception('You do not have the required privileges for this task.');
|
||||
|
||||
$this->load->library('migration');
|
||||
|
||||
if (!$this->migration->current())
|
||||
throw new Exception($this->migration->error_string());
|
||||
|
||||
echo json_encode(AJAX_SUCCESS);
|
||||
|
||||
} catch(Exception $exc) {
|
||||
echo json_encode(array(
|
||||
'exceptions' => array(exceptionToJavaScript($exc))
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* End of file backend.php */
|
||||
|
|
|
@ -268,4 +268,5 @@ $lang['select_google_calendar'] = 'Select Google Calendar';
|
|||
$lang['select_google_calendar_prompt'] = 'Select the calendar that you want to sync your appointments. If you do not want to select a specific calendar the default one will be used.';
|
||||
$lang['google_calendar_selected'] = 'Google calendar has been successfully selected!';
|
||||
$lang['oops_something_went_wrong'] = 'Oops! Something Went Wrong!';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Your appointment could not be added to your Google Calendar account.';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Your appointment could not be added to your Google Calendar account.';
|
||||
$lang['ea_update_success'] = 'Easy!Appointments has been successfully updated!';
|
|
@ -268,4 +268,5 @@ $lang['select_google_calendar'] = 'Wählen Sie Google Kalender';
|
|||
$lang['select_google_calendar_prompt'] = 'Wählen Sie den Kalender, den Sie Ihre Termine synchronisieren möchten. Wenn Sie nicht wollen, um einen bestimmten Kalender wählen den Standard, verwendet.';
|
||||
$lang['google_calendar_selected'] = 'Google-Kalender ausgewählt wurde erfolgreich!';
|
||||
$lang['oops_something_went_wrong'] = 'Oops! Etwas ist schiefgelaufen!';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Ihr Termin konnte nicht in den Google-Kalender-Konto hinzugefügt werden.';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Ihr Termin konnte nicht in den Google-Kalender-Konto hinzugefügt werden.';
|
||||
$lang['ea_update_success'] = 'Easy!Appointments wurde erfolgreich aktualisiert!';
|
|
@ -268,4 +268,5 @@ $lang['select_google_calendar'] = 'Επιλογή Ημερολογίου της
|
|||
$lang['select_google_calendar_prompt'] = 'Επιλέξτε το ημερολόγιο στο οποίο θέλετε να συγχρονίζεται τα ραντεβού σας. Εάν δεν θελήσετε να επιλέξετε ένα συγκεκριμένο ημερολόγιο θα χρησιμοποιηθεί το προεπιλεγμένο.';
|
||||
$lang['google_calendar_selected'] = 'Το ημερολόγιο της Google επιλέχθηκε επιτυχώς!';
|
||||
$lang['oops_something_went_wrong'] = 'Ώχ! Κάτι πήγε στραβά!';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Το ραντεβού σας δεν μπόρεσε να προστεθεί στον λογαριασμό σας στο Google Calendar.';
|
||||
$lang['could_not_add_to_google_calendar'] = 'Το ραντεβού σας δεν μπόρεσε να προστεθεί στον λογαριασμό σας στο Google Calendar.';
|
||||
$lang['ea_update_success'] = 'Το Easy!Appointments ενημερώθηκε με επιτυχία!';
|
|
@ -349,7 +349,7 @@
|
|||
<?php echo $this->lang->line('back'); ?>
|
||||
</button>
|
||||
<form id="book-appointment-form" style="display:inline-block" method="post">
|
||||
<button type="submit" class="btn btn-success">
|
||||
<button id="book-appointment-submit" type="button" class="btn btn-success">
|
||||
<i class="icon-ok icon-white"></i>
|
||||
<?php
|
||||
echo (!$manage_mode) ? $this->lang->line('confirm')
|
||||
|
|
|
@ -316,6 +316,9 @@
|
|||
if ($release_title != '') {
|
||||
echo ' - ' . $release_title;
|
||||
}
|
||||
|
||||
echo '<button id="update-ea" class="btn btn-success">'
|
||||
. $this->lang->line('update') . '</button>';
|
||||
?>
|
||||
</div>
|
||||
|
||||
|
@ -340,6 +343,10 @@
|
|||
<a href="https://code.google.com/p/easy-appointments/issues/list">
|
||||
<?php echo $this->lang->line('project_issues'); ?>
|
||||
</a>
|
||||
|
|
||||
<a href="http://easyappointments.wordpress.com">
|
||||
E!A Blog
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
|
|
|
@ -665,9 +665,13 @@ padding: 4px 7px;
|
|||
}
|
||||
|
||||
#settings-page #about .current-version {
|
||||
padding: 15px 10px;
|
||||
padding: 9px 10px;
|
||||
background: #F7F7F7;
|
||||
font-size: 15px;
|
||||
color: #7E7E7E;
|
||||
box-shadow: inset 0px 0px 5px #E0E0E0;
|
||||
}
|
||||
|
||||
#settings-page #update-ea {
|
||||
margin-left: 12px;
|
||||
}
|
|
@ -103,7 +103,7 @@ var Backend = {
|
|||
|
||||
$.each(actions, function(index, action) {
|
||||
var actionId = action['label'].toLowerCase().replace(' ', '-');
|
||||
notificationHtml += '<button id="' + actionId + '" class="btn">'
|
||||
notificationHtml += '<button id="' + actionId + '" class="btn btn-small">'
|
||||
+ action['label'] + '</button>';
|
||||
|
||||
$(document).off('click', '#' + actionId);
|
||||
|
|
|
@ -1863,7 +1863,8 @@ var BackendCalendar = {
|
|||
timeOnlyTitle: EALang['select_time'],
|
||||
timeText: EALang['time'],
|
||||
hourText: EALang['hour'],
|
||||
minuteText: EALang['minutes']
|
||||
minuteText: EALang['minutes'],
|
||||
firstDay: 1
|
||||
});
|
||||
$dialog.find('#start-datetime').val(startDatetime);
|
||||
|
||||
|
@ -1890,7 +1891,8 @@ var BackendCalendar = {
|
|||
timeOnlyTitle: EALang['select_time'],
|
||||
timeText: EALang['time'],
|
||||
hourText: EALang['hour'],
|
||||
minuteText: EALang['minutes']
|
||||
minuteText: EALang['minutes'],
|
||||
firstDay: 1
|
||||
});
|
||||
$dialog.find('#end-datetime').val(endDatetime);
|
||||
},
|
||||
|
@ -1950,6 +1952,8 @@ var BackendCalendar = {
|
|||
resetUnavailableDialog: function() {
|
||||
var $dialog = $('#manage-unavailable');
|
||||
|
||||
$dialog.find('#unavailable-id').val('');
|
||||
|
||||
// Set default time values
|
||||
var start = new Date().toString('dd/MM/yyyy HH:mm');
|
||||
var end = new Date().addHours(1).toString('dd/MM/yyyy HH:mm');
|
||||
|
@ -1977,7 +1981,8 @@ var BackendCalendar = {
|
|||
timeOnlyTitle: EALang['select_time'],
|
||||
timeText: EALang['time'],
|
||||
hourText: EALang['hour'],
|
||||
minuteText: EALang['minutes']
|
||||
minuteText: EALang['minutes'],
|
||||
firstDay: 1
|
||||
});
|
||||
$dialog.find('#unavailable-start').val(start);
|
||||
|
||||
|
@ -2004,7 +2009,8 @@ var BackendCalendar = {
|
|||
timeOnlyTitle: EALang['select_time'],
|
||||
timeText: EALang['time'],
|
||||
hourText: EALang['hour'],
|
||||
minuteText: EALang['minutes']
|
||||
minuteText: EALang['minutes'],
|
||||
firstDay: 1
|
||||
});
|
||||
$dialog.find('#unavailable-end').val(end);
|
||||
|
||||
|
|
|
@ -189,6 +189,23 @@ var BackendSettings = {
|
|||
}
|
||||
}, 'json');
|
||||
});
|
||||
|
||||
/**
|
||||
* Event: Update Easy!Appointments DB Schema To Latest Version
|
||||
*/
|
||||
$('#update-ea').click(function() {
|
||||
var postUrl = GlobalVariables.baseUrl + 'backend/update';
|
||||
$.post(postUrl, {}, function(response) {
|
||||
//////////////////////////////////////////////
|
||||
console.log('Update EA Response', response);
|
||||
//////////////////////////////////////////////
|
||||
|
||||
if (!GeneralFunctions.handleAjaxExceptions(response)) return;
|
||||
|
||||
Backend.displayNotification(EALang['ea_update_success']);
|
||||
|
||||
}, 'json');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -97,18 +97,17 @@ SecretariesHelper.prototype.bindEventHandlers = function() {
|
|||
$('#delete-secretary').click(function() {
|
||||
var secretaryId = $('#secretary-id').val();
|
||||
|
||||
var messageBtns = {
|
||||
'Delete': function() {
|
||||
BackendUsers.helper.delete(secretaryId);
|
||||
$('#message_box').dialog('close');
|
||||
},
|
||||
'Cancel': function() {
|
||||
$('#message_box').dialog('close');
|
||||
}
|
||||
var messageBtns = {};
|
||||
messageBtns[EALang['delete']] = function() {
|
||||
BackendUsers.helper.delete(secretaryId);
|
||||
$('#message_box').dialog('close');
|
||||
};
|
||||
messageBtns[EALang['cancel']] = function() {
|
||||
$('#message_box').dialog('close');
|
||||
};
|
||||
|
||||
GeneralFunctions.displayMessageBox('Delete Secretary', 'Are you sure that you want '
|
||||
+ 'to delete this record? This action cannot be undone.', messageBtns);
|
||||
GeneralFunctions.displayMessageBox(EALang['delete_secretary'],
|
||||
EALang['delete_record_prompt'], messageBtns);
|
||||
});
|
||||
|
||||
/**
|
||||
|
@ -188,7 +187,7 @@ SecretariesHelper.prototype.save = function(secretary) {
|
|||
//console.log('Save Secretary Response:', response);
|
||||
////////////////////////////////////////////////////
|
||||
if (!GeneralFunctions.handleAjaxExceptions(response)) return;
|
||||
Backend.displayNotification('Secretary saved successfully!');
|
||||
Backend.displayNotification(EALang['secretary_saved']);
|
||||
BackendUsers.helper.resetForm();
|
||||
$('#filter-secretaries .key').val('');
|
||||
BackendUsers.helper.filter('', response.id, true);
|
||||
|
@ -209,7 +208,7 @@ SecretariesHelper.prototype.delete = function(id) {
|
|||
//console.log('Delete secretary response:', response);
|
||||
//////////////////////////////////////////////////////
|
||||
if (!GeneralFunctions.handleAjaxExceptions(response)) return;
|
||||
Backend.displayNotification('Secretary deleted successfully!');
|
||||
Backend.displayNotification(EALang['secretary_deleted']);
|
||||
BackendUsers.helper.resetForm();
|
||||
BackendUsers.helper.filter($('#filter-secretaries .key').val());
|
||||
}, 'json');
|
||||
|
|
|
@ -243,7 +243,7 @@ var FrontendBook = {
|
|||
* in the meantime the selected appointment date/time wasn't reserved by
|
||||
* another customer or event.
|
||||
*/
|
||||
$('#book-appointment-form').submit(function(event) {
|
||||
$('#book-appointment-submit').click(function(event) {
|
||||
var formData = jQuery.parseJSON($('input[name="post_data"]').val());
|
||||
|
||||
var postData = {
|
||||
|
@ -269,7 +269,7 @@ var FrontendBook = {
|
|||
+ 'the check appointment time availability could not be completed. '
|
||||
+ 'The following issues occured:');
|
||||
$('#message_box').append(GeneralFunctions.exceptionsToHtml(response.exceptions));
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (response === true) {
|
||||
|
@ -281,8 +281,6 @@ var FrontendBook = {
|
|||
FrontendBook.getAvailableHours($('#select-date').val());
|
||||
}
|
||||
}, 'json');
|
||||
|
||||
return false;
|
||||
});
|
||||
},
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ var GeneralFunctions = {
|
|||
* user opens the "Details" collapse component.
|
||||
*
|
||||
* @param {array} exceptions Contains the exceptions to be displayed.
|
||||
* @returns {String} Returns the html markup for the exceptions.
|
||||
* @returns {string} Returns the html markup for the exceptions.
|
||||
*/
|
||||
exceptionsToHtml: function(exceptions) {
|
||||
var html =
|
||||
|
@ -200,7 +200,7 @@ var GeneralFunctions = {
|
|||
'<div class="accordion-heading">' +
|
||||
'<a class="accordion-toggle" data-toggle="collapse" ' +
|
||||
'data-parent="#error-accordion" href="#error-technical">' +
|
||||
'Details' +
|
||||
EALang['details'] +
|
||||
'</a>' +
|
||||
'</div>';
|
||||
|
||||
|
@ -222,7 +222,7 @@ var GeneralFunctions = {
|
|||
* This method parse the json encoded strings that are fetched by ajax calls.
|
||||
*
|
||||
* @param {array} exceptions Exception array returned by an ajax call.
|
||||
* @returns {Array} Returns the parsed js objects.
|
||||
* @returns {array} Returns the parsed js objects.
|
||||
*/
|
||||
parseExceptions: function(exceptions) {
|
||||
var parsedExceptions = new Array();
|
||||
|
|
Loading…
Reference in a new issue