From f809e76743a6ccab2badf69633bb6132c1358f2e Mon Sep 17 00:00:00 2001 From: ewinslow Date: Wed, 15 Sep 2010 19:31:39 +0000 Subject: Refs #2220: Pulled remaining classes out of lib files. Core classes now autoloaded via __autoload(). git-svn-id: http://code.elgg.org/elgg/trunk@6941 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/classes/APIException.php | 10 + engine/classes/AccessControlQueryComponent.php | 40 + engine/classes/CallException.php | 10 + engine/classes/ClassException.php | 10 + engine/classes/ClassNotFoundException.php | 10 + engine/classes/ConfigurationException.php | 10 + engine/classes/DataFormatException.php | 10 + engine/classes/DatabaseException.php | 10 + engine/classes/DeleteQueryTypeQueryComponent.php | 14 + engine/classes/IOException.php | 10 + engine/classes/InsertQueryTypeQueryComponent.php | 14 + engine/classes/InstallationException.php | 10 + engine/classes/InvalidClassException.php | 10 + engine/classes/InvalidParameterException.php | 10 + engine/classes/JoinQueryComponent.php | 33 + engine/classes/LimitOffsetQueryComponent.php | 26 + engine/classes/NotImplementedException.php | 11 + engine/classes/NotificationException.php | 6 + engine/classes/OrderQueryComponent.php | 23 + engine/classes/PluginException.php | 10 + engine/classes/Query.php | 286 ++++++++ engine/classes/QueryComponent.php | 42 ++ engine/classes/QueryTypeQueryComponent.php | 14 + engine/classes/RegistrationException.php | 10 + engine/classes/SecurityException.php | 10 + engine/classes/SelectFieldQueryComponent.php | 28 + engine/classes/SelectQueryTypeQueryComponent.php | 14 + engine/classes/SetQueryComponent.php | 33 + engine/classes/SimpleQuery.php | 152 ++++ engine/classes/TableQueryComponent.php | 21 + engine/classes/UpdateQueryTypeQueryComponent.php | 14 + engine/classes/WhereQueryComponent.php | 44 ++ engine/classes/WhereSetQueryComponent.php | 41 ++ engine/classes/WhereStaticQueryComponent.php | 40 + engine/lib/access.php | 3 - engine/lib/actions.php | 1 - engine/lib/admin.php | 2 - engine/lib/annotations.php | 4 - engine/lib/api.php | 7 - engine/lib/cache.php | 6 +- engine/lib/calendar.php | 2 - engine/lib/cron.php | 2 - engine/lib/elgglib.php | 6 +- engine/lib/entities.php | 6 - engine/lib/exceptions.php | 150 ---- engine/lib/export.php | 5 - engine/lib/extender.php | 2 - engine/lib/filestore.php | 6 - engine/lib/group.php | 2 - engine/lib/input.php | 1 - engine/lib/install.php | 1 - engine/lib/location.php | 2 - engine/lib/memcache.php | 2 - engine/lib/metadata.php | 4 - engine/lib/notification.php | 7 - engine/lib/objects.php | 3 - engine/lib/opendd.php | 6 - engine/lib/plugins.php | 13 - engine/lib/query.php | 898 +---------------------- engine/lib/relationships.php | 2 - engine/lib/river.php | 1 - engine/lib/sessions.php | 3 - engine/lib/sites.php | 2 - engine/lib/system_log.php | 2 - engine/lib/tags.php | 1 - engine/lib/users.php | 2 - engine/lib/widgets.php | 2 - engine/lib/xml-rpc.php | 20 - engine/lib/xml.php | 2 - 69 files changed, 1051 insertions(+), 1163 deletions(-) create mode 100644 engine/classes/APIException.php create mode 100644 engine/classes/AccessControlQueryComponent.php create mode 100644 engine/classes/CallException.php create mode 100644 engine/classes/ClassException.php create mode 100644 engine/classes/ClassNotFoundException.php create mode 100644 engine/classes/ConfigurationException.php create mode 100644 engine/classes/DataFormatException.php create mode 100644 engine/classes/DatabaseException.php create mode 100644 engine/classes/DeleteQueryTypeQueryComponent.php create mode 100644 engine/classes/IOException.php create mode 100644 engine/classes/InsertQueryTypeQueryComponent.php create mode 100644 engine/classes/InstallationException.php create mode 100644 engine/classes/InvalidClassException.php create mode 100644 engine/classes/InvalidParameterException.php create mode 100644 engine/classes/JoinQueryComponent.php create mode 100644 engine/classes/LimitOffsetQueryComponent.php create mode 100644 engine/classes/NotImplementedException.php create mode 100644 engine/classes/NotificationException.php create mode 100644 engine/classes/OrderQueryComponent.php create mode 100644 engine/classes/PluginException.php create mode 100644 engine/classes/Query.php create mode 100644 engine/classes/QueryComponent.php create mode 100644 engine/classes/QueryTypeQueryComponent.php create mode 100644 engine/classes/RegistrationException.php create mode 100644 engine/classes/SecurityException.php create mode 100644 engine/classes/SelectFieldQueryComponent.php create mode 100644 engine/classes/SelectQueryTypeQueryComponent.php create mode 100644 engine/classes/SetQueryComponent.php create mode 100644 engine/classes/SimpleQuery.php create mode 100644 engine/classes/TableQueryComponent.php create mode 100644 engine/classes/UpdateQueryTypeQueryComponent.php create mode 100644 engine/classes/WhereQueryComponent.php create mode 100644 engine/classes/WhereSetQueryComponent.php create mode 100644 engine/classes/WhereStaticQueryComponent.php diff --git a/engine/classes/APIException.php b/engine/classes/APIException.php new file mode 100644 index 000000000..d6eb9ce52 --- /dev/null +++ b/engine/classes/APIException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class APIException extends Exception {} diff --git a/engine/classes/AccessControlQueryComponent.php b/engine/classes/AccessControlQueryComponent.php new file mode 100644 index 000000000..ad5410ddc --- /dev/null +++ b/engine/classes/AccessControlQueryComponent.php @@ -0,0 +1,40 @@ +acl_table = $CONFIG->dbprefix . sanitise_string($acl_table); + $this->acl_field = sanitise_string($acl_field); + $this->object_owner_table = $CONFIG->dbprefix . sanitise_string($object_owner_table); + $this->object_owner_id_field = sanitise_string($object_owner_id_field); + } + + function __toString() + { + //$access = get_access_list(); + // KJ - changed to use get_access_sql_suffix + // Note: currently get_access_sql_suffix is hardwired to use + // $acl_field = "access_id", $object_owner_table = $acl_table, and + // $object_owner_id_field = "owner_guid" + // @todo recode get_access_sql_suffix to make it possible to specify alternate field names + return "and ".get_access_sql_suffix($this->acl_table); // Add access controls + + //return "and ({$this->acl_table}.{$this->acl_field} in {$access} or ({$this->acl_table}.{$this->acl_field} = 0 and {$this->object_owner_table}.{$this->object_owner_id_field} = {$_SESSION['id']}))"; + } +} diff --git a/engine/classes/CallException.php b/engine/classes/CallException.php new file mode 100644 index 000000000..369ce19bd --- /dev/null +++ b/engine/classes/CallException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class CallException extends Exception {} diff --git a/engine/classes/ClassException.php b/engine/classes/ClassException.php new file mode 100644 index 000000000..6dfb57b0e --- /dev/null +++ b/engine/classes/ClassException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class ClassException extends Exception {} diff --git a/engine/classes/ClassNotFoundException.php b/engine/classes/ClassNotFoundException.php new file mode 100644 index 000000000..f344e6b28 --- /dev/null +++ b/engine/classes/ClassNotFoundException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class ClassNotFoundException extends ClassException {} \ No newline at end of file diff --git a/engine/classes/ConfigurationException.php b/engine/classes/ConfigurationException.php new file mode 100644 index 000000000..a3c7c38cc --- /dev/null +++ b/engine/classes/ConfigurationException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class ConfigurationException extends Exception {} diff --git a/engine/classes/DataFormatException.php b/engine/classes/DataFormatException.php new file mode 100644 index 000000000..2038f1fb7 --- /dev/null +++ b/engine/classes/DataFormatException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class DataFormatException extends Exception {} diff --git a/engine/classes/DatabaseException.php b/engine/classes/DatabaseException.php new file mode 100644 index 000000000..ffc414abf --- /dev/null +++ b/engine/classes/DatabaseException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class DatabaseException extends Exception {} diff --git a/engine/classes/DeleteQueryTypeQueryComponent.php b/engine/classes/DeleteQueryTypeQueryComponent.php new file mode 100644 index 000000000..645e95cb5 --- /dev/null +++ b/engine/classes/DeleteQueryTypeQueryComponent.php @@ -0,0 +1,14 @@ +query_type = "DELETE FROM"; + } +} diff --git a/engine/classes/IOException.php b/engine/classes/IOException.php new file mode 100644 index 000000000..683be32a1 --- /dev/null +++ b/engine/classes/IOException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class IOException extends Exception {} diff --git a/engine/classes/InsertQueryTypeQueryComponent.php b/engine/classes/InsertQueryTypeQueryComponent.php new file mode 100644 index 000000000..20d1a7adf --- /dev/null +++ b/engine/classes/InsertQueryTypeQueryComponent.php @@ -0,0 +1,14 @@ +query_type = "INSERT INTO"; + } +} diff --git a/engine/classes/InstallationException.php b/engine/classes/InstallationException.php new file mode 100644 index 000000000..96bd9beff --- /dev/null +++ b/engine/classes/InstallationException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class InstallationException extends ConfigurationException {} diff --git a/engine/classes/InvalidClassException.php b/engine/classes/InvalidClassException.php new file mode 100644 index 000000000..84d3b3625 --- /dev/null +++ b/engine/classes/InvalidClassException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class InvalidClassException extends ClassException {} diff --git a/engine/classes/InvalidParameterException.php b/engine/classes/InvalidParameterException.php new file mode 100644 index 000000000..a94904da0 --- /dev/null +++ b/engine/classes/InvalidParameterException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class InvalidParameterException extends CallException {} diff --git a/engine/classes/JoinQueryComponent.php b/engine/classes/JoinQueryComponent.php new file mode 100644 index 000000000..8300cf710 --- /dev/null +++ b/engine/classes/JoinQueryComponent.php @@ -0,0 +1,33 @@ +table1 = $CONFIG->dbprefix . sanitise_string($table1); + $this->field1 = sanitise_string($field1); + $this->table2 = $CONFIG->dbprefix . sanitise_string($table2); + $this->field2 = sanitise_string($field2); + $this->operator = sanitise_string($operator); + } + + function __toString() + { + return "join {$this->table2} on {$this->$table}.{$this->$field} {$this->$operator} {$this->$table2}.{$this->$field2}"; + } +} diff --git a/engine/classes/LimitOffsetQueryComponent.php b/engine/classes/LimitOffsetQueryComponent.php new file mode 100644 index 000000000..2cc77dd47 --- /dev/null +++ b/engine/classes/LimitOffsetQueryComponent.php @@ -0,0 +1,26 @@ +limit = (int)$limit; + $this->offset = (int)$offset; + } + + function __toString() + { + return "limit {$this->offset}, {$this->limit}"; + } +} diff --git a/engine/classes/NotImplementedException.php b/engine/classes/NotImplementedException.php new file mode 100644 index 000000000..f95c88c47 --- /dev/null +++ b/engine/classes/NotImplementedException.php @@ -0,0 +1,11 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class NotImplementedException extends CallException {} diff --git a/engine/classes/NotificationException.php b/engine/classes/NotificationException.php new file mode 100644 index 000000000..78ea4c57e --- /dev/null +++ b/engine/classes/NotificationException.php @@ -0,0 +1,6 @@ +table = $CONFIG->dbprefix . sanitise_string($table); + $this->field = sanitise_string($field); + $this->order = sanitise_string($order); + } + + function __toString() + { + return "order by {$this->table}.{$this->field} {$this->order}"; + } +} diff --git a/engine/classes/PluginException.php b/engine/classes/PluginException.php new file mode 100644 index 000000000..4da15791d --- /dev/null +++ b/engine/classes/PluginException.php @@ -0,0 +1,10 @@ + + * // Construct the query + * $query = new Query(); + * + * // Say which table we're interested in + * $query->addTable(new TableQueryComponent("entities")); + * + * // What fields are we interested in + * $query->addSelectField(new SelectFieldQueryComponent("entities","*")); + * + * // Add access control (Default access control uses default fields on entities table. + * // Note that it will error without something specified here! + * $query->setAccessControl(new AccessControlQueryComponent()); + * + * // Set a limit and offset, may be omitted. + * $query->setLimitAndOffset(new LimitOffsetQueryComponent(10,0)); + * + * // Specify the order, may be omitted + * $query->setOrder(new OrderQueryComponent("entities", "subtype", "desc")); + * + * // Construct a where query + * // + * // This demonstrates a WhereSet which lets you have sub wheres, a + * // WhereStatic which lets you compare a table field against a value and a + * // Where which lets you compare a table/field with another table/field. + * $query->addWhere( + * new WhereSetQueryComponent( + * array( + * new WhereStaticQueryComponent("entities", "subtype","=", 1), + * new WhereQueryComponent("entities","subtype","=", "entities", "subtype") + * ) + * ) + * ); + * + * get_data($query); + * + * + * @author Curverider Ltd + */ +class Query +{ + + /// The limit of the query + private $limit_and_offset; + + /// Fields to return on a query + private $fields; + + /// Tables to use in a from query + private $tables; + + /// Join tables + private $joins; + + /// Set values + private $sets; + + /// Where query + private $where; + + /// Order by + private $order; + + /// The query type + private $query_type; + + /// ACL + private $access_control; + + /** + * Construct query & initialise variables + */ + function __construct() + { + $this->fields = array(); + $this->tables = array(); + $this->joins = array(); + $this->where = array(); + $this->sets = array(); + + $this->setQueryType(new SelectQueryTypeQueryComponent()); + } + + /** + * Add limits and offsets to the query. + * + * @param LimitOffsetQueryComponent $component The limit and offset. + */ + public function setLimitAndOffset(LimitOffsetQueryComponent $component) { $this->limit_and_offset = $component; } + + /** + * Reset and set the field to the select statement. + * + * @param SelectFieldQueryComponent $component Table and field component. + */ + public function setSelectField(SelectFieldQueryComponent $component) + { + $this->fields = array(); + return $this->addSelectField($component); + } + + /** + * Add a select field. + * + * @param SelectFieldQueryComponent $component Add a component. + */ + public function addSelectField(SelectFieldQueryComponent $component) { $this->fields[] = $component; } + + /** + * Add a join to the component. + * + * @param JoinQueryComponent $component The join. + */ + public function addJoin(JoinQueryComponent $component) { $this->joins[] = $component; } + + /** + * Set a field value in an update or insert statement. + * + * @param SetQueryComponent $component Fields to set. + */ + public function addSet(SetQueryComponent $component) { $this->sets[] = $component; } + + /** + * Set the query type, i.e. "select", "update", "insert" & "delete". + * + * @param QueryTypeQueryComponent $component The query type. + */ + public function setQueryType(QueryTypeQueryComponent $component) { $this->query_type = $component; } + + /** + * Attach an order component. + * + * @param OrderQueryComponent $component The order component. + */ + public function setOrder(OrderQueryComponent $component) { $this->order = $component; } + + /** + * Add a table to the query. + * + * @param TableQueryComponent $component Table to add. + */ + public function addTable(TableQueryComponent $component) { $this->tables[] = $component; } + + /** + * Add a where clause to the query. + * + * @param WhereQueryComponent $component The where component + */ + public function addWhere(WhereQueryComponent $component) { $this->where[] = $component; } + + /** + * Set access control. + * + * @param AccessControlQueryComponent $component Access control. + */ + public function setAccessControl(AccessControlQueryComponent $component) { $this->access_control = $component; } + + public function __toString() + { + global $CONFIG; + + $sql = ""; + + try + { + // Query prefix & fields + if (!empty($this->query_type)) + { + $sql .= "{$this->query_type} "; + + if (!empty($this->fields)) + { + $fields = ""; + + foreach ($this->fields as $field) + $fields .= "$field"; + + $sql .= " $fields from "; + } + else + throw new DatabaseException(elgg_echo('DatabaseException:SelectFieldsMissing')); + } + else + throw new DatabaseException(elgg_echo('DatabaseException:UnspecifiedQueryType')); + + // Tables + if (!empty($this->tables)) + { + foreach($this->tables as $table) + $sql .= "$table, "; + + $sql = trim($sql, ", "); + } + else + throw new DatabaseException(elgg_echo('DatabaseException:NoTablesSpecified')); + + // Joins on select queries + if ($this->query_type->query_type == 'select') + { + if (!empty($this->joins)) + { + foreach($this->joins as $join) + $sql .= "$join "; + } + } + + // Setting values + if ( + ($this->query_type->query_type == 'update') || + ($this->query_type->query_type == 'insert') + ) + { + $sql .= "set "; + + foreach ($this->sets as $set) + $sql .= "$set, "; + + $sql = trim($sql, ", ") . " "; + } + + // Where + if (!empty($this->where)) + { + $sql .= " where 1 "; + + foreach ($this->where as $where) + $sql .= "$where "; + } + + // Access control + if (!empty($this->access_control)) + { + + // Catch missing Where + if (empty($this->where)) + $sql .= " where 1 "; + + $sql .= "{$this->access_control} "; + } + else + throw new DatabaseException(elgg_echo('DatabaseException:NoACL')); + + // Order by + if (!empty($this->order)) + $sql .= "{$this->order} "; + + // Limits + if (!empty($this->limit_and_offset)) + $sql .= "{$this->limit_and_offset} "; + + + + } catch (Exception $e) { + trigger_error($e, E_USER_WARNING); + } + + + return $sql; + } + +} + diff --git a/engine/classes/QueryComponent.php b/engine/classes/QueryComponent.php new file mode 100644 index 000000000..cfe7683b1 --- /dev/null +++ b/engine/classes/QueryComponent.php @@ -0,0 +1,42 @@ +fields = array(); + } + + /** + * Class member get overloading + * + * @param string $name + * @return mixed + */ + function __get($name) { + return $this->fields[$name]; + } + + /** + * Class member set overloading + * + * @param string $name + * @param mixed $value + * @return void + */ + function __set($name, $value) { + $this->fields[$name] = $value; + + return true; + } +} diff --git a/engine/classes/QueryTypeQueryComponent.php b/engine/classes/QueryTypeQueryComponent.php new file mode 100644 index 000000000..231faa733 --- /dev/null +++ b/engine/classes/QueryTypeQueryComponent.php @@ -0,0 +1,14 @@ +query_type; + } +} diff --git a/engine/classes/RegistrationException.php b/engine/classes/RegistrationException.php new file mode 100644 index 000000000..5efea3904 --- /dev/null +++ b/engine/classes/RegistrationException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class RegistrationException extends InstallationException {} \ No newline at end of file diff --git a/engine/classes/SecurityException.php b/engine/classes/SecurityException.php new file mode 100644 index 000000000..3075f0b8e --- /dev/null +++ b/engine/classes/SecurityException.php @@ -0,0 +1,10 @@ + + * @package Elgg + * @subpackage Exceptions + */ +class SecurityException extends Exception {} diff --git a/engine/classes/SelectFieldQueryComponent.php b/engine/classes/SelectFieldQueryComponent.php new file mode 100644 index 000000000..fbc4a81c1 --- /dev/null +++ b/engine/classes/SelectFieldQueryComponent.php @@ -0,0 +1,28 @@ +table = $CONFIG->dbprefix . sanitise_string($table); + $this->field = sanitise_string($field); + } + + function __toString() + { + return "{$this->table}.{$this->field}"; + } +} diff --git a/engine/classes/SelectQueryTypeQueryComponent.php b/engine/classes/SelectQueryTypeQueryComponent.php new file mode 100644 index 000000000..61e7e5017 --- /dev/null +++ b/engine/classes/SelectQueryTypeQueryComponent.php @@ -0,0 +1,14 @@ +query_type = "SELECT"; + } +} diff --git a/engine/classes/SetQueryComponent.php b/engine/classes/SetQueryComponent.php new file mode 100644 index 000000000..0acd5718c --- /dev/null +++ b/engine/classes/SetQueryComponent.php @@ -0,0 +1,33 @@ +table = $CONFIG->dbprefix . sanitise_string($table); + $this->field = sanitise_string($field); + if (is_numeric($value)) + $this->value = (int)$value; + else + $this->value = "'".sanitise_string($value)."'"; + } + + function __toString() + { + return "{$this->table}.{$this->field}={$this->value}"; + } +} diff --git a/engine/classes/SimpleQuery.php b/engine/classes/SimpleQuery.php new file mode 100644 index 000000000..cf5a18a50 --- /dev/null +++ b/engine/classes/SimpleQuery.php @@ -0,0 +1,152 @@ +simpleQueryType(); + + // Set a default access control + $this->simpleAccessControl(); + + // Set default limit and offset + $this->simpleLimitAndOffset(); + } + + /** + * Set the query type. + * + * @param string $type The type of search - available are "select", "update", "delete", "insert". + */ + public function simpleQueryType($type = "select") + { + $type = strtolower(sanitise_string($type)); + + switch ($type) + { + case "insert" : + return $this->setQueryType(InsertQueryTypeQueryComponent()); + break; + case "delete" : + return $this->setQueryType(DeleteQueryTypeQueryComponent()); + break; + case "update" : + return $this->setQueryType(UpdateQueryTypeQueryComponent()); + break; + default: return $this->setQueryType(SelectQueryTypeQueryComponent()); + } + } + + /** + * Set a field to query in a select statement. + * + * @param string $table Table to query. + * @param string $field Field in that table. + */ + public function simpleSelectField($table, $field) { return $this->setSelectField(new SelectFieldQueryComponent($table, $field)); } + + /** + * Add a select field to query in a select statement. + * + * @param string $table Table to query. + * @param string $field Field in that table. + */ + public function simpleAddSelectField($table, $field) { return $this->addSelectField(new SelectFieldQueryComponent($table, $field)); } + + /** + * Add a set value to an update query. + * + * @param string $table The table to update. + * @param string $field The field in the table. + * @param mixed $value The value to set it to. + */ + public function simpleSet($table, $field, $value) { return $this->addSet(new SetQueryComponent($table, $field, $value)); } + + /** + * Add a join to the table. + * + * @param string $table Table one to join... + * @param string $field Field 1 with... + * @param string $table2 Table 2 ... + * @param string $field2 Field... + * @param string $operator Using this operator + */ + public function simpleJoin($table1, $field1, $table2, $field2, $operator = "=") { return $this->addJoin(new JoinQueryComponent($table1, $field1, $table2, $field2, $operator)); } + + /** + * Add a table to the query. + * + * @param string $table The table. + */ + public function simpleTable($table) { return $this->addTable(new TableQueryComponent($table)); } + + /** + * Compare one table/field to another table/field. + * + * @param string $left_table The table on the left of the operator + * @param string $left_field The left field + * @param string $operator The operator eg "=" or "<" + * @param string $right_table The table on the right of the operator + * @param string $right_field The right field + * @param string $link_operator How this where clause links with the previous clause, eg. "and" "or" + */ + public function simpleWhereOnTable($left_table, $left_field, $operator, $right_table, $right_field, $link_operator = "and") { return $this->addWhere(new WhereQueryComponent($left_table, $left_field, $operator, $right_table, $right_field, $link_operator)); } + + /** + * Compare one table/field to a value. + * + * @param string $left_table The table on the left of the operator + * @param string $left_field The left field + * @param string $operator The operator eg "=" or "<" + * @param string $value The value + * @param string $link_operator How this where clause links with the previous clause, eg. "and" "or" + */ + public function simpleWhereOnValue($left_table, $left_field, $operator, $value, $link_operator = "and") { return $this->addWhere(new WhereStaticQueryComponent($left_table, $left_field, $operator, $value, $link_operator)); } + + /** + * Set access control. + * + * @param string $acl_table The table where the access control field is. + * @param string $acl_field The field containing the access control. + * @param string $object_owner_id_field The field in $object_owner_table containing the owner information. + */ + public function simpleAccessControl($acl_table = "entities", $acl_field = "access_id", $object_owner_id_field = "owner_guid") { return $this->setAccessControl(new AccessControlQueryComponent($acl_table, $acl_field, $acl_table, $object_owner_id_field)); } + + /** + * Set the limit and offset. + * + * @param int $limit The limit. + * @param int $offset The offset. + */ + public function simpleLimitAndOffset($limit = 25, $offset = 0) { return $this->setLimitAndOffset(new LimitOffsetQueryComponent($limit, $offset)); } + + /** + * Set the order query. + * + * @param string $table The table to query + * @param string $field The field to query + * @param string $order Order the query + */ + public function simpleOrder($table, $field, $order = "desc") + { + $table = sanitise_string($table); + $field = sanitise_string($field); + $order = strtolower(sanitise_string($order)); + + return $this->setOrder(new OrderQueryComponent($table, $field, $order)); break; + } +} diff --git a/engine/classes/TableQueryComponent.php b/engine/classes/TableQueryComponent.php new file mode 100644 index 000000000..54e6ab021 --- /dev/null +++ b/engine/classes/TableQueryComponent.php @@ -0,0 +1,21 @@ +table = $CONFIG->dbprefix . sanitise_string($table); + } + + function __toString() + { + return $this->table; + } +} diff --git a/engine/classes/UpdateQueryTypeQueryComponent.php b/engine/classes/UpdateQueryTypeQueryComponent.php new file mode 100644 index 000000000..226b14be7 --- /dev/null +++ b/engine/classes/UpdateQueryTypeQueryComponent.php @@ -0,0 +1,14 @@ +query_type = "UPDATE"; + } +} diff --git a/engine/classes/WhereQueryComponent.php b/engine/classes/WhereQueryComponent.php new file mode 100644 index 000000000..3130be7f8 --- /dev/null +++ b/engine/classes/WhereQueryComponent.php @@ -0,0 +1,44 @@ +link_operator = sanitise_string($link_operator); + $this->left_table = $CONFIG->dbprefix . sanitise_string($left_table); + $this->left_field = sanitise_string($left_field); + $this->operator = sanitise_string($operator); + $this->right_table = $CONFIG->dbprefix . sanitise_string($right_table); + $this->right_field = sanitise_string($right_field); + } + + /** + * Return the SQL without the link operator. + */ + public function toStringNoLink() + { + return "{$this->left_table }.{$this->left_field} {$this->operator} {$this->right_table}.{$this->right_field}"; + } + + function __toString() + { + return "{$this->link_operator} " . $this->toStringNoLink(); + } +} diff --git a/engine/classes/WhereSetQueryComponent.php b/engine/classes/WhereSetQueryComponent.php new file mode 100644 index 000000000..b5fe439a0 --- /dev/null +++ b/engine/classes/WhereSetQueryComponent.php @@ -0,0 +1,41 @@ +link_operator = sanitise_string($link_operator); + $this->wheres = $wheres; + } + + public function toStringNoLink() + { + $cnt = 0; + $string = " ("; + foreach ($this->wheres as $where) { + if (!($where instanceof WhereQueryComponent)) + throw new DatabaseException(elgg_echo('DatabaseException:WhereSetNonQuery')); + + if (!$cnt) + $string.= $where->toStringNoLink(); + else + $string.=" $where "; + + $cnt ++; + } + $string .= ")"; + + return $string; + } +} diff --git a/engine/classes/WhereStaticQueryComponent.php b/engine/classes/WhereStaticQueryComponent.php new file mode 100644 index 000000000..ddc036fd1 --- /dev/null +++ b/engine/classes/WhereStaticQueryComponent.php @@ -0,0 +1,40 @@ +link_operator = sanitise_string($link_operator); + $this->left_table = $CONFIG->dbprefix . sanitise_string($left_table); + $this->left_field = sanitise_string($left_field); + $this->operator = sanitise_string($operator); + if (is_numeric($value)) + $this->value = (int)$value; + else + $this->value = "'".sanitise_string($value)."'"; + } + + /** + * Return the SQL without the link operator. + */ + public function toStringNoLink() + { + return "{$this->left_table }.{$this->left_field} {$this->operator} {$this->value}"; + } +} diff --git a/engine/lib/access.php b/engine/lib/access.php index 4155fc408..80065fa72 100644 --- a/engine/lib/access.php +++ b/engine/lib/access.php @@ -11,9 +11,6 @@ * @link http://elgg.org/ */ -include dirname(dirname(__FILE__)).'/classes/ElggAccess.php'; - - /** * Return a string of access_ids for $user_id appropriate for inserting into an SQL IN clause. * diff --git a/engine/lib/actions.php b/engine/lib/actions.php index c7abd5f18..cdad8ebab 100644 --- a/engine/lib/actions.php +++ b/engine/lib/actions.php @@ -257,5 +257,4 @@ function elgg_action_exist($action) { return (isset($CONFIG->actions[$action]) && file_exists($CONFIG->actions[$action]['file'])); } - register_elgg_event_handler("init","system","actions_init"); diff --git a/engine/lib/admin.php b/engine/lib/admin.php index 8426adf8b..2fb38c230 100644 --- a/engine/lib/admin.php +++ b/engine/lib/admin.php @@ -9,7 +9,6 @@ * @link http://elgg.org/ */ - /** * Register an admin page with the admin panel. * This function extends the view "admin/main" with the provided view. This view should provide a description @@ -292,7 +291,6 @@ function elgg_admin_notice_exists($id) { return ($notice) ? TRUE : FALSE; } - // Register init functions register_elgg_event_handler('init', 'system', 'admin_init'); register_elgg_event_handler('pagesetup', 'system', 'admin_pagesetup'); diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index 3c8bb2aad..806b4c806 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -9,10 +9,6 @@ * @link http://elgg.org/ */ -require_once 'extender.php'; - -require_once dirname(dirname(__FILE__)).'/classes/ElggAnnotation.php'; - /** * Convert a database row to a new ElggAnnotation * diff --git a/engine/lib/api.php b/engine/lib/api.php index 7a6fd54af..d6e4557cb 100644 --- a/engine/lib/api.php +++ b/engine/lib/api.php @@ -9,13 +9,6 @@ * @link http://elgg.org/ */ -// Result classes ///////////////////////////////////////////////////////////////////////// - -require_once dirname(dirname(__FILE__)).'/classes/GenericResult.php'; -require_once dirname(dirname(__FILE__)).'/classes/SuccessResult.php'; -require_once dirname(dirname(__FILE__)).'/classes/ErrorResult.php'; -require_once dirname(dirname(__FILE__)).'/classes/ElggHMACCache.php'; - // Primary Services API Server functions ///////////////////////////////////////////////////////////////////// /** diff --git a/engine/lib/cache.php b/engine/lib/cache.php index 3e8a75d7b..3414be140 100644 --- a/engine/lib/cache.php +++ b/engine/lib/cache.php @@ -7,9 +7,5 @@ * @subpackage API * @author Curverider Ltd * @link http://elgg.org/ + * @todo deprecate this file? */ - -require_once dirname(dirname(__FILE__)).'/classes/ElggCache.php'; -require_once dirname(dirname(__FILE__)).'/classes/ElggSharedMemoryCache.php'; -require_once dirname(dirname(__FILE__)).'/classes/ElggStaticVariableCache.php'; -require_once dirname(dirname(__FILE__)).'/classes/ElggFileCache.php'; diff --git a/engine/lib/calendar.php b/engine/lib/calendar.php index 5e4584515..115defa01 100644 --- a/engine/lib/calendar.php +++ b/engine/lib/calendar.php @@ -8,8 +8,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/Notable.php'; - /** * Return a timestamp for the start of a given day (defaults today). * diff --git a/engine/lib/cron.php b/engine/lib/cron.php index 408a5c51f..7dc2ff3bd 100644 --- a/engine/lib/cron.php +++ b/engine/lib/cron.php @@ -8,8 +8,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/CronException.php'; - /** * Initialisation * diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index ae6509454..7ddb91600 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -1919,8 +1919,6 @@ function is_ip_in_array(array $networks, $ip) { return false; } -require_once dirname(dirname(__FILE__)).'/classes/Friendable.php'; - /** * Builds a URL from the a parts array like one returned by {@link parse_url()}. * @@ -2268,6 +2266,10 @@ function js_page_handler($page) { } } +function __autoload($class) { + require_once dirname(dirname(__FILE__))."/classes/$class.php"; +} + /** * Emits a shutdown:system event upon PHP shutdown, but before database connections are dropped. * diff --git a/engine/lib/entities.php b/engine/lib/entities.php index f2ff5108c..c75923250 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -15,12 +15,6 @@ $ENTITY_CACHE = NULL; /// Cache subtype searches $SUBTYPE_CACHE = NULL; -/// Require the locatable interface -// @todo Move this into start.php? -require_once('location.php'); - -require_once dirname(dirname(__FILE__)).'/classes/ElggEntity.php'; - /** * Initialise the entity cache. */ diff --git a/engine/lib/exceptions.php b/engine/lib/exceptions.php index ccf017062..740ff885b 100644 --- a/engine/lib/exceptions.php +++ b/engine/lib/exceptions.php @@ -9,153 +9,3 @@ * @link http://elgg.org/ */ -// Top level ////////////////////////////////////////////////////////////////////////////// - -/** - * IOException - * An IO Exception, throw when an IO Exception occurs. Subclass for specific IO Exceptions. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class IOException extends Exception {} - -/** - * ClassException - * A class Exception, throw when there is a class error. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class ClassException extends Exception {} - -/** - * ConfigurationException - * There is a configuration error - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class ConfigurationException extends Exception {} - -/** - * SecurityException - * An Security Exception, throw when a Security Exception occurs. Subclass for specific Security Execeptions (access problems etc) - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class SecurityException extends Exception {} - -/** - * ClassNotFoundException - * An database exception, throw when a database exception happens, subclass if more detail is needed. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class DatabaseException extends Exception {} - -/** - * APIException - * The API Exception class, thrown by the API layer when an API call has an issue. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class APIException extends Exception {} - -/** - * CallException - * An exception thrown when there is a problem calling something. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class CallException extends Exception {} - -/** - * Data format exception - * An exception thrown when there is a problem in the format of some data. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class DataFormatException extends Exception {} - -// Class exceptions /////////////////////////////////////////////////////////////////////// - -/** - * InvalidClassException - * An invalid class Exception, throw when a class is invalid. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class InvalidClassException extends ClassException {} - -/** - * ClassNotFoundException - * An Class not found Exception, throw when an class can not be found occurs. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class ClassNotFoundException extends ClassException {} - -// Configuration exceptions /////////////////////////////////////////////////////////////// - -/** - * InstallationException - * Thrown when there is a major problem with the installation. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class InstallationException extends ConfigurationException {} - -// Call exceptions //////////////////////////////////////////////////////////////////////// - -/** - * NotImplementedException - * Thrown when a method or function has not been implemented, primarily used in development... you should - * not see these! - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class NotImplementedException extends CallException {} - -/** - * InvalidParameterException - * A parameter is invalid. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class InvalidParameterException extends CallException {} - -// Installation exception ///////////////////////////////////////////////////////////////// - -/** - * RegistrationException - * Could not register a new user for whatever reason. - * - * @author Curverider Ltd - * @package Elgg - * @subpackage Exceptions - */ -class RegistrationException extends InstallationException {} \ No newline at end of file diff --git a/engine/lib/export.php b/engine/lib/export.php index 9fbd62a4d..5e97fecea 100644 --- a/engine/lib/export.php +++ b/engine/lib/export.php @@ -8,11 +8,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/Exportable.php'; -require_once dirname(dirname(__FILE__)).'/classes/Importable.php'; -require_once dirname(dirname(__FILE__)).'/classes/ExportException.php'; -require_once dirname(dirname(__FILE__)).'/classes/ImportException.php'; - /** * Get a UUID from a given object. * diff --git a/engine/lib/extender.php b/engine/lib/extender.php index e222c2926..b36eefe04 100644 --- a/engine/lib/extender.php +++ b/engine/lib/extender.php @@ -9,8 +9,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/ElggExtender.php'; - /** * Detect the value_type for a given value. * Currently this is very crude. diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php index 74a8b0315..a7f395704 100644 --- a/engine/lib/filestore.php +++ b/engine/lib/filestore.php @@ -10,12 +10,6 @@ * @link http://elgg.org/ */ -include_once("objects.php"); - -require_once dirname(dirname(__FILE__)).'/classes/ElggFilestore.php'; -require_once dirname(dirname(__FILE__)).'/classes/ElggDiskFilestore.php'; -require_once dirname(dirname(__FILE__)).'/classes/ElggFile.php'; - /** * Get the size of the specified directory. * diff --git a/engine/lib/group.php b/engine/lib/group.php index 22badc4b9..d103026bf 100644 --- a/engine/lib/group.php +++ b/engine/lib/group.php @@ -12,8 +12,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/ElggGroup.php'; - /** * Get the group entity. * diff --git a/engine/lib/input.php b/engine/lib/input.php index 7e650c8de..17a330851 100644 --- a/engine/lib/input.php +++ b/engine/lib/input.php @@ -250,7 +250,6 @@ function input_livesearch_page_handler($page) { exit; } - function input_init() { // register an endpoint for live search / autocomplete. register_page_handler('livesearch', 'input_livesearch_page_handler'); diff --git a/engine/lib/install.php b/engine/lib/install.php index 42df3e17f..f1ad74b23 100644 --- a/engine/lib/install.php +++ b/engine/lib/install.php @@ -67,7 +67,6 @@ function db_check_settings($user, $password, $dbname, $host) { return $result; } - /** * Returns whether or not the database has been installed * diff --git a/engine/lib/location.php b/engine/lib/location.php index a424ece25..d0b3d6339 100644 --- a/engine/lib/location.php +++ b/engine/lib/location.php @@ -8,8 +8,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/Locatable.php'; - /** * Encode a location into a latitude and longitude, caching the result. * diff --git a/engine/lib/memcache.php b/engine/lib/memcache.php index de1c001b5..d20e04625 100644 --- a/engine/lib/memcache.php +++ b/engine/lib/memcache.php @@ -10,8 +10,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/ElggMemcache.php'; - /** * Return true if memcache is available and configured. * diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 9ab32912a..b0a2a1e53 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -9,10 +9,6 @@ * @link http://elgg.org/ */ -require_once 'extender.php'; - -require_once dirname(dirname(__FILE__)).'/classes/ElggMetadata.php'; - /** * Convert a database row to a new ElggMetadata * diff --git a/engine/lib/notification.php b/engine/lib/notification.php index 475a590ec..1bf6c3e79 100644 --- a/engine/lib/notification.php +++ b/engine/lib/notification.php @@ -212,13 +212,6 @@ function set_user_notification_setting($user_guid, $method, $value) { return false; } -/** - * Notification exception. - * @author Curverider Ltd - */ -class NotificationException extends Exception {} - - /** * Send a notification via email. * diff --git a/engine/lib/objects.php b/engine/lib/objects.php index 1c7f1640c..21fcf4cf7 100644 --- a/engine/lib/objects.php +++ b/engine/lib/objects.php @@ -1,5 +1,4 @@ fields = array(); - } - - /** - * Class member get overloading - * - * @param string $name - * @return mixed - */ - function __get($name) { - return $this->fields[$name]; - } - - /** - * Class member set overloading - * - * @param string $name - * @param mixed $value - * @return void - */ - function __set($name, $value) { - $this->fields[$name] = $value; - - return true; - } - } - - /** - * @class SelectFieldQueryComponent Class representing a select field. - * This class represents a select field component. - * @author Curverider Ltd - * @see Query - */ - class SelectFieldQueryComponent extends QueryComponent - { - /** - * Construct a select field component - * - * @param string $table The table containing the field. - * @param string $field The field or "*" - */ - function __construct($table, $field) - { - global $CONFIG; - - $this->table = $CONFIG->dbprefix . sanitise_string($table); - $this->field = sanitise_string($field); - } - - function __toString() - { - return "{$this->table}.{$this->field}"; - } - } - - /** - * @class LimitOffsetQueryComponent - * Limit and offset clauses of a query. - * @author Curverider Ltd - * @see Query - */ - class LimitOffsetQueryComponent extends QueryComponent - { - /** - * Specify a limit and an offset. - * - * @param int $limit The limit. - * @param int $offset The offset. - */ - function __construct($limit = 25, $offset = 0) - { - $this->limit = (int)$limit; - $this->offset = (int)$offset; - } - - function __toString() - { - return "limit {$this->offset}, {$this->limit}"; - } - } - - /** - * @class OrderQueryComponent - * Order the query results. - * @author Curverider Ltd - * @see Query - */ - class OrderQueryComponent extends QueryComponent - { - function __construct($table, $field, $order = "asc") - { - global $CONFIG; - - $this->table = $CONFIG->dbprefix . sanitise_string($table); - $this->field = sanitise_string($field); - $this->order = sanitise_string($order); - } - - function __toString() - { - return "order by {$this->table}.{$this->field} {$this->order}"; - } - } - - /** - * @class TableQueryComponent - * List of tables to select from or insert into. - * @author Curverider Ltd - * @see Query - */ - class TableQueryComponent extends QueryComponent - { - function __construct($table) - { - global $CONFIG; - - $this->table = $CONFIG->dbprefix . sanitise_string($table); - } - - function __toString() - { - return $this->table; - } - } - - /** - * @class AccessControlQueryComponent - * Access control component. - * @author Curverider Ltd - * @see Query - */ - class AccessControlQueryComponent extends QueryComponent - { - /** - * Construct the ACL. - * - * @param string $acl_table The table where the access control field is. - * @param string $acl_field The field containing the access control. - * @param string $object_owner_table The table containing the owner information for the stuff you're retrieving. - * @param string $object_owner_id_field The field in $object_owner_table containing the owner information - */ - function __construct($acl_table = "entities", $acl_field = "access_id", $object_owner_table = "entities", $object_owner_id_field = "owner_guid") - { - global $CONFIG; - - $this->acl_table = $CONFIG->dbprefix . sanitise_string($acl_table); - $this->acl_field = sanitise_string($acl_field); - $this->object_owner_table = $CONFIG->dbprefix . sanitise_string($object_owner_table); - $this->object_owner_id_field = sanitise_string($object_owner_id_field); - } - - function __toString() - { - //$access = get_access_list(); - // KJ - changed to use get_access_sql_suffix - // Note: currently get_access_sql_suffix is hardwired to use - // $acl_field = "access_id", $object_owner_table = $acl_table, and - // $object_owner_id_field = "owner_guid" - // @todo recode get_access_sql_suffix to make it possible to specify alternate field names - return "and ".get_access_sql_suffix($this->acl_table); // Add access controls - - //return "and ({$this->acl_table}.{$this->acl_field} in {$access} or ({$this->acl_table}.{$this->acl_field} = 0 and {$this->object_owner_table}.{$this->object_owner_id_field} = {$_SESSION['id']}))"; - } - } - - /** - * @class JoinQueryComponent Join query. - * Represents a join query. - * @author Curverider Ltd - * @see Query - */ - class JoinQueryComponent extends QueryComponent - { - /** - * Construct a join query. - * @param string $table Table one to join... - * @param string $field Field 1 with... - * @param string $table2 Table 2 ... - * @param string $field2 Field... - * @param string $operator Using this operator - */ - function __construct($table1, $field1, $table2, $field2, $operator = "=") - { - global $CONFIG; - - $this->table1 = $CONFIG->dbprefix . sanitise_string($table1); - $this->field1 = sanitise_string($field1); - $this->table2 = $CONFIG->dbprefix . sanitise_string($table2); - $this->field2 = sanitise_string($field2); - $this->operator = sanitise_string($operator); - } - - function __toString() - { - return "join {$this->table2} on {$this->$table}.{$this->$field} {$this->$operator} {$this->$table2}.{$this->$field2}"; - } - } - - /** - * @class SetQueryComponent Set query. - * Represents an update set query. - * @author Curverider Ltd - * @see Query - */ - class SetQueryComponent extends QueryComponent - { - /** - * Construct a setting query - * - * @param string $table The table to modify - * @param string $field The field to modify - * @param mixed $value The value to set it to - */ - function __construct($table, $field, $value) - { - global $CONFIG; - - $this->table = $CONFIG->dbprefix . sanitise_string($table); - $this->field = sanitise_string($field); - if (is_numeric($value)) - $this->value = (int)$value; - else - $this->value = "'".sanitise_string($value)."'"; - } - - function __toString() - { - return "{$this->table}.{$this->field}={$this->value}"; - } - } - - /** - * @class WhereQueryComponent - * A component of a where query. - * @author Curverider Ltd - * @see Query - */ - class WhereQueryComponent extends QueryComponent - { - /** - * A where query. - * - * @param string $left_table The table on the left of the operator - * @param string $left_field The left field - * @param string $operator The operator eg "=" or "<" - * @param string $right_table The table on the right of the operator - * @param string $right_field The right field - * @param string $link_operator How this where clause links with the previous clause, eg. "and" "or" - */ - function __construct($left_table, $left_field, $operator, $right_table, $right_field, $link_operator = "and") - { - global $CONFIG; - - $this->link_operator = sanitise_string($link_operator); - $this->left_table = $CONFIG->dbprefix . sanitise_string($left_table); - $this->left_field = sanitise_string($left_field); - $this->operator = sanitise_string($operator); - $this->right_table = $CONFIG->dbprefix . sanitise_string($right_table); - $this->right_field = sanitise_string($right_field); - } - - /** - * Return the SQL without the link operator. - */ - public function toStringNoLink() - { - return "{$this->left_table }.{$this->left_field} {$this->operator} {$this->right_table}.{$this->right_field}"; - } - - function __toString() - { - return "{$this->link_operator} " . $this->toStringNoLink(); - } - } - - /** - * @class WhereStaticQueryComponent - * A component of a where query where there is no right hand table, rather a static value. - * @author Curverider Ltd - * @see Query - */ - class WhereStaticQueryComponent extends WhereQueryComponent - { - /** - * A where query. - * - * @param string $left_table The table on the left of the operator - * @param string $left_field The left field - * @param string $operator The operator eg "=" or "<" - * @param string $value The value - * @param string $link_operator How this where clause links with the previous clause, eg. "and" "or" - */ - function __construct($left_table, $left_field, $operator, $value, $link_operator = "and") - { - global $CONFIG; - - $this->link_operator = sanitise_string($link_operator); - $this->left_table = $CONFIG->dbprefix . sanitise_string($left_table); - $this->left_field = sanitise_string($left_field); - $this->operator = sanitise_string($operator); - if (is_numeric($value)) - $this->value = (int)$value; - else - $this->value = "'".sanitise_string($value)."'"; - } - - /** - * Return the SQL without the link operator. - */ - public function toStringNoLink() - { - return "{$this->left_table }.{$this->left_field} {$this->operator} {$this->value}"; - } - } - - /** - * @class WhereSetQueryComponent - * A where query that may contain other where queries (in brackets). - * @author Curverider Ltd - * @see Query - */ - class WhereSetQueryComponent extends WhereQueryComponent - { - /** - * Construct a subset of wheres. - * - * @param array $wheres An array of WhereQueryComponent - * @param string $link_operator How this where clause links with the previous clause, eg. "and" "or" - */ - function __construct(array $wheres, $link_operator = "and") - { - $this->link_operator = sanitise_string($link_operator); - $this->wheres = $wheres; - } - - public function toStringNoLink() - { - $cnt = 0; - $string = " ("; - foreach ($this->wheres as $where) { - if (!($where instanceof WhereQueryComponent)) - throw new DatabaseException(elgg_echo('DatabaseException:WhereSetNonQuery')); - - if (!$cnt) - $string.= $where->toStringNoLink(); - else - $string.=" $where "; - - $cnt ++; - } - $string .= ")"; - - return $string; - } - } - - /** - * @class QueryTypeQueryComponent - * What type of query is this? - * @author Curverider Ltd - * @see Query - */ - abstract class QueryTypeQueryComponent extends QueryComponent - { - function __toString() - { - return $this->query_type; - } - } - - /** - * @class SelectQueryTypeQueryComponent - * A select query. - * @author Curverider Ltd - * @see Query - */ - class SelectQueryTypeQueryComponent extends QueryTypeQueryComponent - { - function __construct() - { - $this->query_type = "SELECT"; - } - } - - /** - * @class InsertQueryTypeQueryComponent - * An insert query. - * @author Curverider Ltd - * @see Query - */ - class InsertQueryTypeQueryComponent extends QueryTypeQueryComponent - { - function __construct() - { - $this->query_type = "INSERT INTO"; - } - } - - /** - * @class DeleteQueryTypeQueryComponent - * A delete query. - * @author Curverider Ltd - * @see Query - */ - class DeleteQueryTypeQueryComponent extends QueryTypeQueryComponent - { - function __construct() - { - $this->query_type = "DELETE FROM"; - } - } - - /** - * @class UpdateQueryTypeQueryComponent - * An update query. - * @author Curverider Ltd - * @see Query - */ - class UpdateQueryTypeQueryComponent extends QueryTypeQueryComponent - { - function __construct() - { - $this->query_type = "UPDATE"; - } - } - - /** - * @class Query Provides a framework to construct complex queries in a safer environment. - * - * The usage of this class depends on the type of query you are executing, but the basic idea is to - * construct a query out of pluggable classes. - * - * Once constructed SQL can be generated using the toString method, this should happen automatically - * if you pass the Query object to get_data or similar. - * - * To construct a query, create a new Query() object and begin populating it with the various classes - * that define the various aspects of the query. - * - * Notes: - * - You do not have to specify things in any particular order, provided you specify all required - * components. - * - With database tables you do not have to specify your db prefix, this will be added automatically. - * - When constructing your query keep an eye on the error log - any problems will get spit out here. - * Note also that __toString won't let you throw Exceptions (!!!) so these are caught and echoed to - * the log instead. - * - * Here is an example of a select query which requests some data out of the entities table with an - * order and limit that uses a subset where and some normal where queries: - * - *
- * // Construct the query - * $query = new Query(); - * - * // Say which table we're interested in - * $query->addTable(new TableQueryComponent("entities")); - * - * // What fields are we interested in - * $query->addSelectField(new SelectFieldQueryComponent("entities","*")); - * - * // Add access control (Default access control uses default fields on entities table. - * // Note that it will error without something specified here! - * $query->setAccessControl(new AccessControlQueryComponent()); - * - * // Set a limit and offset, may be omitted. - * $query->setLimitAndOffset(new LimitOffsetQueryComponent(10,0)); - * - * // Specify the order, may be omitted - * $query->setOrder(new OrderQueryComponent("entities", "subtype", "desc")); - * - * // Construct a where query - * // - * // This demonstrates a WhereSet which lets you have sub wheres, a - * // WhereStatic which lets you compare a table field against a value and a - * // Where which lets you compare a table/field with another table/field. - * $query->addWhere( - * new WhereSetQueryComponent( - * array( - * new WhereStaticQueryComponent("entities", "subtype","=", 1), - * new WhereQueryComponent("entities","subtype","=", "entities", "subtype") - * ) - * ) - * ); - * - * get_data($query); - *
- * - * @author Curverider Ltd - */ - class Query - { - - /// The limit of the query - private $limit_and_offset; - - /// Fields to return on a query - private $fields; - - /// Tables to use in a from query - private $tables; - - /// Join tables - private $joins; - - /// Set values - private $sets; - - /// Where query - private $where; - - /// Order by - private $order; - - /// The query type - private $query_type; - - /// ACL - private $access_control; - - /** - * Construct query & initialise variables - */ - function __construct() - { - $this->fields = array(); - $this->tables = array(); - $this->joins = array(); - $this->where = array(); - $this->sets = array(); - - $this->setQueryType(new SelectQueryTypeQueryComponent()); - } - - /** - * Add limits and offsets to the query. - * - * @param LimitOffsetQueryComponent $component The limit and offset. - */ - public function setLimitAndOffset(LimitOffsetQueryComponent $component) { $this->limit_and_offset = $component; } - - /** - * Reset and set the field to the select statement. - * - * @param SelectFieldQueryComponent $component Table and field component. - */ - public function setSelectField(SelectFieldQueryComponent $component) - { - $this->fields = array(); - return $this->addSelectField($component); - } - - /** - * Add a select field. - * - * @param SelectFieldQueryComponent $component Add a component. - */ - public function addSelectField(SelectFieldQueryComponent $component) { $this->fields[] = $component; } - - /** - * Add a join to the component. - * - * @param JoinQueryComponent $component The join. - */ - public function addJoin(JoinQueryComponent $component) { $this->joins[] = $component; } - - /** - * Set a field value in an update or insert statement. - * - * @param SetQueryComponent $component Fields to set. - */ - public function addSet(SetQueryComponent $component) { $this->sets[] = $component; } - - /** - * Set the query type, i.e. "select", "update", "insert" & "delete". - * - * @param QueryTypeQueryComponent $component The query type. - */ - public function setQueryType(QueryTypeQueryComponent $component) { $this->query_type = $component; } - - /** - * Attach an order component. - * - * @param OrderQueryComponent $component The order component. - */ - public function setOrder(OrderQueryComponent $component) { $this->order = $component; } - - /** - * Add a table to the query. - * - * @param TableQueryComponent $component Table to add. - */ - public function addTable(TableQueryComponent $component) { $this->tables[] = $component; } - - /** - * Add a where clause to the query. - * - * @param WhereQueryComponent $component The where component - */ - public function addWhere(WhereQueryComponent $component) { $this->where[] = $component; } - - /** - * Set access control. - * - * @param AccessControlQueryComponent $component Access control. - */ - public function setAccessControl(AccessControlQueryComponent $component) { $this->access_control = $component; } - - public function __toString() - { - global $CONFIG; - - $sql = ""; - - try - { - // Query prefix & fields - if (!empty($this->query_type)) - { - $sql .= "{$this->query_type} "; - - if (!empty($this->fields)) - { - $fields = ""; - - foreach ($this->fields as $field) - $fields .= "$field"; - - $sql .= " $fields from "; - } - else - throw new DatabaseException(elgg_echo('DatabaseException:SelectFieldsMissing')); - } - else - throw new DatabaseException(elgg_echo('DatabaseException:UnspecifiedQueryType')); - - // Tables - if (!empty($this->tables)) - { - foreach($this->tables as $table) - $sql .= "$table, "; - - $sql = trim($sql, ", "); - } - else - throw new DatabaseException(elgg_echo('DatabaseException:NoTablesSpecified')); - - // Joins on select queries - if ($this->query_type->query_type == 'select') - { - if (!empty($this->joins)) - { - foreach($this->joins as $join) - $sql .= "$join "; - } - } - - // Setting values - if ( - ($this->query_type->query_type == 'update') || - ($this->query_type->query_type == 'insert') - ) - { - $sql .= "set "; - - foreach ($this->sets as $set) - $sql .= "$set, "; - - $sql = trim($sql, ", ") . " "; - } - - // Where - if (!empty($this->where)) - { - $sql .= " where 1 "; - - foreach ($this->where as $where) - $sql .= "$where "; - } - - // Access control - if (!empty($this->access_control)) - { - - // Catch missing Where - if (empty($this->where)) - $sql .= " where 1 "; - - $sql .= "{$this->access_control} "; - } - else - throw new DatabaseException(elgg_echo('DatabaseException:NoACL')); - - // Order by - if (!empty($this->order)) - $sql .= "{$this->order} "; - - // Limits - if (!empty($this->limit_and_offset)) - $sql .= "{$this->limit_and_offset} "; - - - - } catch (Exception $e) { - trigger_error($e, E_USER_WARNING); - } - - - return $sql; - } - - } - - /** - * @class SimpleQuery A wrapper for Query which provides simple interface for common functions. - * - * This class provides simple interface functions for constructing a (reasonably) standard database - * query. - * - * The constructor for this class sets a number of defaults, for example sets default access controls - * and a limit and offset - to change this then set it manually. - * - * @author Curverider Ltd - * @see Query - */ - class SimpleQuery extends Query - { - function __construct() - { - parent::__construct(); - - // Set a default query type (select) - $this->simpleQueryType(); - - // Set a default access control - $this->simpleAccessControl(); - - // Set default limit and offset - $this->simpleLimitAndOffset(); - } - - /** - * Set the query type. - * - * @param string $type The type of search - available are "select", "update", "delete", "insert". - */ - public function simpleQueryType($type = "select") - { - $type = strtolower(sanitise_string($type)); - - switch ($type) - { - case "insert" : - return $this->setQueryType(InsertQueryTypeQueryComponent()); - break; - case "delete" : - return $this->setQueryType(DeleteQueryTypeQueryComponent()); - break; - case "update" : - return $this->setQueryType(UpdateQueryTypeQueryComponent()); - break; - default: return $this->setQueryType(SelectQueryTypeQueryComponent()); - } - } - - /** - * Set a field to query in a select statement. - * - * @param string $table Table to query. - * @param string $field Field in that table. - */ - public function simpleSelectField($table, $field) { return $this->setSelectField(new SelectFieldQueryComponent($table, $field)); } - - /** - * Add a select field to query in a select statement. - * - * @param string $table Table to query. - * @param string $field Field in that table. - */ - public function simpleAddSelectField($table, $field) { return $this->addSelectField(new SelectFieldQueryComponent($table, $field)); } - - /** - * Add a set value to an update query. - * - * @param string $table The table to update. - * @param string $field The field in the table. - * @param mixed $value The value to set it to. - */ - public function simpleSet($table, $field, $value) { return $this->addSet(new SetQueryComponent($table, $field, $value)); } - - /** - * Add a join to the table. - * - * @param string $table Table one to join... - * @param string $field Field 1 with... - * @param string $table2 Table 2 ... - * @param string $field2 Field... - * @param string $operator Using this operator - */ - public function simpleJoin($table1, $field1, $table2, $field2, $operator = "=") { return $this->addJoin(new JoinQueryComponent($table1, $field1, $table2, $field2, $operator)); } - - /** - * Add a table to the query. - * - * @param string $table The table. - */ - public function simpleTable($table) { return $this->addTable(new TableQueryComponent($table)); } - - /** - * Compare one table/field to another table/field. - * - * @param string $left_table The table on the left of the operator - * @param string $left_field The left field - * @param string $operator The operator eg "=" or "<" - * @param string $right_table The table on the right of the operator - * @param string $right_field The right field - * @param string $link_operator How this where clause links with the previous clause, eg. "and" "or" - */ - public function simpleWhereOnTable($left_table, $left_field, $operator, $right_table, $right_field, $link_operator = "and") { return $this->addWhere(new WhereQueryComponent($left_table, $left_field, $operator, $right_table, $right_field, $link_operator)); } - - /** - * Compare one table/field to a value. - * - * @param string $left_table The table on the left of the operator - * @param string $left_field The left field - * @param string $operator The operator eg "=" or "<" - * @param string $value The value - * @param string $link_operator How this where clause links with the previous clause, eg. "and" "or" - */ - public function simpleWhereOnValue($left_table, $left_field, $operator, $value, $link_operator = "and") { return $this->addWhere(new WhereStaticQueryComponent($left_table, $left_field, $operator, $value, $link_operator)); } - - /** - * Set access control. - * - * @param string $acl_table The table where the access control field is. - * @param string $acl_field The field containing the access control. - * @param string $object_owner_id_field The field in $object_owner_table containing the owner information. - */ - public function simpleAccessControl($acl_table = "entities", $acl_field = "access_id", $object_owner_id_field = "owner_guid") { return $this->setAccessControl(new AccessControlQueryComponent($acl_table, $acl_field, $acl_table, $object_owner_id_field)); } - - /** - * Set the limit and offset. - * - * @param int $limit The limit. - * @param int $offset The offset. - */ - public function simpleLimitAndOffset($limit = 25, $offset = 0) { return $this->setLimitAndOffset(new LimitOffsetQueryComponent($limit, $offset)); } - - /** - * Set the order query. - * - * @param string $table The table to query - * @param string $field The field to query - * @param string $order Order the query - */ - public function simpleOrder($table, $field, $order = "desc") - { - $table = sanitise_string($table); - $field = sanitise_string($field); - $order = strtolower(sanitise_string($order)); - - return $this->setOrder(new OrderQueryComponent($table, $field, $order)); break; - } - } +/** + * Elgg database query + * Contains a wrapper for performing database queries in a structured way. + * + * @package Elgg + * @subpackage Core + * @author Curverider Ltd + * @link http://elgg.org/ + * @todo deprecate this file? + */ \ No newline at end of file diff --git a/engine/lib/relationships.php b/engine/lib/relationships.php index 81d18d1ca..7096ba882 100644 --- a/engine/lib/relationships.php +++ b/engine/lib/relationships.php @@ -9,8 +9,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/ElggRelationship.php'; - /** * Convert a database row to a new ElggRelationship * diff --git a/engine/lib/river.php b/engine/lib/river.php index 09799aa59..15ad69c4b 100644 --- a/engine/lib/river.php +++ b/engine/lib/river.php @@ -135,7 +135,6 @@ function remove_from_river_by_id($id) { return delete_data("delete from {$CONFIG->dbprefix}river where id = {$id}"); } - /** * Sets the access ID on river items for a particular object * diff --git a/engine/lib/sessions.php b/engine/lib/sessions.php index f2a534294..3af571f5c 100644 --- a/engine/lib/sessions.php +++ b/engine/lib/sessions.php @@ -13,9 +13,6 @@ /** Elgg magic session */ global $SESSION; -require_once dirname(dirname(__FILE__)).'/classes/ElggSession.php'; - - /** * Return the current logged in user, or NULL if no user is logged in. * diff --git a/engine/lib/sites.php b/engine/lib/sites.php index ee556e86c..98f29952a 100644 --- a/engine/lib/sites.php +++ b/engine/lib/sites.php @@ -9,8 +9,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/ElggSite.php'; - /** * Return the site specific details of a site by a row. * diff --git a/engine/lib/system_log.php b/engine/lib/system_log.php index 9a94fb94e..257f6e064 100644 --- a/engine/lib/system_log.php +++ b/engine/lib/system_log.php @@ -9,8 +9,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/Loggable.php'; - /** * Retrieve the system log based on a number of parameters. * diff --git a/engine/lib/tags.php b/engine/lib/tags.php index e73444930..bb3b0e687 100644 --- a/engine/lib/tags.php +++ b/engine/lib/tags.php @@ -9,7 +9,6 @@ * @link http://elgg.org/ */ - /** * The algorithm working out the size of font based on the number of tags. * This is quick and dirty. diff --git a/engine/lib/users.php b/engine/lib/users.php index 03d0d06c4..281833625 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -15,8 +15,6 @@ $USERNAME_TO_GUID_MAP_CACHE = array(); /// Map a user code to a cached GUID $CODE_TO_GUID_MAP_CACHE = array(); -require_once dirname(dirname(__FILE__)).'/classes/ElggUser.php'; - /** * Return the user specific details of a user by a row. * diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php index 210aa198f..d8c0984b8 100644 --- a/engine/lib/widgets.php +++ b/engine/lib/widgets.php @@ -8,8 +8,6 @@ * @link http://elgg.org/ */ -require_once dirname(dirname(__FILE__)).'/classes/ElggWidget.php'; - /** * Register a particular context for use with widgets. * diff --git a/engine/lib/xml-rpc.php b/engine/lib/xml-rpc.php index 79c3eba07..1c7f4ba38 100644 --- a/engine/lib/xml-rpc.php +++ b/engine/lib/xml-rpc.php @@ -9,26 +9,6 @@ * @link http://elgg.org/ */ - // XMLRPC Call //////////////////////////////////////////////////////////////////////////// - - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCCall.php'; - - - // Response classes /////////////////////////////////////////////////////////////////////// - - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCIntParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCBoolParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCStringParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCDoubleParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCDateParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCBase64Parameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCStructParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCArrayParameter.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCResponse.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCSuccessResponse.php'; - require_once dirname(dirname(__FILE__)).'/classes/XMLRPCErrorResponse.php'; - // Helper functions /////////////////////////////////////////////////////////////////////// /** diff --git a/engine/lib/xml.php b/engine/lib/xml.php index f9c5985c9..f186dd4bf 100644 --- a/engine/lib/xml.php +++ b/engine/lib/xml.php @@ -9,8 +9,6 @@ * @link http://elgg.org/ */ - require_once dirname(dirname(__FILE__)).'/classes/XmlElement.php'; - /** * This function serialises an object recursively into an XML representation. * The function attempts to call $data->export() which expects a stdClass in return, otherwise it will attempt to -- cgit v1.2.3