aboutsummaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/lib/metadata.php196
1 files changed, 194 insertions, 2 deletions
diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php
index 188b9873e..946f7fcba 100644
--- a/engine/lib/metadata.php
+++ b/engine/lib/metadata.php
@@ -11,10 +11,202 @@
* @link http://elgg.org/
*/
+ /**
+ * @class ElggMetadata
+ * @author Marcus Povey <marcus@dushka.co.uk>
+ */
+ class ElggMetadata
+ {
+ /**
+ * This contains the site's main properties (id, etc)
+ * @var array
+ */
+ private $attributes;
+
+ /**
+ * Construct a new site object, optionally from a given id value.
+ *
+ * @param int $id
+ */
+ function __construct($id = null)
+ {
+ if (!empty($id)) {
+ if ($metadata = get_metadata($id)) {
+ $objarray = (array) $metadata;
+ foreach($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ }
+ }
+ }
+
+ function __get($name) {
+ if (isset($attributes[$name])) {
+ return $attributes[$name];
+ }
+ return null;
+ }
+
+ function __set($name, $value) {
+ $this->attributes[$name] = $value;
+ return true;
+ }
+
+ /**
+ * Return the owner of this metadata.
+ *
+ * @return mixed
+ */
+ function getOwner() { return get_user($this->owner_id); }
+
+ function save()
+ {
+ if (isset($this->id))
+ return update_metadata($this->id, $this->name, $this->value, $this->value_type, $this->owner_id, $this->access_id);
+ else
+ {
+ $this->id = create_metadata($this->object_id, $this->object_type, $this->name, $this->value, $this->value_type, $this->owner_id, $this->access_id);
+ return $this->id;
+ }
+
+ }
+
+ /**
+ * Delete a given site.
+ */
+ function delete() { return delete_metadata($this->id); }
+
+ }
+ /**
+ * Create a new metadata.
+ *
+ * @param int $object_id
+ * @param string $object_type
+ * @param string $name
+ * @param string $value
+ * @param string $value_type
+ * @param int $owner_id
+ * @param int $access_id
+ */
+ function create_metadata($object_id, $object_type, $name, $value, $value_type, $owner_id, $access_id = 0)
+ {
+ global $CONFIG;
+
+ $object_id = (int)$object_id;
+ $object_type = sanitise_string(trim($object_type));
+ $name = sanitise_string(trim($name));
+ $value = sanitise_string(trim($value));
+ $value_type = sanitise_string(trim($value_type));
+ $owner_id = (int)$owner_id;
+ $access_id = (int)$access_id;
+
+ return insert_data("INSERT into {$CONFIG->dbprefix}metadata (object_id, object_type, name, value, value_type, owner_id, created, access_id) VALUES ($object_id,'$object_type','$name','$value','$value_type', $owner_id, $access_id)");
+ }
- // metadata object
+ /**
+ * Update an item of metadata.
+ *
+ * @param int $id
+ * @param string $name
+ * @param string $value
+ * @param string $value_type
+ * @param int $owner_id
+ * @param int $access_id
+ */
+ function update_metadata($id, $name, $value, $value_type, $owner_id, $access_id)
+ {
+ global $CONFIG;
+
+ $id = (int)$id;
+ $name = sanitise_string(trim($name));
+ $value = sanitise_string(trim($value));
+ $value_type = sanitise_string(trim($value_type));
+ $owner_id = (int)$owner_id;
+ $access_id = (int)$access_id;
+
+ $access = get_access_list();
+
+ return update_data("UPDATE {$CONFIG->dbprefix}metadata set value='$value', value_type='$value_type', access_id=$access_id where id=$id and name='$name' and (access_id in {$access} or (access_id = 0 and owner_id = {$_SESSION['id']}))");
+ }
+ /**
+ * Get a specific item of metadata.
+ *
+ * @param $id int The item of metadata being retrieved.
+ */
+ function get_metadata($id)
+ {
+ global $CONFIG;
+
+ $id = (int)$id;
+ $access = get_access_list();
+
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}metadata where id=$id and (access_id in {$access} or (access_id = 0 and owner_id = {$_SESSION['id']}))");
+ }
+
+ /**
+ * Get a list of metadatas for a given object/user/metadata type.
+ *
+ * @param int $object_id
+ * @param string $object_type
+ * @param int $owner_id
+ * @param string $order_by
+ * @param int $limit
+ * @param int $offset
+ */
+ function get_metadatas($object_id = 0, $object_type = "", $owner_id = 0, $order_by = "created desc", $limit = 10, $offset = 0)
+ {
+ global $CONFIG;
+
+ $object_id = (int)$object_id;
+ $object_type = sanitise_string(trim($object_type));
+ $name = sanitise_string(trim($name));
+ $value = sanitise_string(trim($value));
+ $owner_id = (int)$owner_id;
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ // Construct query
+ $where = array();
+
+ if ($object_id != 0)
+ $where[] = "object_id=$object_id";
+
+ if ($object_type != "")
+ $where[] = "object_type='$object_type'";
+
+ if ($owner_id != 0)
+ $where[] = "owner_id=$owner_id";
+
+ // add access controls
+ $access = get_access_list();
+ $where[] = "(access_id in {$access} or (access_id = 0 and owner_id = {$_SESSION['id']}))";
+
+ // construct query.
+ $query = "SELECT * from {$CONFIG->dbprefix}metadata where ";
+ for ($n = 0; $n < count($where); $n++)
+ {
+ if ($n > 0) $query .= " and ";
+ $query .= $where[$n];
+ }
+
+ return get_data($query);
+ }
+
+ /**
+ * Delete an item of metadata, where the current user has access.
+ *
+ * @param $id int The item of metadata to delete.
+ */
+ function delete_metadata($id)
+ {
+ global $CONFIG;
- // get / sets
+ $id = (int)$id;
+ $access = get_access_list();
+
+ return delete_data("DELETE from {$CONFIG->dbprefix}metadata where id=$id and (access_id in {$access} or (access_id = 0 and owner_id = {$_SESSION['id']}))");
+
+ }
?> \ No newline at end of file