File: D:/HostingSpaces/PvdBoogaard/indoorski.nl/backup/oude-site/cms/javascript/admin.modules.js
$(function(){
$.fn.hoverClassToggle = function(className) {
return this.hover(function() {
$(this).addClass(className);
}, function() {
$(this).removeClass(className);
});
};
$.fn.flashTableRow = function (flashcol, returncol, callback) {
return $('td', this).animate({ backgroundColor: flashcol ? flashcol : '#99FF66' }).animate({ backgroundColor: returncol ? returncol : '#F9F9F9' }, undefined, undefined, callback);
};
$('tr.Module').hoverClassToggle('ModuleOver');
})
function AdminModule (_data) {
var self = this;
this.id = 0;
this.codename = '';
this.modulename = '';
this.iscontentmodule = false;
this.iswebsitemodule = false;
this.busy = false;
this.setBusy = function () {
self.busy = true;
self.changeStatusImage(AdminModule.LoadingImage);
self.updateLinksDisplay();
};
this.unSetBusy = function () {
self.busy = false;
self.changeStatusImage(self.id > 0 ? AdminModule.ActiveImage : AdminModule.InactiveImage);
self.updateLinksDisplay();
};
this.isActive = function () {
return self.id > 0;
};
this.updateLinksDisplay = function () {
var busy = self.busy;
var active = self.isActive();
if (busy) {
$('#moduleActionLinks_'+ self.codename).hide();
} else {
$('#moduleActionLinks_'+ self.codename).show();
}
};
this.changeStatusImage = function (url) {
$('#moduleStatusImage_'+ self.codename).attr('src', url);
};
this.toggle = function () {
if (self.isActive()) {
return self.deactivate();
} else {
return self.activate();
}
};
this.activate = function () {
if (self.busy || self.isActive()) { return false; }
self.setBusy();
$.getJSON('remote.php', {
section: 'modules',
action: 'ActivateModule',
codename: self.codename
}, self.activateCallback);
return true;
};
/**
* Function to be called when server response to module activation is received.
*/
this.activateCallback = function (data, result) {
if (data.row) {
$('tr#Module_' + self.codename).replaceWith(data.row);
}
var success = false;
if (result == 'success' && data && data.success == true) {
success = true;
self.id = data.id;
$('#MainMessage').successMessage({$lang.SelectedModuleSuccessfullyActivated|iwp_FilterJavascriptString});
} else {
$('#MainMessage').errorMessage(data.error +'<ul><li>'+ data.messages.join('</li><li>') +'</li></ul>');
}
if (adminModules.bulkActionCount) {
if (success) {
adminModules.bulkActionSuccess++;
} else {
adminModules.bulkActionFail++;
}
if (!--adminModules.bulkActionCount) {
adminModules.bulkActionComplete();
}
}
self.unSetBusy();
};
/**
* Deactivates this module. Returns FALSE if the module is already deactivated or if the module is busy. Returns TRUE if a request to the server to activate this module was successfully sent.
*/
this.deactivate = function () {
if (self.busy || !self.isActive()) { return false; }
self.setBusy();
$.getJSON('remote.php', {
section: 'modules',
action: 'DeactivateModule',
codename: self.codename
}, self.deactivateCallback);
return true;
};
/**
* Function to be called when server response to module deactivation is received.
*/
this.deactivateCallback = function (data, result) {
if (data.row) {
$('tr#Module_' + self.codename).replaceWith(data.row);
}
var success = false;
if (result == 'success' && data && data.success == true) {
success = true;
self.id = 0;
$('#MainMessage').successMessage({$lang.SelectedModuleSuccessfullyDeactivated|iwp_FilterJavascriptString});
} else {
$('#MainMessage').errorMessage(data.error +'<ul><li>'+ data.messages.join('</li><li>') +'</li></ul>');
}
if (adminModules.bulkActionCount) {
if (success) {
adminModules.bulkActionSuccess++;
} else {
adminModules.bulkActionFail++;
}
if (!--adminModules.bulkActionCount) {
adminModules.bulkActionComplete();
}
}
self.unSetBusy();
};
if (_data !== undefined) {
jQuery.extend(this, _data);
}
}
AdminModule.ActiveImage = 'images/tick.gif';
AdminModule.InactiveImage = 'images/cross.gif';
AdminModule.LoadingImage = 'images/load.gif';
AdminModule.LangActivating = '{$lang.ActivatingModulePleaseWait}';
AdminModule.LangDeactivating = '{$lang.DeactivatingModulePleaseWait}';
function AdminModules (_data)
{
var self = this;
this.modules = [];
/**
* Handles the completion of a bulk action
*/
this.bulkActionComplete = function () {
var lang = 'Lang';
if (self.bulkActionSuccess && self.bulkActionFail) {
lang += 'Some';
} else if (self.bulkActionSuccess) {
lang += 'Selected';
} else {
lang += 'No';
}
lang += 'Modules';
switch (self.bulkActionCode) {
case 'activate':
lang += 'Activated';
break;
case 'deactivate':
lang += 'Deactivated';
break;
}
$('#MainMessage').successMessage(AdminModules[lang]);
};
/**
* Handles a bulk action request from the control panel page
*/
this.bulkAction = function (action) {
var action = String(action).toLowerCase();
self.bulkActionCode = action;
self.bulkActionSuccess = 0;
self.bulkActionFail = 0;
var form = $('#ModuleForm');
var boxes = form.find('.bulkBox');
boxes.each(function(i){
var box = $(boxes[i]);
if (!box.attr('checked')) { return; }
var moduleName = box.val();
var moduleIndex = self.findByCodename(moduleName);
if (moduleIndex >= 0) {
var module = self.modules[moduleIndex];
}
switch (action) {
case 'activate':
var immediateResult = module.activate();
break;
case 'deactivate':
var immediateResult = module.deactivate();
break;
}
if (immediateResult) {
self.bulkActionCount++;
}
});
};
this.bulkActionCode = '';
this.bulkActionSuccess = 0;
this.bulkActionFail = 0;
this.bulkActionCount = 0;
/**
* Toggle a module's active status at the given array index.
*/
this.toggle = function (index) {
var module = self.modules[index];
if (!module) { return false; }
if (module.isActive()) {
return module.deactivate();
} else {
return module.activate();
}
};
/**
* Activate a module at the given array index.
*/
this.activate = function (index) {
var module = self.modules[index];
if (!module) { return false; }
return module.activate();
};
/**
* Deactivate a module at the given array index.
*/
this.deactivate = function (index) {
var module = self.modules[index];
if (!module) { return false; }
return module.deactivate();
};
/**
* Generic find function called by other find functions.
*/
this.findByProperty = function (propertyName, value) {
for (var i = self.modules.length; i--;) {
if (self.modules[i][propertyName] == value) {
return i;
}
}
return -1;
};
/**
* Searches for and returns the array index of a module by it's codename.
*/
this.findByCodename = function (codename) {
return self.findByProperty('codename', codename);
};
/**
* Searches for and returns the array index of a module by it's id. Searching for id 0 may return any inactive module, searching by codename is recommended instead if you are not sure the module is active.
*/
this.findById = function (id) {
return self.findByProperty('id', id);
};
/**
* Converts a provided array of generic objects into AdminModule objects
*/
this.prepareModuleData = function (_data) {
self.modules = [];
for (var i = _data.length; i--;) {
self.modules[i] = new AdminModule(_data[i]);
}
};
this.notActive = function () {
alert(AdminModules.LangThisModuleIsNotActivated);
};
this.noConfigure = function () {
alert(AdminModules.LangThisModuleHasNoConfig);
};
this.noConfigurePermission = function () {
alert(AdminModules.LangNoPermissionToConfigureModule);
};
this.noActivatePermission = function () {
alert(AdminModules.LangNoPermissionToActivateModule);
};
if (_data !== undefined) {
this.prepareModuleData(_data);
}
}
AdminModules.LangThisModuleHasNoConfig = {$lang.ThisModuleHasNoConfig|iwp_FilterJavascriptString};
AdminModules.LangThisModuleIsNotActivated = {$lang.ThisModuleIsNotActivated|iwp_FilterJavascriptString};
AdminModules.LangNoPermissionToConfigureModule = {$lang.NoPermissionToConfigureModule|iwp_FilterJavascriptString};
AdminModules.LangNoPermissionToActivateModule = {$lang.NoPermissionToActivateModule|iwp_FilterJavascriptString};
AdminModules.LangSelectedModulesSuccessfullyActivated = {$lang.SelectedModulesSuccessfullyActivated|iwp_FilterJavascriptString};
AdminModules.LangSelectedModulesSuccessfullyDeactivated = {$lang.SelectedModulesSuccessfullyDeactivated|iwp_FilterJavascriptString};
AdminModules.LangSelectedModulesActivated = {$lang.SelectedModulesActivated|iwp_FilterJavascriptString};
AdminModules.LangSelectedModulesDeactivated = {$lang.SelectedModulesDeactivated|iwp_FilterJavascriptString};
AdminModules.LangSomeModulesActivated = {$lang.SomeModulesActivated|iwp_FilterJavascriptString};
AdminModules.LangSomeModulesDeactivated = {$lang.SomeModulesDeactivated|iwp_FilterJavascriptString};
AdminModules.LangNoModulesActivated = {$lang.NoModulesActivated|iwp_FilterJavascriptString};
AdminModules.LangNoModulesDeactivated = {$lang.NoModulesDeactivated|iwp_FilterJavascriptString};
AdminModules.ClearRowCallback = function () {
// flashing the table row using jQuery.animate will leave a background-color style on the table rows, clear it so the mouse-over effect still works
$(this).css('background-color', '');
}