/**
  * Delete pending background task if it is allowed
  *
  * @service tasks delete
  * @param $params
  * @return Gpf_Rpc_Action
  */
 public function deleteTask(Gpf_Rpc_Params $params)
 {
     $action = new Gpf_Rpc_Action($params);
     $dbTask = new Gpf_Db_Task();
     try {
         $dbTask->setId($action->getParam('taskid'));
         $dbTask->load();
     } catch (Gpf_Exception $e) {
         $action->addError();
         $action->setErrorMessage($this->_('Failed to delete task.'));
         return $action;
     }
     if ($dbTask->isExecuting()) {
         $action->addError();
         $action->setErrorMessage($this->_('It is not possible to delete running task.'));
         return $action;
     }
     try {
         $longTask = Gpf::newObj($dbTask->getClassName());
         if (!$longTask->canUserDeleteTask()) {
             $action->addError();
             $action->setErrorMessage($this->_('This type of task is not allowed to be deleted.'));
             return $action;
         }
     } catch (Gpf_Exception $e) {
     }
     $dbTask->delete();
     $action->addOk();
     $action->setInfoMessage($this->_('Task deleted.'));
     return $action;
 }
예제 #2
0
 public function execute() {
     $task = new Gpf_Db_Task();
     $task->setClassName('Gpf_Mail_OutboxRunner');
     $task->loadFromData(array(Gpf_Db_Table_Tasks::CLASSNAME));
     
     $select = new Gpf_SqlBuilder_SelectBuilder();
     $select->select->add(Gpf_Db_Table_MailOutbox::ID);
     $select->from->add(Gpf_Db_Table_MailOutbox::getName());
     $select->orderBy->add(Gpf_Db_Table_MailOutbox::ID);
     $select->limit->set(0,1);
     try {
     	$row = $select->getOneRow();
     	$begining = $row->get(Gpf_Db_Table_MailOutbox::ID);
     } catch (Gpf_Exception $e) {
     	$begining = 1;
     }
     
     try {
         $task->load();
         $task->setParams($begining);
         $task->setWorkingAreaFrom($begining);   
         $task->setWorkingAreaTo(Gpf_Mail_OutboxRunner::MAX_MAIL_WORKERS_COUNT);
         $task->update(array(Gpf_Db_Table_Tasks::WORKING_AREA_FROM, Gpf_Db_Table_Tasks::WORKING_AREA_TO, Gpf_Db_Table_Tasks::PARAMS));
     } catch (Gpf_Exception $e) {
         throw new Gpf_Exception('Cannot update Gpf_Mail_OutboxRunner task to paralel version');
     }
 }
예제 #3
0
 public function scheduleTasks($inclusion_type, $inclusion_tasks)
 {
     $select = new Gpf_SqlBuilder_SelectBuilder();
     $select->select->addAll(Gpf_Db_Table_PlannedTasks::getInstance());
     $select->from->add(Gpf_Db_Table_PlannedTasks::getName());
     $condition = new Gpf_SqlBuilder_CompoundWhereCondition();
     $condition->add(Gpf_Db_Table_PlannedTasks::LASTPLANDATE, '<', Gpf_Common_DateUtils::now(), 'OR');
     $condition->add(Gpf_Db_Table_PlannedTasks::LASTPLANDATE, 'is', 'NULL', 'OR', false);
     $select->where->addCondition($condition);
     if ($inclusion_type == Gpf_Tasks_Runner::INCLUDE_TASKS) {
         $select->where->add(Gpf_Db_Table_PlannedTasks::CLASSNAME, 'IN', $inclusion_tasks);
     } else {
         if ($inclusion_type == Gpf_Tasks_Runner::EXCLUDE_TASKS) {
             $select->where->add(Gpf_Db_Table_PlannedTasks::CLASSNAME, 'NOT IN', $inclusion_tasks);
         }
     }
     foreach ($select->getAllRows() as $plannedTaskRow) {
         $plannedTask = new Gpf_Db_PlannedTask();
         $plannedTask->fillFromRecord($plannedTaskRow);
         if ($plannedTask->getLastPlanDate() == null) {
             $plannedTask->setLastPlanDate(Gpf_Common_DateUtils::now());
         }
         $task = new Gpf_Db_Task();
         $task->setClassName($plannedTask->getClassName());
         $task->setParams($plannedTask->getParams());
         $task->setAccountId($plannedTask->getAccountId());
         $task->save();
         $preset = new Gpf_Recurrence_Preset();
         $preset->setId($plannedTask->getRecurrencePresetId());
         $preset->load();
         $nextDate = $preset->getNextDate(Gpf_Common_DateUtils::mysqlDateTime2Timestamp($plannedTask->getLastPlanDate()));
         if ($nextDate != null && $nextDate > 0) {
             $plannedTask->setLastPlanDate(Gpf_Common_DateUtils::getDateTime($nextDate));
             $plannedTask->update();
         }
     }
 }
예제 #4
0
 public function execute() {
     $task = new Gpf_Db_Task();
     $task->setClassName('Pap_Tracking_Visit_Processor');                      
     
     try {
         $task->loadFromData(array(Gpf_Db_Table_Tasks::CLASSNAME));
         $task->setWorkingAreaFrom(0);   
         $task->setWorkingAreaTo(Pap_Tracking_Visit_Processor::MAX_WORKERS_COUNT - 1);
         $task->update(array(Gpf_Db_Table_Tasks::WORKING_AREA_FROM, Gpf_Db_Table_Tasks::WORKING_AREA_TO));
     } catch (Gpf_Exception $e) {}
 }
예제 #5
0
 /**
  * @return Gpf_Tasks_Task
  */
 protected function createTask()
 {
     $task = new Gpf_Db_Task();
     $task->setType($this->getTaskType());
     return $task;
 }
예제 #6
0
 /**
  * @param Gpf_Data_Record $record
  * @return Gpf_Db_Task
  */
 private function getTask(Gpf_Data_Record $record)
 {
     $task = new Gpf_Db_Task();
     $task->fillFromRecord($record);
     $task->setPersistent(true);
     return $task;
 }