Ejemplo n.º 1
0
 /**
  * @see {Opus_Model_Plugin_Interface::postStore}
  */
 public function postStoreInternal(Opus_Model_AbstractDb $model)
 {
     $log = Zend_Registry::get('Zend_Log');
     $log->debug('Opus_Document_Plugin_SequenceNumber::postStore() with id ' . $model->getId());
     if (!$model instanceof Opus_Document) {
         $message = 'Model is not an Opus_Document. Aborting...';
         $log->err($message);
         throw new Opus_Document_Exception($message);
     }
     if ($model->getServerState() !== 'published') {
         $message = 'Skip Opus_Documents not in ServerState *published* ...';
         $log->info($message);
         return;
     }
     $config = Zend_Registry::get('Zend_Config');
     if (!isset($config, $config->sequence->identifier_type)) {
         $log->debug('Sequence auto creation is not configured. skipping...');
         return;
     }
     $sequence_type = trim($config->sequence->identifier_type);
     $sequence_ids = array();
     foreach ($model->getIdentifier() as $id) {
         if ($id->getType() === $sequence_type) {
             $sequence_ids[] = trim($id->getValue());
         }
     }
     if (count($sequence_ids) > 0) {
         $message = "Sequence IDs for type '{$sequence_type}' already exists: " . implode(",", $sequence_ids);
         $log->debug($message);
         return;
     }
     // Create and initialize new sequence number...
     $next_sequence_number = $this->_fetchNextSequenceNumber($sequence_type);
     $model->addIdentifier()->setType($sequence_type)->setValue($next_sequence_number);
     return;
 }