public function Elements() { $result = $this->getComponents('Widgets'); $list = new HasManyList('BaseElement', $result->getForeignKey()); $list->setDataModel($this->model); $list->sort('Sort ASC'); $list = $list->forForeignID($this->ID); return $list; }
public function Elements() { $result = $this->getComponents('Widgets'); if ($result instanceof UnsavedRelationList) { return array(); } $list = new HasManyList('BaseElement', $result->getForeignKey()); $list->setDataModel($this->model); $list->sort('Sort ASC'); $list = $list->forForeignID($this->ID); $list = $list->filter(array('Enabled' => 1)); return $list; }
/** * Getter for the language object for an object that has translations * I impemented it a a static method because it would be redundantly declared * in any multilanguage DataObject * * @param HasManyList $componentset has_many relation to be searched for the right translation * @param string $locale locale eg. de_DE, en_NZ, ... * * @return DataObject|false * * @author Roland Lehmann <*****@*****.**> * @since 03.01.2012 */ public static function getLanguage($componentset, $locale = false) { $lang = false; if ($locale == false) { $locale = Translatable::get_current_locale(); } if ($componentset->find('Locale', $locale)) { $lang = $componentset->find('Locale', $locale); } elseif (SilvercartConfig::useDefaultLanguageAsFallback()) { if ($componentset->find('Locale', SilvercartConfig::DefaultLanguage())) { $lang = $componentset->find('Locale', SilvercartConfig::DefaultLanguage()); } } return $lang; }
public function getComponents($componentName, $filter = "", $sort = "", $join = "", $limit = null) { $result = null; if (!($componentClass = $this->has_many($componentName))) { user_error("DataObject::getComponents(): Unknown 1-to-many component '{$componentName}'" . " on class '{$this->class}'", E_USER_ERROR); } if ($join) { throw new \InvalidArgumentException('The $join argument has been removed. Use leftJoin($table, $joinClause) instead.'); } // If we haven't been written yet, we can't save these relations, so use a list that handles this case if (!$this->ID) { if (!isset($this->unsavedRelations[$componentName])) { $this->unsavedRelations[$componentName] = UnsavedRelationList::create($this->class, $componentName, $componentClass); } return $this->unsavedRelations[$componentName]; } $joinField = $this->getRemoteJoinField($componentName, 'has_many'); $result = HasManyList::create($componentClass, $joinField); if ($this->model) { $result->setDataModel($this->model); } $result = $result->forForeignID($this->ID); $result = $result->where($filter)->limit($limit)->sort($sort); return $result; }
/** * Returns all the {@link BaseElement} instances in this area, regardless if * they are enabled or not. * * @return HasManyList */ public function AllElements() { $result = $this->getComponents('Widgets'); if ($result instanceof UnsavedRelationList) { // Setup a proper UnsavedRelationList so that a page using this extension can be created // programmatically and have unsaved/saved BaseElement records attached to it. // NOTE(SilbinaryWolf): Able to set protected var 'dataClass' due to ViewableData using magic get/set for properties $result->dataClass = 'BaseElement'; // Change from 'Widget' to 'BaseElement' return $result; } $list = new HasManyList('BaseElement', $result->getForeignKey()); $list->setDataModel($this->model); $list->sort('Sort ASC'); $list = $list->forForeignID($this->ID); return $list; }
public function __construct($parentClassName) { parent::__construct('Comment', 'ParentID'); // Ensure underlying DataQuery globally references the class filter $this->dataQuery->setQueryParam('Foreign.Class', $parentClassName); // For queries with multiple foreign IDs (such as that generated by // DataList::relation) the filter must be generalised to filter by subclasses $classNames = Convert::raw2sql(ClassInfo::subclassesFor($parentClassName)); $this->dataQuery->where(sprintf("\"BaseClass\" IN ('%s')", implode("', '", $classNames))); }
/** * Create a new PolymorphicHasManyList relation list. * * @param string $dataClass The class of the DataObjects that this will list. * @param string $foreignField The name of the composite foreign relation field. Used * to generate the ID and Class foreign keys. * @param string $foreignClass Name of the class filter this relation is filtered against */ function __construct($dataClass, $foreignField, $foreignClass) { // Set both id foreign key (as in HasManyList) and the class foreign key parent::__construct($dataClass, "{$foreignField}ID"); $this->classForeignKey = "{$foreignField}Class"; // Ensure underlying DataQuery globally references the class filter $this->dataQuery->setQueryParam('Foreign.Class', $foreignClass); // For queries with multiple foreign IDs (such as that generated by // DataList::relation) the filter must be generalised to filter by subclasses $classNames = Convert::raw2sql(ClassInfo::subclassesFor($foreignClass)); $this->dataQuery->where(sprintf("\"{$this->classForeignKey}\" IN ('%s')", implode("', '", $classNames))); }
/** * Returns a one-to-many relation as a HasManyList * * @param string $componentName Name of the component * @param string $filter A filter to be inserted into the WHERE clause * @param string|array $sort A sort expression to be inserted into the ORDER BY clause. If omitted, the static field $default_sort on the component class will be used. * @param string $join A single join clause. This can be used for filtering, only 1 instance of each DataObject will be returned. * @param string|array $limit A limit expression to be inserted into the LIMIT clause * * @return HasManyList The components of the one-to-many relationship. */ public function getComponents($componentName, $filter = "", $sort = "", $join = "", $limit = null) { $result = null; if (!($componentClass = $this->has_many($componentName))) { user_error("DataObject::getComponents(): Unknown 1-to-many component '{$componentName}' on class '{$this->class}'", E_USER_ERROR); } $joinField = $this->getRemoteJoinField($componentName, 'has_many'); $result = new HasManyList($componentClass, $joinField); if ($this->model) { $result->setDataModel($this->model); } $result->setForeignID($this->ID); $result = $result->where($filter)->limit($limit)->sort($sort); if ($join) { $result = $result->join($join); } return $result; }
/** * Returns a one-to-many relation as a HasManyList * * @param string $componentName Name of the component * @param string|null $filter Deprecated. A filter to be inserted into the WHERE clause * @param string|null|array $sort Deprecated. A sort expression to be inserted into the ORDER BY clause. If omitted, * the static field $default_sort on the component class will be used. * @param string $join Deprecated, use leftJoin($table, $joinClause) instead * @param string|null|array $limit Deprecated. A limit expression to be inserted into the LIMIT clause * * @return HasManyList The components of the one-to-many relationship. */ public function getComponents($componentName, $filter = null, $sort = null, $join = null, $limit = null) { $result = null; if (!($componentClass = $this->hasManyComponent($componentName))) { user_error("DataObject::getComponents(): Unknown 1-to-many component '{$componentName}'" . " on class '{$this->class}'", E_USER_ERROR); } if ($join) { throw new \InvalidArgumentException('The $join argument has been removed. Use leftJoin($table, $joinClause) instead.'); } if ($filter !== null || $sort !== null || $limit !== null) { Deprecation::notice('4.0', 'The $filter, $sort and $limit parameters for DataObject::getComponents() have been deprecated. Please manipluate the returned list directly.', Deprecation::SCOPE_GLOBAL); } // If we haven't been written yet, we can't save these relations, so use a list that handles this case if (!$this->ID) { if (!isset($this->unsavedRelations[$componentName])) { $this->unsavedRelations[$componentName] = new UnsavedRelationList($this->class, $componentName, $componentClass); } return $this->unsavedRelations[$componentName]; } // Determine type and nature of foreign relation $joinField = $this->getRemoteJoinField($componentName, 'has_many', $polymorphic); if ($polymorphic) { $result = PolymorphicHasManyList::create($componentClass, $joinField, $this->class); } else { $result = HasManyList::create($componentClass, $joinField); } if ($this->model) { $result->setDataModel($this->model); } return $result->forForeignID($this->ID)->where($filter)->limit($limit)->sort($sort); }
/** * Create a DataObject from the given SQL row * * @param array $row * @return DataObject */ protected function createDataObject($row) { $item = parent::createDataObject($row); $item->setWidgetEditor($this->_widgetEditor); return $item; }
/** * Returns a one-to-many relation as a HasManyList * * @param string $componentName Name of the component * @return HasManyList The components of the one-to-many relationship. */ public function getComponents($componentName) { $result = null; $componentClass = $this->hasManyComponent($componentName); if (!$componentClass) { throw new InvalidArgumentException(sprintf("DataObject::getComponents(): Unknown 1-to-many component '%s' on class '%s'", $componentName, $this->class)); } // If we haven't been written yet, we can't save these relations, so use a list that handles this case if (!$this->ID) { if (!isset($this->unsavedRelations[$componentName])) { $this->unsavedRelations[$componentName] = new UnsavedRelationList($this->class, $componentName, $componentClass); } return $this->unsavedRelations[$componentName]; } // Determine type and nature of foreign relation $joinField = $this->getRemoteJoinField($componentName, 'has_many', $polymorphic); /** @var HasManyList $result */ if ($polymorphic) { $result = PolymorphicHasManyList::create($componentClass, $joinField, $this->class); } else { $result = HasManyList::create($componentClass, $joinField); } if ($this->model) { $result->setDataModel($this->model); } return $result->setDataQueryParam($this->getInheritableQueryParams())->forForeignID($this->ID); }
public function __construct($dataClass, $foreignKey) { parent::__construct($dataClass, $foreignKey); }