/** * 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; }