Example #1
0
 /**
  * @param Mage_Cron_Model_Schedule $schedule
  * @return Varien_Object
  */
 public function getStartingIn(Mage_Cron_Model_Schedule $schedule)
 {
     $schedTime = $schedule->getScheduledAt();
     if ($schedTime == '0000-00-00 00:00:00' or $schedTime == '') {
         $runtime = new Varien_Object();
         $runtime->setHours(0);
         $runtime->setMinutes(0);
         $runtime->setSeconds(0);
         $runtime->setToString('0h 0m 0s');
         return $runtime;
     }
     // Calc Time interval till Exec
     $starttime = strtotime($schedTime) - strtotime(now());
     $prefix = '+';
     if ($starttime < 0) {
         $prefix = '-';
         $starttime *= -1;
     }
     $runtimeSec = $starttime % 60;
     $runtimeMin = (int) ($starttime / 60) % 60;
     $runtimeHour = (int) ($starttime / 3600);
     $runtime = new Varien_Object();
     $runtime->setHours($runtimeHour);
     $runtime->setMinutes($runtimeMin);
     $runtime->setSeconds($runtimeSec);
     $runtime->setPrefix($prefix);
     $runtime->setToString($runtimeHour . 'h ' . $runtimeMin . 'm ' . $runtimeSec . 's');
     return $runtime;
 }
Example #2
0
 /**
  * Process cron task
  *
  * @param Mage_Cron_Model_Schedule $schedule
  * @param $jobConfig
  * @param bool $isAlways
  * @return Mage_Cron_Model_Observer
  */
 protected function _processJob($schedule, $jobConfig, $isAlways = false)
 {
     $runConfig = $jobConfig->run;
     if (!$isAlways) {
         $scheduleLifetime = Mage::getStoreConfig(self::XML_PATH_SCHEDULE_LIFETIME) * 60;
         $now = time();
         $time = strtotime($schedule->getScheduledAt());
         if ($time > $now) {
             return;
         }
     }
     $errorStatus = Mage_Cron_Model_Schedule::STATUS_ERROR;
     try {
         if (!$isAlways) {
             if ($time < $now - $scheduleLifetime) {
                 $errorStatus = Mage_Cron_Model_Schedule::STATUS_MISSED;
                 Mage::throwException(Mage::helper('cron')->__('Too late for the schedule.'));
             }
         }
         // Aoe_Scheduler: stuff from the original method was removed and refactored into the schedule module
         /* @var $schedule Aoe_Scheduler_Model_Schedule */
         $schedule->runNow(!$isAlways);
     } catch (Exception $e) {
         $schedule->setStatus($errorStatus)->setMessages($e->__toString());
         // Aoe_Scheduler: additional handling:
         Mage::dispatchEvent('cron_' . $schedule->getJobCode() . '_exception', array('schedule' => $schedule, 'exception' => $e));
         Mage::dispatchEvent('cron_exception', array('schedule' => $schedule, 'exception' => $e));
         Mage::helper('aoe_scheduler')->sendErrorMail($schedule, $e->__toString());
     }
     $schedule->save();
     return $this;
 }
 /**
  * Create process schedules.
  *
  * @param Mage_Cron_Model_Schedule $schedule
  *
  * @return void
  */
 protected function _createProcessSchedule($schedule)
 {
     $isNew = $schedule->isObjectNew();
     $parts = explode('_', $schedule->getJobCode());
     $scheduleWithItems = SixBySix_RealTimeDespatch_Model_Resource_Process_Schedule_Collection::getLastScheduleWithItems($parts[0]);
     $schedule = Mage::getModel('realtimedespatch/process_schedule')->load($schedule->getId(), 'cron_id')->setCronId($schedule->getId())->setStatus($schedule->getStatus())->setScheduled($schedule->getScheduledAt())->setExecuted($schedule->getExecutedAt())->setType($parts[1])->setEntity($parts[0]);
     if ($schedule->getStatus() == Mage_Cron_Model_Schedule::STATUS_MISSED) {
         $schedule->setExecuted(date('Y-m-d H:i:s'));
     }
     if (!$schedule->getParentId() && !$isNew && $scheduleWithItems->getId()) {
         $schedule->setParentId($scheduleWithItems->getParentId());
         $schedule->setMessageId($scheduleWithItems->getMessageId());
         $schedule->setExecutedWithItems($scheduleWithItems->getExecutedWithItems());
     }
     $schedule->save();
     return $schedule;
 }
Example #4
0
 /**
  * Run an import through a cron job
  * @param Aoe_Scheduler_Model_Schedule|Mage_Cron_Model_Schedule $cron
  */
 public function process(Mage_Cron_Model_Schedule $cron)
 {
     //initialize the translations so that we are able to translate things.
     Mage::app()->loadAreaPart(Mage_Core_Model_App_Area::AREA_ADMINHTML, Mage_Core_Model_App_Area::PART_TRANSLATE);
     $cronName = $cron->getJobCode();
     $profile = str_replace('ho_import_', '', $cronName);
     $logHelper = Mage::helper('ho_import/log');
     try {
         /** @var Ho_Import_Model_Import $import */
         $import = Mage::getModel('ho_import/import');
         $import->setProfile($profile);
         $import->process();
     } catch (Exception $e) {
         $logHelper->log($logHelper->getExceptionTraceAsString($e), Zend_Log::CRIT);
         $cron->setStatus($cron::STATUS_ERROR);
     }
     $logHelper->done();
 }
 /**
  * Test for required values when admin config setting related to the this extension are changed
  *
  * @param Mage_Cron_Model_Schedule $schedule
  * @return bool
  */
 public function adminSystemConfigChangedSectionTax($schedule)
 {
     Mage::app()->cleanCache('block_html');
     $storeId = Mage::getModel('core/store')->load($schedule->getEvent()->getStore())->getStoreId();
     $errors = array();
     if (!Mage::getStoreConfig('tax/advanced/url', $storeId)) {
         $errors[] = 'You must enter a connection url';
     }
     if (!Mage::getStoreConfig('tax/advanced/license', $storeId)) {
         $errors[] = 'You must enter a license key';
     }
     if (!Mage::getStoreConfig('tax/advanced/checksum', $storeId)) {
         $errors[] = 'You must enter a checksum';
     }
     $session = Mage::getSingleton('adminhtml/session');
     if (count($errors) == 1) {
         $session->addError(implode('', $errors));
     } elseif (count($errors)) {
         $session->addError('Please make sure the following fields as filled in in your Accuratetax.com Module Setup:<br /> ' . implode('<br />', $errors) . '<br/>');
     }
 }
Example #6
0
 /**
  * Process cron task
  *
  * @param Mage_Cron_Model_Schedule $schedule
  * @param $jobConfig
  * @param bool $isAlways
  * @return Mage_Cron_Model_Observer
  */
 protected function _processJob($schedule, $jobConfig, $isAlways = false)
 {
     $runConfig = $jobConfig->run;
     if (!$isAlways) {
         $scheduleLifetime = Mage::getStoreConfig(self::XML_PATH_SCHEDULE_LIFETIME) * 60;
         $now = time();
         $time = strtotime($schedule->getScheduledAt());
         if ($time > $now) {
             return;
         }
     }
     $errorStatus = Mage_Cron_Model_Schedule::STATUS_ERROR;
     try {
         if (!$isAlways) {
             if ($time < $now - $scheduleLifetime) {
                 $errorStatus = Mage_Cron_Model_Schedule::STATUS_MISSED;
                 Mage::throwException(Mage::helper('cron')->__('Too late for the schedule.'));
             }
         }
         if ($runConfig->model) {
             if (!preg_match(self::REGEX_RUN_MODEL, (string) $runConfig->model, $run)) {
                 Mage::throwException(Mage::helper('cron')->__('Invalid model/method definition, expecting "model/class::method".'));
             }
             if (!($model = Mage::getModel($run[1])) || !method_exists($model, $run[2])) {
                 Mage::throwException(Mage::helper('cron')->__('Invalid callback: %s::%s does not exist', $run[1], $run[2]));
             }
             $callback = array($model, $run[2]);
             $arguments = array($schedule);
         }
         if (empty($callback)) {
             Mage::throwException(Mage::helper('cron')->__('No callbacks found'));
         }
         if (!$isAlways) {
             if (!$schedule->tryLockJob()) {
                 // another cron started this job intermittently, so skip it
                 return;
             }
             /**
                             though running status is set in tryLockJob we must set it here because the object
                             was loaded with a pending status and will set it back to pending if we don't set it here
             */
             //$schedule->setStatus(Mage_Cron_Model_Schedule::STATUS_RUNNING);
         }
         $schedule->setExecutedAt(strftime('%Y-%m-%d %H:%M:%S', time()))->save();
         call_user_func_array($callback, $arguments);
         $schedule->setStatus(Mage_Cron_Model_Schedule::STATUS_SUCCESS)->setFinishedAt(strftime('%Y-%m-%d %H:%M:%S', time()));
     } catch (Exception $e) {
         $schedule->setStatus($errorStatus)->setMessages($e->__toString());
     }
     $schedule->save();
     return $this;
 }
Example #7
0
 /**
  * Processing object before save data
  *
  * Check if there are other schedules for the same job at the same time and skip saving in this case.
  *
  * @return Mage_Core_Model_Abstract
  */
 protected function _beforeSave()
 {
     $collection = Mage::getModel('cron/schedule')->getCollection()->addFieldToFilter('status', Mage_Cron_Model_Schedule::STATUS_PENDING)->addFieldToFilter('job_code', $this->getJobCode())->addFieldToFilter('scheduled_at', $this->getScheduledAt());
     if ($this->getId() !== null) {
         $collection->addFieldToFilter('schedule_id', array('neq' => $this->getId()));
     }
     $count = $collection->count();
     if ($count > 0) {
         $this->_dataSaveAllowed = false;
         // prevents this object from being stored to database
         $this->log(sprintf('Pending schedule for "%s" at "%s" already exists %s times. Skipping.', $this->getJobCode(), $this->getScheduledAt(), $count));
     } else {
         $this->_dataSaveAllowed = true;
         // allow the next object to save (because it's not reset automatically)
     }
     return parent::_beforeSave();
 }
Example #8
0
 /**
  * Run operation in crontab
  *
  * @param Mage_Cron_Model_Schedule $schedule
  * @param bool $forceRun
  * @return bool
  */
 public function processScheduledOperation($schedule, $forceRun = false)
 {
     $operation = Mage::getModel('enterprise_importexport/scheduled_operation')->loadByJobCode($schedule->getJobCode());
     $result = false;
     if ($operation && ($operation->getStatus() || $forceRun)) {
         $result = $operation->run();
     }
     return $result;
 }
Example #9
0
 /**
  * Bypass parent's setCronExpr is the expression is "always"
  * This will break trySchedule, but always tasks will never be tried to scheduled anyway
  *
  * @param $expr
  * @return $this
  * @throws Mage_Core_Exception
  */
 public function setCronExpr($expr)
 {
     if ($expr == 'always') {
         $this->setData('cron_expr', $expr);
     } else {
         parent::setCronExpr($expr);
     }
     return $this;
 }
Example #10
0
 /**
  * Clean logs
  *
  * @param Mage_Cron_Model_Schedule|null $backupSchedule
  *
  * @return $this
  */
 public function run($backupSchedule = null)
 {
     #Mage::log('Single mode mask: ' . (int)$this->getData('single_mode'), null, 'cron.log');
     #Mage::log('Single mode enabled: ' . (int)Mage::helper('mpbackup/config')->isSingleModeEnabled(), null, 'cron.log');
     if (true !== $this->getData('single_mode') && Mage::helper('mpbackup/config')->isSingleModeEnabled()) {
         return $this;
     }
     try {
         $this->_generateJobs();
     } catch (Exception $e) {
         Mage::logException($e);
     }
     $this->_errors = array();
     $executedAt = $backupSchedule instanceof Mage_Cron_Model_Schedule ? strtotime($backupSchedule->getData('executed_at')) : time();
     $schedules = $this->_getBackupPendingSchedules();
     $scheduleLifetime = Mage::getStoreConfig(Mage_Cron_Model_Observer::XML_PATH_SCHEDULE_LIFETIME) * 60;
     /** @var Mageplace_Backup_Model_Cron_Schedule $schedule */
     foreach ($schedules->getIterator() as $schedule) {
         $time = strtotime($schedule->getData('scheduled_at'));
         if ($time > $executedAt) {
             continue;
         }
         $errorStatus = Mageplace_Backup_Helper_Const::STATUS_ERROR;
         try {
             if ($time < $executedAt - $scheduleLifetime) {
                 $errorStatus = Mageplace_Backup_Helper_Const::STATUS_MISSED;
                 throw Mage::exception('Mageplace_Backup', Mage::helper('cron')->__('Too late for the schedule.') . ($backupSchedule instanceof Mage_Cron_Model_Schedule ? ' Schedule ID#' . $backupSchedule->getId() . '.' : '') . ' Backup schedule ID#' . $schedule->getId() . '.');
             }
             if (!$schedule->tryJobLock()) {
                 /* another cron started this job intermittently, so skip it */
                 continue;
             }
             $schedule->setStatus(Mageplace_Backup_Helper_Const::STATUS_RUNNING)->setExecutedAt(strftime('%Y-%m-%d %H:%M:%S', time()))->save();
             $profile_id = $schedule->getProfileId();
             if (!$profile_id) {
                 continue;
             }
             $profile = Mage::getModel('mpbackup/profile')->load($profile_id);
             if (!is_object($profile) || !$profile->getId()) {
                 throw Mage::exception('Mageplace_Backup', Mage::helper('mpbackup')->__('Profile ID#%s not founded.', $profile_id));
             }
             $finish = true;
             switch ($schedule->getData('job_code')) {
                 case self::JOB_CODE_BACKUP:
                     $finish = $this->backupRun($profile, $schedule);
                     break;
                 case self::JOB_CODE_DELETE:
                     $this->deleteOldBackups($profile);
                     break;
                 case self::JOB_CODE_CHECK_RUNNING:
                     $this->checkRunningBackups($profile);
                     break;
             }
             if ($finish) {
                 $schedule->setStatus(Mageplace_Backup_Helper_Const::STATUS_SUCCESS)->setFinishedAt(strftime('%Y-%m-%d %H:%M:%S', time()));
             }
         } catch (Exception $e) {
             $schedule->setStatus($errorStatus)->setMessages($e->__toString());
             Mage::logException($e);
             Mage::log('MPBackup cron errors: ' . $e->getMessage());
             if ($errorStatus != Mageplace_Backup_Helper_Const::STATUS_MISSED) {
                 $this->_errors[] = $e->__toString();
             }
         }
         $schedule->save();
     }
     if (isset($profile) && !empty($this->_errors)) {
         $this->sendErrorsEmail($profile);
     }
     $this->_cleanupJobs();
     return $this;
 }
Example #11
0
 /**
  * Get cron job message
  * Note: Limits to 100 characters
  *
  * @param Mage_Cron_Model_Schedule $job
  *
  * @return string
  */
 public function getTruncatedJobMessages($job)
 {
     return Mage::helper('core/string')->truncate($job->getMessages(), 100);
 }
Example #12
0
 public function _construct()
 {
     parent::_construct();
     $this->_init('mpbackup/cron_schedule');
 }
 /**
  * @param Mage_Cron_Model_Schedule $schedule
  * @return void
  */
 public function execute(Mage_Cron_Model_Schedule $schedule)
 {
     $service = $this->getFactory()->getServiceTransactionStatusExecute();
     $count = $service->executePending();
     $schedule->setMessages($count . ' Transaction-Status processed');
 }
Example #14
0
 public function registerCreditmemos(Mage_Cron_Model_Schedule $schedule)
 {
     $helper = $this->getHelper();
     $result = array('registered' => array(), 'errors' => array());
     foreach (Mage::app()->getStores() as $store) {
         /** @var Mage_Core_Model_Store $store */
         if (!$helper->isActive($store)) {
             continue;
         }
         $api = $helper->getApi($store);
         $limit = max(intval($helper->getConfig('register_creditmemos_batch', $store)), 25);
         /** @var Mage_Sales_Model_Resource_Order_Creditmemo_Collection $creditmemos */
         $creditmemos = Mage::getSingleton('sales/order_creditmemo')->getCollection();
         $creditmemos->addFieldToFilter('store_id', $store->getId());
         $creditmemos->addFieldToFilter('avatax_document', array('null' => true));
         $creditmemos->addOrder('updated_at', 'ASC');
         if ($limit) {
             $creditmemos->setPageSize($limit);
         }
         foreach ($creditmemos as $creditmemo) {
             /** @var Mage_Sales_Model_Order_Creditmemo $creditmemo */
             try {
                 $helper->registerCreditmemo($api, $creditmemo);
                 $result['registered'][] = $creditmemo->getIncrementId();
             } catch (Exception $e) {
                 $result['errors'][] = $e->getMessage();
                 if ($e instanceof Aoe_AvaTax_Exception && count($e->getAvaTaxMessages())) {
                     foreach ($e->getAvaTaxMessages() as $message) {
                         $result['errors'][] = $message;
                     }
                 }
                 try {
                     $creditmemo->setDataChanges(true);
                     $creditmemo->addComment('Failed to register creditmemo with AvaTax: ' . $e->getMessage());
                     $creditmemo->save();
                     $creditmemo->getOrder()->addStatusHistoryComment('Failed to register creditmemo with AvaTax: ' . $e->getMessage());
                     $creditmemo->getOrder()->save();
                 } catch (Exception $e2) {
                     $result['errors'][] = $e2->getMessage();
                     Mage::logException($e2);
                 }
                 Mage::logException($e);
             }
         }
     }
     if (count($result['errors'])) {
         $schedule->setStatus(Mage_Cron_Model_Schedule::STATUS_ERROR);
     } elseif (!count($result['registered'])) {
         $schedule->setStatus('nothing');
     }
     return $result;
 }
 public function testDispatchCronDoesNotCallApiIfNoMessages()
 {
     $schedule = new Mage_Cron_Model_Schedule();
     $schedule->setJobCode('triggerCode');
     $events = $this->getEventCollection();
     $this->observer->expects($this->once())->method('getEvents')->with('cron', 'triggerCode')->will($this->returnValue($events));
     $messages = array();
     $this->messageProcessor->expects($this->once())->method('processEvents')->with($events)->will($this->returnValue($messages));
     $this->esendexApi->expects($this->never())->method('sendMultipleMessages');
     $this->observer->dispatchCron($schedule);
 }
 /**
  * Dispatch For Cron Jobs
  */
 public function dispatchCron(Mage_Cron_Model_Schedule $schedule)
 {
     $triggerCode = $schedule->getJobCode();
     $events = $this->getEvents(Esendex_Sms_Model_Event::TRIGGER_TYPE_CRON, $triggerCode);
     $this->dispatch($events);
 }