Commit 04a199b65186e0b99bac76c421dc6cb12f733a8a
1 parent
ee5fb602
Merged in from DEV trunk...
KTC-541 "On Task Scheduler Management Page in web interface - 'Frequency' drop-down and save button combo jumps" Fixed. The drop-down form is now displayed in the table cell and not as a floating div. KTC-542 "Task Scheduler Management Page - remove 'Clean-up old tasks' link at the bottom of the page" Fixed. Removed the link. KTS-3417 "Scheduler - replace YUI with ExtJS" Fixed. Removed the yui ajax, used an extjs request. Committed by: Megan Watson Reviewed by: Conrad Vermeulen git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/branches/3.5.3-Branch@8580 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
5 changed files
with
147 additions
and
108 deletions
plugins/ktcore/scheduler/schedulerEntity.php
| ... | ... | @@ -6,31 +6,31 @@ |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2008 KnowledgeTree Inc. |
| 8 | 8 | * Portions copyright The Jam Warehouse Software (Pty) Limited |
| 9 | - * | |
| 9 | + * | |
| 10 | 10 | * This program is free software; you can redistribute it and/or modify it under |
| 11 | 11 | * the terms of the GNU General Public License version 3 as published by the |
| 12 | 12 | * Free Software Foundation. |
| 13 | - * | |
| 13 | + * | |
| 14 | 14 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 15 | 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 16 | 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 17 | 17 | * details. |
| 18 | - * | |
| 18 | + * | |
| 19 | 19 | * You should have received a copy of the GNU General Public License |
| 20 | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 21 | - * | |
| 22 | - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 21 | + * | |
| 22 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | 23 | * California 94120-7775, or email info@knowledgetree.com. |
| 24 | - * | |
| 24 | + * | |
| 25 | 25 | * The interactive user interfaces in modified source and object code versions |
| 26 | 26 | * of this program must display Appropriate Legal Notices, as required under |
| 27 | 27 | * Section 5 of the GNU General Public License version 3. |
| 28 | - * | |
| 28 | + * | |
| 29 | 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 30 | 30 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | 34 | * copyright notice. |
| 35 | 35 | * Contributor( s): ______________________________________ |
| 36 | 36 | * |
| ... | ... | @@ -201,9 +201,9 @@ class schedulerEntity extends KTEntity |
| 201 | 201 | $sStatus = $this->getStatus(); |
| 202 | 202 | $sFreqs = $this->getFrequencyByLang(); |
| 203 | 203 | |
| 204 | - $sLink = "<a href='#' id='freqDrop{$sId}' onclick='javascript: showFrequencyDiv(\"{$sId}\");'"; | |
| 204 | + $sLink = "<div id='div{$sId}'"; | |
| 205 | 205 | $sLink .= ($sStatus == 'disabled') ? 'style="visibility: hidden;" >' : '>'; |
| 206 | - $sLink .= "<div id='div{$sId}'>$sFreqs</div></a>"; | |
| 206 | + $sLink .= $sFreqs.'</div>'; | |
| 207 | 207 | return $sLink; |
| 208 | 208 | } |
| 209 | 209 | |
| ... | ... | @@ -214,9 +214,10 @@ class schedulerEntity extends KTEntity |
| 214 | 214 | $sId = $this->getId(); |
| 215 | 215 | $sStatus = $this->getStatus(); |
| 216 | 216 | |
| 217 | - $sLink = "<a href='#' id='freqLink{$this->getId()}' onclick='javascript: showFrequencyDiv({$sId});'"; | |
| 218 | - $sLink .= ($sStatus == 'disabled') ? 'style="visibility: hidden;" >' : '>'; | |
| 219 | - $sLink .= _kt('Alter frequency')."</a>"; | |
| 217 | + $sLink = "<input type='button' id='freqLink{$this->getId()}' onclick='javascript: showFrequencyDiv(\"{$sId}\");'"; | |
| 218 | + $sLink .= " value='"._kt('Change Frequency')."' "; | |
| 219 | + $sLink .= ($sStatus == 'disabled') ? 'style="visibility: hidden;" />' : ' />'; | |
| 220 | + | |
| 220 | 221 | return $sLink; |
| 221 | 222 | } |
| 222 | 223 | |
| ... | ... | @@ -228,9 +229,11 @@ class schedulerEntity extends KTEntity |
| 228 | 229 | $sStatus = $this->getStatus(); |
| 229 | 230 | $sUrl = KTUtil::ktLink('admin.php', 'misc/scheduler', 'action=updateRunTime'); |
| 230 | 231 | |
| 231 | - $sLink = "<a href='#' id='runnowLink{$this->getId()}' onclick='javascript: runOnNext(\"{$sId}\", \"{$sUrl}\");'"; | |
| 232 | - $sLink .= ($sStatus == 'disabled') ? 'style="visibility: hidden;" >' : '>'; | |
| 233 | - $sLink .= _kt('Run on next iteration')."</a>"; | |
| 232 | + $sTitle = _kt('This task will run the next time the Scheduler runs'); //, and then revert to the frequency you set on this page'); | |
| 233 | + $sLink = "<input type='button' id='runnowLink{$this->getId()}' onclick='javascript: runOnNext(\"{$sId}\", \"{$sUrl}\");'"; | |
| 234 | + $sLink .= " title='$sTitle' value='"._kt('Run on Next Iteration')."' "; | |
| 235 | + $sLink .= ($sStatus == 'disabled') ? 'style="visibility: hidden;" />' : ' />'; | |
| 236 | + | |
| 234 | 237 | return $sLink; |
| 235 | 238 | } |
| 236 | 239 | |
| ... | ... | @@ -244,13 +247,13 @@ class schedulerEntity extends KTEntity |
| 244 | 247 | return ''; |
| 245 | 248 | } |
| 246 | 249 | |
| 247 | - $sDisableText = _kt('Disable task'); | |
| 248 | - $sEnableText = _kt('Enable task'); | |
| 250 | + $sDisableText = _kt('Disable Task'); | |
| 251 | + $sEnableText = _kt('Enable Task'); | |
| 249 | 252 | |
| 250 | 253 | $sLinkText = ($sStatus == 'enabled') ? $sDisableText : $sEnableText; |
| 251 | 254 | $sUrl = KTUtil::ktLink('admin.php', 'misc/scheduler', 'action=updateStatus'); |
| 252 | - $sLink = "<a id='statusLink{$this->getId()}' href='#' | |
| 253 | - onclick='javascript: toggleStatus(\"{$sId}\", \"{$sUrl}\", \"{$sDisableText}\", \"{$sEnableText}\");'>{$sLinkText}</a>"; | |
| 255 | + $sLink = "<input type='button' id='statusLink{$this->getId()}' | |
| 256 | + onclick='javascript: toggleStatus(\"{$sId}\", \"{$sUrl}\", \"{$sDisableText}\", \"{$sEnableText}\");' value='{$sLinkText}' />"; | |
| 254 | 257 | return $sLink; |
| 255 | 258 | } |
| 256 | 259 | } | ... | ... |
plugins/ktcore/scheduler/schedulerUtil.php
| ... | ... | @@ -6,31 +6,31 @@ |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2008 KnowledgeTree Inc. |
| 8 | 8 | * Portions copyright The Jam Warehouse Software (Pty) Limited |
| 9 | - * | |
| 9 | + * | |
| 10 | 10 | * This program is free software; you can redistribute it and/or modify it under |
| 11 | 11 | * the terms of the GNU General Public License version 3 as published by the |
| 12 | 12 | * Free Software Foundation. |
| 13 | - * | |
| 13 | + * | |
| 14 | 14 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 15 | 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 16 | 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 17 | 17 | * details. |
| 18 | - * | |
| 18 | + * | |
| 19 | 19 | * You should have received a copy of the GNU General Public License |
| 20 | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 21 | - * | |
| 22 | - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 21 | + * | |
| 22 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | 23 | * California 94120-7775, or email info@knowledgetree.com. |
| 24 | - * | |
| 24 | + * | |
| 25 | 25 | * The interactive user interfaces in modified source and object code versions |
| 26 | 26 | * of this program must display Appropriate Legal Notices, as required under |
| 27 | 27 | * Section 5 of the GNU General Public License version 3. |
| 28 | - * | |
| 28 | + * | |
| 29 | 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 30 | 30 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | 34 | * copyright notice. |
| 35 | 35 | * Contributor( s): ______________________________________ |
| 36 | 36 | * |
| ... | ... | @@ -214,6 +214,7 @@ class schedulerUtil extends KTUtil |
| 214 | 214 | // Recalculate the next run time, use the previous run time as the start time. |
| 215 | 215 | $iPrevious = $oScheduler->getPrevious(); |
| 216 | 216 | $iNextTime = schedulerUtil::calculateRunTime($sFreq, $iPrevious); |
| 217 | + $iNextTime = ($iNextTime < time()) ? time() : $iNextTime; | |
| 217 | 218 | |
| 218 | 219 | $oScheduler->setFrequency($sFreq); |
| 219 | 220 | $oScheduler->setRunTime($iNextTime); |
| ... | ... | @@ -250,6 +251,12 @@ class schedulerUtil extends KTUtil |
| 250 | 251 | // ignore |
| 251 | 252 | return $sStatus; |
| 252 | 253 | } |
| 254 | + if($sStatus == 'disabled'){ | |
| 255 | + // If the task is being enabled, set the next run time to the current date plus the frequency period | |
| 256 | + $freq = $oScheduler->getFrequency(); | |
| 257 | + $runTime = schedulerUtil::calculateRunTime($freq, time()); | |
| 258 | + $oScheduler->setRunTime($runTime); | |
| 259 | + } | |
| 253 | 260 | |
| 254 | 261 | $sNewStatus = ($sStatus == 'enabled') ? 'disabled' : 'enabled'; |
| 255 | 262 | $oScheduler->setStatus($sNewStatus); | ... | ... |
plugins/ktcore/scheduler/taskScheduler.php
| ... | ... | @@ -6,31 +6,31 @@ |
| 6 | 6 | * Document Management Made Simple |
| 7 | 7 | * Copyright (C) 2008 KnowledgeTree Inc. |
| 8 | 8 | * Portions copyright The Jam Warehouse Software (Pty) Limited |
| 9 | - * | |
| 9 | + * | |
| 10 | 10 | * This program is free software; you can redistribute it and/or modify it under |
| 11 | 11 | * the terms of the GNU General Public License version 3 as published by the |
| 12 | 12 | * Free Software Foundation. |
| 13 | - * | |
| 13 | + * | |
| 14 | 14 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 15 | 15 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 16 | 16 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 17 | 17 | * details. |
| 18 | - * | |
| 18 | + * | |
| 19 | 19 | * You should have received a copy of the GNU General Public License |
| 20 | 20 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 21 | - * | |
| 22 | - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 21 | + * | |
| 22 | + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, | |
| 23 | 23 | * California 94120-7775, or email info@knowledgetree.com. |
| 24 | - * | |
| 24 | + * | |
| 25 | 25 | * The interactive user interfaces in modified source and object code versions |
| 26 | 26 | * of this program must display Appropriate Legal Notices, as required under |
| 27 | 27 | * Section 5 of the GNU General Public License version 3. |
| 28 | - * | |
| 28 | + * | |
| 29 | 29 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 30 | 30 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 31 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 31 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the | |
| 32 | 32 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 33 | - * must display the words "Powered by KnowledgeTree" and retain the original | |
| 33 | + * must display the words "Powered by KnowledgeTree" and retain the original | |
| 34 | 34 | * copyright notice. |
| 35 | 35 | * Contributor( s): ______________________________________ |
| 36 | 36 | * |
| ... | ... | @@ -49,24 +49,21 @@ class manageSchedulerDispatcher extends KTAdminDispatcher |
| 49 | 49 | function do_main() { |
| 50 | 50 | $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Task Scheduler Management')); |
| 51 | 51 | $this->oPage->setTitle(_kt('Task Scheduler Management')); |
| 52 | - $this->oPage->requireJSResource('thirdpartyjs/yui/event/event.js'); | |
| 53 | - $this->oPage->requireJSResource('thirdpartyjs/yui/connection/connection.js'); | |
| 54 | - $this->oPage->requireJSResource('thirdpartyjs/yui/dom/dom.js'); | |
| 55 | 52 | $this->oPage->requireJSResource('resources/js/scheduler.js'); |
| 56 | 53 | |
| 57 | 54 | $oTemplating =& KTTemplating::getSingleton(); |
| 58 | 55 | $oTemplate = $oTemplating->loadTemplate('ktcore/scheduler'); |
| 59 | 56 | |
| 60 | 57 | // Link for clearing out old tasks |
| 61 | - $lClear = KTUtil::ktLink('admin.php', 'misc/scheduler', 'action=clearTasks'); | |
| 62 | - $sClear = "<a href='#' onclick='javascript: clearTasks(\"{$lClear}\");'>"._kt('Clean-up old tasks').'</a>'; | |
| 58 | +// $lClear = KTUtil::ktLink('admin.php', 'misc/scheduler', 'action=clearTasks'); | |
| 59 | +// $sClear = "<a href='#' onclick='javascript: clearTasks(\"{$lClear}\");'>"._kt('Clean-up old tasks').'</a>'; | |
| 63 | 60 | |
| 64 | 61 | // Link for saving the updated frequencies |
| 65 | 62 | $sUrl = KTUtil::ktLink('admin.php', 'misc/scheduler', 'action=saveFreq'); |
| 66 | 63 | |
| 67 | 64 | // Get all tasks |
| 68 | 65 | $aList = SchedulerEntity::getTaskList(); |
| 69 | - $aHeadings = array('', _kt('Task'), _kt('Frequency'), _kt('Next run time'), _kt('Previous run time'), _kt('Time taken to complete'), ''); | |
| 66 | + $aHeadings = array(' ', _kt('Task'), _kt('Frequency'), _kt('Next run time'), _kt('Previous run time'), _kt('Time taken to complete'), ' '); | |
| 70 | 67 | |
| 71 | 68 | //$aFrequencies = array('monthly', 'weekly', 'daily', 'hourly', 'half_hourly', 'quarter_hourly', '10mins', '5mins'); |
| 72 | 69 | $aFrequencies = array( |
| ... | ... | @@ -89,7 +86,7 @@ class manageSchedulerDispatcher extends KTAdminDispatcher |
| 89 | 86 | 'aFrequencies' => $aFrequencies, |
| 90 | 87 | 'i' => 1, |
| 91 | 88 | 'sUrl' => $sUrl, |
| 92 | - 'sClear' => $sClear | |
| 89 | +// 'sClear' => $sClear | |
| 93 | 90 | ); |
| 94 | 91 | return $oTemplate->render($aTemplateData); |
| 95 | 92 | } | ... | ... |
resources/js/scheduler.js
| 1 | - | |
| 1 | +// Clean up tasks marked as completed | |
| 2 | 2 | var clearTasks = function(sUrl) { |
| 3 | 3 | |
| 4 | - var callback = { | |
| 5 | - success: function(o) { | |
| 6 | - alert('Tasks have been successfully cleaned up'); | |
| 4 | + Ext.Ajax.request({ | |
| 5 | + url: sUrl, | |
| 6 | + success: function(response) { | |
| 7 | + alert('The tasks have been successfully cleaned up'); | |
| 7 | 8 | }, |
| 8 | - failure: function(o) { | |
| 9 | - alert('Clean up failed!'); | |
| 9 | + failure: function(response) { | |
| 10 | + alert('Error. The clean up failed.'); | |
| 10 | 11 | } |
| 11 | - } | |
| 12 | - | |
| 13 | - var transaction = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); | |
| 12 | + }); | |
| 14 | 13 | } |
| 15 | 14 | |
| 16 | -//<!-- Change the run time to now --> | |
| 15 | +//<!-- Reschedule the task to run the next time the scheduler runs --> | |
| 17 | 16 | var runOnNext = function(fId, sUrl) { |
| 18 | 17 | var runDiv = document.getElementById('runDiv'+fId); |
| 19 | 18 | |
| 20 | 19 | //<!-- Display the new runtime --> |
| 21 | 20 | var displayDate = formatDate('','no'); |
| 22 | 21 | |
| 23 | - var callback = { | |
| 24 | - success: function(o) { | |
| 22 | + Ext.Ajax.request({ | |
| 23 | + url: sUrl, | |
| 24 | + success: function(response) { | |
| 25 | 25 | runDiv.innerHTML = displayDate; |
| 26 | - } | |
| 27 | - } | |
| 28 | - var transaction = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, "fId="+fId); | |
| 26 | + }, | |
| 27 | + failure: function(response) { | |
| 28 | + alert('Error. The update failed, please refresh the page and try again.'); | |
| 29 | + }, | |
| 30 | + params: { fId: fId } | |
| 31 | + }); | |
| 29 | 32 | } |
| 30 | 33 | |
| 31 | 34 | //<!-- Enable / disable the task --> |
| ... | ... | @@ -34,52 +37,67 @@ var toggleStatus = function(fId, sUrl, sDisableText, sEnableText) { |
| 34 | 37 | var statusLink = document.getElementById('statusLink'+fId); |
| 35 | 38 | var freqLink = document.getElementById('freqLink'+fId); |
| 36 | 39 | var runnowLink = document.getElementById('runnowLink'+fId); |
| 37 | - var freqDrop = document.getElementById('freqDrop'+fId); | |
| 38 | 40 | var fontClass = document.getElementById('font'+fId); |
| 39 | 41 | var freqDiv = document.getElementById('div'+fId); |
| 40 | - | |
| 41 | - var callback = { | |
| 42 | - success: function(o) { | |
| 43 | - if(statusLink.innerHTML == sDisableText){ | |
| 44 | - statusLink.innerHTML = sEnableText; | |
| 42 | + var runDiv = document.getElementById('runDiv'+fId); | |
| 43 | + var freq = document.getElementById('freq_'+fId).value; | |
| 44 | + | |
| 45 | + var date = new Date(); | |
| 46 | + var msNow = date.getTime(); | |
| 47 | + var now = parseInt(msNow / 1000); | |
| 48 | + var runTime = calculateFreq(freq, now); | |
| 49 | + var displayDate = formatDate(runTime); | |
| 50 | + | |
| 51 | + Ext.Ajax.request({ | |
| 52 | + url: sUrl, | |
| 53 | + success: function(response) { | |
| 54 | + if(statusLink.value == sDisableText){ | |
| 55 | + statusLink.value = sEnableText; | |
| 45 | 56 | freqLink.style.visibility = "hidden"; |
| 46 | 57 | runnowLink.style.visibility = "hidden"; |
| 47 | - freqDrop.style.visibility = "hidden"; | |
| 58 | + runDiv.style.visibility = 'hidden'; | |
| 48 | 59 | fontClass.className = 'descriptiveText'; |
| 49 | 60 | freqDiv.style.display = "none"; |
| 50 | 61 | }else{ |
| 51 | - statusLink.innerHTML = sDisableText; | |
| 62 | + statusLink.value = sDisableText; | |
| 52 | 63 | freqLink.style.visibility = "visible"; |
| 53 | 64 | runnowLink.style.visibility = "visible"; |
| 54 | - freqDrop.style.visibility = "visible"; | |
| 55 | 65 | freqDiv.style.display = "block"; |
| 66 | + freqDiv.style.visibility = "visible"; | |
| 56 | 67 | fontClass.className = ''; |
| 68 | + | |
| 69 | + runDiv.style.visibility = 'visible'; | |
| 70 | + runDiv.innerHTML = displayDate; | |
| 57 | 71 | } |
| 58 | - } | |
| 59 | - } | |
| 60 | - var transaction = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, "fId="+fId); | |
| 72 | + }, | |
| 73 | + failure: function(response) { | |
| 74 | + alert('Error. The status update failed, please refresh the page and try again.'); | |
| 75 | + }, | |
| 76 | + params: { fId: fId } | |
| 77 | + }); | |
| 61 | 78 | } |
| 62 | 79 | |
| 80 | +// Display the form to changed the frequency at which the task runs | |
| 63 | 81 | var showFrequencyDiv = function(fId) { |
| 64 | 82 | var formDiv = document.getElementById('formDiv'); |
| 83 | + | |
| 84 | + if(formDiv.innerHTML == ''){ | |
| 85 | + return; | |
| 86 | + } | |
| 87 | + | |
| 65 | 88 | var fInput = document.getElementById('fId'); |
| 66 | - var tblCol = document.getElementById('tblCol'); | |
| 67 | - var freqDiv = document.getElementById('div'+fId); | |
| 68 | - var posFreq = YAHOO.util.Dom.getXY('div'+fId); | |
| 89 | + var tblCol = document.getElementById('col_'+fId); | |
| 69 | 90 | |
| 70 | - //<!-- Hide the frequency and display the form in place --> | |
| 71 | - formDiv.style.display = "block"; | |
| 72 | - freqDiv.style.display = "none"; | |
| 73 | - formDiv.style.visibility = "visible"; | |
| 74 | - freqDiv.style.visibility = "hidden"; | |
| 75 | 91 | fInput.value = fId; |
| 76 | - tblCol.width = "20%"; | |
| 77 | - YAHOO.util.Dom.setXY('formDiv', posFreq); | |
| 92 | + tblCol.innerHTML = formDiv.innerHTML; | |
| 93 | + tblCol.style.display = 'block'; | |
| 94 | + formDiv.innerHTML = ''; | |
| 78 | 95 | } |
| 79 | 96 | |
| 97 | +// Save the new frequency | |
| 80 | 98 | var saveFreq = function(sUrl) { |
| 81 | 99 | var fId = document.getElementById('fId').value; |
| 82 | - var tblCol = document.getElementById('tblCol'); | |
| 100 | + var tblCol = document.getElementById('col_'+fId); | |
| 83 | 101 | var formDiv = document.getElementById('formDiv'); |
| 84 | 102 | var freqDiv = document.getElementById('div'+fId); |
| 85 | 103 | var runDiv = document.getElementById('runDiv'+fId); |
| ... | ... | @@ -89,32 +107,35 @@ var saveFreq = function(sUrl) { |
| 89 | 107 | var freq = fSelect.options[fSelect.selectedIndex].value; |
| 90 | 108 | var freqLabel = fSelect.options[fSelect.selectedIndex].label; |
| 91 | 109 | |
| 110 | + // Move the form content back to the form div | |
| 111 | + formDiv.innerHTML = tblCol.innerHTML; | |
| 112 | + tblCol.innerHTML = ''; | |
| 113 | + tblCol.style.display = 'none'; | |
| 114 | + | |
| 92 | 115 | //<!-- Work out new runtime using the frequency --> |
| 93 | 116 | var prevNum = new Number(prevInput); |
| 94 | 117 | var nextTime = calculateFreq(freq, prevNum); |
| 95 | 118 | var displayDate = formatDate(nextTime); |
| 96 | 119 | |
| 97 | - var callback = { | |
| 98 | - success: function(o) { | |
| 120 | + Ext.Ajax.request({ | |
| 121 | + url: sUrl, | |
| 122 | + success: function(response) { | |
| 99 | 123 | freqDiv.innerHTML = freqLabel; |
| 100 | 124 | runDiv.innerHTML = displayDate; |
| 125 | + document.getElementById('freq_'+fId).value = freq; | |
| 126 | + }, | |
| 127 | + failure: function(response) { | |
| 128 | + alert('Error. The frequency update failed, please refresh the page and try again.'); | |
| 129 | + }, | |
| 130 | + params: { | |
| 131 | + frequency: freq, | |
| 132 | + fId: fId | |
| 101 | 133 | } |
| 102 | - } | |
| 103 | - | |
| 104 | - YAHOO.util.Connect.setForm(freqForm); | |
| 105 | - var transaction = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback); | |
| 106 | - | |
| 107 | - tblCol.width = ""; | |
| 108 | - formDiv.style.display = "none"; | |
| 109 | - freqDiv.style.display = "block"; | |
| 110 | - formDiv.style.visibility = "hidden"; | |
| 111 | - freqDiv.style.visibility = "visible"; | |
| 134 | + }); | |
| 112 | 135 | } |
| 113 | 136 | |
| 114 | -//<!-- Calculate the next run time based on the previous runtime --> | |
| 137 | +//<!-- Calculate the next run time based on the given runtime --> | |
| 115 | 138 | var calculateFreq = function(freq, prev) { |
| 116 | - | |
| 117 | - var curDate = new Date(); | |
| 118 | 139 | var iDiff = 0; |
| 119 | 140 | |
| 120 | 141 | switch(freq) { |
| ... | ... | @@ -155,16 +176,23 @@ var calculateFreq = function(freq, prev) { |
| 155 | 176 | } |
| 156 | 177 | |
| 157 | 178 | var iNextTime = prev + iDiff; |
| 179 | + | |
| 158 | 180 | return iNextTime; |
| 159 | 181 | } |
| 160 | 182 | |
| 161 | 183 | //<!-- Return a formatted date given a unix timestamp --> |
| 184 | +// If the date if prior to the current date then return the current date | |
| 162 | 185 | var formatDate = function(unixTime, useUnix) { |
| 163 | 186 | if(useUnix == 'no') { |
| 164 | 187 | var newDate = new Date(); |
| 165 | 188 | }else{ |
| 166 | 189 | var milliTime = unixTime * 1000; |
| 167 | 190 | var newDate = new Date(milliTime); |
| 191 | + | |
| 192 | + var curDate = new Date(); | |
| 193 | + if(newDate < curDate){ | |
| 194 | + newDate = curDate; | |
| 195 | + } | |
| 168 | 196 | } |
| 169 | 197 | |
| 170 | 198 | var year = newDate.getFullYear(); | ... | ... |
templates/ktcore/scheduler.smarty
| ... | ... | @@ -25,6 +25,7 @@ |
| 25 | 25 | |
| 26 | 26 | {if $aList} |
| 27 | 27 | {foreach from=$aList item=task} |
| 28 | +{assign var=taskId value=$task->getId()} | |
| 28 | 29 | |
| 29 | 30 | <tr class="{cycle name=rows values=",odd"}"> |
| 30 | 31 | <td width='2%'> |
| ... | ... | @@ -33,17 +34,24 @@ |
| 33 | 34 | <td> |
| 34 | 35 | {$task->getTaskDiv()} |
| 35 | 36 | </td> |
| 36 | - <td id="tblCol"> | |
| 37 | + <td> | |
| 37 | 38 | {$task->getFreqDiv()} |
| 39 | + <div id="col_{$taskId}"> | |
| 40 | + </div> | |
| 41 | + <div style="visibility: hidden; display: none;"> | |
| 42 | + <input type="hidden" name="freq_{$taskId}" id="freq_{$taskId}" value="{$task->getFrequency()}" /> | |
| 43 | + </div> | |
| 38 | 44 | </td> |
| 39 | 45 | <td> |
| 40 | - <div id="runDiv{$task->getId()}"> | |
| 41 | - {$task->getRunTime()} | |
| 46 | + <div id="runDiv{$taskId}"> | |
| 47 | + {if $task->getStatus() != 'disabled'} | |
| 48 | + {$task->getRunTime()} | |
| 49 | + {/if} | |
| 42 | 50 | </div> |
| 43 | 51 | </td> |
| 44 | 52 | <td> |
| 45 | - <div id="prevDiv{$task->getId()}" style="display:none; visibility:hidden;"> | |
| 46 | - <input type="hidden" name="prev{$task->getId()}" id="prev{$task->getId()}" value="{$task->getPrevious()}" /> | |
| 53 | + <div id="prevDiv{$taskId}" style="display:none; visibility:hidden;"> | |
| 54 | + <input type="hidden" name="prev{$taskId}" id="prev{$taskId}" value="{$task->getPrevious()}" /> | |
| 47 | 55 | </div> |
| 48 | 56 | {$task->getPrevious(TRUE)} |
| 49 | 57 | </td> |
| ... | ... | @@ -76,7 +84,3 @@ |
| 76 | 84 | <input type="button" name="save" id="save" onclick='javascript: saveFreq("{$sUrl}");' value="{i18n}Save{/i18n}" /> |
| 77 | 85 | </form> |
| 78 | 86 | </div> |
| 79 | - | |
| 80 | -<p> | |
| 81 | - {$sClear} | |
| 82 | -</p> | ... | ... |