Example #1
0
 /**
  * Prüft, ob eine Nummer für eine Schriftenreihe bereits vergeben ist.
  *
  * Wenn die Nummer bereits vergeben ist, wird geprüft, ob es sich um das aktuelle Dokument handelt. In diesem Fall
  * ist die Validierung ebenfalls erfolgreich.
  *
  * Wenn die Series nicht gefunden werden kann soll die Validierung einfach ignoriert werden, da nicht festgestellt
  * werden kann, ob es eine Kollision gibt. Eine fehlende Series-ID im Formular muss woanders geprüft und gemeldet
  * werden.
  */
 public function isValid($value, $context = null)
 {
     $value = (string) $value;
     $this->_setValue($value);
     if (array_key_exists(Admin_Form_Document_Series::ELEMENT_SERIES_ID, $context)) {
         $seriesId = $context[Admin_Form_Document_Series::ELEMENT_SERIES_ID];
     } else {
         $seriesId = null;
     }
     if (strlen(trim($seriesId)) == 0 && is_numeric($seriesId)) {
         Zend_Registry::get('Zend_Log')->err(__METHOD__ . ' Context without \'SeriesId\'.');
         return true;
         // should be captured somewhere else
     }
     try {
         $series = new Opus_Series($seriesId);
     } catch (Opus_Model_NotFoundException $omnfe) {
         Zend_Registry::get('Zend_Log')->err(__METHOD__ . $omnfe->getMessage());
         return true;
     }
     if (!$series->isNumberAvailable($value)) {
         if (array_key_exists(Admin_Form_Document_Series::ELEMENT_DOC_ID, $context)) {
             $currentDocId = $context[Admin_Form_Document_Series::ELEMENT_DOC_ID];
             $otherDocId = $series->getDocumentIdForNumber($value);
             if ($currentDocId == $otherDocId) {
                 return true;
             }
         }
         $this->_error(self::NOT_AVAILABLE);
         return false;
     }
     return true;
 }