File: platform/plugins/Streams/classes/Streams/RelatedTo.php
- <?php
- /**
- * @module Streams
- */
- /**
- * Class representing 'RelatedTo' rows in the 'Streams' database
- * You can create an object of this class either to
- * access its non-static methods, or to actually
- * represent a related_to row in the Streams database.
- *
- * @class Streams_RelatedTo
- * @extends Base_Streams_RelatedTo
- */
- class Streams_RelatedTo extends Base_Streams_RelatedTo
- {
- /**
- * The setUp() method is called the first time
- * an object of this class is constructed.
- * @method setUp
- */
- function setUp()
- {
- parent::setUp();
- }
-
- /**
- * @method getAllExtras
- * @return {array} The array of all extras set in the stream
- */
- function getAllExtras()
- {
- return empty($this->extra)
- ? array()
- : json_decode($this->extra, true);
- }
-
- /**
- * @method getExtra
- * @param {string} $extraName The name of the extra to get
- * @param {mixed} $default The value to return if the extra is missing
- * @return {mixed} The value of the extra, or the default value, or null
- */
- function getExtra($extraName, $default = null)
- {
- $attr = $this->getAllExtras();
- return isset($attr[$extraName]) ? $attr[$extraName] : $default;
- }
-
- /**
- * @method setExtra
- * @param {string} $extraName The name of the extra to set,
- * or an array of $extraName => $extraValue pairs
- * @param {mixed} $value The value to set the extra to
- * @return Streams_RelatedTo
- */
- function setExtra($extraName, $value = null)
- {
- $attr = $this->getAllExtras();
- if (is_array($extraName)) {
- foreach ($extraName as $k => $v) {
- $attr[$k] = $v;
- }
- } else {
- $attr[$extraName] = $value;
- }
- $this->extra = Q::json_encode($attr);
-
- return $this;
- }
-
- /**
- * @method clearExtra
- * @param {string} $extraName The name of the extra to remove
- */
- function clearExtra($extraName)
- {
- $attr = $this->getAllExtras();
- unset($attr[$extraName]);
- $this->extra = Q::json_encode($attr);
- }
-
- /**
- * @method clearAllExtras
- */
- function clearAllExtras()
- {
- $this->extra = '{}';
- }
-
- /**
- * Fetch all the relations given multiple category streams,
- * and sort them by ascending weight.
- * @method fetchAll
- * @static
- * @param {string} $publisherId The publisher of the category streams
- * @param {array} $streamNames Array of criteria to put for stream names,
- * which can include strings, arrays, Db_Range or Db_Expression objects.
- * @param {string|array} $relationType The type of the relation.
- * Can also be an array of criteria corresponding to the $streamNames array.
- * @param {array} [$options=array()] Options to apss to the Streams::related function.
- * Can also include the following:
- * @param {string} [$options.asUserId] Override the default user id to fetch streams as.
- * Not used for now, since this function always fetches the relations only.
- * @return {array} An array of Streams_RelatedTo objects sorted by ascending weight.
- */
- static function fetchAll($publisherId, $streamNames, $relationType, $options = array())
- {
- $result = array();
- foreach ($streamNames as $i => $streamName) {
- $type = is_string($relationType)
- ? $relationType
- : $relationType[$i];
- $options['relationsOnly'] = true;
- $options['type'] = $type;
- $relations = Streams::related(
- Q::ifset($options, 'asUserId', null),
- $publisherId,
- $streamName,
- true,
- $options
- );
- $result = array_merge($result, $relations);
- }
- uasort($result, array('Streams_RelatedTo', '_compareByWeight'));
- return $result;
- }
-
- static function _compareByWeight($a, $b)
- {
- return ($a->weight !== $b->weight)
- ? ($a->weight > $b->weight ? 1 : -1)
- : 0;
- }
-
- /**
- * Implements the __set_state method, so it can work with
- * with var_export and be re-imported successfully.
- * @method __set_state
- * @param {array} $array
- * @return {Streams_RelatedTo} Class instance
- */
- static function __set_state(array $array) {
- $result = new Streams_RelatedTo();
- foreach($array as $k => $v)
- $result->$k = $v;
- return $result;
- }
- };
-