public function execute($request) { $this->resource = $request->getAttribute('sf_route')->resource; $criteria = new Criteria(); $criteria->add(QubitEvent::ACTOR_ID, $this->resource->id); $criteria->addJoin(QubitEvent::INFORMATION_OBJECT_ID, QubitInformationObject::ID); $criteria->addAscendingOrderByColumn(QubitEvent::TYPE_ID); // Sort info objects alphabetically (w/ fallback) $criteria->addAscendingOrderByColumn('title'); $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitInformationObject'); // Filter draft descriptions $criteria = QubitAcl::addFilterDraftsCriteria($criteria); $this->relatedInfoObjects = array(); foreach (QubitEvent::get($criteria) as $item) { $this->relatedInfoObjects[$item->type->getRole()][] = $item->informationObject; } // Get "subject of" information objects (name access point) $criteria = new Criteria(); $criteria->add(QubitRelation::OBJECT_ID, $this->resource->id); $criteria->add(QubitRelation::TYPE_ID, QubitTerm::NAME_ACCESS_POINT_ID); $this->subjectInfoObjects = array(); foreach (QubitRelation::get($criteria) as $item) { $this->subjectInfoObjects[] = $item->subject; } }
protected function addField($name) { switch ($name) { case 'creators': $criteria = new Criteria(); $this->resource->addEventsCriteria($criteria); $criteria->add(QubitEvent::ACTOR_ID, null, Criteria::ISNOTNULL); $criteria->add(QubitEvent::TYPE_ID, QubitTerm::CREATION_ID); $value = $choices = array(); foreach ($this->events = QubitEvent::get($criteria) as $item) { $choices[$value[] = $this->context->routing->generate(null, array($item->actor, 'module' => 'actor'))] = $item->actor; } $this->form->setDefault('creators', $value); $this->form->setValidator('creators', new sfValidatorPass()); $this->form->setWidget('creators', new sfWidgetFormSelect(array('choices' => $choices, 'multiple' => true))); break; case 'appraisal': $this->form->setDefault('appraisal', $this->resource['appraisal']); $this->form->setValidator('appraisal', new sfValidatorString()); $this->form->setWidget('appraisal', new sfWidgetFormTextarea()); break; default: return parent::addField($name); } }
public function __get($name) { switch ($name) { case 'biogHist': return self::toDiscursiveSet($this->resource->history); case 'entityType': switch ($this->resource->entityTypeId) { case QubitTerm::CORPORATE_BODY_ID: return 'corporateBody'; case QubitTerm::FAMILY_ID: return 'family'; case QubitTerm::PERSON_ID: return 'person'; } return; case 'existDates': // TODO <date/>, <dateRange/>, <dateSet/>, <descriptiveNote/>, simple // natural language parsing? return '<date>' . esc_specialchars($this->resource->datesOfExistence) . '</date>'; case 'generalContext': return self::toDiscursiveSet($this->resource->generalContext); case 'maintenanceHistory': ProjectConfiguration::getActive()->loadHelpers('Date'); $createdAt = format_date($this->resource->createdAt, 's'); $updatedAt = format_date($this->resource->updatedAt, 's'); $createdDisplay = format_date($this->resource->createdAt, 'F'); $updatedDisplay = format_date($this->resource->updatedAt, 'F'); return <<<return <maintenanceEvent> <eventType>created</eventType> <eventDateTime standardDateTime="{$createdAt}">{$createdDisplay}</eventDateTime> <agentType>human</agentType> <agent/> </maintenanceEvent> <maintenanceEvent> <eventType>revised</eventType> <eventDateTime standardDateTime="{$updatedAt}">{$updatedDisplay}</eventDateTime> <agentType>human</agentType> <agent/> </maintenanceEvent> return; case 'maintenanceStatus': switch (strtolower($this->resource->descriptionStatus)) { case 'revised': return 'revised'; default: return 'new'; } case 'publicationStatus': return 'approved'; case 'resourceRelation': $criteria = new Criteria(); $criteria->add(QubitEvent::ACTOR_ID, $this->resource->id); $criteria->addJoin(QubitEvent::INFORMATION_OBJECT_ID, QubitInformationObject::ID); return QubitEvent::get($criteria); case 'functionRelation': $criteria = new Criteria(); $criteria->addAlias('subj', QubitObject::TABLE_NAME); $criteria->addJoin(QubitRelation::SUBJECT_ID, 'subj.id'); $criteria->add(QubitRelation::OBJECT_ID, $this->resource->id); $criteria->add('subj.class_name', 'QubitFunction'); return QubitRelation::get($criteria); case 'structureOrGenealogy': return self::toDiscursiveSet($this->resource->internalStructures); } }
public static function geteventsById($id, array $options = array()) { $criteria = new Criteria(); self::addeventsCriteriaById($criteria, $id); return QubitEvent::get($criteria, $options); }
public function setDates($date, $options = array()) { // parse the normalized dates into an Event start and end date $normalizedDate = array(); if (isset($options['normalized_dates'])) { preg_match('/(?P<start>\\d{4}(-\\d{2})?(-\\d{2})?)\\/?(?P<end>\\d{4}(-\\d{2})?(-\\d{2})?)?/', $options['normalized_dates'], $matches); $normalizedDate['start'] = new DateTime($this->getDefaultDateValue($matches['start'])); if (isset($matches['end'])) { $normalizedDate['end'] = new DateTime($this->getDefaultDateValue($matches['end'])); } else { $normalizedDate['end'] = null; } } else { $normalizedDate['start'] = null; $normalizedDate['end'] = null; } // determine the Event type if (isset($options['date_type'])) { $eventType = $options['date_type']; // see if Event Type already exists, if so use it $criteria = new Criteria(); $criteria->add(QubitTerm::TAXONOMY_ID, QubitTaxonomy::EVENT_TYPE_ID); $criteria->addJoin(QubitTerm::ID, QubitTermI18n::ID); $criteria->add(QubitTermI18n::NAME, $eventType); if ($term = QubitTermI18n::getOne($criteria)) { $eventTypeId = $term->id; } else { // if the Event Type does not already exist, create a new type and use it $term = new QubitTerm(); $term->setTaxonomyId(QubitTaxonomy::EVENT_TYPE_ID); $term->setName($eventType); $term->setRoot(); $term->save(); $eventTypeId = $term->id; } } else { // set event type to 'creation' by default $eventTypeId = QubitTerm::CREATION_ID; } // assign the dates to the same event as the creator for this information object // if there is more than one creator, assign it to the first one that is returned if (count($creationEvents = $this->getCreationEvents()) > 0) { $event = $creationEvents[0]; $event->setIndexOnSave(false); $event->setStartDate($normalizedDate['start']); $event->setEndDate($normalizedDate['end']); $event->setTypeId($eventTypeId); $event->setDate($date); $event->save(); } else { // if this information object is not linked to a creator, create an event object // and link it to the information object $event = new QubitEvent(); $event->setTypeId($eventTypeId); $event->setStartDate($normalizedDate['start']); $event->setEndDate($normalizedDate['end']); $event->setDate($date); $this->events[] = $event; } }