public static function getTaxonomyTerms($taxonomyId, $options = array()) { $criteria = new Criteria(); $criteria->add(QubitTerm::TAXONOMY_ID, $taxonomyId); // Only include top-level terms if option is set if (isset($options['level']) && $options['level'] == 'top') { $criteria->add(QubitTerm::PARENT_ID, QubitTerm::ROOT_ID); } // Sort alphabetically $criteria->addAscendingOrderByColumn('name'); // Do source culture fallback $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitTerm'); return QubitTerm::get($criteria); }
/** * Execute digitalobject list action * * @param sfWebRequest $request */ public function execute($request) { // Build funky join query to get a count of top level digital objects // for each media type (term) $criteria = new Criteria(); $criteria->add(QubitTerm::TAXONOMY_ID, QubitTaxonomy::MEDIA_TYPE_ID); $criteria->addJoin(QubitTerm::ID, QubitDigitalObject::MEDIA_TYPE_ID, Criteria::LEFT_JOIN); $criteria->addAsColumn('hits', 'COUNT(' . QubitDigitalObject::ID . ')'); $criteria->addGroupByColumn(QubitTerm::ID); // Add I18n fallback $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitTerm'); $criteria->addAscendingOrderByColumn('name'); // Filter drafts $criteria->addJoin(QubitDigitalObject::INFORMATION_OBJECT_ID, QubitInformationObject::ID); $criteria = QubitAcl::addFilterDraftsCriteria($criteria); $this->terms = QubitTerm::get($criteria); }
protected function addField($name) { switch ($name) { case 'searchFields': break; case 'repository': // Get list of repositories $criteria = new Criteria(); // Do source culture fallback $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitActor'); $criteria->addAscendingOrderByColumn('authorized_form_of_name'); $choices = array('' => ''); foreach (QubitRepository::get($criteria) as $repository) { $choices[$repository->id] = $repository; } $this->form->setValidator($name, new sfValidatorChoice(array('choices' => array_keys($choices)))); $this->form->setWidget($name, new sfWidgetFormSelect(array('choices' => $choices), array('style' => 'min-width: 50%; width: auto'))); break; case 'mediatype': // Get list of media types $criteria = new Criteria(); $criteria->add(QubitTerm::TAXONOMY_ID, QubitTaxonomy::MATERIAL_TYPE_ID); // Do source culture fallback $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitTerm'); $criteria->addAscendingOrderByColumn('name'); $choices = array('' => ''); foreach (QubitTerm::get($criteria) as $mediatype) { $choices[$mediatype->id] = $mediatype; } $this->form->setValidator($name, new sfValidatorChoice(array('choices' => array_keys($choices)))); $this->form->setWidget($name, new sfWidgetFormSelect(array('choices' => $choices), array('style' => 'width: auto'))); break; case 'hasDigitalObject': $choices = array('' => '', 'true' => 'Yes', 'false' => 'No'); $this->form->setValidator($name, new sfValidatorChoice(array('choices' => array_keys($choices)))); $this->form->setWidget($name, new sfWidgetFormSelect(array('choices' => $choices), array('style' => 'width: auto'))); break; } }
public function execute($request) { if (!isset($request->limit)) { $request->limit = sfConfig::get('app_hits_per_page'); } // For term module show only preferred term $params = $this->context->routing->parse(Qubit::pathInfo($request->getReferer())); if ('term' == $params['module']) { $criteria = new Criteria(); // Exclude the calling object and it's descendants from the list (prevent // circular inheritance) if (isset($params['id'])) { // TODO Self join would be ideal $term = QubitTerm::getById($params['id']); if (isset($term)) { $criteria->add($criteria->getNewCriterion(QubitTerm::LFT, $term->lft, Criteria::LESS_THAN)->addOr($criteria->getNewCriterion(QubitTerm::RGT, $term->rgt, Criteria::GREATER_THAN))); } } $params = $this->context->routing->parse(Qubit::pathInfo($request->taxonomy)); $criteria->add(QubitTerm::TAXONOMY_ID, $params['_sf_route']->resource->id); $criteria->addJoin(QubitTerm::ID, QubitTermI18n::ID); $criteria->add(QubitTermI18n::CULTURE, $this->context->user->getCulture()); // Narrow results by query if (isset($request->query)) { $criteria->add(QubitTermI18n::NAME, "{$request->query}%", Criteria::LIKE); } // Sort by name $criteria->addAscendingOrderByColumn(QubitTermI18n::NAME); $criteria->setLimit(10); $this->terms = QubitTerm::get($criteria); } else { $s1 = 'SELECT qt.id, null, qti.name FROM ' . QubitTerm::TABLE_NAME . ' qt LEFT JOIN ' . QubitTermI18n::TABLE_NAME . ' qti ON qt.id = qti.id WHERE taxonomy_id = :p1 AND qti.culture = :p2'; $s2 = 'SELECT qt.id, qon.id as altId, qoni.name FROM ' . QubitOtherName::TABLE_NAME . ' qon INNER JOIN ' . QubitOtherNameI18n::TABLE_NAME . ' qoni ON qon.id = qoni.id INNER JOIN ' . QubitTerm::TABLE_NAME . ' qt ON qon.object_id = qt.id WHERE qt.taxonomy_id = :p1 AND qoni.culture = :p2'; // Narrow results by query if (isset($request->query)) { $s1 .= ' AND qti.name LIKE :p3'; $s2 .= ' AND qoni.name LIKE :p3'; } $connection = Propel::getConnection(); $statement = $connection->prepare("({$s1}) UNION ALL ({$s2}) ORDER BY name LIMIT 10"); $params = $this->context->routing->parse(Qubit::pathInfo($request->taxonomy)); $statement->bindValue(':p1', $params['_sf_route']->resource->id); $statement->bindValue(':p2', $this->context->user->getCulture()); if (isset($request->query)) { $statement->bindValue(':p3', "{$request->query}%"); } $statement->execute(); $this->terms = array(); $rows = $statement->fetchAll(); foreach ($rows as $row) { if (isset($row[1])) { // Alternative term $this->terms[] = array(QubitTerm::getById($row[0]), $row[2]); } else { // Preferred term $this->terms[] = QubitTerm::getById($row[0]); } } } }
private static function getFullTree($currentNode, $limit) { $tree = array(); // Get direct ancestors $ancestors = $currentNode->getAncestors()->orderBy('lft'); foreach ($ancestors as $ancestor) { $tree[$ancestor->id] = $ancestor; } // Get siblings (with limit) - but don't show sibling collection roots $totalSiblings = 0; $criteria = new Criteria(); $criteria->add(QubitTerm::PARENT_ID, $currentNode->parentId); if (QubitTerm::ROOT_ID == $currentNode->parentId) { $criteria->add(QubitTerm::TAXONOMY_ID, $currentNode->taxonomyId); } $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitTerm'); $criteria->addAscendingOrderByColumn('name'); if (0 < $limit) { $criteria->setLimit($limit); } foreach (QubitTerm::get($criteria) as $item) { // Keep track of position of $currentNode in array if ($item === $currentNode) { $curIndex = count($tree); } $tree[] = $item; } $totalSiblings = intval(BasePeer::doCount($criteria->setLimit(0))->fetchColumn(0)); // Add current object to $tree if it wasn't added as a sibling if (!isset($curIndex)) { if ($totalSiblings >= $limit) { // replace last sibling with current object array_splice($tree, -1, 1, array($currentNode)); } else { $tree[] = $currentNode; } $curIndex = count($tree) - 1; } if ($totalSiblings > $limit) { $tree[] = array('total' => $totalSiblings, 'limit' => $limit, 'parentId' => $currentNode->parentId); } // Get children (with limit) $totalChildren = 0; $criteria = new Criteria(); $criteria->add(QubitTerm::PARENT_ID, $currentNode->id); $criteria = QubitCultureFallback::addFallbackCriteria($criteria, 'QubitTerm'); $criteria->addAscendingOrderByColumn('name'); if (0 < $limit) { $criteria->setLimit($limit); } if (0 < count($children = QubitTerm::get($criteria))) { foreach ($children as $item) { $childs[] = $item; } $totalChildren = intval(BasePeer::doCount($criteria->setLimit(0))->fetchColumn(0)); if ($totalChildren > $limit) { $childs[] = array('total' => $totalChildren, 'limit' => $limit, 'parentId' => $currentNode->id); } // Insert children right AFTER current info object in array if ($curIndex == count($tree) - 1) { $tree = array_merge($tree, $childs); } else { array_splice($tree, $curIndex + 1, 0, $childs); } } return $tree; }
public static function gettermsById($id, array $options = array()) { $criteria = new Criteria(); self::addtermsCriteriaById($criteria, $id); return QubitTerm::get($criteria, $options); }
protected function addFormFields() { // Media type field $choices = array(); $criteria = new Criteria(); $criteria->add(QubitTerm::TAXONOMY_ID, QubitTaxonomy::MEDIA_TYPE_ID); foreach (QubitTerm::get($criteria) as $item) { $choices[$item->id] = $item->getName(array('cultureFallback' => true)); } asort($choices); // Sort media types by name $this->form->setValidator('mediaType', new sfValidatorChoice(array('choices' => array_keys($choices)))); $this->form->setWidget('mediaType', new sfWidgetFormSelect(array('choices' => $choices))); $this->form->setDefault('mediaType', $this->resource->mediaTypeId); // Only display "compound digital object" toggle if we have a child with a // digital object $this->showCompoundObjectToggle = false; foreach ($this->informationObject->getChildren() as $item) { if (null !== $item->getDigitalObject()) { $this->showCompoundObjectToggle = true; break; } } if ($this->showCompoundObjectToggle) { $this->form->setValidator('displayAsCompound', new sfValidatorBoolean()); $this->form->setWidget('displayAsCompound', new sfWidgetFormSelectRadio(array('choices' => array('1' => $this->context->i18n->__('Yes'), '0' => $this->context->i18n->__('No'))))); // Set "displayAsCompound" value from QubitProperty $criteria = new Criteria(); $criteria->add(QubitProperty::OBJECT_ID, $this->resource->id); $criteria->add(QubitProperty::NAME, 'displayAsCompound'); if (null != ($compoundProperty = QubitProperty::getOne($criteria))) { $this->form->setDefault('displayAsCompound', $compoundProperty->getValue(array('sourceCulture' => true))); } } // Add rights component $this->rightEditComponent = new RightEditComponent($this->context, 'right', 'edit'); $this->rightEditComponent->resource = $this->resource; $this->rightEditComponent->execute($this->request); $maxUploadSize = QubitDigitalObject::getMaxUploadSize(); ProjectConfiguration::getActive()->loadHelpers('Qubit'); // If reference representation doesn't exist, include upload widget foreach ($this->representations as $usageId => $representation) { if (null === $representation) { $repName = "repFile_{$usageId}"; $derName = "generateDerivative_{$usageId}"; $this->form->setValidator($repName, new sfValidatorFile()); $this->form->setWidget($repName, new sfWidgetFormInputFile()); if (-1 < $maxUploadSize) { $this->form->getWidgetSchema()->{$repName}->setHelp($this->context->i18n->__('Max. size ~%1%', array('%1%' => hr_filesize($maxUploadSize)))); } else { $this->form->getWidgetSchema()->{$repName}->setHelp(''); } // Add "auto-generate" checkbox $this->form->setValidator($derName, new sfValidatorBoolean()); $this->form->setWidget($derName, new sfWidgetFormInputCheckbox(array(), array('value' => 1))); } else { $this["rightEditComponent_{$usageId}"] = new RightEditComponent($this->context, 'right', 'edit'); $this["rightEditComponent_{$usageId}"]->resource = $representation; $this["rightEditComponent_{$usageId}"]->nameFormat = 'editRight' . $usageId . '[%s]'; $this["rightEditComponent_{$usageId}"]->execute($this->request); } } }