public function publishAction()
 {
     try {
         $aMessage = array('status' => 0);
         $iIssueId = intval($this->_getParam('issue', null));
         if (!AM_Model_Db_Table_Abstract::factory('issue')->checkAccess($iIssueId, $this->_aUserInfo)) {
             throw new AM_Controller_Exception_Forbidden('Access denied');
         }
         $oIssue = AM_Model_Db_Table_Abstract::factory('issue')->findOneBy('id', $iIssueId);
         /* @var $oIssue AM_Model_Db_Issue */
         if (is_null($oIssue)) {
             throw new AM_Controller_Exception_Forbidden('Access denied');
         }
         if (!count($oIssue->getPublishedRevisions())) {
             throw new AM_Controller_Exception('Issue has no published revision');
         }
         if (AM_Model_Db_State::STATE_PUBLISHED != $oIssue->state) {
             $oIssue->state = AM_Model_Db_State::STATE_PUBLISHED;
             $oIssue->updated = new Zend_Db_Expr('now()');
             $oIssue->save();
             $sMessage = $this->__('New issue is available');
             AM_Task_Worker_Notification_Planner_Abstract::createTask(array('issue_id' => $oIssue->id, 'message' => $sMessage, 'badge' => 1));
         }
         $aMessage['status'] = 1;
     } catch (Exception $e) {
         $aMessage['message'] = 'Error. Can\'t publish issue.' . PHP_EOL . $e->getMessage();
     }
     return $this->getHelper('Json')->sendJson($aMessage);
 }
示例#2
0
 /**
  * @return boolean
  */
 protected function update()
 {
     $bIsPublished = false;
     $oIssue = AM_Model_Db_Table_Abstract::factory('issue')->findOneBy('id', $this->primaryKeyValue);
     /* @var $oIssue AM_Model_Db_Issue */
     $sOldState = $oIssue->state;
     $sOldOrientation = $oIssue->orientation;
     $sOldPdfMode = $oIssue->static_pdf_mode;
     $sOldType = $oIssue->type;
     if ($this->controls['state']->getValue() == AM_Model_Db_State::STATE_PUBLISHED) {
         // Check for published revision
         $oQuery = $this->db->select()->from('revision', 'COUNT(*)')->where('issue = ?', $this->primaryKeyValue)->where('state = ?', AM_Model_Db_State::STATE_PUBLISHED);
         $iPubRevisions = $this->db->fetchOne($oQuery);
         if (!$iPubRevisions) {
             $this->errors[] = $this->localizer->translate('Issue has no published revision');
             return false;
         }
         if ($sOldState != AM_Model_Db_State::STATE_PUBLISHED) {
             $bIsPublished = true;
             $this->databaseControls[] = new Volcano_Component_Control_Database_Static($this->actionController, 'release_date', new Zend_Db_Expr('NOW()'));
         }
     }
     if ($this->controls['orientation']->getValue() != $sOldOrientation) {
         $this->controls['orientation']->setDbValue($sOldOrientation);
     }
     $bResult = parent::update();
     if (!$bResult) {
         return false;
     }
     if ($bIsPublished) {
         $sMessage = $this->actionController->__('New issue is available');
         AM_Task_Worker_Notification_Planner_Abstract::createTask(array('issue_id' => $this->primaryKeyValue, 'message' => $sMessage, 'badge' => 1));
     }
     if ($this->controls['pdf_type']->getValue() != $sOldPdfMode) {
         $oIssue->static_pdf_mode = $this->controls['pdf_type']->getValue();
         $oIssue->compileHorizontalPdfs();
     }
     if ($this->controls['type']->getValue() != $sOldType) {
         AM_Model_Db_Table_Abstract::factory('issue_simple_pdf')->deleteBy(array('id_issue' => $this->primaryKeyValue));
     }
     return $bResult;
 }