| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | <?php/** * Elgg Annotations * * Annotations allow you to attach bits of information to entities. They are * essentially the same as metadata, but with additional helper functions for * performing calculations. * * @note Internal: Annotations are stored in the annotations table. * * @package    Elgg.Core * @subpackage DataModel.Annotations */class ElggAnnotation extends \ElggExtender {	/**	 * (non-PHPdoc)	 *	 * @see \ElggData::initializeAttributes()	 *	 * @return void	 */	protected function initializeAttributes() {		parent::initializeAttributes();		$this->attributes['type'] = 'annotation';	}	/**	 * Construct a new annotation object	 *	 * Plugin developers will probably never use the constructor.	 * See \ElggEntity for its API for adding annotations.	 *	 * @param \stdClass $row Database row as \stdClass object	 */	public function __construct($row = null) {		$this->initializeAttributes();		if (!empty($row)) {			// Create from db row			if ($row instanceof \stdClass) {				$annotation = $row;				$objarray = (array) $annotation;				foreach ($objarray as $key => $value) {					$this->attributes[$key] = $value;				}			} else {				// get an \ElggAnnotation object and copy its attributes				elgg_deprecated_notice('Passing an ID to constructor is deprecated. Use elgg_get_annotation_from_id()', 1.9);				$annotation = elgg_get_annotation_from_id($row);				$this->attributes = $annotation->attributes;			}		}	}	/**	 * Save this instance	 *	 * @return int an object id	 *	 * @throws IOException	 */	public function save() {		if ($this->id > 0) {			return update_annotation($this->id, $this->name, $this->value, $this->value_type,				$this->owner_guid, $this->access_id);		} else {			$this->id = create_annotation($this->entity_guid, $this->name, $this->value,				$this->value_type, $this->owner_guid, $this->access_id);			if (!$this->id) {				throw new \IOException("Unable to save new " . get_class());			}			return $this->id;		}	}	/**	 * Delete the annotation.	 *	 * @return bool	 */	public function delete() {		$result = _elgg_delete_metastring_based_object_by_id($this->id, 'annotation');		if ($result) {			elgg_delete_river(array('annotation_id' => $this->id));		}		return $result;	}	/**	 * Disable the annotation.	 *	 * @return bool	 * @since 1.8	 */	public function disable() {		return _elgg_set_metastring_based_object_enabled_by_id($this->id, 'no', 'annotations');	}	/**	 * Enable the annotation.	 *	 * @return bool	 * @since 1.8	 */	public function enable() {		return _elgg_set_metastring_based_object_enabled_by_id($this->id, 'yes', 'annotations');	}	/**	 * Determines whether or not the user can edit this annotation	 *	 * @param int $user_guid The GUID of the user (defaults to currently logged in user)	 *	 * @return bool	 * @see elgg_set_ignore_access()	 */	public function canEdit($user_guid = 0) {		if ($user_guid) {			$user = get_user($user_guid);			if (!$user) {				return false;			}		} else {			$user = _elgg_services()->session->getLoggedInUser();			$user_guid = _elgg_services()->session->getLoggedInUserGuid();		}		$result = false;		if ($user) {			// If the owner of annotation is the specified user, they can edit.			if ($this->getOwnerGUID() == $user_guid) {				$result = true;			}			// If the user can edit the entity this is attached to, they can edit.			$entity = $this->getEntity();			if ($result == false && $entity->canEdit($user->getGUID())) {				$result = true;			}		}		// Trigger plugin hook - note that $user may be null		$params = array('entity' => $entity, 'user' => $user, 'annotation' => $this);		return _elgg_services()->hooks->trigger('permissions_check', 'annotation', $params, $result);	}	// SYSTEM LOG INTERFACE	/**	 * For a given ID, return the object associated with it.	 * This is used by the river functionality primarily.	 * This is useful for checking access permissions etc on objects.	 *	 * @param int $id An annotation ID.	 *	 * @return \ElggAnnotation	 */	public function getObjectFromID($id) {		return elgg_get_annotation_from_id($id);	}}
 |