diff options
Diffstat (limited to 'engine/lib')
56 files changed, 5181 insertions, 2959 deletions
diff --git a/engine/lib/access.php b/engine/lib/access.php index e34f7c021..5b67afbd1 100644 --- a/engine/lib/access.php +++ b/engine/lib/access.php @@ -15,12 +15,16 @@ * Return a string of access_ids for $user_id appropriate for inserting into an SQL IN clause. * * @uses get_access_array - * @param int $user_id User ID; defaults to currently logged in user - * @param int $site_id Site ID; defaults to current site - * @param boolean $flush If set to true, will refresh the access list from the database + * * @return string A list of access collections suitable for injection in an SQL call * @link http://docs.elgg.org/Access * @see get_access_array() + * + * @param int $user_id User ID; defaults to currently logged in user + * @param int $site_id Site ID; defaults to current site + * @param bool $flush If set to true, will refresh the access list from the database + * + * @return string */ function get_access_list($user_id = 0, $site_id = 0, $flush = false) { global $CONFIG, $init_finished, $SESSION; @@ -54,9 +58,10 @@ function get_access_list($user_id = 0, $site_id = 0, $flush = false) { * * Can be overridden with the access:collections:read, user plugin hook. * - * @param int $user_id User ID; defaults to currently logged in user - * @param int $site_id Site ID; defaults to current site - * @param boolean $flush If set to true, will refresh the access list from the database + * @param int $user_id User ID; defaults to currently logged in user + * @param int $site_id Site ID; defaults to current site + * @param boolean $flush If set to true, will refresh the access list from the database + * * @return array An array of access collections ids * @see get_access_list() */ @@ -90,12 +95,13 @@ function get_access_array($user_id = 0, $site_id = 0, $flush = false) { $tmp_access_array[] = ACCESS_LOGGED_IN; // Get ACL memberships - $query = "SELECT am.access_collection_id FROM {$CONFIG->dbprefix}access_collection_membership am "; - $query .= " LEFT JOIN {$CONFIG->dbprefix}access_collections ag ON ag.id = am.access_collection_id "; - $query .= " WHERE am.user_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)"; + $query = "SELECT am.access_collection_id" + . " FROM {$CONFIG->dbprefix}access_collection_membership am" + . " LEFT JOIN {$CONFIG->dbprefix}access_collections ag ON ag.id = am.access_collection_id" + . " WHERE am.user_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)"; if ($collections = get_data($query)) { - foreach($collections as $collection) { + foreach ($collections as $collection) { if (!empty($collection->access_collection_id)) { $tmp_access_array[] = $collection->access_collection_id; } @@ -103,11 +109,11 @@ function get_access_array($user_id = 0, $site_id = 0, $flush = false) { } // Get ACLs owned. - $query = "SELECT ag.id FROM {$CONFIG->dbprefix}access_collections ag "; - $query .= " WHERE ag.owner_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)"; + $query = "SELECT ag.id FROM {$CONFIG->dbprefix}access_collections ag "; + $query .= "WHERE ag.owner_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)"; if ($collections = get_data($query)) { - foreach($collections as $collection) { + foreach ($collections as $collection) { if (!empty($collection->id)) { $tmp_access_array[] = $collection->id; } @@ -130,7 +136,8 @@ function get_access_array($user_id = 0, $site_id = 0, $flush = false) { $tmp_access_array = $access_array[$user_id]; } - return trigger_plugin_hook('access:collections:read', 'user', array('user_id' => $user_id, 'site_id' => $site_id), $tmp_access_array); + $options = array('user_id' => $user_id, 'site_id' => $site_id); + return trigger_plugin_hook('access:collections:read', 'user', $options, $tmp_access_array); } /** @@ -138,6 +145,8 @@ function get_access_array($user_id = 0, $site_id = 0, $flush = false) { * * This returns the default access level for the site or optionally for the user. * + * @param ElggUser $user Get the user's default access. Defaults to logged in user. + * * @return int default access id (see ACCESS defines in elgglib.php) * @link http://docs.elgg.org/Access */ @@ -172,7 +181,10 @@ $ENTITY_SHOW_HIDDEN_OVERRIDE = false; * Show or hide disabled entities. * * @access private + * * @param bool $show_hidden Show disabled entities. + * + * @return void */ function access_show_hidden_entities($show_hidden) { global $ENTITY_SHOW_HIDDEN_OVERRIDE; @@ -198,10 +210,11 @@ function access_get_show_hidden_status() { * * @todo This is fairly generic so perhaps it could be moved to annotations.php * - * @param string $annotation_name name of the annotation - * @param string $entity_guid SQL string that evaluates to the GUID of the entity the annotation should be attached to - * @param string $owner_guid SQL string that evaluates to the GUID of the owner of the annotation - * @param boolean $exists If set to true, will return true if the annotation exists, otherwise returns false + * @param string $annotation_name Name of the annotation + * @param string $entity_guid SQL GUID of entity the annotation is attached to. + * @param string $owner_guid SQL string that evaluates to the GUID of the annotation owner + * @param boolean $exists If true, returns BOOL if the annotation exists + * * @return string An SQL fragment suitable for inserting into a WHERE clause * @todo Document and maybe even remove. At least rename to something that makes sense. */ @@ -234,7 +247,8 @@ END; * this will return blank. * * @param string $table_prefix Optional table. prefix for the access code. - * @param int $owner + * @param int $owner The guid to check access for. Defaults to logged in user. + * * @return string The SQL for a where clause * @access private */ @@ -269,7 +283,7 @@ function get_access_sql_suffix($table_prefix = '', $owner = null) { WHERE relationship='friend' AND guid_two=$owner )"; - $friends_bit = '('.$friends_bit.') OR '; + $friends_bit = '(' . $friends_bit . ') OR '; if ((isset($CONFIG->user_block_and_filter_enabled)) && ($CONFIG->user_block_and_filter_enabled)) { // check to see if the user is in the entity owner's block list @@ -297,9 +311,11 @@ function get_access_sql_suffix($table_prefix = '', $owner = null) { $sql = "$enemies_bit AND ($sql)"; } - if (!$ENTITY_SHOW_HIDDEN_OVERRIDE) + if (!$ENTITY_SHOW_HIDDEN_OVERRIDE) { $sql .= " and {$table_prefix}enabled='yes'"; - return '('.$sql.')'; + } + + return '(' . $sql . ')'; } /** @@ -312,7 +328,9 @@ function get_access_sql_suffix($table_prefix = '', $owner = null) { * to an entity that is currently loaded. * * @param ElggEntity $entity The entity to check access for. - * @param ElggUser $user Optionally the user to check access for. Defaults to the logged in user (which doesn't make sense). + * @param ElggUser $user Optionally user to check access for. Defaults to + * logged in user (which doesn't make sense). + * * @return boolean True if the user can access the entity * @link http://docs.elgg.org/Access */ @@ -339,9 +357,10 @@ function has_access_to_entity($entity, $user = null) { * Returns an array of access permissions that the user is allowed to save objects with. * Permissions are of the form ('id' => 'Description') * - * @param int $user_id The user's GUID. - * @param int $site_id The current site. - * @param true|false $flush If this is set to true, this will ignore any cached version + * @param int $user_id The user's GUID. + * @param int $site_id The current site. + * @param bool $flush If this is set to true, this will ignore any cached version + * * @return array List of access permissions * @link http://docs.elgg.org/Access */ @@ -367,12 +386,14 @@ function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) { $query .= " AND (ag.owner_guid = {$user_id})"; $query .= " AND ag.id >= 3"; - $tmp_access_array = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"), + $tmp_access_array = array( + ACCESS_PRIVATE => elgg_echo("PRIVATE"), ACCESS_FRIENDS => elgg_echo("access:friends:label"), ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"), - ACCESS_PUBLIC => elgg_echo("PUBLIC")); + ACCESS_PUBLIC => elgg_echo("PUBLIC") + ); if ($collections = get_data($query)) { - foreach($collections as $collection) { + foreach ($collections as $collection) { $tmp_access_array[$collection->id] = $collection->name; } } @@ -382,7 +403,9 @@ function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) { $tmp_access_array = $access_array[$user_id]; } - $tmp_access_array = trigger_plugin_hook('access:collections:write', 'user', array('user_id' => $user_id, 'site_id' => $site_id), $tmp_access_array); + $options = array('user_id' => $user_id, 'site_id' => $site_id); + $tmp_access_array = trigger_plugin_hook('access:collections:write', 'user', + $options, $tmp_access_array); return $tmp_access_array; } @@ -396,9 +419,10 @@ function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) { * @internal Access collections are stored in the access_collections table. * Memberships to collections are in access_collections_membership. * - * @param string $name The name of the collection. - * @param int $owner_guid The GUID of the owner (default: currently logged in user). - * @param int $site_guid The GUID of the site (default: current site). + * @param string $name The name of the collection. + * @param int $owner_guid The GUID of the owner (default: currently logged in user). + * @param int $site_guid The GUID of the site (default: current site). + * * @return int|false Depending on success (the collection ID if successful). * @link http://docs.elgg.org/Access/Collections * @see update_access_collection() @@ -448,8 +472,9 @@ function create_access_collection($name, $owner_guid = 0, $site_guid = 0) { * @note This will run all hooks associated with adding or removing * members to access collections. * - * @param int $collection_id The ID of the collection. - * @param array $members Array of member GUIDs + * @param int $collection_id The ID of the collection. + * @param array $members Array of member GUIDs + * * @return true|false Depending on success * @link http://docs.elgg.org/Access/Collections * @see add_user_to_access_collection() @@ -495,6 +520,7 @@ function update_access_collection($collection_id, $members) { * Deletes a specified access collection and its membership. * * @param int $collection_id The collection ID + * * @return bool * @link http://docs.elgg.org/Access/Collections * @see create_access_collection() @@ -511,8 +537,12 @@ function delete_access_collection($collection_id) { if (array_key_exists($collection_id, $collections)) { global $CONFIG; - delete_data("delete from {$CONFIG->dbprefix}access_collection_membership where access_collection_id = {$collection_id}"); - delete_data("delete from {$CONFIG->dbprefix}access_collections where id = {$collection_id}"); + $query = "delete from {$CONFIG->dbprefix}access_collection_membership" + . " where access_collection_id = {$collection_id}"; + delete_data($query); + + $query = "delete from {$CONFIG->dbprefix}access_collections where id = {$collection_id}"; + delete_data($query); return true; } else { return false; @@ -527,13 +557,15 @@ function delete_access_collection($collection_id) { * just the database row of the actual collection. * * @param int $collection_id The collection ID + * * @return array|false */ function get_access_collection($collection_id) { global $CONFIG; $collection_id = (int) $collection_id; - $get_collection = get_data_row("SELECT * FROM {$CONFIG->dbprefix}access_collections WHERE id = {$collection_id}"); + $query = "SELECT * FROM {$CONFIG->dbprefix}access_collections WHERE id = {$collection_id}"; + $get_collection = get_data_row($query); return $get_collection; } @@ -543,8 +575,9 @@ function get_access_collection($collection_id) { * * Emits the access:collections:add_user, collection plugin hook. * - * @param int $user_guid The GUID of the user to add + * @param int $user_guid The GUID of the user to add * @param int $collection_id The ID of the collection to add them to + * * @return true|false Depending on success * @link http://docs.elgg.org/Access/Collections * @see update_access_collection() @@ -555,8 +588,9 @@ function add_user_to_access_collection($user_guid, $collection_id) { $user_guid = (int) $user_guid; $collections = get_write_access_array(); - if (!($collection = get_access_collection($collection_id))) + if (!($collection = get_access_collection($collection_id))) { return false; + } if ((array_key_exists($collection_id, $collections) || $collection->owner_guid == 0) && $user = get_user($user_guid)) { @@ -572,7 +606,9 @@ function add_user_to_access_collection($user_guid, $collection_id) { } try { - insert_data("insert into {$CONFIG->dbprefix}access_collection_membership set access_collection_id = {$collection_id}, user_guid = {$user_guid}"); + $query = "insert into {$CONFIG->dbprefix}access_collection_membership" + . " set access_collection_id = {$collection_id}, user_guid = {$user_guid}"; + insert_data($queyr); } catch (DatabaseException $e) { // nothing. } @@ -588,19 +624,22 @@ function add_user_to_access_collection($user_guid, $collection_id) { * * Emits the access:collections:remove_user, collection plugin hook. * - * @param int $user_guid The user GUID + * @param int $user_guid The user GUID * @param int $collection_id The access collection ID + * * @return true|false Depending on success */ function remove_user_from_access_collection($user_guid, $collection_id) { $collection_id = (int) $collection_id; $user_guid = (int) $user_guid; $collections = get_write_access_array(); + $user = $user = get_user($user_guid); - if (!($collection = get_access_collection($collection_id))) + if (!($collection = get_access_collection($collection_id))) { return false; + } - if ((array_key_exists($collection_id, $collections) || $collection->owner_guid == 0) && $user = get_user($user_guid)) { + if ((array_key_exists($collection_id, $collections) || $collection->owner_guid == 0) && $user) { global $CONFIG; $params = array( 'collection_id' => $collection_id, @@ -611,7 +650,9 @@ function remove_user_from_access_collection($user_guid, $collection_id) { return false; } - delete_data("delete from {$CONFIG->dbprefix}access_collection_membership where access_collection_id = {$collection_id} and user_guid = {$user_guid}"); + delete_data("delete from {$CONFIG->dbprefix}access_collection_membership " + . "where access_collection_id = {$collection_id} and user_guid = {$user_guid}"); + return true; } @@ -623,7 +664,8 @@ function remove_user_from_access_collection($user_guid, $collection_id) { * Returns an array of database row objects of the access collections owned by $owner_guid. * * @param int $owner_guid The entity guid - * @param int $site_guid The GUID of the site (default: current site). + * @param int $site_guid The GUID of the site (default: current site). + * * @return array|false * @see add_access_collection() * @see get_members_of_access_collection() @@ -650,8 +692,9 @@ function get_user_access_collections($owner_guid, $site_guid = 0) { /** * Get all of members of an access collection * - * @param int $collection The collection's ID - * @param true|false $idonly If set to true, will only return the members' GUIDs (default: false) + * @param int $collection The collection's ID + * @param bool $idonly If set to true, will only return the members' GUIDs (default: false) + * * @return array ElggUser guids or entities if successful, false if not * @see add_user_to_access_collection() * @see http://docs.elgg.org/Access/Collections @@ -661,15 +704,19 @@ function get_members_of_access_collection($collection, $idonly = FALSE) { $collection = (int)$collection; if (!$idonly) { - $query = "SELECT e.* FROM {$CONFIG->dbprefix}access_collection_membership m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid WHERE m.access_collection_id = {$collection}"; + $query = "SELECT e.* FROM {$CONFIG->dbprefix}access_collection_membership m" + . " JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid" + . " WHERE m.access_collection_id = {$collection}"; $collection_members = get_data($query, "entity_row_to_elggstar"); } else { - $query = "SELECT e.guid FROM {$CONFIG->dbprefix}access_collection_membership m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid WHERE m.access_collection_id = {$collection}"; + $query = "SELECT e.guid FROM {$CONFIG->dbprefix}access_collection_membership m" + . " JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid" + . " WHERE m.access_collection_id = {$collection}"; $collection_members = get_data($query); if (!$collection_members) { return FALSE; } - foreach($collection_members as $key => $val) { + foreach ($collection_members as $key => $val) { $collection_members[$key] = $val->guid; } } @@ -681,12 +728,13 @@ function get_members_of_access_collection($collection, $idonly = FALSE) { * Displays a user's access collections, using the friends/collections view * * @param int $owner_guid The GUID of the owning user + * * @return string A formatted rendition of the collections * @todo Move to the friends/collection.php page. */ function elgg_view_access_collections($owner_guid) { if ($collections = get_user_access_collections($owner_guid)) { - foreach($collections as $key => $collection) { + foreach ($collections as $key => $collection) { $collections[$key]->members = get_members_of_access_collection($collection->id, true); $collections[$key]->entities = get_user_friends($owner_guid, "", 9999); } @@ -700,20 +748,22 @@ function elgg_view_access_collections($owner_guid) { * * @deprecated 1.7. Use elgg_get_entities_from_access_id() * - * @param $collection_id - * @param $entity_type - * @param $entity_subtype - * @param $owner_guid - * @param $limit - * @param $offset - * @param $order_by - * @param $site_guid - * @param $count - * @return unknown_type + * @param int $collection_id ID of collection + * @param string $entity_type Type of entities + * @param string $entity_subtype Subtype of entities + * @param int $owner_guid Guid of owner + * @param int $limit Limit of number of entities to return + * @param int $offset Skip this many entities + * @param string $order_by Column to order by + * @param int $site_guid The site guid + * @param bool $count Return a count or entities + * + * @return array */ -function get_entities_from_access_id($collection_id, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) { +function get_entities_from_access_id($collection_id, $entity_type = "", $entity_subtype = "", + $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) { // log deprecated warning - elgg_deprecated_notice('get_entities_from_access_id() was deprecated by elgg_get_entities()!', 1.7); + elgg_deprecated_notice('get_entities_from_access_id() was deprecated by elgg_get_entities()', 1.7); if (!$collection_id) { return FALSE; @@ -763,11 +813,12 @@ function get_entities_from_access_id($collection_id, $entity_type = "", $entity_ * * @param array $options Any options accepted by {@link elgg_get_entities()} and: * access_id => int The access ID of the entity. + * * @see elgg_get_entities() * @return array * @since 1.7.0 */ -function elgg_get_entities_from_access_id(array $options=array()) { +function elgg_get_entities_from_access_id(array $options = array()) { // restrict the resultset to access collection provided if (!isset($options['access_id'])) { return FALSE; @@ -792,24 +843,29 @@ function elgg_get_entities_from_access_id(array $options=array()) { /** * Lists entities from an access collection * - * @param $collection_id - * @param $entity_type - * @param $entity_subtype - * @param $owner_guid - * @param $limit - * @param $fullview - * @param $viewtypetoggle - * @param $pagination + * @param int $collection_id ID of collection + * @param string $entity_type Type of entities + * @param string $entity_subtype Subtype of entities + * @param int $owner_guid Guid of owner + * @param int $limit Limit of number of entities to return + * @param bool $fullview Show a full view + * @param bool $viewtypetoggle Allow to toggle between views + * @param bool $pagination Show pagination + * * @return str * @todo deprecate with elgg_list_entities_from_access_id() function */ -function list_entities_from_access_id($collection_id, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) { +function list_entities_from_access_id($collection_id, $entity_type = "", $entity_subtype = "", + $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) { $offset = (int) get_input('offset'); $limit = (int) $limit; - $count = get_entities_from_access_id($collection_id, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", 0, true); - $entities = get_entities_from_access_id($collection_id, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", 0, false); + $count = get_entities_from_access_id($collection_id, $entity_type, $entity_subtype, + $owner_guid, $limit, $offset, "", 0, true); + $entities = get_entities_from_access_id($collection_id, $entity_type, $entity_subtype, + $owner_guid, $limit, $offset, "", 0, false); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, + $fullview, $viewtypetoggle, $pagination); } /** @@ -818,21 +874,22 @@ function list_entities_from_access_id($collection_id, $entity_type = "", $entity * * @warning This function probably doesn't work how it's meant to. * - * @param $entity_accessid (int) The entity's access id + * @param int $entity_accessid The entity's access id + * * @return string e.g. Public, Private etc * @since 1.7.0 * @todo I think this probably wants get_access_array() instead of get_write_access_array(), * but those two functions return different types of arrays. */ -function get_readable_access_level($entity_accessid){ +function get_readable_access_level($entity_accessid) { $access = (int) $entity_accessid; //get the access level for object in readable string $options = get_write_access_array(); //@todo Really? Use array_key_exists() - foreach($options as $key => $option) { - if($key == $access){ + foreach ($options as $key => $option) { + if ($key == $access) { $entity_acl = htmlentities($option, ENT_QUOTES, 'UTF-8'); return $entity_acl; break; @@ -855,6 +912,8 @@ function get_readable_access_level($entity_accessid){ * @warning This will not show disabled entities. Use {@link $ENTITY_SHOW_HIDDEN_OVERRIDE} * for that. * + * @param bool $ignore If true, disables all access checks. + * * @return bool Previous ignore_access setting. * @since 1.7.0 * @see http://docs.elgg.org/Access/IgnoreAccess @@ -862,7 +921,7 @@ function get_readable_access_level($entity_accessid){ */ function elgg_set_ignore_access($ignore = true) { $elgg_access = elgg_get_access_object(); - return $elgg_access->set_ignore_access($ignore); + return $elgg_access->setIgnoreAccess($ignore); } /** @@ -874,7 +933,7 @@ function elgg_set_ignore_access($ignore = true) { * @see elgg_set_ignore_access() */ function elgg_get_ignore_access() { - return elgg_get_access_object()->get_ignore_access(); + return elgg_get_access_object()->getIgnoreAccess(); } /** @@ -883,6 +942,8 @@ function elgg_get_ignore_access() { * The access system can be ignored if 1) an admin user is logged in * or 2) {@link elgg_set_ignore_access()} was called with true. * + * @param mixed $user_guid The user to check against. Defaults to logged in. + * * @return bool * @since 1.7.0 */ @@ -929,6 +990,8 @@ $init_finished = false; * * @elgg_event_handler init system * @todo Invesigate + * + * @return void */ function access_init() { global $init_finished; @@ -945,7 +1008,7 @@ function access_init() { * @since 1.7.0 * @elgg_event_handler permissions_check all */ -function elgg_override_permissions_hook($hook, $type, $returnval, $params) { +function elgg_override_permissions_hook() { $user_guid = get_loggedin_userid(); // check for admin diff --git a/engine/lib/actions.php b/engine/lib/actions.php index 18475de27..63ddfcbfb 100644 --- a/engine/lib/actions.php +++ b/engine/lib/actions.php @@ -47,10 +47,13 @@ * @warning All actions require {@link http://docs.elgg.org/Actions/Tokens Action Tokens}. * @warning Most plugin shouldn't call this manually. * -* @param string $action The requested action +* @param string $action The requested action * @param string $forwarder Optionally, the location to forward to +* * @link http://docs.elgg.org/Actions * @see register_action() +* +* @return void */ function action($action, $forwarder = "") { global $CONFIG; @@ -142,12 +145,15 @@ function action($action, $forwarder = "") { * ) * </code> * - * @param string $action The name of the action (eg "register", "account/settings/save") - * @param boolean $public Can this action be accessed by people not logged into the system? - * @param string $filename Optionally, the filename where this action is located + * @param string $action The name of the action (eg "register", "account/settings/save") + * @param boolean $public Can this action be accessed by people not logged into the system? + * @param string $filename Optionally, the filename where this action is located * @param boolean $admin_only Whether this action is only available to admin users. + * * @see action() * @see http://docs.elgg.org/Actions + * + * @return true */ function register_action($action, $public = false, $filename = "", $admin_only = false) { global $CONFIG; @@ -169,7 +175,11 @@ function register_action($action, $public = false, $filename = "", $admin_only = $filename = $path . "actions/" . $action . ".php"; } - $CONFIG->actions[$action] = array('file' => $filename, 'public' => $public, 'admin' => $admin_only); + $CONFIG->actions[$action] = array( + 'file' => $filename, + 'public' => $public, + 'admin' => $admin_only + ); return true; } @@ -183,9 +193,11 @@ function register_action($action, $public = false, $filename = "", $admin_only = * Plugin authors should never have to manually validate action tokens. * * @access private - * @param bool $visibleerrors Emit {@link register_error()} errors on failure? - * @param mixed $token The token to test against. Pulls from $_REQUEST['__elgg_token'] if NULL. - * @param mixed $ts The time stamp to test against. Pulls from $_REQUEST['__elgg_ts'] if NULL. + * + * @param bool $visibleerrors Emit {@link register_error()} errors on failure? + * @param mixed $token The token to test against. Default: $_REQUEST['__elgg_token'] + * @param mixed $ts The time stamp to test against. Default: $_REQUEST['__elgg_ts'] + * * @return bool * @see generate_action_token() * @link http://docs.elgg.org/Actions/Tokens @@ -207,11 +219,11 @@ function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL) // Validate token if ($token == $generated_token) { - $hour = 60*60; + $hour = 60 * 60; $now = time(); // Validate time to ensure its not crazy - if (($ts>$now-$hour) && ($ts<$now+$hour)) { + if (($ts > $now - $hour) && ($ts < $now + $hour)) { // We have already got this far, so unless anything // else says something to the contry we assume we're ok $returnval = true; @@ -232,8 +244,7 @@ function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL) } else if ($visibleerrors) { register_error(elgg_echo('actiongatekeeper:tokeninvalid')); } - } - else if ($visibleerrors) { + } else if ($visibleerrors) { register_error(elgg_echo('actiongatekeeper:missingfields')); } @@ -272,9 +283,12 @@ function action_gatekeeper() { * @warning Action tokens are required for all actions. * * @param int $timestamp Unix timestamp + * * @see @elgg_view input/securitytoken * @see @elgg_view input/form * @example actions/manual_tokens.php + * + * @return string|false */ function generate_action_token($timestamp) { $site_secret = get_site_secret(); @@ -299,7 +313,7 @@ function generate_action_token($timestamp) { * @todo Move to better file. */ function init_site_secret() { - $secret = md5(rand().microtime()); + $secret = md5(rand() . microtime()); if (datalist_set('__site_secret__', $secret)) { return $secret; } @@ -328,7 +342,8 @@ function get_site_secret() { /** * Check if an action is registered and its file exists. * - * @param string $action + * @param string $action Action name + * * @return BOOL * @since 1.8 */ diff --git a/engine/lib/admin.php b/engine/lib/admin.php index defeaa6e3..0f5a4f400 100644 --- a/engine/lib/admin.php +++ b/engine/lib/admin.php @@ -9,8 +9,8 @@ /** * 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 - * and either a control or a link to. + * This function extends the view "admin/main" with the provided view. + * This view should provide a description and either a control or a link to. * * Usage: * - To add a control to the main admin panel then extend admin/main @@ -22,12 +22,13 @@ * At the moment this is essentially a wrapper around elgg_extend_view(). * * @param string $new_admin_view The view associated with the control you're adding - * @param string $view The view to extend, by default this is 'admin/main'. - * @param int $priority Optional priority to govern the appearance in the list. + * @param string $view The view to extend, by default this is 'admin/main'. + * @param int $priority Optional priority to govern the appearance in the list. + * + * @return void */ function extend_elgg_admin_page($new_admin_view, $view = 'admin/main', $priority = 500) { - elgg_deprecated_notice('extend_elgg_admin_page() does nothing now. Extend admin views manually. See http://docs.elgg.org/', 1.8); - //return elgg_extend_view($view, $new_admin_view, $priority); + elgg_deprecated_notice('extend_elgg_admin_page() does nothing. Extend admin views manually.', 1.8); } /** @@ -35,6 +36,7 @@ function extend_elgg_admin_page($new_admin_view, $view = 'admin/main', $priority * This is done in a separate function called from the admin * page handler because of performance concerns. * + * @return void */ function elgg_admin_add_plugin_settings_sidemenu() { global $CONFIG; @@ -75,9 +77,11 @@ function elgg_admin_add_plugin_settings_sidemenu() { * Used in conjuction with http://elgg.org/admin/section_id/child_section style * page handler. * - * @param string $section_id + * @param string $section_id The Unique ID of section * @param string $section_title Human readable section title. - * @param string $parent_id If a child section, the parent section id. + * @param string $parent_id If a child section, the parent section id. + * + * @return bool */ function elgg_add_admin_submenu_item($section_id, $section_title, $parent_id = NULL) { global $CONFIG; @@ -104,6 +108,8 @@ function elgg_add_admin_submenu_item($section_id, $section_title, $parent_id = N /** * Initialise the admin page. + * + * @return void */ function admin_init() { register_action('admin/user/ban', FALSE, "", TRUE); @@ -153,7 +159,9 @@ function admin_init() { /** * Handle admin pages. Expects corresponding views as admin/section/subsection * - * @param $page + * @param array $page Array of pages + * + * @return void */ function admin_settings_page_handler($page) { global $CONFIG; @@ -169,14 +177,16 @@ function admin_settings_page_handler($page) { // was going to fix this in the page_handler() function but // it's commented to explicitly return a string if there's a trailing / - if (empty($page[count($page)-1])) { + if (empty($page[count($page) - 1])) { array_pop($page); } $vars = array('page' => $page); // special page for plugin settings since we create the form for them - if ($page[0] == 'plugin_settings' && isset($page[1]) && elgg_view_exists("settings/{$page[1]}/edit")) { + if ($page[0] == 'plugin_settings' && isset($page[1]) + && elgg_view_exists("settings/{$page[1]}/edit")) { + $view = '/admin/components/plugin_settings'; $vars['plugin'] = $page[1]; $vars['entity'] = find_plugin_settings($page[1]); @@ -192,8 +202,6 @@ function admin_settings_page_handler($page) { $content = elgg_echo('admin:unknown_section'); } - //$body = elgg_view('admin/components/admin_page_layout', array('content' => $content, 'page' => $page)); - $notices_html = ''; if ($notices = elgg_get_admin_notices()) { foreach ($notices as $notice) { @@ -217,8 +225,10 @@ function admin_settings_page_handler($page) { * 'Before your users can use Twitter services on this site, you must set up * the Twitter API key in the <a href="link">Twitter Services Settings</a>'); * - * @param string $id A unique ID that your plugin can remember + * @param string $id A unique ID that your plugin can remember * @param string $message Body of the message + * + * @return boo */ function elgg_add_admin_notice($id, $message) { if ($id && $message) { @@ -245,13 +255,20 @@ function elgg_add_admin_notice($id, $message) { * } * * @param string $id The unique ID assigned in add_admin_notice() + * + * @return bool */ function elgg_delete_admin_notice($id) { if (!$id) { return FALSE; } $result = TRUE; - if ($notices = elgg_get_entities_from_metadata(array('metadata_name' => 'admin_notice_id', 'metadata_value' => $id))) { + $notices = elgg_get_entities_from_metadata(array( + 'metadata_name' => 'admin_notice_id', + 'metadata_value' => $id + )); + + if ($notices) { // in case a bad plugin adds many, let it remove them all at once. foreach ($notices as $notice) { $result = ($result && $notice->delete()); @@ -265,6 +282,8 @@ function elgg_delete_admin_notice($id) { * List all admin messages. * * @param int $limit Limit + * + * @return array List of admin notices */ function elgg_get_admin_notices($limit = 10) { return elgg_get_entities_from_metadata(array( @@ -276,7 +295,10 @@ function elgg_get_admin_notices($limit = 10) { /** * Check if an admin notice is currently active. + * * @param string $id The unique ID used to register the notice. + * + * @return bool */ function elgg_admin_notice_exists($id) { $notice = elgg_get_entities_from_metadata(array( diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index 3a8054b8c..48421b2d6 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -10,7 +10,8 @@ /** * Convert a database row to a new ElggAnnotation * - * @param stdClass $row + * @param stdClass $row Db row result object + * * @return ElggAnnotation */ function row_to_elggannotation($row) { @@ -24,7 +25,8 @@ function row_to_elggannotation($row) { /** * Get a specific annotation. * - * @param int $annotation_id + * @param int $annotation_id Annotation ID + * * @return ElggAnnotation */ function get_annotation($annotation_id) { @@ -33,21 +35,29 @@ function get_annotation($annotation_id) { $annotation_id = (int) $annotation_id; $access = get_access_sql_suffix("a"); - return row_to_elggannotation(get_data_row("SELECT a.*, n.string as name, v.string as value from {$CONFIG->dbprefix}annotations a JOIN {$CONFIG->dbprefix}metastrings n on a.name_id = n.id JOIN {$CONFIG->dbprefix}metastrings v on a.value_id = v.id where a.id=$annotation_id and $access")); + $query = "SELECT a.*, n.string as name, v.string as value" + . " from {$CONFIG->dbprefix}annotations a" + . " JOIN {$CONFIG->dbprefix}metastrings n on a.name_id = n.id" + . " JOIN {$CONFIG->dbprefix}metastrings v on a.value_id = v.id" + . " where a.id=$annotation_id and $access"; + + return row_to_elggannotation(get_data_row($query)); } /** * Create a new annotation. * - * @param int $entity_guid - * @param string $name - * @param string $value - * @param string $value_type - * @param int $owner_guid - * @param int $access_id + * @param int $entity_guid Entity Guid + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid Owner of annotation + * @param int $access_id Access level of annotation + * * @return int|bool id on success or false on failure */ -function create_annotation($entity_guid, $name, $value, $value_type, $owner_guid, $access_id = ACCESS_PRIVATE) { +function create_annotation($entity_guid, $name, $value, $value_type, +$owner_guid, $access_id = ACCESS_PRIVATE) { global $CONFIG; $result = false; @@ -58,7 +68,7 @@ function create_annotation($entity_guid, $name, $value, $value_type, $owner_guid $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type))); $owner_guid = (int)$owner_guid; - if ($owner_guid==0) { + if ($owner_guid == 0) { $owner_guid = get_loggedin_userid(); } @@ -78,7 +88,7 @@ function create_annotation($entity_guid, $name, $value, $value_type, $owner_guid $entity = get_entity($entity_guid); - if (trigger_elgg_event('annotate',$entity->type,$entity)) { + if (trigger_elgg_event('annotate', $entity->type, $entity)) { system_log($entity, 'annotate'); // If ok then add it @@ -86,7 +96,7 @@ function create_annotation($entity_guid, $name, $value, $value_type, $owner_guid (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id) VALUES ($entity_guid,'$name',$value,'$value_type', $owner_guid, $time, $access_id)"); - if ($result!==false) { + if ($result !== false) { $obj = get_annotation($result); if (trigger_elgg_event('create', 'annotation', $obj)) { return $result; @@ -104,12 +114,13 @@ function create_annotation($entity_guid, $name, $value, $value_type, $owner_guid /** * Update an annotation. * - * @param int $annotation_id - * @param string $name - * @param string $value - * @param string $value_type - * @param int $owner_guid - * @param int $access_id + * @param int $annotation_id Annotation ID + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid Owner of annotation + * @param int $access_id Access level of annotation + * * @return bool */ function update_annotation($annotation_id, $name, $value, $value_type, $owner_guid, $access_id) { @@ -121,7 +132,7 @@ function update_annotation($annotation_id, $name, $value, $value_type, $owner_gu $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type))); $owner_guid = (int)$owner_guid; - if ($owner_guid==0) { + if ($owner_guid == 0) { $owner_guid = get_loggedin_userid(); } @@ -145,7 +156,7 @@ function update_annotation($annotation_id, $name, $value, $value_type, $owner_gu set value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid where id=$annotation_id and name_id='$name' and $access"); - if ($result!==false) { + if ($result !== false) { $obj = get_annotation($annotation_id); if (trigger_elgg_event('update', 'annotation', $obj)) { return true; @@ -161,18 +172,24 @@ function update_annotation($annotation_id, $name, $value, $value_type, $owner_gu /** * Get a list of annotations for a given object/user/annotation type. * - * @param int|array $entity_guid - * @param string $entity_type - * @param string $entity_subtype - * @param string $name - * @param mixed $value - * @param int|array $owner_guid - * @param int $limit - * @param int $offset - * @param string $order_by + * @param int|array $entity_guid GUID to return annotations of (falsey for any) + * @param string $entity_type Type of entity + * @param string $entity_subtype Subtype of entity + * @param string $name Name of annotation + * @param mixed $value Value of annotation + * @param int|array $owner_guid Owner(s) of annotation + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Order annotations by SQL + * @param int $timelower Lower time limit + * @param int $timeupper Upper time limit + * @param int $entity_owner_guid Owner guid for the entity + * + * @return array */ function get_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "", $name = "", -$value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $timelower = 0, $timeupper = 0, $entity_owner_guid = 0) { +$value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $timelower = 0, +$timeupper = 0, $entity_owner_guid = 0) { global $CONFIG; $timelower = (int) $timelower; @@ -180,7 +197,7 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time if (is_array($entity_guid)) { if (sizeof($entity_guid) > 0) { - foreach($entity_guid as $key => $val) { + foreach ($entity_guid as $key => $val) { $entity_guid[$key] = (int) $val; } } else { @@ -212,7 +229,7 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time if (is_array($owner_guid)) { if (sizeof($owner_guid) > 0) { - foreach($owner_guid as $key => $val) { + foreach ($owner_guid as $key => $val) { $owner_guid[$key] = (int) $val; } } else { @@ -224,7 +241,7 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time if (is_array($entity_owner_guid)) { if (sizeof($entity_owner_guid) > 0) { - foreach($entity_owner_guid as $key => $val) { + foreach ($entity_owner_guid as $key => $val) { $entity_owner_guid[$key] = (int) $val; } } else { @@ -236,11 +253,11 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time $limit = (int)$limit; $offset = (int)$offset; - if($order_by == 'asc') { + if ($order_by == 'asc') { $order_by = "a.time_created asc"; } - if($order_by == 'desc') { + if ($order_by == 'desc') { $order_by = "a.time_created desc"; } @@ -249,7 +266,7 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time if ($entity_guid != 0 && !is_array($entity_guid)) { $where[] = "a.entity_guid=$entity_guid"; } else if (is_array($entity_guid)) { - $where[] = "a.entity_guid in (". implode(",",$entity_guid) . ")"; + $where[] = "a.entity_guid in (" . implode(",", $entity_guid) . ")"; } if ($entity_type != "") { @@ -264,7 +281,7 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time $where[] = "a.owner_guid=$owner_guid"; } else { if (is_array($owner_guid)) { - $where[] = "a.owner_guid in (" . implode(",",$owner_guid) . ")"; + $where[] = "a.owner_guid in (" . implode(",", $owner_guid) . ")"; } } @@ -272,7 +289,7 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time $where[] = "e.owner_guid=$entity_owner_guid"; } else { if (is_array($entity_owner_guid)) { - $where[] = "e.owner_guid in (" . implode(",",$entity_owner_guid) . ")"; + $where[] = "e.owner_guid in (" . implode(",", $entity_owner_guid) . ")"; } } @@ -319,20 +336,26 @@ $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $time * * @see elgg_get_entities * @see elgg_get_entities_from_metadata + * * @param array $options Array in format: * * annotation_names => NULL|ARR annotations names * * annotation_values => NULL|ARR annotations values * - * annotation_name_value_pairs => NULL|ARR (name = 'name', value => 'value', 'operand' => '=', 'case_sensitive' => TRUE) entries. - * Currently if multiple values are sent via an array (value => array('value1', 'value2') the pair's operand will be forced to "IN". + * annotation_name_value_pairs => NULL|ARR (name = 'name', value => 'value', + * 'operand' => '=', 'case_sensitive' => TRUE) entries. + * Currently if multiple values are sent via an array (value => array('value1', 'value2') + * the pair's operand will be forced to "IN". * - * annotation_name_value_pairs_operator => NULL|STR The operator to use for combining (name = value) OPERATOR (name = value); default AND + * annotation_name_value_pairs_operator => NULL|STR The operator to use for combining + * (name = value) OPERATOR (name = value); default AND * * annotation_case_sensitive => BOOL Overall Case sensitive * - * order_by_annotation => NULL|ARR (array('name' => 'annotation_text1', 'direction' => ASC|DESC, 'as' => text|integer), + * order_by_annotation => NULL|ARR (array('name' => 'annotation_text1', 'direction' => ASC|DESC, + * 'as' => text|integer), + * * Also supports array('name' => 'annotation_text1') * * annotation_owner_guids => NULL|ARR guids for annotaiton owners @@ -358,7 +381,9 @@ function elgg_get_entities_from_annotations(array $options = array()) { $options = array_merge($defaults, $options); - $singulars = array('annotation_name', 'annotation_value', 'annotation_name_value_pair', 'annotation_owner_guid'); + $singulars = array('annotation_name', 'annotation_value', + 'annotation_name_value_pair', 'annotation_owner_guid'); + $options = elgg_normalise_plural_options_array($options, $singulars); if (!$options = elgg_entities_get_metastrings_options('annotation', $options)) { @@ -374,25 +399,32 @@ function elgg_get_entities_from_annotations(array $options = array()) { } /** + * Get entities from annotations + * + * No longer used. + * * @deprecated 1.7 Use elgg_get_entities_from_annotations() - * @param $entity_type - * @param $entity_subtype - * @param $name - * @param $value - * @param $owner_guid - * @param $group_guid - * @param $limit - * @param $offset - * @param $order_by - * @param $count - * @param $timelower - * @param $timeupper + * + * @param mixed $entity_type Type of entity + * @param mixed $entity_subtype Subtype of entity + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param int $owner_guid Guid of owner of annotation + * @param int $group_guid Guid of group + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by SQL order by string + * @param bool $count Count or return entities + * @param int $timelower Lower time limit + * @param int $timeupper Upper time limit + * * @return unknown_type */ -function get_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "", $value = "", -$owner_guid = 0, $group_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $count = false, -$timelower = 0, $timeupper = 0) { - elgg_deprecated_notice('get_entities_from_annotations() was deprecated by elgg_get_entities_from_annotations().', 1.7); +function get_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "", +$value = "", $owner_guid = 0, $group_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", +$count = false, $timelower = 0, $timeupper = 0) { + $msg = 'get_entities_from_annotations() is deprecated by elgg_get_entities_from_annotations().'; + elgg_deprecated_notice($msg, 1.7); $options = array(); @@ -446,23 +478,28 @@ $timelower = 0, $timeupper = 0) { * * @see elgg_view_entity_list * - * @param string $entity_type Type of entity. - * @param string $entity_subtype Subtype of entity. - * @param string $name Name of annotation. - * @param string $value Value of annotation. - * @param int $limit Maximum number of results to return. - * @param int $owner_guid Owner. - * @param int $group_guid Group container. Currently this is only supported if $entity_type == 'object' - * @param boolean $asc Whether to list in ascending or descending order (default: desc) - * @param boolean $fullview Whether to display the entities in full - * @param boolean $viewtypetoggle Determines whether or not the 'gallery' view can be displayed (default: no) + * @param string $entity_type Type of entity. + * @param string $entity_subtype Subtype of entity. + * @param string $name Name of annotation. + * @param string $value Value of annotation. + * @param int $limit Maximum number of results to return. + * @param int $owner_guid Owner. + * @param int $group_guid Group container. Currently only supported if entity_type is object + * @param boolean $asc Whether to list in ascending or descending order (default: desc) + * @param boolean $fullview Whether to display the entities in full + * @param boolean $viewtypetoggle Can 'gallery' view can be displayed (default: no) + * * @return string Formatted entity list */ -function list_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "", $value = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $viewtypetoggle = false) { - elgg_deprecated_notice('list_entities_from_annotations is deprecated by elgg_list_entities_from_annotations', 1.8); +function list_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "", +$value = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, +$viewtypetoggle = false) { + + $msg = 'list_entities_from_annotations is deprecated by elgg_list_entities_from_annotations'; + elgg_deprecated_notice($msg, 1.8); $options = array(); - + if ($entity_type) { $options['types'] = $entity_type; } @@ -543,10 +580,11 @@ function elgg_list_entities_from_annotations($options = array()) { /** * Returns a human-readable list of annotations on a particular entity. * - * @param int $entity_guid The entity GUID - * @param string $name The name of the kind of annotation - * @param int $limit The number of annotations to display at once - * @param true|false $asc Whether or not the annotations are displayed in ascending order. (Default: true) + * @param int $entity_guid The entity GUID + * @param string $name The name of the kind of annotation + * @param int $limit The number of annotations to display at once + * @param true|false $asc Display annotations in ascending order. (Default: true) + * * @return string HTML (etc) version of the annotation list */ function list_annotations($entity_guid, $name = "", $limit = 25, $asc = true) { @@ -556,7 +594,7 @@ function list_annotations($entity_guid, $name = "", $limit = 25, $asc = true) { $asc = "desc"; } $count = count_annotations($entity_guid, "", "", $name); - $offset = (int) get_input("annoff",0); + $offset = (int) get_input("annoff", 0); $annotations = get_annotations($entity_guid, "", "", $name, "", "", $limit, $offset, $asc); return elgg_view_annotation_list($annotations, $count, $offset, $limit); @@ -565,73 +603,125 @@ function list_annotations($entity_guid, $name = "", $limit = 25, $asc = true) { /** * Return the sum of a given integer annotation. * - * @param $entity_guid int - * @param $entity_type string - * @param $entity_subtype string - * @param $name string + * @param int $entity_guid Guid of Entity + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid GUID of owner of annotation + * + * @return int */ -function get_annotations_sum($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0) { - return __get_annotations_calculate_x("sum", $entity_guid, $entity_type, $entity_subtype, $name, $value, $value_type, $owner_guid); +function get_annotations_sum($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", +$value = "", $value_type = "", $owner_guid = 0) { + + return get_annotations_calculate_x("sum", $entity_guid, $entity_type, $entity_subtype, $name, + $value, $value_type, $owner_guid); } /** * Return the max of a given integer annotation. * - * @param $entity_guid int - * @param $entity_type string - * @param $entity_subtype string - * @param $name string + * @param int $entity_guid Guid of Entity + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid GUID of owner of annotation + * + * @return int */ -function get_annotations_max($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0) { - return __get_annotations_calculate_x("max", $entity_guid, $entity_type, $entity_subtype, $name, $value, $value_type, $owner_guid); +function get_annotations_max($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", +$value = "", $value_type = "", $owner_guid = 0) { + + return get_annotations_calculate_x("max", $entity_guid, $entity_type, $entity_subtype, $name, + $value, $value_type, $owner_guid); } /** * Return the minumum of a given integer annotation. * - * @param $entity_guid int - * @param $entity_type string - * @param $entity_subtype string - * @param $name string + * @param int $entity_guid Guid of Entity + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid GUID of owner of annotation + * + * @return int */ -function get_annotations_min($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0) { - return __get_annotations_calculate_x("min", $entity_guid, $entity_type, $entity_subtype, $name, $value, $value_type, $owner_guid); +function get_annotations_min($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", +$value = "", $value_type = "", $owner_guid = 0) { + + return get_annotations_calculate_x("min", $entity_guid, $entity_type, $entity_subtype, $name, + $value, $value_type, $owner_guid); } /** * Return the average of a given integer annotation. * - * @param $entity_guid int - * @param $entity_type string - * @param $entity_subtype string - * @param $name string + * @param int $entity_guid Guid of Entity + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid GUID of owner of annotation + * + * @return int */ -function get_annotations_avg($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0) { - return __get_annotations_calculate_x("avg", $entity_guid, $entity_type, $entity_subtype, $name, $value, $value_type, $owner_guid); +function get_annotations_avg($entity_guid, $entity_type = "", $entity_subtype = "", $name = "", +$value = "", $value_type = "", $owner_guid = 0) { + + return get_annotations_calculate_x("avg", $entity_guid, $entity_type, $entity_subtype, $name, + $value, $value_type, $owner_guid); } /** * Count the number of annotations based on search parameters * - * @param int $entity_guid - * @param string $entity_type - * @param string $entity_subtype - * @param string $name + * @param int $entity_guid Guid of Entity + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid GUID of owner of annotation + * @param int $timelower Lower time limit + * @param int $timeupper Upper time limit + * + * @return int */ -function count_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0, $timeupper = 0) { - return __get_annotations_calculate_x("count", $entity_guid, $entity_type, $entity_subtype, $name, $value, $value_type, $owner_guid, $timelower, $timeupper); +function count_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "", +$name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0, +$timeupper = 0) { + return get_annotations_calculate_x("count", $entity_guid, $entity_type, $entity_subtype, + $name, $value, $value_type, $owner_guid, $timelower, $timeupper); } /** * Perform a mathmatical calculation on integer annotations. * - * @param $sum string - * @param $entity_id int - * @param $entity_type string - * @param $entity_subtype string - * @param $name string + * @param string $sum What sort of calculation to perform + * @param int $entity_guid Guid of Entity + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $value Value of annotation + * @param string $value_type Type of value + * @param int $owner_guid GUID of owner of annotation + * @param int $timelower Lower time limit + * @param int $timeupper Upper time limit + * + * @return int */ -function __get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0, $timeupper = 0) { +function get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type = "", +$entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0, +$timelower = 0, $timeupper = 0) { + global $CONFIG; $sum = sanitise_string($sum); @@ -665,7 +755,7 @@ function __get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type $where[] = "e.guid=$entity_guid"; } - if ($entity_type!="") { + if ($entity_type != "") { $where[] = "e.type='$entity_type'"; } @@ -673,15 +763,15 @@ function __get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type $where[] = "e.subtype=$entity_subtype"; } - if ($name!="") { + if ($name != "") { $where[] = "a.name_id='$name'"; } - if ($value!="") { + if ($value != "") { $where[] = "a.value_id='$value'"; } - if ($value_type!="") { + if ($value_type != "") { $where[] = "a.value_type='$value_type'"; } @@ -724,17 +814,23 @@ function __get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type /** * Get entities ordered by a mathematical calculation * - * @param $sum string - * @param $entity_type string - * @param $entity_subtype string - * @param $name string - * @param $mdname string - * @param $mdvalue string - * @param $limit int - * @param string $orderdir Default: asc - the sort order - * @return unknown + * @param string $sum What sort of calculation to perform + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $mdname Metadata name + * @param string $mdvalue Metadata value + * @param int $owner_guid GUID of owner of annotation + * @param int $limit Limit of results + * @param int $offset Offset of results + * @param string $orderdir Order of results + * @param bool $count Return count or entities + * + * @return mixed */ -function __get_entities_from_annotations_calculate_x($sum = "sum", $entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) { +function get_entities_from_annotations_calculate_x($sum = "sum", $entity_type = "", +$entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, +$limit = 10, $offset = 0, $orderdir = 'desc', $count = false) { global $CONFIG; $sum = sanitise_string($sum); @@ -762,7 +858,7 @@ function __get_entities_from_annotations_calculate_x($sum = "sum", $entity_type $where = array(); - if ($entity_type!="") { + if ($entity_type != "") { $where[] = "e.type='$entity_type'"; } @@ -774,16 +870,16 @@ function __get_entities_from_annotations_calculate_x($sum = "sum", $entity_type $where[] = "e.subtype=$entity_subtype"; } - if ($name!="") { + if ($name != "") { $where[] = "a.name_id='$name'"; } if (!empty($mdname) && !empty($mdvalue)) { - if ($mdname!="") { + if ($mdname != "") { $where[] = "m.name_id='$meta_n'"; } - if ($mdvalue!="") { + if ($mdvalue != "") { $where[] = "m.value_id='$meta_v'"; } } @@ -798,7 +894,9 @@ function __get_entities_from_annotations_calculate_x($sum = "sum", $entity_type } else { $query = "SELECT count(distinct e.guid) as num, $sum(ms.string) as sum "; } - $query .= " from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}annotations a on a.entity_guid = e.guid JOIN {$CONFIG->dbprefix}metastrings ms on a.value_id=ms.id "; + $query .= " from {$CONFIG->dbprefix}entities e" + . " JOIN {$CONFIG->dbprefix}annotations a on a.entity_guid = e.guid" + . " JOIN {$CONFIG->dbprefix}metastrings ms on a.value_id=ms.id "; if (!empty($mdname) && !empty($mdvalue)) { $query .= " JOIN {$CONFIG->dbprefix}metadata m on m.entity_guid = e.guid "; @@ -830,83 +928,110 @@ function __get_entities_from_annotations_calculate_x($sum = "sum", $entity_type /** * Returns entities ordered by the sum of an annotation * - * @param unknown_type $entity_type - * @param unknown_type $entity_subtype - * @param unknown_type $name - * @param string $mdname - * @param string $mdvalue - * @param unknown_type $owner_guid - * @param int $limit - * @param int $offset - * @param true|false $count + * @param string $entity_type Type of Entity + * @param string $entity_subtype Subtype of Entity + * @param string $name Name of annotation + * @param string $mdname Metadata name + * @param string $mdvalue Metadata value + * @param int $owner_guid GUID of owner of annotation + * @param int $limit Limit of results + * @param int $offset Offset of results + * @param string $orderdir Order of results + * @param bool $count Return count or entities + * * @return unknown */ -function get_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) { - return __get_entities_from_annotations_calculate_x('sum',$entity_type,$entity_subtype,$name,$mdname, $mdvalue, $owner_guid,$limit, $offset, $orderdir, $count); +function get_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", +$mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', +$count = false) { + + return get_entities_from_annotations_calculate_x('sum', $entity_type, $entity_subtype, + $name, $mdname, $mdvalue, $owner_guid, $limit, $offset, $orderdir, $count); } /** * Lists entities by the totals of a particular kind of annotation * - * @param string $entity_type Type of entity. - * @param string $entity_subtype Subtype of entity. - * @param string $name Name of annotation. - * @param int $limit Maximum number of results to return. - * @param int $owner_guid Owner. - * @param int $group_guid Group container. Currently this is only supported if $entity_type == 'object' - * @param boolean $asc Whether to list in ascending or descending order (default: desc) - * @param boolean $fullview Whether to display the entities in full - * @param boolean $viewtypetoggle Determines whether or not the 'gallery' view can be displayed (default: no) + * @param string $entity_type Type of entity. + * @param string $entity_subtype Subtype of entity. + * @param string $name Name of annotation. + * @param int $limit Maximum number of results to return. + * @param int $owner_guid Owner. + * @param int $group_guid Group container. Currently only supported if entity_type is object + * @param boolean $asc Whether to list in ascending or descending order (default: desc) + * @param boolean $fullview Whether to display the entities in full + * @param boolean $viewtypetoggle Can the 'gallery' view can be displayed (default: no) + * @param boolean $pagination Add pagination + * @param string $orderdir Order desc or asc + * * @return string Formatted entity list */ -function list_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $viewtypetoggle = false, $pagination = true, $orderdir = 'desc') { +function list_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", +$limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, +$viewtypetoggle = false, $pagination = true, $orderdir = 'desc') { if ($asc) { $asc = "asc"; } else { $asc = "desc"; } - $offset = (int) get_input("offset",0); - $count = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, '', '', $owner_guid, $limit, $offset, $orderdir, true); - $entities = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, '', '', $owner_guid, $limit, $offset, $orderdir, false); + $offset = (int) get_input("offset", 0); + $count = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, + '', '', $owner_guid, $limit, $offset, $orderdir, true); + + $entities = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, + '', '', $owner_guid, $limit, $offset, $orderdir, false); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, + $fullview, $viewtypetoggle, $pagination); } /** - * Lists entities by the totals of a particular kind of annotation AND the value of a piece of metadata - * - * @param string $entity_type Type of entity. - * @param string $entity_subtype Subtype of entity. - * @param string $name Name of annotation. - * @param string $mdname Metadata name - * @param string $mdvalue Metadata value - * @param int $limit Maximum number of results to return. - * @param int $owner_guid Owner. - * @param int $group_guid Group container. Currently this is only supported if $entity_type == 'object' - * @param boolean $asc Whether to list in ascending or descending order (default: desc) - * @param boolean $fullview Whether to display the entities in full - * @param boolean $viewtypetoggle Determines whether or not the 'gallery' view can be displayed (default: no) + * Lists entities by the totals of a particular kind of annotation AND + * the value of a piece of metadata + * + * @param string $entity_type Type of entity. + * @param string $entity_subtype Subtype of entity. + * @param string $name Name of annotation. + * @param string $mdname Metadata name + * @param string $mdvalue Metadata value + * @param int $limit Maximum number of results to return. + * @param int $owner_guid Owner. + * @param int $group_guid Group container. Currently only supported if entity_type is object + * @param boolean $asc Whether to list in ascending or descending order (default: desc) + * @param boolean $fullview Whether to display the entities in full + * @param boolean $viewtypetoggle Can the 'gallery' view can be displayed (default: no) + * @param boolean $pagination Display pagination + * @param string $orderdir 'desc' or 'asc' + * * @return string Formatted entity list */ -function list_entities_from_annotation_count_by_metadata($entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $viewtypetoggle = false, $pagination = true, $orderdir = 'desc') { +function list_entities_from_annotation_count_by_metadata($entity_type = "", $entity_subtype = "", +$name = "", $mdname = '', $mdvalue = '', $limit = 10, $owner_guid = 0, $group_guid = 0, +$asc = false, $fullview = true, $viewtypetoggle = false, $pagination = true, $orderdir = 'desc') { + if ($asc) { $asc = "asc"; } else { $asc = "desc"; } - $offset = (int) get_input("offset",0); - $count = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, $mdname, $mdvalue, $owner_guid, $limit, $offset, $orderdir, true); - $entities = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, $mdname, $mdvalue, $owner_guid, $limit, $offset, $orderdir, false); + $offset = (int) get_input("offset", 0); + $count = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, $mdname, + $mdvalue, $owner_guid, $limit, $offset, $orderdir, true); + $entities = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, $mdname, + $mdvalue, $owner_guid, $limit, $offset, $orderdir, false); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, + $viewtypetoggle, $pagination); } /** * Delete a given annotation. * - * @param $id int The id + * @param int $id The annotation id + * + * @return bool */ function delete_annotation($id) { global $CONFIG; @@ -927,8 +1052,10 @@ function delete_annotation($id) { /** * Clear all the annotations for a given entity, assuming you have access to that metadata. * - * @param int $guid - * @return number of annotations deleted or false if an error + * @param int $guid The entity guid + * @param string $name The name of the annotation to delete. + * + * @return int Number of annotations deleted or false if an error */ function clear_annotations($guid, $name = "") { global $CONFIG; @@ -968,13 +1095,17 @@ function clear_annotations($guid, $name = "") { * Clear all annotations belonging to a given owner_guid * * @param int $owner_guid The owner + * + * @return int Number of annotations deleted */ function clear_annotations_by_owner($owner_guid) { global $CONFIG; $owner_guid = (int)$owner_guid; - $annotations = get_data("SELECT id from {$CONFIG->dbprefix}annotations WHERE owner_guid=$owner_guid"); + $query = "SELECT id from {$CONFIG->dbprefix}annotations WHERE owner_guid=$owner_guid"; + + $annotations = get_data($query); $deleted = 0; if (!$annotations) { @@ -993,6 +1124,15 @@ function clear_annotations_by_owner($owner_guid) { /** * Handler called by trigger_plugin_hook on the "export" event. + * + * @param string $hook 'export' + * @param string $entity_type 'all' + * @param mixed $returnvalue Default return value + * @param mixed $params List of params to export + * + * @elgg_plugin_hook export all + * + * @return mixed */ function export_annotation_plugin_hook($hook, $entity_type, $returnvalue, $params) { // Sanity check values @@ -1019,9 +1159,12 @@ function export_annotation_plugin_hook($hook, $entity_type, $returnvalue, $param } /** - * Get the URL for this item of metadata, by default this links to the export handler in the current view. + * Get the URL for this item of metadata, by default this links to the + * export handler in the current view. + * + * @param int $id Annotation id * - * @param int $id + * @return mixed */ function get_annotation_url($id) { $id = (int)$id; @@ -1035,9 +1178,9 @@ function get_annotation_url($id) { /** * Check to see if a user has already created an annotation on an object * - * @param int $entity_guid - * @param string $annotation_type - * @param int $owner_guid Defaults to logged in user. + * @param int $entity_guid Entity guid + * @param string $annotation_type Type of annotation + * @param int $owner_guid Defaults to logged in user. * * @return true | false */ @@ -1068,6 +1211,8 @@ function elgg_annotation_exists($entity_guid, $annotation_type, $owner_guid = NU * * @param string $function_name The function. * @param string $extender_name The name, default 'all'. + * + * @return string */ function register_annotation_url_handler($function_name, $extender_name = "all") { return register_extender_url_handler($function_name, 'annotation', $extender_name); diff --git a/engine/lib/api.php b/engine/lib/api.php index 6cb8debaa..fa7c17d80 100644 --- a/engine/lib/api.php +++ b/engine/lib/api.php @@ -1,13 +1,13 @@ <?php /** * Elgg API - * Functions and objects which make up the API engine. + * Functions and objects that make up the API engine. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage WebServicesAPI */ -// Primary Services API Server functions ///////////////////////////////////////////////////////////////////// +// Primary Services API Server functions /** * A global array holding API methods. @@ -38,28 +38,38 @@ $API_METHODS = array(); * It also cannot handle arrays of bools or arrays of arrays. * Also, input will be filtered to protect against XSS attacks through the API. * - * @param string $method The api name to expose - for example "myapi.dosomething" - * @param string $function Your function callback. - * @param array $parameters (optional) List of parameters in the same order as in your function. - * Default values may be set for parameters which allow REST api users flexibility in - * what parameters are passed. Generally, optional parameters should be after required parameters. - * This array should be in the format - * "variable" = array ( - * type => 'int' | 'bool' | 'float' | 'string' | 'array' - * required => true (default) | false - * default => value (optional) - * ) - * @param string $description (optional) human readable description of the function. - * @param string $call_method (optional) Define what http method must be used for this function. Default: GET - * @param bool $require_api_auth (optional) (default is false) Does this method require API authorization? (example: API key) - * @param bool $require_user_auth (optional) (default is false) Does this method require user authorization? + * @param string $method The api name to expose - for example "myapi.dosomething" + * @param string $function Your function callback. + * @param array $parameters (optional) List of parameters in the same order as in + * your function. Default values may be set for parameters which + * allow REST api users flexibility in what parameters are passed. + * Generally, optional parameters should be after required + * parameters. + * + * This array should be in the format + * "variable" = array ( + * type => 'int' | 'bool' | 'float' | 'string' | 'array' + * required => true (default) | false + * default => value (optional) + * ) + * @param string $description (optional) human readable description of the function. + * @param string $call_method (optional) Define what http method must be used for + * this function. Default: GET + * @param bool $require_api_auth (optional) (default is false) Does this method + * require API authorization? (example: API key) + * @param bool $require_user_auth (optional) (default is false) Does this method + * require user authorization? + * * @return bool */ -function expose_function($method, $function, array $parameters = NULL, $description = "", $call_method = "GET", $require_api_auth = false, $require_user_auth = false) { +function expose_function($method, $function, array $parameters = NULL, $description = "", +$call_method = "GET", $require_api_auth = false, $require_user_auth = false) { + global $API_METHODS; if (($method == "") || ($function == "")) { - throw new InvalidParameterException(elgg_echo('InvalidParameterException:APIMethodOrFunctionNotSet')); + $msg = elgg_echo('InvalidParameterException:APIMethodOrFunctionNotSet'); + throw new InvalidParameterException($msg); } // does not check whether this method has already been exposed - good idea? @@ -72,13 +82,15 @@ function expose_function($method, $function, array $parameters = NULL, $descript if ($parameters != NULL) { if (!is_array($parameters)) { - throw new InvalidParameterException(sprintf(elgg_echo('InvalidParameterException:APIParametersArrayStructure'), $method)); + $msg = sprintf(elgg_echo('InvalidParameterException:APIParametersArrayStructure'), $method); + throw new InvalidParameterException($msg); } // catch common mistake of not setting up param array correctly $first = current($parameters); if (!is_array($first)) { - throw new InvalidParameterException(sprintf(elgg_echo('InvalidParameterException:APIParametersArrayStructure'), $method)); + $msg = sprintf(elgg_echo('InvalidParameterException:APIParametersArrayStructure'), $method); + throw new InvalidParameterException($msg); } } @@ -103,7 +115,10 @@ function expose_function($method, $function, array $parameters = NULL, $descript $API_METHODS[$method]["call_method"] = 'GET'; break; default : - throw new InvalidParameterException(sprintf(elgg_echo('InvalidParameterException:UnrecognisedHttpMethod'), $call_method, $method)); + $msg = sprintf(elgg_echo('InvalidParameterException:UnrecognisedHttpMethod'), + $call_method, $method); + + throw new InvalidParameterException($msg); } $API_METHODS[$method]["require_api_auth"] = $require_api_auth; @@ -115,8 +130,12 @@ function expose_function($method, $function, array $parameters = NULL, $descript /** * Unregister an API method + * * @param string $method The api name that was exposed + * * @since 1.7.0 + * + * @return void */ function unexpose_function($method) { global $API_METHODS; @@ -128,7 +147,9 @@ function unexpose_function($method) { /** * Check that the method call has the proper API and user authentication + * * @param string $method The api name that was exposed + * * @return true or throws an exception * @throws APIException * @since 1.7.0 @@ -171,6 +192,7 @@ function authenticate_method($method) { * A method is a function which you have previously exposed using expose_function. * * @param string $method Method, e.g. "foo.bar" + * * @return GenericResult The result of the execution. * @throws APIException, CallException */ @@ -179,17 +201,24 @@ function execute_method($method) { // method must be exposed if (!isset($API_METHODS[$method])) { - throw new APIException(sprintf(elgg_echo('APIException:MethodCallNotImplemented'), $method)); + $msg = sprintf(elgg_echo('APIException:MethodCallNotImplemented'), $method); + throw new APIException($msg); } // function must be callable - if (!(isset($API_METHODS[$method]["function"])) || !(is_callable($API_METHODS[$method]["function"]))) { - throw new APIException(sprintf(elgg_echo('APIException:FunctionDoesNotExist'), $method)); + if (!(isset($API_METHODS[$method]["function"])) + || !(is_callable($API_METHODS[$method]["function"]))) { + + $msg = sprintf(elgg_echo('APIException:FunctionDoesNotExist'), $method); + throw new APIException($msg); } // check http call method if (strcmp(get_call_method(), $API_METHODS[$method]["call_method"]) != 0) { - throw new CallException(sprintf(elgg_echo('CallException:InvalidCallMethod'), $method, $API_METHODS[$method]["call_method"])); + $msg = sprintf(elgg_echo('CallException:InvalidCallMethod'), $method, + $API_METHODS[$method]["call_method"]); + + throw new CallException($msg); } $parameters = get_parameters_for_method($method); @@ -213,12 +242,14 @@ function execute_method($method) { } if ($result === false) { - throw new APIException(sprintf(elgg_echo('APIException:FunctionParseError'), $function, $serialised_parameters)); + $msg = sprintf(elgg_echo('APIException:FunctionParseError'), $function, $serialised_parameters); + throw new APIException($msg); } - if ($result === NULL) { + if ($result === NULL) { // If no value - throw new APIException(sprintf(elgg_echo('APIException:FunctionNoReturn'), $function, $serialised_parameters)); + $msg = sprintf(elgg_echo('APIException:FunctionNoReturn'), $function, $serialised_parameters); + throw new APIException($msg); } // Otherwise assume that the call was successful and return it as a success object. @@ -227,6 +258,7 @@ function execute_method($method) { /** * Get the request method. + * * @return string HTTP request method */ function get_call_method() { @@ -240,6 +272,7 @@ function get_call_method() { * an associated array. * * @param string $method The method + * * @return array containing parameters as key => value */ function get_parameters_for_method($method) { @@ -268,6 +301,7 @@ function get_parameters_for_method($method) { /** * Get POST data * Since this is called through a handler, we need to manually get the post data + * * @return POST data as string encoded as multipart/form-data */ function get_post_data() { @@ -279,7 +313,10 @@ function get_post_data() { /** * This fixes the post parameters that are munged due to page handler + * * @since 1.7.0 + * + * @return void */ function include_post_data() { @@ -307,8 +344,10 @@ function include_post_data() { /** * Verify that the required parameters are present - * @param $method - * @param $parameters + * + * @param string $method Method name + * @param array $parameters List of expected parameters + * * @return true on success or exception * @throws APIException * @since 1.7.0 @@ -325,12 +364,15 @@ function verify_parameters($method, $parameters) { foreach ($API_METHODS[$method]['parameters'] as $key => $value) { // this tests the expose structure: must be array to describe parameter and type must be defined if (!is_array($value) || !isset($value['type'])) { - throw new APIException(sprintf(elgg_echo('APIException:InvalidParameter'), $key, $method)); + + $msg = sprintf(elgg_echo('APIException:InvalidParameter'), $key, $method); + throw new APIException($msg); } // Check that the variable is present in the request if required if ($value['required'] && !array_key_exists($key, $parameters)) { - throw new APIException(sprintf(elgg_echo('APIException:MissingParameterInMethod'), $key, $method)); + $msg = sprintf(elgg_echo('APIException:MissingParameterInMethod'), $key, $method); + throw new APIException($msg); } } @@ -340,8 +382,9 @@ function verify_parameters($method, $parameters) { /** * Serialize an array of parameters for an API method call * - * @param string $method API method name - * @param array $parameters Array of parameters + * @param string $method API method name + * @param array $parameters Array of parameters + * * @return string or exception * @throws APIException * @since 1.7.0 @@ -390,7 +433,8 @@ function serialise_parameters($method, $parameters) { case 'array': // we can handle an array of strings, maybe ints, definitely not booleans or other arrays if (!is_array($parameters[$key])) { - throw new APIException(sprintf(elgg_echo('APIException:ParameterNotArray'), $key)); + $msg = sprintf(elgg_echo('APIException:ParameterNotArray'), $key); + throw new APIException($msg); } $array = "array("; @@ -402,7 +446,7 @@ function serialise_parameters($method, $parameters) { $array .= "'$k'=>'$v',"; } - $array = trim($array,","); + $array = trim($array, ","); $array .= ")"; $array = ",$array"; @@ -410,7 +454,8 @@ function serialise_parameters($method, $parameters) { $serialised_parameters .= $array; break; default: - throw new APIException(sprintf(elgg_echo('APIException:UnrecognisedTypeCast'), $value['type'], $key, $method)); + $msg = sprintf(elgg_echo('APIException:UnrecognisedTypeCast'), $value['type'], $key, $method); + throw new APIException($msg); } } @@ -421,7 +466,10 @@ function serialise_parameters($method, $parameters) { /** * PAM: Confirm that the call includes a valid API key + * * @return true if good API key - otherwise throws exception + * + * @return mixed * @throws APIException * @since 1.7.0 */ @@ -449,7 +497,9 @@ function api_auth_key() { /** * PAM: Confirm the HMAC signature + * * @return true if success - otherwise throws exception + * * @throws SecurityException * @since 1.7.0 */ @@ -463,7 +513,8 @@ function api_auth_hmac() { $api_user = get_api_user($CONFIG->site_id, $api_header->api_key); if (!$api_user) { - throw new SecurityException(elgg_echo('SecurityException:InvalidAPIKey'), ErrorResult::$RESULT_FAIL_APIKEY_INVALID); + throw new SecurityException(elgg_echo('SecurityException:InvalidAPIKey'), + ErrorResult::$RESULT_FAIL_APIKEY_INVALID); } // Get the secret key @@ -492,12 +543,15 @@ function api_auth_hmac() { } // Validate post data - if ($api_header->method=="POST") { + if ($api_header->method == "POST") { $postdata = get_post_data(); $calculated_posthash = calculate_posthash($postdata, $api_header->posthash_algo); - if (strcmp($api_header->posthash, $calculated_posthash)!=0) { - throw new SecurityException(sprintf(elgg_echo('SecurityException:InvalidPostHash'), $calculated_posthash, $api_header->posthash)); + if (strcmp($api_header->posthash, $calculated_posthash) != 0) { + $msg = sprintf(elgg_echo('SecurityException:InvalidPostHash'), + $calculated_posthash, $api_header->posthash); + + throw new SecurityException($msg); } } @@ -547,7 +601,7 @@ function get_and_validate_api_headers() { // This values determines how long the HMAC cache needs to store previous // signatures. Heavy use of HMAC is better handled with a shorter sig lifetime. // See cache_hmac_check_replay() - if (($result->time<(time()-90000)) || ($result->time>(time()+90000))) { + if (($result->time < (time() - 90000)) || ($result->time > (time() + 90000))) { throw new APIException(elgg_echo('APIException:TemporalDrift')); } @@ -581,6 +635,7 @@ function get_and_validate_api_headers() { * This also gives us an easy way to disable algorithms. * * @param string $algo The algorithm + * * @return string The php algorithm * @throws APIException if an algorithm is not supported. */ @@ -605,15 +660,20 @@ function map_api_hash($algo) { * This function signs an api request using the information provided. The signature returned * has been base64 encoded and then url encoded. * - * @param string $algo The HMAC algorithm used - * @param string $time String representation of unix time - * @param string $api_key Your api key - * @param string $secret Your private key - * @param string $get_variables URLEncoded string representation of the get variable parameters, eg "method=user&guid=2" - * @param string $post_hash Optional sha1 hash of the post data. + * @param string $algo The HMAC algorithm used + * @param string $time String representation of unix time + * @param string $nonce Nonce + * @param string $api_key Your api key + * @param string $secret_key Your private key + * @param string $get_variables URLEncoded string representation of the get variable parameters, + * eg "method=user&guid=2" + * @param string $post_hash Optional sha1 hash of the post data. + * * @return string The HMAC signature */ -function calculate_hmac($algo, $time, $nonce, $api_key, $secret_key, $get_variables, $post_hash = "") { +function calculate_hmac($algo, $time, $nonce, $api_key, $secret_key, +$get_variables, $post_hash = "") { + global $CONFIG; elgg_log("HMAC Parts: $algo, $time, $api_key, $secret_key, $get_variables, $post_hash"); @@ -624,7 +684,7 @@ function calculate_hmac($algo, $time, $nonce, $api_key, $secret_key, $get_variab hash_update($ctx, trim($nonce)); hash_update($ctx, trim($api_key)); hash_update($ctx, trim($get_variables)); - if (trim($post_hash)!="") { + if (trim($post_hash) != "") { hash_update($ctx, trim($post_hash)); } @@ -636,8 +696,9 @@ function calculate_hmac($algo, $time, $nonce, $api_key, $secret_key, $get_variab * * @todo Work out how to handle really large bits of data. * - * @param string $postdata string The post data. - * @param string $algo The algorithm used. + * @param string $postdata The post data. + * @param string $algo The algorithm used. + * * @return string The hash. */ function calculate_posthash($postdata, $algo) { @@ -653,6 +714,7 @@ function calculate_posthash($postdata, $algo) { * hasn't been seen before, and secondly it will add the given hmac to the cache. * * @param string $hmac The hmac string. + * * @return bool True if replay detected, false if not. */ function cache_hmac_check_replay($hmac) { @@ -675,6 +737,7 @@ function cache_hmac_check_replay($hmac) { * Generate a new API user for a site, returning a new keypair on success. * * @param int $site_guid The GUID of the site. (default is current site) + * * @return stdClass object or false */ function create_api_user($site_guid) { @@ -686,8 +749,8 @@ function create_api_user($site_guid) { $site_guid = (int)$site_guid; - $public = sha1(rand().$site_guid.microtime()); - $secret = sha1(rand().$site_guid.microtime().$public); + $public = sha1(rand() . $site_guid . microtime()); + $secret = sha1(rand() . $site_guid . microtime() . $public); $insert = insert_data("INSERT into {$CONFIG->dbprefix}api_users (site_guid, api_key, secret) values @@ -701,10 +764,12 @@ function create_api_user($site_guid) { } /** - * Find an API User's details based on the provided public api key. These users are not users in the traditional sense. + * Find an API User's details based on the provided public api key. + * These users are not users in the traditional sense. + * + * @param int $site_guid The GUID of the site. + * @param string $api_key The API Key * - * @param int $site_guid The GUID of the site. - * @param string $api_key The API Key * @return mixed stdClass representing the database row or false. */ function get_api_user($site_guid, $api_key) { @@ -713,14 +778,18 @@ function get_api_user($site_guid, $api_key) { $api_key = sanitise_string($api_key); $site_guid = (int)$site_guid; - return get_data_row("SELECT * from {$CONFIG->dbprefix}api_users where api_key='$api_key' and site_guid=$site_guid and active=1"); + $query = "SELECT * from {$CONFIG->dbprefix}api_users" + . " where api_key='$api_key' and site_guid=$site_guid and active=1"; + + return get_data_row($query); } /** * Revoke an api user key. * - * @param int $site_guid The GUID of the site. - * @param string $api_key The API Key (public). + * @param int $site_guid The GUID of the site. + * @param string $api_key The API Key (public). + * * @return bool */ function remove_api_user($site_guid, $api_key) { @@ -735,7 +804,7 @@ function remove_api_user($site_guid, $api_key) { } -// User Authorization functions //////////////////////////////////////////////////////////////// +// User Authorization functions /** * Check the user token @@ -743,10 +812,9 @@ function remove_api_user($site_guid, $api_key) { * it is present and is valid. The user gets logged in so with the current * session code of Elgg, that user will be logged out of all other sessions. * - * @param array/mixed $credentials * @return bool */ -function pam_auth_usertoken($credentials = NULL) { +function pam_auth_usertoken() { global $CONFIG; $token = get_input('auth_token'); @@ -765,7 +833,7 @@ function pam_auth_usertoken($credentials = NULL) { } // Not an elgg user - if ( (!$u instanceof ElggUser)) { + if ((!$u instanceof ElggUser)) { return false; } @@ -787,19 +855,21 @@ function pam_auth_usertoken($credentials = NULL) { /** * See if the user has a valid login sesson + * * @return bool */ -function pam_auth_session($credentials = NULL) { +function pam_auth_session() { return isloggedin(); } -// user token functions ///////////////////////////////////////////////////////////////////// +// user token functions /** * Obtain a token for a user. * * @param string $username The username - * @param int $expire minutes until token expires (default is 60 minutes) + * @param int $expire Minutes until token expires (default is 60 minutes) + * * @return bool */ function create_user_token($username, $expire = 60) { @@ -809,7 +879,7 @@ function create_user_token($username, $expire = 60) { $user = get_user_by_username($username); $time = time(); $time += 60 * $expire; - $token = md5(rand(). microtime() . $username . $time . $site_guid); + $token = md5(rand() . microtime() . $username . $time . $site_guid); if (!$user) { return false; @@ -817,7 +887,8 @@ function create_user_token($username, $expire = 60) { if (insert_data("INSERT into {$CONFIG->dbprefix}users_apisessions (user_guid, site_guid, token, expires) values - ({$user->guid}, $site_guid, '$token', '$time') on duplicate key update token='$token', expires='$time'")) { + ({$user->guid}, $site_guid, '$token', '$time') + on duplicate key update token='$token', expires='$time'")) { return $token; } @@ -829,6 +900,7 @@ function create_user_token($username, $expire = 60) { * * @param int $user_guid The user GUID * @param int $site_guid The ID of the site (default is current site) + * * @return false if none available or array of stdClass objects * (see users_apisessions schema for available variables in objects) * @since 1.7.0 @@ -852,11 +924,12 @@ function get_user_tokens($user_guid, $site_guid) { /** * Validate a token against a given site. * - * A token registered with one site can not be used from a different apikey(site), so be aware of this - * during development. + * A token registered with one site can not be used from a + * different apikey(site), so be aware of this during development. + * + * @param string $token The Token. + * @param int $site_guid The ID of the site (default is current site) * - * @param string $token The Token. - * @param int $site_guid The ID of the site (default is current site) * @return mixed The user id attached to the token if not expired or false. */ function validate_user_token($token, $site_guid) { @@ -884,8 +957,9 @@ function validate_user_token($token, $site_guid) { /** * Remove user token * - * @param string $token - * @param int $site_guid The ID of the site (default is current site) + * @param string $token The toekn + * @param int $site_guid The ID of the site (default is current site) + * * @return bool * @since 1.7.0 */ @@ -920,12 +994,13 @@ function remove_expired_user_tokens() { where site_guid=$site_guid and expires < $time"); } -// Client api functions /////////////////////////////////////////////////////////////////// +// Client api functions /** * Utility function to serialise a header array into its text representation. * * @param array $headers The array of headers "key" => "value" + * * @return string */ function serialise_api_headers(array $headers) { @@ -941,15 +1016,18 @@ function serialise_api_headers(array $headers) { /** * Send a raw API call to an elgg api endpoint. * - * @param array $keys The api keys. - * @param string $url URL of the endpoint. - * @param array $call Associated array of "variable" => "value" - * @param string $method GET or POST - * @param string $post_data The post data + * @param array $keys The api keys. + * @param string $url URL of the endpoint. + * @param array $call Associated array of "variable" => "value" + * @param string $method GET or POST + * @param string $post_data The post data * @param string $content_type The content type + * * @return string */ -function send_api_call(array $keys, $url, array $call, $method = 'GET', $post_data = '', $content_type = 'application/octet-stream') { +function send_api_call(array $keys, $url, array $call, $method = 'GET', $post_data = '', +$content_type = 'application/octet-stream') { + global $CONFIG; $headers = array(); @@ -972,8 +1050,8 @@ function send_api_call(array $keys, $url, array $call, $method = 'GET', $post_da $nonce = uniqid(''); // URL encode all the parameters - foreach ($call as $k => $v){ - $encoded_params[] = urlencode($k).'='.urlencode($v); + foreach ($call as $k => $v) { + $encoded_params[] = urlencode($k) . '=' . urlencode($v); } $params = implode('&', $encoded_params); @@ -1033,9 +1111,10 @@ function send_api_call(array $keys, $url, array $call, $method = 'GET', $post_da /** * Send a GET call * - * @param string $url URL of the endpoint. - * @param array $call Associated array of "variable" => "value" - * @param array $keys The keys dependant on chosen authentication method + * @param string $url URL of the endpoint. + * @param array $call Associated array of "variable" => "value" + * @param array $keys The keys dependant on chosen authentication method + * * @return string */ function send_api_get_call($url, array $call, array $keys) { @@ -1045,32 +1124,38 @@ function send_api_get_call($url, array $call, array $keys) { /** * Send a GET call * - * @param string $url URL of the endpoint. - * @param array $call Associated array of "variable" => "value" - * @param array $keys The keys dependant on chosen authentication method - * @param string $post_data The post data + * @param string $url URL of the endpoint. + * @param array $call Associated array of "variable" => "value" + * @param array $keys The keys dependant on chosen authentication method + * @param string $post_data The post data * @param string $content_type The content type + * * @return string */ -function send_api_post_call($url, array $call, array $keys, $post_data, $content_type = 'application/octet-stream') { +function send_api_post_call($url, array $call, array $keys, $post_data, +$content_type = 'application/octet-stream') { + return send_api_call($keys, $url, $call, 'POST', $post_data, $content_type); } /** - * Return a key array suitable for the API client using the standard authentication method based on api-keys and secret keys. + * Return a key array suitable for the API client using the standard + * authentication method based on api-keys and secret keys. * * @param string $secret_key Your secret key - * @param string $api_key Your api key + * @param string $api_key Your api key + * * @return array */ function get_standard_api_key_array($secret_key, $api_key) { return array('public' => $api_key, 'private' => $secret_key); } -// System functions /////////////////////////////////////////////////////////////////////// +// System functions /** * Simple api to return a list of all api's installed on the system. + * * @return array */ function list_all_apis() { @@ -1090,6 +1175,7 @@ function list_all_apis() { * * @param string $username Username * @param string $password Clear text password + * * @return string Token string or exception * @throws SecurityException */ @@ -1104,7 +1190,7 @@ function auth_gettoken($username, $password) { throw new SecurityException(elgg_echo('SecurityException:authenticationfailed')); } -// Error handler functions //////////////////////////////////////////////////////////////// +// Error handler functions /** Define a global array of errors */ $ERRORS = array(); @@ -1114,22 +1200,25 @@ $ERRORS = array(); * This function acts as a wrapper to catch and report PHP error messages. * * @see http://uk3.php.net/set-error-handler - * @param int $errno - * @param string $errmsg - * @param string $filename - * @param int $linenum - * @param array $vars - * @return none + * + * @param int $errno Error number + * @param string $errmsg Human readable message + * @param string $filename Filename + * @param int $linenum Line number + * @param array $vars Vars + * + * @return void */ -function __php_api_error_handler($errno, $errmsg, $filename, $linenum, $vars) { +function _php_api_error_handler($errno, $errmsg, $filename, $linenum, $vars) { global $ERRORS; - $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file " . $filename . " (line " . $linenum . ")"; + $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file " + . $filename . " (line " . $linenum . ")"; switch ($errno) { case E_USER_ERROR: error_log("ERROR: " . $error); - $ERRORS[] = "ERROR: " .$error; + $ERRORS[] = "ERROR: " . $error; // Since this is a fatal error, we want to stop any further execution but do so gracefully. throw new Exception("ERROR: " . $error); @@ -1138,12 +1227,12 @@ function __php_api_error_handler($errno, $errmsg, $filename, $linenum, $vars) { case E_WARNING : case E_USER_WARNING : error_log("WARNING: " . $error); - $ERRORS[] = "WARNING: " .$error; + $ERRORS[] = "WARNING: " . $error; break; default: error_log("DEBUG: " . $error); - $ERRORS[] = "DEBUG: " .$error; + $ERRORS[] = "DEBUG: " . $error; } } @@ -1153,10 +1242,11 @@ function __php_api_error_handler($errno, $errmsg, $filename, $linenum, $vars) { * uncaught exception, end API execution and return the result to the requestor * as an ErrorResult in the requested format. * - * @param Exception $exception - * @return none + * @param Exception $exception Exception + * + * @return void */ -function __php_api_exception_handler($exception) { +function _php_api_exception_handler($exception) { error_log("*** FATAL EXCEPTION (API) *** : " . $exception); @@ -1167,21 +1257,23 @@ function __php_api_exception_handler($exception) { } -// Services handler /////////////////////////////////////////// +// Services handler /** * Services handler - turns request over to the registered handler * If no handler is found, this returns a 404 error * - * @param string $handler - * @param array $request + * @param string $handler Handler name + * @param array $request Request string + * + * @return void */ function service_handler($handler, $request) { global $CONFIG; set_context('api'); - $request = explode('/',$request); + $request = explode('/', $request); // after the handler, the first identifier is response format // ex) http://example.org/services/api/rest/xml/?method=test @@ -1198,7 +1290,9 @@ function service_handler($handler, $request) { // no handlers set or bad url header("HTTP/1.0 404 Not Found"); exit; - } else if (isset($CONFIG->servicehandler[$handler]) && is_callable($CONFIG->servicehandler[$handler])) { + } else if (isset($CONFIG->servicehandler[$handler]) + && is_callable($CONFIG->servicehandler[$handler])) { + $function = $CONFIG->servicehandler[$handler]; $function($request, $handler); } else { @@ -1211,9 +1305,10 @@ function service_handler($handler, $request) { /** * Registers a web services handler * - * @param string $handler web services type + * @param string $handler Web services type * @param string $function Your function name - * @return true|false Depending on success + * + * @return bool Depending on success * @since 1.7.0 */ function register_service_handler($handler, $function) { @@ -1235,6 +1330,7 @@ function register_service_handler($handler, $function) { * with register_service_handler(). * * @param string $handler web services type + * * @return 1.7.0 */ function unregister_service_handler($handler) { @@ -1244,10 +1340,12 @@ function unregister_service_handler($handler) { } } -// REST handler ////////////////////////////////////////////////////////////// +// REST handler /** * REST API handler + * + * @return void */ function rest_handler() { global $CONFIG; @@ -1255,10 +1353,17 @@ function rest_handler() { require $CONFIG->path . "services/api/rest_api.php"; } -// Initialisation ///////////////////////////////////////////////////////////// +// Initialisation /** * Unit tests for API + * + * @param sting $hook unit_test + * @param string $type system + * @param mixed $value Array of tests + * @param mixed $params Params + * + * @return array */ function api_unit_test($hook, $type, $value, $params) { global $CONFIG; @@ -1269,15 +1374,17 @@ function api_unit_test($hook, $type, $value, $params) { /** * Initialise the API subsystem. * + * @return void */ function api_init() { // Register a page handler, so we can have nice URLs - register_service_handler('rest','rest_handler'); + register_service_handler('rest', 'rest_handler'); register_plugin_hook('unit_test', 'system', 'api_unit_test'); // expose the list of api methods - expose_function("system.api.list", "list_all_apis", NULL, elgg_echo("system.api.list"), "GET", false, false); + expose_function("system.api.list", "list_all_apis", NULL, + elgg_echo("system.api.list"), "GET", false, false); // The authentication token api expose_function("auth.gettoken", @@ -1292,4 +1399,4 @@ function api_init() { } -register_elgg_event_handler('init','system','api_init'); +register_elgg_event_handler('init', 'system', 'api_init'); diff --git a/engine/lib/calendar.php b/engine/lib/calendar.php index ea0f5c51d..f1a18ddb8 100644 --- a/engine/lib/calendar.php +++ b/engine/lib/calendar.php @@ -2,13 +2,20 @@ /** * Elgg calendar / entity / event functions. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Calendar + * + * @todo Implement or remove */ /** * Return a timestamp for the start of a given day (defaults today). * + * @param int $day Day + * @param int $month Month + * @param int $year Year + * + * @return int */ function get_day_start($day = null, $month = null, $year = null) { return mktime(0, 0, 0, $month, $day, $year); @@ -17,6 +24,11 @@ function get_day_start($day = null, $month = null, $year = null) { /** * Return a timestamp for the end of a given day (defaults today). * + * @param int $day Day + * @param int $month Month + * @param int $year Year + * + * @return int */ function get_day_end($day = null, $month = null, $year = null) { return mktime(23, 59, 59, $month, $day, $year); @@ -25,19 +37,23 @@ function get_day_end($day = null, $month = null, $year = null) { /** * Return the notable entities for a given time period. * - * @param int $start_time The start time as a unix timestamp. - * @param int $end_time The end time as a unix timestamp. - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param string $order_by The field to order by; by default, time_created desc - * @param int $limit The number of entities to return; 10 by default - * @param int $offset The indexing offset, 0 by default - * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param int|array $container_guid The container or containers to get entities from (default: all containers). + * @param int $start_time The start time as a unix timestamp. + * @param int $end_time The end time as a unix timestamp. + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param string $order_by The field to order by; by default, time_created desc + * @param int $limit The number of entities to return; 10 by default + * @param int $offset The indexing offset, 0 by default + * @param boolean $count Set to true to get a count instead of entities. Defaults to false. + * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any. + * @param mixed $container_guid Container or containers to get entities from (default: any). + * + * @return array|false */ -function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $owner_guid = 0, $order_by = "asc", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) { +function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $owner_guid = 0, +$order_by = "asc", $limit = 10, $offset = 0, $count = false, $site_guid = 0, +$container_guid = null) { global $CONFIG; if ($subtype === false || $subtype === null || $subtype === 0) { @@ -59,15 +75,17 @@ function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", if (is_array($type)) { $tempwhere = ""; if (sizeof($type)) { - foreach($type as $typekey => $subtypearray) { - foreach($subtypearray as $subtypeval) { + foreach ($type as $typekey => $subtypearray) { + foreach ($subtypearray as $subtypeval) { $typekey = sanitise_string($typekey); if (!empty($subtypeval)) { $subtypeval = (int) get_subtype_id($typekey, $subtypeval); } else { $subtypeval = 0; } - if (!empty($tempwhere)) $tempwhere .= " or "; + if (!empty($tempwhere)) { + $tempwhere .= " or "; + } $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})"; } } @@ -83,7 +101,7 @@ function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $where[] = "e.type='$type'"; } - if ($subtype!=="") { + if ($subtype !== "") { $where[] = "e.subtype=$subtype"; } } @@ -96,8 +114,8 @@ function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", } else if (sizeof($owner_guid) > 0) { $owner_array = array_map('sanitise_int', $owner_guid); // Cast every element to the owner_guid array to int - $owner_guid = implode(",",$owner_guid); // - $where[] = "e.owner_guid in ({$owner_guid})" ; // + $owner_guid = implode(",", $owner_guid); + $where[] = "e.owner_guid in ({$owner_guid})"; } if (is_null($container_guid)) { $container_guid = $owner_array; @@ -110,8 +128,10 @@ function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", if (!is_null($container_guid)) { if (is_array($container_guid)) { - foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val; - $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")"; + foreach ($container_guid as $key => $val) { + $container_guid[$key] = (int) $val; + } + $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")"; } else { $container_guid = (int) $container_guid; $where[] = "e.container_guid = {$container_guid}"; @@ -163,21 +183,25 @@ function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", /** * Return the notable entities for a given time period based on an item of metadata. * - * @param int $start_time The start time as a unix timestamp. - * @param int $end_time The end time as a unix timestamp. - * @param mixed $meta_name - * @param mixed $meta_value - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param int $start_time The start time as a unix timestamp. + * @param int $end_time The end time as a unix timestamp. + * @param mixed $meta_name Metadata name + * @param mixed $meta_value Metadata value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity. - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Optional ordering. + * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any. + * @param bool $count If true, returns count instead of entities. (Default: false) * * @return int|array A list of entities, or a count if $count is set to true */ -function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) { +function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $meta_value = "", +$entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", +$site_guid = 0, $count = false) { + global $CONFIG; $meta_n = get_metastring_id($meta_name); @@ -195,7 +219,7 @@ function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $order_by = sanitise_string($order_by); $site_guid = (int) $site_guid; if ((is_array($owner_guid) && (count($owner_guid)))) { - foreach($owner_guid as $key => $guid) { + foreach ($owner_guid as $key => $guid) { $owner_guid[$key] = (int) $guid; } } else { @@ -210,7 +234,7 @@ function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $where = array(); - if ($entity_type!="") { + if ($entity_type != "") { $where[] = "e.type='$entity_type'"; } @@ -218,11 +242,11 @@ function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $where[] = "e.subtype=$entity_subtype"; } - if ($meta_name!="") { + if ($meta_name != "") { $where[] = "m.name_id='$meta_n'"; } - if ($meta_value!="") { + if ($meta_value != "") { $where[] = "m.value_id='$meta_v'"; } @@ -231,7 +255,7 @@ function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, } if (is_array($owner_guid)) { - $where[] = "e.container_guid in (".implode(",",$owner_guid).")"; + $where[] = "e.container_guid in (" . implode(",", $owner_guid) . ")"; } else if ($owner_guid > 0) { $where[] = "e.container_guid = {$owner_guid}"; } @@ -258,7 +282,9 @@ function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $query = "SELECT count(distinct e.guid) as total "; } - $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid $cal_join where"; + $query .= "from {$CONFIG->dbprefix}entities e" + . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid $cal_join where"; + foreach ($where as $w) { $query .= " $w and "; } @@ -283,22 +309,28 @@ function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, /** * Return the notable entities for a given time period based on their relationship. * - * @param int $start_time The start time as a unix timestamp. - * @param int $end_time The end time as a unix timestamp. - * @param string $relationship The relationship eg "friends_of" - * @param int $relationship_guid The guid of the entity to use query - * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of" - * @param string $type - * @param string $subtype - * @param int $owner_guid - * @param string $order_by - * @param int $limit - * @param int $offset - * @param boolean $count Set to true if you want to count the number of entities instead (default false) - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * @param int $start_time The start time as a unix timestamp. + * @param int $end_time The end time as a unix timestamp. + * @param string $relationship The relationship eg "friends_of" + * @param int $relationship_guid The guid of the entity to use query + * @param bool $inverse_relationship Reverse the normal function of the query to say + * "give me all entities for whom $relationship_guid is a + * $relationship of" + * @param string $type Entity type + * @param string $subtype Entity subtype + * @param int $owner_guid Owner GUID + * @param string $order_by Optional Order by + * @param int $limit Limit + * @param int $offset Offset + * @param boolean $count If true returns a count of entities (default false) + * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any + * * @return array|int|false An array of entities, or the number of entities, or false on failure */ -function get_noteable_entities_from_relationship($start_time, $end_time, $relationship, $relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) { +function get_noteable_entities_from_relationship($start_time, $end_time, $relationship, +$relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0, +$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) { + global $CONFIG; $start_time = (int)$start_time; @@ -324,11 +356,12 @@ function get_noteable_entities_from_relationship($start_time, $end_time, $relati $where = array(); - if ($relationship!="") { + if ($relationship != "") { $where[] = "r.relationship='$relationship'"; } if ($relationship_guid) { - $where[] = ($inverse_relationship ? "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'"); + $where[] = $inverse_relationship ? + "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'"; } if ($type != "") { $where[] = "e.type='$type'"; @@ -369,7 +402,9 @@ function get_noteable_entities_from_relationship($start_time, $end_time, $relati } else { $query = "SELECT distinct e.* "; } - $query .= " from {$CONFIG->dbprefix}entity_relationships r JOIN {$CONFIG->dbprefix}entities e on $joinon $cal_join where "; + $query .= " from {$CONFIG->dbprefix}entity_relationships r" + . " JOIN {$CONFIG->dbprefix}entities e on $joinon $cal_join where "; + foreach ($where as $w) { $query .= " $w and "; } @@ -389,66 +424,84 @@ function get_noteable_entities_from_relationship($start_time, $end_time, $relati /** * Get all entities for today. * - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param string $order_by The field to order by; by default, time_created desc - * @param int $limit The number of entities to return; 10 by default - * @param int $offset The indexing offset, 0 by default - * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param int|array $container_guid The container or containers to get entities from (default: all containers). + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param string $order_by The field to order by; by default, time_created desc + * @param int $limit The number of entities to return; 10 by default + * @param int $offset The indexing offset, 0 by default + * @param boolean $count If true returns a count of entities (default false) + * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any + * @param mixed $container_guid Container(s) to get entities from (default: any). + * + * @return array|false */ -function get_todays_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) { +function get_todays_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", +$limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) { + $day_start = get_day_start(); $day_end = get_day_end(); - return get_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $order_by, $limit, $offset, $count, $site_guid, $container_guid); + return get_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $order_by, + $limit, $offset, $count, $site_guid, $container_guid); } /** * Get entities for today from metadata. * - * @param mixed $meta_name - * @param mixed $meta_value - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param mixed $meta_name Metadata name + * @param mixed $meta_value Metadata value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity. - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Optional ordering. + * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any. + * @param bool $count If true, returns count instead of entities. (Default: false) * * @return int|array A list of entities, or a count if $count is set to true */ -function get_todays_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) { +function get_todays_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "", +$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, +$count = false) { + $day_start = get_day_start(); $day_end = get_day_end(); - return get_notable_entities_from_metadata($day_start, $day_end, $meta_name, $meta_value, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, $order_by, $site_guid, $count); + return get_notable_entities_from_metadata($day_start, $day_end, $meta_name, $meta_value, + $entity_type, $entity_subtype, $owner_guid, $limit, $offset, $order_by, $site_guid, $count); } /** * Get entities for today from a relationship * - * @param string $relationship The relationship eg "friends_of" - * @param int $relationship_guid The guid of the entity to use query - * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of" - * @param string $type - * @param string $subtype - * @param int $owner_guid - * @param string $order_by - * @param int $limit - * @param int $offset - * @param boolean $count Set to true if you want to count the number of entities instead (default false) - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * @param string $relationship The relationship eg "friends_of" + * @param int $relationship_guid The guid of the entity to use query + * @param bool $inverse_relationship Reverse the normal function of the query to say + * "give me all entities for whom $relationship_guid is a + * $relationship of" + * @param string $type Entity type + * @param string $subtype Entity subtype + * @param int $owner_guid Owner GUID + * @param string $order_by Optional Order by + * @param int $limit Limit + * @param int $offset Offset + * @param boolean $count If true returns a count of entities (default false) + * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any + * * @return array|int|false An array of entities, or the number of entities, or false on failure */ -function get_todays_entities_from_relationship($relationship, $relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) { +function get_todays_entities_from_relationship($relationship, $relationship_guid, +$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0, +$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) { + $day_start = get_day_start(); $day_end = get_day_end(); - return get_notable_entities_from_relationship($day_start, $day_end, $relationship, $relationship_guid, $inverse_relationship, $type, $subtype, $owner_guid, $order_by, $limit, $offset, $count, $site_guid); + return get_notable_entities_from_relationship($day_start, $day_end, $relationship, + $relationship_guid, $inverse_relationship, $type, $subtype, $owner_guid, $order_by, + $limit, $offset, $count, $site_guid); } /** @@ -456,23 +509,30 @@ function get_todays_entities_from_relationship($relationship, $relationship_guid * * @see elgg_view_entity_list * - * @param int $start_time The start time as a unix timestamp. - * @param int $end_time The end time as a unix timestamp. - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param int $limit The number of entities to display per page (default: 10) - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view - * @param true|false $pagination Display pagination? Default: true + * @param int $start_time The start time as a unix timestamp. + * @param int $end_time The end time as a unix timestamp. + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param int $limit The number of entities to return; 10 by default + * @param boolean $fullview Whether or not to display the full view (default: true) + * @param boolean $viewtypetoggle Whether or not to allow gallery view + * @param boolean $navigation Display pagination? Default: true + * * @return string A viewable list of entities */ -function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) { +function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", $owner_guid = 0, +$limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) { + $offset = (int) get_input('offset'); - $count = get_notable_entities($start_time, $end_time, $type, $subtype, $owner_guid, "", $limit, $offset, true); - $entities = get_notable_entities($start_time, $end_time,$type, $subtype, $owner_guid, "", $limit, $offset); + $count = get_notable_entities($start_time, $end_time, $type, $subtype, + $owner_guid, "", $limit, $offset, true); + + $entities = get_notable_entities($start_time, $end_time, $type, $subtype, + $owner_guid, "", $limit, $offset); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $navigation); + return elgg_view_entity_list($entities, $count, $offset, $limit, + $fullview, $viewtypetoggle, $navigation); } /** @@ -480,18 +540,22 @@ function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", * * @see list_notable_entities * - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param int $limit The number of entities to display per page (default: 10) - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view - * @param true|false $pagination Display pagination? Default: true + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param int $limit The number of entities to return; 10 by default + * @param boolean $fullview Whether or not to display the full view (default: true) + * @param boolean $viewtypetoggle Whether or not to allow gallery view + * @param boolean $navigation Display pagination? Default: true + * * @return string A viewable list of entities */ -function list_todays_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) { +function list_todays_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, +$fullview = true, $viewtypetoggle = false, $navigation = true) { + $day_start = get_day_start(); $day_end = get_day_end(); - return list_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $limit, $fullview, $viewtypetoggle, $navigation); + return list_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $limit, + $fullview, $viewtypetoggle, $navigation); }
\ No newline at end of file diff --git a/engine/lib/configuration.php b/engine/lib/configuration.php index 0394cc770..d8c11b485 100644 --- a/engine/lib/configuration.php +++ b/engine/lib/configuration.php @@ -24,9 +24,11 @@ * These settings are stored in the dbprefix_config table and read during system * boot into $CONFIG. * - * @param string $name The name of the field. - * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default). + * @param string $name The name of the field. + * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default). + * * @return int|false The number of affected rows or false on error. + * * @see get_config() * @see set_config() */ @@ -39,7 +41,8 @@ function unset_config($name, $site_guid = 0) { $site_guid = (int) $CONFIG->site_id; } - return delete_data("delete from {$CONFIG->dbprefix}config where name='$name' and site_guid=$site_guid"); + $query = "delete from {$CONFIG->dbprefix}config where name='$name' and site_guid=$site_guid"; + return delete_data($query); } /** @@ -51,9 +54,10 @@ function unset_config($name, $site_guid = 0) { * These settings are stored in the dbprefix_config table and read during system * boot into $CONFIG. * - * @param string $name The name of the configuration value - * @param string $value Its value - * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default) + * @param string $name The name of the configuration value + * @param string $value Its value + * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default) + * * @return 0 * @todo The config table doens't have numeric primary keys so insert_data returns 0. * @todo Use "INSERT ... ON DUPLICATE KEY UPDATE" instead of trying to delete then add. @@ -73,7 +77,9 @@ function set_config($name, $value, $site_guid = 0) { $CONFIG->$name = $value; $value = sanitise_string(serialize($value)); - return insert_data("insert into {$CONFIG->dbprefix}config set name = '{$name}', value = '{$value}', site_guid = {$site_guid}"); + $query = "insert into {$CONFIG->dbprefix}config" + . " set name = '{$name}', value = '{$value}', site_guid = {$site_guid}"; + return insert_data($query); } /** @@ -83,8 +89,9 @@ function set_config($name, $value, $site_guid = 0) { * These settings are stored in the dbprefix_config table and read during system * boot into $CONFIG. * - * @param string $name The name of the config value - * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default) + * @param string $name The name of the config value + * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default) + * * @return mixed|false * @see set_config() * @see unset_config() @@ -115,6 +122,7 @@ function get_config($name, $site_guid = 0) { * Loads all configuration values from the dbprefix_config table into $CONFIG. * * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default) + * * @return bool */ function get_all_config($site_guid = 0) { @@ -141,12 +149,14 @@ function get_all_config($site_guid = 0) { /** * Sets defaults for or attempts to autodetect some common config values and * loads them into $CONFIG. + * + * @return void */ function set_default_config() { global $CONFIG; if (empty($CONFIG->path)) { - $CONFIG->path = str_replace("\\","/",dirname(dirname(dirname(__FILE__)))) . "/"; + $CONFIG->path = str_replace("\\", "/", dirname(dirname(dirname(__FILE__)))) . "/"; } if (empty($CONFIG->viewpath)) { @@ -170,8 +180,8 @@ function set_default_config() { $CONFIG->wwwroot .= $request; */ - $pathpart = str_replace("//","/",str_replace($_SERVER['DOCUMENT_ROOT'],"",$CONFIG->path)); - if (substr($pathpart,0,1) != "/") { + $pathpart = str_replace("//", "/", str_replace($_SERVER['DOCUMENT_ROOT'], "", $CONFIG->path)); + if (substr($pathpart, 0, 1) != "/") { $pathpart = "/" . $pathpart; } $CONFIG->wwwroot = "http://" . $_SERVER['HTTP_HOST'] . $pathpart; diff --git a/engine/lib/cron.php b/engine/lib/cron.php index c89a52395..811a4cdda 100644 --- a/engine/lib/cron.php +++ b/engine/lib/cron.php @@ -9,11 +9,12 @@ /** * Initialisation * + * @return void */ function cron_init() { // Register a pagehandler for cron - register_page_handler('cron','cron_page_handler'); - + register_page_handler('cron', 'cron_page_handler'); + // register a hook for Walled Garden public pages register_plugin_hook('public_pages', 'walled_garden', 'cron_public_pages'); } @@ -21,7 +22,9 @@ function cron_init() { /** * Cron handler for redirecting pages. * - * @param unknown_type $page + * @param array $page Pages + * + * @return void */ function cron_page_handler($page) { global $CONFIG; @@ -51,6 +54,16 @@ function cron_page_handler($page) { } } +/** + * Register cron's pages as public in case we're in Walled Garden mode + * + * @param string $hook public_pages + * @param string $type system + * @param array $return_value Array of pages to allow + * @param mixed $params Params + * + * @return array + */ function cron_public_pages($hook, $type, $return_value, $params) { $return_value[] = 'pg/cron/minute'; $return_value[] = 'pg/cron/fiveminute'; @@ -62,9 +75,9 @@ function cron_public_pages($hook, $type, $return_value, $params) { $return_value[] = 'pg/cron/monthly'; $return_value[] = 'pg/cron/yearly'; $return_value[] = 'pg/cron/reboot'; - + return $return_value; } // Register a startup event -register_elgg_event_handler('init','system','cron_init');
\ No newline at end of file +register_elgg_event_handler('init', 'system', 'cron_init');
\ No newline at end of file diff --git a/engine/lib/database.php b/engine/lib/database.php index 76ca6c193..4b0a38bb3 100644 --- a/engine/lib/database.php +++ b/engine/lib/database.php @@ -64,7 +64,10 @@ $dbcalls = 0; * * Connect to the database server and use the Elgg database for a particular database link * - * @param string $dblinkname The type of database connection. Used to identify the resource. eg "read", "write", or "readwrite". + * @param string $dblinkname The type of database connection. Used to identify the + * resource. eg "read", "write", or "readwrite". + * + * @return void */ function establish_db_link($dblinkname = "readwrite") { // Get configuration, and globalise database link @@ -72,7 +75,7 @@ function establish_db_link($dblinkname = "readwrite") { if ($dblinkname != "readwrite" && isset($CONFIG->db[$dblinkname])) { if (is_array($CONFIG->db[$dblinkname])) { - $index = rand(0,sizeof($CONFIG->db[$dblinkname])); + $index = rand(0, sizeof($CONFIG->db[$dblinkname])); $dbhost = $CONFIG->db[$dblinkname][$index]->dbhost; $dbuser = $CONFIG->db[$dblinkname][$index]->dbuser; $dbpass = $CONFIG->db[$dblinkname][$index]->dbpass; @@ -121,6 +124,8 @@ function establish_db_link($dblinkname = "readwrite") { * * If the configuration has been set up for multiple read/write databases, set those * links up separately; otherwise just create the one database link. + * + * @return void */ function setup_db_connections() { global $CONFIG, $dblink; @@ -135,6 +140,8 @@ function setup_db_connections() { /** * Display profiling information about db at NOTICE debug level upon shutdown. + * + * @return void */ function db_profiling_shutdown_hook() { global $dbcalls; @@ -145,6 +152,8 @@ function db_profiling_shutdown_hook() { /** * Execute any delayed queries upon shutdown. + * + * @return void */ function db_delayedexecution_shutdown_hook() { global $DB_DELAYED_QUERIES, $CONFIG; @@ -169,9 +178,7 @@ function db_delayedexecution_shutdown_hook() { * * @note Database connections are established upon first call to database. * - * @param string $event The event type - * @param string $object_type The object type - * @param mixed $object Used for nothing in this context + * @return true * @elgg_event_handler boot system */ function init_db() { @@ -189,6 +196,7 @@ function init_db() { * no links exist. * * @param string $dblinktype The type of link we want: "read", "write" or "readwrite". + * * @return object Database link */ function get_db_link($dblinktype) { @@ -207,8 +215,9 @@ function get_db_link($dblinktype) { /** * Execute an EXPLAIN for $query. * - * @param str $query The query to explain - * @param mixed $link The database link resource to user. + * @param str $query The query to explain + * @param mixed $link The database link resource to user. + * * @return mixed An object of the query's result, or FALSE */ function explain_query($query, $link) { @@ -228,8 +237,9 @@ function explain_query($query, $link) { * @internal * {@link $dbcalls} is incremented and the query is saved into the {@link $DB_QUERY_CACHE}. * - * @param string $query The query - * @param link $dblink the DB link + * @param string $query The query + * @param link $dblink The DB link + * * @return The result of mysql_query() * @throws DatabaseException */ @@ -256,9 +266,11 @@ function execute_query($query, $dblink) { * You can specify a handler function if you care about the result. This function will accept * the raw result from {@link mysql_query()}. * - * @param string $query The query to execute - * @param resource $dblink The database link to use - * @param string $handler A callback function to pass the results array to + * @param string $query The query to execute + * @param resource $dblink The database link to use + * @param string $handler A callback function to pass the results array to + * + * @return true */ function execute_delayed_query($query, $dblink, $handler = "") { global $DB_DELAYED_QUERIES; @@ -281,8 +293,10 @@ function execute_delayed_query($query, $dblink, $handler = "") { /** * Write wrapper for execute_delayed_query() * - * @param string $query The query to execute + * @param string $query The query to execute * @param string $handler The handler if you care about the result. + * + * @return true * @uses execute_delayed_query() * @uses get_db_link() */ @@ -293,8 +307,10 @@ function execute_delayed_write_query($query, $handler = "") { /** * Read wrapper for execute_delayed_query() * - * @param string $query The query to execute + * @param string $query The query to execute * @param string $handler The handler if you care about the result. + * + * @return true * @uses execute_delayed_query() * @uses get_db_link() */ @@ -313,8 +329,9 @@ function execute_delayed_read_query($query, $handler = "") { * * If no results are matched, FALSE is returned. * - * @param mixed $query The query being passed. - * @param string $call Optionally, the name of a function to call back to on each row + * @param mixed $query The query being passed. + * @param string $callback Optionally, the name of a function to call back to on each row + * * @return array|false An array of database result objects or callback function results or false */ function get_data($query, $callback = "") { @@ -372,7 +389,9 @@ function get_data($query, $callback = "") { * matched. If a callback function $callback is specified, the row will be passed * as the only argument to $callback. * - * @param mixed $query The query to execute. + * @param mixed $query The query to execute. + * @param string $callback A callback function + * * @return mixed A single database result object or the result of the callback function. */ function get_data_row($query, $callback = "") { @@ -425,7 +444,9 @@ function get_data_row($query, $callback = "") { * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}. * * @param mixed $query The query to execute. - * @return int|false The database id of the inserted row if a AUTO_INCREMENT field is defined, 0 if not, and false on failure. + * + * @return int|false The database id of the inserted row if a AUTO_INCREMENT field is + * defined, 0 if not, and false on failure. */ function insert_data($query) { global $CONFIG, $DB_QUERY_CACHE; @@ -452,6 +473,7 @@ function insert_data($query) { * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}. * * @param string $query The query to run. + * * @return Bool */ function update_data($query) { @@ -478,6 +500,7 @@ function update_data($query) { * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}. * * @param string $query The SQL query to run + * * @return int|false The number of affected rows or false on failure */ function delete_data($query) { @@ -524,12 +547,13 @@ function get_db_tables() { $tables = array(); if (is_array($result) && !empty($result)) { - foreach($result as $row) { + foreach ($result as $row) { $row = (array) $row; - if (is_array($row) && !empty($row)) - foreach($row as $element) { + if (is_array($row) && !empty($row)) { + foreach ($row as $element) { $tables[] = $element; } + } } } else { return FALSE; @@ -544,6 +568,8 @@ function get_db_tables() { * Executes an OPTIMIZE TABLE query on $table. Useful after large DB changes. * * @param string $table The name of the table to optimise + * + * @return bool */ function optimize_table($table) { $table = sanitise_string($table); @@ -553,7 +579,8 @@ function optimize_table($table) { /** * Get the last database error for a particular database link * - * @param resource $dblink + * @param resource $dblink The DB link + * * @return string Database error message */ function get_db_error($dblink) { @@ -576,6 +603,8 @@ function get_db_error($dblink) { * are displayed as a {@link DatabaseException} * * @param string $scriptlocation The full path to the script + * + * @return void * @throws DatabaseException */ function run_sql_script($scriptlocation) { @@ -588,11 +617,11 @@ function run_sql_script($scriptlocation) { $script = preg_replace('/\-\-.*\n/', '', $script); // Statements must end with ; and a newline - $sql_statements = preg_split('/;[\n\r]+/', $script); + $sql_statements = preg_split('/;[\n\r]+/', $script); - foreach($sql_statements as $statement) { + foreach ($sql_statements as $statement) { $statement = trim($statement); - $statement = str_replace("prefix_",$CONFIG->dbprefix,$statement); + $statement = str_replace("prefix_", $CONFIG->dbprefix, $statement); if (!empty($statement)) { try { $result = update_data($statement); @@ -603,13 +632,16 @@ function run_sql_script($scriptlocation) { } if (!empty($errors)) { $errortxt = ""; - foreach($errors as $error) { + foreach ($errors as $error) { $errortxt .= " {$error};"; } - throw new DatabaseException(elgg_echo('DatabaseException:DBSetupIssues') . $errortxt); + + $msg = elgg_echo('DatabaseException:DBSetupIssues') . $errortxt; + throw new DatabaseException($msg); } } else { - throw new DatabaseException(sprintf(elgg_echo('DatabaseException:ScriptNotFound'), $scriptlocation)); + $msg = sprintf(elgg_echo('DatabaseException:ScriptNotFound'), $scriptlocation); + throw new DatabaseException($msg); } } @@ -624,9 +656,10 @@ function run_sql_script($scriptlocation) { * * @warning Plugin authors should not call this function directly. * - * @param int $version The version you are upgrading from in the format YYYYMMDDII. - * @param string $fromdir Optional directory to load upgrades from (default: engine/schema/upgrades/) - * @param bool $quiet If true, will suppress all error messages. Should be used only for the upgrade from version <=1.6. + * @param int $version The version you are upgrading from in the format YYYYMMDDII. + * @param string $fromdir Optional directory to load upgrades from. default: engine/schema/upgrades/ + * @param bool $quiet If true, suppress all error messages. Only use for the upgrade from <=1.6. + * * @return bool * @see upgrade.php * @see version.php @@ -662,7 +695,7 @@ function db_upgrade($version, $fromdir = "", $quiet = FALSE) { asort($sqlupgrades); if (sizeof($sqlupgrades) > 0) { - foreach($sqlupgrades as $sqlfile) { + foreach ($sqlupgrades as $sqlfile) { // hide all errors. if ($quiet) { @@ -684,8 +717,9 @@ function db_upgrade($version, $fromdir = "", $quiet = FALSE) { /** * Sanitise a string for database use, but with the option of escaping extra characters. * - * @param string $string The string to sanitise + * @param string $string The string to sanitise * @param string $extra_escapeable Extra characters to escape with '\\' + * * @return string The escaped string */ function sanitise_string_special($string, $extra_escapeable = '') { @@ -702,6 +736,7 @@ function sanitise_string_special($string, $extra_escapeable = '') { * Sanitise a string for database use. * * @param string $string The string to sanitise + * * @return string Sanitised string */ function sanitise_string($string) { @@ -714,6 +749,7 @@ function sanitise_string($string) { * Wrapper function for alternate English spelling * * @param string $string The string to sanitise + * * @return string Sanitised string */ function sanitize_string($string) { @@ -723,7 +759,8 @@ function sanitize_string($string) { /** * Sanitises an integer for database use. * - * @param int $int + * @param int $int Integer + * * @return int Sanitised integer */ function sanitise_int($int) { @@ -733,7 +770,8 @@ function sanitise_int($int) { /** * Wrapper function for alternate English spelling * - * @param int $int + * @param int $int Integer + * * @return int Sanitised integer */ function sanitize_int($int) { diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 81be96752..4d51e6d7d 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -2,17 +2,24 @@ /** * Bootstrapping and helper procedural code available for use in Elgg core and plugins. * - * * @package Elgg.Core * @todo These functions can't be subpackaged because they cover a wide mix of - * puposes and subsystems. Many of them should be moved to more relevant files. + * purposes and subsystems. Many of them should be moved to more relevant files. */ // prep core classes to be autoloadable -spl_autoload_register('__elgg_autoload'); +spl_autoload_register('_elgg_autoload'); elgg_register_classes(dirname(dirname(__FILE__)) . '/classes'); -function __elgg_autoload($class) { +/** + * Autoload classes + * + * @param string $class The name of the class + * + * @return void + * @throws Exception + */ +function _elgg_autoload($class) { global $CONFIG; if (!include($CONFIG->classes[$class])) { @@ -20,6 +27,14 @@ function __elgg_autoload($class) { } } +/** + * Register all files found in $dir as classes + * Need to be named MyClass.php + * + * @param string $dir The dir to look in + * + * @return void + */ function elgg_register_classes($dir) { $classes = elgg_get_file_list($dir, array(), array(), array('.php')); @@ -28,6 +43,14 @@ function elgg_register_classes($dir) { } } +/** + * Register a classname to a file. + * + * @param string $class The name of the class + * @param string $location The location of the file + * + * @return void + */ function elgg_register_class($class, $location) { global $CONFIG; @@ -41,9 +64,11 @@ function elgg_register_class($class, $location) { /** * Forward to $location. * - * Sends a 'Location: $location' header and exists. If headers have already been sent, returns FALSE. + * Sends a 'Location: $location' header and exists. If headers have + * already been sent, returns FALSE. * * @param string $location URL to forward to browser to. Can be path relative to the network's URL. + * * @return False False if headers have been sent. Terminates execution if forwarding. */ function forward($location = "") { @@ -95,11 +120,11 @@ function current_page_url() { $page .= $url['user']; } if ((isset($url['pass'])) && ($url['pass'])) { - $page .= ":".$url['pass']; + $page .= ":" . $url['pass']; } if ((isset($url['user']) && $url['user']) || (isset($url['pass']) && $url['pass'])) { - $page .="@"; + $page .= "@"; } $page .= $url['host']; @@ -154,6 +179,7 @@ function elgg_filepath_cache_reset() { * 'view_paths'. * * @param mixed $data The data + * * @return bool On success */ function elgg_filepath_cache_save($data) { @@ -170,7 +196,8 @@ function elgg_filepath_cache_save($data) { /** * Returns the contents of the views file paths cache from disk. * - * @return mixed Null if simplecache isn't enabled, the contents of the views file paths cache if it is. + * @return mixed Null if simplecache isn't enabled, the contents of the + * views file paths cache if it is. */ function elgg_filepath_cache_load() { global $CONFIG; @@ -224,6 +251,14 @@ function elgg_disable_filepath_cache() { * * @see elgg_add_submenu_item() * @deprecated 1.8 + * + * @param string $label The label + * @param string $link The link + * @param string $group The group to store item in + * @param boolean $onclick Add a confirmation when clicked? + * @param boolean $selected Is menu item selected + * + * @return bool */ function add_submenu_item($label, $link, $group = 'default', $onclick = false, $selected = NULL) { elgg_deprecated_notice('add_submenu_item was deprecated by elgg_add_submenu_item', 1.8); @@ -239,7 +274,7 @@ function add_submenu_item($label, $link, $group = 'default', $onclick = false, $ } if ($onclick) { - $js = "onclick=\"javascript:return confirm('". elgg_echo('deleteconfirm') . "')\""; + $js = "onclick=\"javascript:return confirm('" . elgg_echo('deleteconfirm') . "')\""; $item['vars'] = array('js' => $js); } // submenu items were added in the page setup hook usually by checking @@ -258,7 +293,7 @@ function add_submenu_item($label, $link, $group = 'default', $onclick = false, $ /** * Add an entry to the submenu. * - * @param array $item The item as: + * @param array $item The item as: * <code> * array( * 'title' => 'Text to display', @@ -270,8 +305,10 @@ function add_submenu_item($label, $link, $group = 'default', $onclick = false, $ * ) * </code> * - * @param string $context Context in which to display this menu item. 'all' will make it show up all the time. Use sparingly. - * @param string $group Group for the item. Each submenu group has its own <ul> + * @param string $context Context in which to display this menu item. 'all' + * will make it show up all the time. Use sparingly. + * @param string $group Group for the item. Each submenu group has its own <ul> + * * @return BOOL * @since 1.8 * @see elgg_prepare_submenu @@ -323,10 +360,13 @@ function elgg_add_submenu_item(array $item, $context = 'all', $group = 'default' /** * Properly nest all submenu entries for contexts $context and 'all' * - * @param string $context - * @param bool $sort Sort the menu items alphabetically + * @param string $context Context for menus + * @param bool $sort Sort the menu items alphabetically + * * @since 1.8 * @see elgg_add_submenu_item + * + * @return true */ function elgg_prepare_submenu($context = 'main', $sort = FALSE) { global $CONFIG; @@ -412,8 +452,10 @@ function elgg_prepare_submenu($context = 'main', $sort = FALSE) { /** * Helper function used to sort submenu items by their display text. * - * @param object $a - * @param object $b + * @param object $a First object + * @param object $b Second object + * + * @return int * @since 1.8 * @see elgg_prepare_submenu */ @@ -429,6 +471,8 @@ function elgg_submenu_item_cmp($a, $b) { * * @see elgg_get_submenu() * @deprecated 1.8 + * + * @return string */ function get_submenu() { elgg_deprecated_notice("get_submenu() has been deprecated by elgg_get_submenu()", 1.8); @@ -439,7 +483,8 @@ function get_submenu() { * Return the HTML for a sidemenu. * * @param string $context The context of the submenu (defaults to main) - * @param BOOL $sort Sort by display name? + * @param BOOL $sort Sort by display name? + * * @return string Formatted HTML. * @since 1.8 * @todo Rename to a view function. See {@trac #2320}. @@ -500,7 +545,7 @@ function elgg_get_submenu($context = NULL, $sort = FALSE) { if ($item = next($items)) { continue; } else { - while($depth > 0) { + while ($depth > 0) { $depth--; $items = array_pop($temp_items); if ($item = next($items)) { @@ -513,7 +558,8 @@ function elgg_get_submenu($context = NULL, $sort = FALSE) { } } - $submenu_html .= elgg_view('navigation/submenu_group', array('group' => $group, 'items' => $items)); + $vars = array('group' => $group, 'items' => $items); + $submenu_html .= elgg_view('navigation/submenu_group', $vars); } // include the JS for the expand menus too @@ -524,11 +570,13 @@ function elgg_get_submenu($context = NULL, $sort = FALSE) { * Returns the HTML for "likes" and "like this" on entities. * * @param ElggEntity $entity The entity to like + * * @return string|false The HTML for the likes, or false on failure + * * @since 1.8 * @see @elgg_view likes/forms/edit */ -function elgg_view_likes($entity){ +function elgg_view_likes($entity) { if (!($entity instanceof ElggEntity)) { return false; } @@ -544,7 +592,8 @@ function elgg_view_likes($entity){ /** * Count the number of likes attached to an entity * - * @param ElggEntity $entity + * @param ElggEntity $entity The entity to count likes for + * * @return int Number of likes * @since 1.8 */ @@ -560,7 +609,8 @@ function elgg_count_likes($entity) { /** * Count the number of comments attached to an entity * - * @param ElggEntity $entity + * @param ElggEntity $entity The entity to count comments for + * * @return int Number of comments */ function elgg_count_comments($entity) { @@ -573,7 +623,15 @@ function elgg_count_comments($entity) { } /** - * @deprecated 1.7 + * Returns all php files in a directory. + * + * @deprecated 1.7 Use elgg_get_file_list() instead + * + * @param string $directory Directory to look in + * @param array $exceptions Array of extensions (with .!) to ignore + * @param array $list A list files to include in the return + * + * @return array */ function get_library_files($directory, $exceptions = array(), $list = array()) { elgg_deprecated_notice('get_library_files() deprecated by elgg_get_file_list()', 1.7); @@ -585,13 +643,16 @@ function get_library_files($directory, $exceptions = array(), $list = array()) { * * Only returns files. Does not recurse into subdirs. * - * @param string $directory - * @param array $exceptions Array of filenames to ignore - * @param array $list Array of files to append to - * @param mixed $extensions Array of extensions to allow, NULL for all. Use a dot: array('.php'). + * @param string $directory Directory to look in + * @param array $exceptions Array of filenames to ignore + * @param array $list Array of files to append to + * @param mixed $extensions Array of extensions to allow, NULL for all. Use a dot: array('.php'). + * * @return array Filenames in $directory, in the form $directory/filename. */ -function elgg_get_file_list($directory, $exceptions = array(), $list = array(), $extensions = NULL) { +function elgg_get_file_list($directory, $exceptions = array(), $list = array(), +$extensions = NULL) { + $directory = sanitise_filepath($directory); if ($handle = opendir($directory)) { while (($file = readdir($handle)) !== FALSE) { @@ -616,7 +677,9 @@ function elgg_get_file_list($directory, $exceptions = array(), $list = array(), /** * Sanitise file paths ensuring that they begin and end with slashes etc. * - * @param string $path The path + * @param string $path The path + * @param bool $append_slash Add tailing slash + * * @return string */ function sanitise_filepath($path, $append_slash = TRUE) { @@ -641,14 +704,17 @@ function sanitise_filepath($path, $append_slash = TRUE) { * * This is only used for the site-wide menu. See {@link add_menu()}. * - * @param string $register_name The name of the top-level register - * @param string $subregister_name The name of the subregister - * @param mixed $subregister_value The value of the subregister - * @param array $children_array Optionally, an array of children + * @param string $register_name The name of the top-level register + * @param string $subregister_name The name of the subregister + * @param mixed $subregister_value The value of the subregister + * @param array $children_array Optionally, an array of children + * * @return true|false Depending on success * @todo Can be deprecated when the new menu system is introduced. */ -function add_to_register($register_name, $subregister_name, $subregister_value, $children_array = array()) { +function add_to_register($register_name, $subregister_name, $subregister_value, +$children_array = array()) { + global $CONFIG; if (empty($register_name) || empty($subregister_name)) { @@ -680,8 +746,9 @@ function add_to_register($register_name, $subregister_name, $subregister_value, * * This is used to by {@link remove_menu()} to remove site-wide menu items. * - * @param string $register_name The name of the top-level register + * @param string $register_name The name of the top-level register * @param string $subregister_name The name of the subregister + * * @return true|false Depending on success * @since 1.7.0 * @todo Can be deprecated when the new menu system is introduced. @@ -712,9 +779,10 @@ function remove_from_register($register_name, $subregister_name) { /** * Constructs and returns a register object. * - * @param string $register_name The name of the register - * @param mixed $register_value The value of the register - * @param array $children_array Optionally, an array of children + * @param string $register_name The name of the register + * @param mixed $register_value The value of the register + * @param array $children_array Optionally, an array of children + * * @return false|stdClass Depending on success * @todo Can be deprecated when the new menu system is introduced. */ @@ -736,6 +804,7 @@ function make_register_object($register_name, $register_value, $children_array = * If it exists, returns a particular register as an array * * @param string $register_name The name of the register + * * @return array|false Depending on success * @todo Can be deprecated when the new menu system is introduced. */ @@ -754,10 +823,11 @@ function get_register($register_name) { * * You can obtain the menu array by calling {@link get_register('menu')} * - * @param string $menu_name The name of the menu item - * @param string $menu_url The URL of the page - * @param array $menu_children Optionally, an array of submenu items (not currently used) - * @param string $context + * @param string $menu_name The name of the menu item + * @param string $menu_url The URL of the page + * @param array $menu_children Optionally, an array of submenu items (not currently used) + * @param string $context The context of the menu + * * @return true|false Depending on success * @todo Can be deprecated when the new menu system is introduced. */ @@ -784,6 +854,7 @@ function add_menu($menu_name, $menu_url, $menu_children = array(), $context = "" * Removes an item from the menu register * * @param string $menu_name The name of the menu item + * * @return true|false Depending on success */ function remove_menu($menu_name) { @@ -795,7 +866,8 @@ function remove_menu($menu_name) { * This is not currently used in the Elgg core. * * @param string $menu_name The name of the menu item - * @param string $menu_url Its URL + * @param string $menu_url Its URL + * * @return stdClass|false Depending on success * @todo Can be deprecated when the new menu system is introduced. */ @@ -811,8 +883,9 @@ function menu_item($menu_name, $menu_url) { * for later display, usually upon next page load. * * The method of displaying these messages differs depending upon plugins and - * viewtypes. The core default viewtype retrieves messages in {@link views/default/page_shells/default.php} - * and displays messages as javascript popups. + * viewtypes. The core default viewtype retrieves messages in + * {@link views/default/page_shells/default.php} and displays messages as + * javascript popups. * * @internal Messages are stored as strings in the $_SESSION['msg'][$register] array. * @@ -824,10 +897,12 @@ function menu_item($menu_name, $menu_url) { * @important This function handles the standard {@link system_message()} ($register = * 'messages') as well as {@link register_error()} messages ($register = 'errors'). * - * @param string|array $message Optionally, a single message or array of messages to add, (default: null) - * @param string $register This allows for different types of messages: "errors", "messages" (default: messages) - * @param bool $count Count the number of messages (default: false) - * @return true|false|array Either the array of messages, or a response regarding whether the message addition was successful + * @param mixed $message Optionally, a single message or array of messages to add, (default: null) + * @param string $register Types of message: "errors", "messages" (default: messages) + * @param bool $count Count the number of messages (default: false) + * + * @return true|false|array Either the array of messages, or a response regarding + * whether the message addition was successful. * @todo Clean up. Separate registering messages and retrieving them. */ function system_messages($message = null, $register = "messages", $count = false) { @@ -860,7 +935,7 @@ function system_messages($message = null, $register = "messages", $count = false return sizeof($_SESSION['msg'][$register]); } else { $count = 0; - foreach($_SESSION['msg'] as $register => $submessages) { + foreach ($_SESSION['msg'] as $register => $submessages) { $count += sizeof($submessages); } return $count; @@ -873,6 +948,7 @@ function system_messages($message = null, $register = "messages", $count = false * Counts the number of messages, either globally or in a particular register * * @param string $register Optionally, the register + * * @return integer The number of messages */ function count_messages($register = "") { @@ -883,7 +959,9 @@ function count_messages($register = "") { * Display a system message on next page load. * * @see system_messages() + * * @param string|array $message Message or messages to add + * * @return Bool */ function system_message($message) { @@ -894,7 +972,9 @@ function system_message($message) { * Display an error on next page load. * * @see system_messages() - * @param string|array $message Error or errors to add + * + * @param string|array $error Error or errors to add + * * @return true|false Success response */ function register_error($error) { @@ -904,9 +984,20 @@ function register_error($error) { /** * Deprecated events core function. Code divided between register_elgg_event_handler() * and trigger_elgg_event(). + * + * @param string $event The type of event (eg 'init', 'update', 'delete') + * @param string $object_type The type of object (eg 'system', 'blog', 'user') + * @param string $function The name of the function that will handle the event + * @param int $priority Priority to call handler. Lower numbers called first (default 500) + * @param boolean $call Set to true to call the event rather than add to it (default false) + * @param mixed $object Optionally, the object the event is being performed on (eg a user) + * + * @return true|false Depending on success */ -function events($event = "", $object_type = "", $function = "", $priority = 500, $call = false, $object = null) { - elgg_deprecated_notice('events has been deprecated', 1.8); +function events($event = "", $object_type = "", $function = "", $priority = 500, +$call = false, $object = null) { + + elgg_deprecated_notice('events() has been deprecated.', 1.8); // leaving this here just in case someone was directly calling this internal function if (!$call) { @@ -963,15 +1054,17 @@ function events($event = "", $object_type = "", $function = "", $priority = 500, * $CONFIG->events[$event][$type][$priority] = $callback; * </code> * - * @param string $event The event type + * @param string $event The event type * @param string $object_type The object type - * @param string $callback The handler callback - * @param int $priority The priority of the event + * @param string $callback The handler callback + * @param int $priority The priority of the event + * * @return bool * @link http://docs.elgg.org/Tutorials/Plugins/Events - * @example events/basic.php Basic example of registering an event handler callback. - * @example events/advanced.php Advanced example of registering an event handler callback and halting execution. - * @example events/all.php Example of how to use the 'all' keyword. + * @example events/basic.php Basic example of registering an event handler callback. + * @example events/advanced.php Advanced example of registering an event handler + * callback and halting execution. + * @example events/all.php Example of how to use the 'all' keyword. */ function register_elgg_event_handler($event, $object_type, $callback, $priority = 500) { global $CONFIG; @@ -1009,14 +1102,16 @@ function register_elgg_event_handler($event, $object_type, $callback, $priority /** * Unregisters a callback for an event. * - * @param string $event The event type + * @param string $event The event type * @param string $object_type The object type - * @param string $callback The callback + * @param string $callback The callback + * + * @return void * @since 1.7.0 */ function unregister_elgg_event_handler($event, $object_type, $callback) { global $CONFIG; - foreach($CONFIG->events[$event][$object_type] as $key => $event_callback) { + foreach ($CONFIG->events[$event][$object_type] as $key => $event_callback) { if ($event_callback == $callback) { unset($CONFIG->events[$event][$object_type][$key]); } @@ -1046,9 +1141,10 @@ function unregister_elgg_event_handler($event, $object_type, $callback) { * @internal @tip Think of $object_type as the primary namespace element, and * $event as the secondary namespace. * - * @param string $event The event type + * @param string $event The event type * @param string $object_type The object type - * @param string $object The object involved in the event + * @param string $object The object involved in the event + * * @return bool The result of running all handler callbacks. * @link http://docs.elgg.org/Tutorials/Core/Events * @internal @example events/emit.php Basic emitting of an Elgg event. @@ -1145,10 +1241,11 @@ function trigger_elgg_event($event, $object_type, $object = null) { * @warning Unlike Elgg Events, a handler that returns false will NOT halt the * execution chain. * - * @param string $hook The name of the hook - * @param string $type The type of the hook + * @param string $hook The name of the hook + * @param string $type The type of the hook * @param callback $callback The name of a valid function or an array with object and method - * @param string $priority The priority - 0 is first, 1000 last, default is 500 + * @param string $priority The priority - 0 is first, 1000 last, default is 500 + * * @return bool * * @example hooks/register/basic.php Registering for a plugin hook and examining the variables. @@ -1191,14 +1288,16 @@ function register_plugin_hook($hook, $type, $callback, $priority = 500) { /** * Unregister a callback as a plugin hook. * - * @param string $hook The name of the hook - * @param string $entity_type The name of the type of entity (eg "user", "object" etc) - * @param callback $callback The PHP callback to be removed + * @param string $hook The name of the hook + * @param string $entity_type The name of the type of entity (eg "user", "object" etc) + * @param callback $callback The PHP callback to be removed + * + * @return void * @since 1.7.0 */ function unregister_plugin_hook($hook, $entity_type, $callback) { global $CONFIG; - foreach($CONFIG->hooks[$hook][$entity_type] as $key => $hook_callback) { + foreach ($CONFIG->hooks[$hook][$entity_type] as $key => $hook_callback) { if ($hook_callback == $callback) { unset($CONFIG->hooks[$hook][$entity_type][$key]); } @@ -1228,23 +1327,30 @@ function unregister_plugin_hook($hook, $entity_type, $callback) { * and $type both are 'all', the handler will be called for all hooks. * * @see register_plugin_hook() - * @param string $hook The name of the hook to trigger ("all" will trigger for all $types regardless of $hook value) - * @param string $type The type of the hook to trigger ("all" will trigger for all $hooks regardless of $type value) - * @param mixed $params Additional parameters to pass to the handlers - * @param mixed $returnvalue An initial return value + * + * @param string $hook The name of the hook to trigger ("all" will + * trigger for all $types regardless of $hook value) + * @param string $type The type of the hook to trigger ("all" will + * trigger for all $hooks regardless of $type value) + * @param mixed $params Additional parameters to pass to the handlers + * @param mixed $returnvalue An initial return value + * * @return mixed|null The return value of the last handler callback called * - * @example hooks/trigger/basic.php Trigger a hook that determins if execution should continue. - * @example hooks/trigger/advanced.php Trigger a hook with a default value and use the results to populate a menu. - * @example hooks/basic.php Trigger and respond to a basic plugin hook. + * @example hooks/trigger/basic.php Trigger a hook that determins if execution + * should continue. + * @example hooks/trigger/advanced.php Trigger a hook with a default value and use + * the results to populate a menu. + * @example hooks/basic.php Trigger and respond to a basic plugin hook. * @link http://docs.elgg.org/Tutorials/Plugins/Hooks */ function trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) { global $CONFIG; if (!empty($CONFIG->hooks[$hook][$type]) && is_array($CONFIG->hooks[$hook][$type])) { - foreach($CONFIG->hooks[$hook][$type] as $hookcallback) { - $temp_return_value = call_user_func_array($hookcallback, array($hook, $type, $returnvalue, $params)); + foreach ($CONFIG->hooks[$hook][$type] as $hookcallback) { + $temp_return_value = call_user_func_array($hookcallback, + array($hook, $type, $returnvalue, $params)); if (!is_null($temp_return_value)) { $returnvalue = $temp_return_value; } @@ -1252,8 +1358,9 @@ function trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) } if (!empty($CONFIG->hooks['all'][$type]) && is_array($CONFIG->hooks['all'][$type])) { - foreach($CONFIG->hooks['all'][$type] as $hookcallback) { - $temp_return_value = call_user_func_array($hookcallback, array($hook, $type, $returnvalue, $params)); + foreach ($CONFIG->hooks['all'][$type] as $hookcallback) { + $temp_return_value = call_user_func_array($hookcallback, + array($hook, $type, $returnvalue, $params)); if (!is_null($temp_return_value)) { $returnvalue = $temp_return_value; } @@ -1261,8 +1368,9 @@ function trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) } if (!empty($CONFIG->hooks[$hook]['all']) && is_array($CONFIG->hooks[$hook]['all'])) { - foreach($CONFIG->hooks[$hook]['all'] as $hookcallback) { - $temp_return_value = call_user_func_array($hookcallback, array($hook, $type, $returnvalue, $params)); + foreach ($CONFIG->hooks[$hook]['all'] as $hookcallback) { + $temp_return_value = call_user_func_array($hookcallback, + array($hook, $type, $returnvalue, $params)); if (!is_null($temp_return_value)) { $returnvalue = $temp_return_value; } @@ -1270,8 +1378,9 @@ function trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) } if (!empty($CONFIG->hooks['all']['all']) && is_array($CONFIG->hooks['all']['all'])) { - foreach($CONFIG->hooks['all']['all'] as $hookcallback) { - $temp_return_value = call_user_func_array($hookcallback, array($hook, $type, $returnvalue, $params)); + foreach ($CONFIG->hooks['all']['all'] as $hookcallback) { + $temp_return_value = call_user_func_array($hookcallback, + array($hook, $type, $returnvalue, $params)); if (!is_null($temp_return_value)) { $returnvalue = $temp_return_value; } @@ -1293,13 +1402,16 @@ function trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) * log the error or ignore it. * * @see http://www.php.net/set-error-handler - * @param int $errno The level of the error raised - * @param string $errmsg The error message + * + * @param int $errno The level of the error raised + * @param string $errmsg The error message * @param string $filename The filename the error was raised in - * @param int $linenum The line number the error was raised at - * @param array $vars An array that points to the active symbol table at the point that the error occurred + * @param int $linenum The line number the error was raised at + * @param array $vars An array that points to the active symbol table where error occurred + * + * @return true */ -function __elgg_php_error_handler($errno, $errmsg, $filename, $linenum, $vars) { +function _elgg_php_error_handler($errno, $errmsg, $filename, $linenum, $vars) { $error = date("Y-m-d H:i:s (T)") . ": \"$errmsg\" in file $filename (line $linenum)"; switch ($errno) { @@ -1338,12 +1450,14 @@ function __elgg_php_error_handler($errno, $errmsg, $filename, $linenum, $vars) { * @note No messages will be displayed unless debugging has been enabled. * * @param str $message User message - * @param str $level NOTICE | WARNING | ERROR | DEBUG + * @param str $level NOTICE | WARNING | ERROR | DEBUG + * * @return bool * @since 1.7.0 - * @todo This is complicated and confusing. Using int constants for debug levels will make things easier. + * @todo This is complicated and confusing. Using int constants for debug levels will + * make things easier. */ -function elgg_log($message, $level='NOTICE') { +function elgg_log($message, $level = 'NOTICE') { global $CONFIG; // only log when debugging is enabled @@ -1387,9 +1501,10 @@ function elgg_log($message, $level='NOTICE') { * A {@elgg_plugin_hook debug log} is called. If a handler returns * false, it will stop the default logging method. * - * @param mixed $value - * @param bool $to_screen - * @param string $level + * @param mixed $value The value + * @param bool $to_screen Display to screen? + * @param string $level The debug level + * * @return void * @since 1.7.0 */ @@ -1426,9 +1541,12 @@ function elgg_dump($value, $to_screen = TRUE, $level = 'NOTICE') { * @warning This function should never be called directly. * * @see http://www.php.net/set-exception-handler + * * @param Exception $exception The exception being handled + * + * @return void */ -function __elgg_php_exception_handler($exception) { +function _elgg_php_exception_handler($exception) { error_log("*** FATAL EXCEPTION *** : " . $exception); // Wipe any existing output buffer @@ -1462,6 +1580,7 @@ $DATALIST_CACHE = array(); * @tip Use datalists to store information common to a full installation. * * @param string $name The name of the datalist element + * * @return string|false The datalist value or false if it doesn't exist. */ function datalist_get($name) { @@ -1491,7 +1610,10 @@ function datalist_get($name) { return $value; } - // [Marcus Povey 20090217 : Now retrieving all datalist values on first load as this saves about 9 queries per page] + // [Marcus Povey 20090217 : Now retrieving all datalist values on first + // load as this saves about 9 queries per page] + // This also causes OOM problems when the datalists table is large + // @todo make a list of datalists that we want to get in one grab $result = get_data("SELECT * from {$CONFIG->dbprefix}datalists"); if ($result) { foreach ($result as $row) { @@ -1514,8 +1636,9 @@ function datalist_get($name) { /** * Set the value for a datalist element. * - * @param string $name The name of the datalist + * @param string $name The name of the datalist * @param string $value The new value + * * @return true */ function datalist_set($name, $value) { @@ -1534,7 +1657,9 @@ function datalist_set($name, $value) { $datalist_memcache->delete($name); } - insert_data("INSERT into {$CONFIG->dbprefix}datalists set name = '{$name}', value = '{$value}' ON DUPLICATE KEY UPDATE value='{$value}'"); + insert_data("INSERT into {$CONFIG->dbprefix}datalists" + . " set name = '{$name}', value = '{$value}'" + . " ON DUPLICATE KEY UPDATE value='{$value}'"); $DATALIST_CACHE[$name] = $value; @@ -1558,8 +1683,10 @@ function datalist_set($name, $value) { * * @internal A datalist entry $functioname is created with the value of time(). * - * @param string $functionname The name of the function you want to run. - * @param int $timelastupdatedcheck A UNIX timestamp. If time() is > than this, this function will be run again. + * @param string $functionname The name of the function you want to run. + * @param int $timelastupdatedcheck A UNIX timestamp. If time() is > than this, + * this function will be run again. + * * @return bool */ function run_function_once($functionname, $timelastupdatedcheck = 0) { @@ -1592,8 +1719,10 @@ function run_function_once($functionname, $timelastupdatedcheck = 0) { * This assumes we are releasing in order and deprecating according to policy. * * @see CODING.txt - * @param str $msg Message to log / display. - * @param str $version human-readable *release* version: 1.7, 1.7.3 + * + * @param str $msg Message to log / display. + * @param str $dep_version Human-readable *release* version: 1.7, 1.7.3 + * * @return bool * @since 1.7.0 */ @@ -1647,8 +1776,9 @@ function elgg_deprecated_notice($msg, $dep_version) { /** * Checks if code is being called from a certain function. * - * To use, call this function with the function name (and optional file location) that it has to be called - * from, it will either return true or false. + * To use, call this function with the function name (and optional + * file location) that it has to be called from, it will either + * return true or false. * * e.g. * @@ -1672,9 +1802,12 @@ function elgg_deprecated_notice($msg, $dep_version) { * my_secure_function(); * } * - * @param mixed $function The function that this function must have in its call stack, - * to test against a method pass an array containing a class and method name. - * @param string $file Optional file that the function must reside in. + * @param mixed $function The function that this function must have in its call stack, + * to test against a method pass an array containing a class and + * method name. + * @param string $file Optional file that the function must reside in. + * + * @return bool * @todo This is neat but is it necessary? */ function call_gatekeeper($function, $file = "") { @@ -1716,7 +1849,7 @@ function call_gatekeeper($function, $file = "") { $mirror = new ReflectionFunction($function); } - if ((!$mirror) || (strcmp($file,$mirror->getFileName())!=0)) { + if ((!$mirror) || (strcmp($file, $mirror->getFileName()) != 0)) { return false; } } @@ -1728,12 +1861,22 @@ function call_gatekeeper($function, $file = "") { * This function checks to see if it is being called at somepoint by a function defined somewhere * on a given path (optionally including subdirectories). * - * This function is similar to call_gatekeeper() but returns true if it is being called by a method or function which has been defined on a given path or by a specified file. + * This function is similar to call_gatekeeper() but returns true if it is being called + * by a method or function which has been defined on a given path or by a specified file. + * + * @param string $path The full path and filename that this function must have + * in its call stack If a partial path is given and + * $include_subdirs is true, then the function will return + * true if called by any function in or below the specified path. + * @param bool $include_subdirs Are subdirectories of the path ok, or must you specify an + * absolute path and filename. + * @param bool $strict_mode If true then the calling method or function must be directly + * called by something on $path, if false the whole call stack is + * searched. * - * @param string $path The full path and filename that this function must have in its call stack If a partial path is given and $include_subdirs is true, then the function will return true if called by any function in or below the specified path. - * @param bool $include_subdirs Are subdirectories of the path ok, or must you specify an absolute path and filename. - * @param bool $strict_mode If true then the calling method or function must be directly called by something on $path, if false the whole call stack is searched. * @todo Again, very neat, but is it necessary? + * + * @return void */ function callpath_gatekeeper($path, $include_subdirs = true, $strict_mode = false) { global $CONFIG; @@ -1744,20 +1887,22 @@ function callpath_gatekeeper($path, $include_subdirs = true, $strict_mode = fals $callstack = debug_backtrace(); foreach ($callstack as $call) { - $call['file'] = str_replace("\\","/",$call['file']); + $call['file'] = str_replace("\\", "/", $call['file']); if ($include_subdirs) { if (strpos($call['file'], $path) === 0) { if ($strict_mode) { - $callstack[1]['file'] = str_replace("\\","/",$callstack[1]['file']); - if ($callstack[1] === $call) { return true; } + $callstack[1]['file'] = str_replace("\\", "/", $callstack[1]['file']); + if ($callstack[1] === $call) { + return true; + } } else { return true; } } } else { - if (strcmp($path, $call['file'])==0) { + if (strcmp($path, $call['file']) == 0) { if ($strict_mode) { if ($callstack[1] === $call) { return true; @@ -1773,7 +1918,8 @@ function callpath_gatekeeper($path, $include_subdirs = true, $strict_mode = fals } if (isset($CONFIG->debug)) { - system_message("Gatekeeper'd function called from {$callstack[1]['file']}:{$callstack[1]['line']}\n\nStack trace:\n\n" . print_r($callstack, true)); + system_message("Gatekeeper'd function called from {$callstack[1]['file']}:" + . "{$callstack[1]['line']}\n\nStack trace:\n\n" . print_r($callstack, true)); } return false; @@ -1785,6 +1931,7 @@ function callpath_gatekeeper($path, $include_subdirs = true, $strict_mode = fals * Normalizes the setting to bool. * * @param string $ini_get_arg The INI setting + * * @return true|false Depending on whether it's on or off */ function ini_get_bool($ini_get_arg) { @@ -1801,12 +1948,13 @@ function ini_get_bool($ini_get_arg) { * * Function to be used in array_filter which returns true if $string is not null. * - * @param string $string + * @param string $string The string to test + * * @return bool * @todo This is used once in metadata.php. Use a lambda function instead. */ function is_not_null($string) { - if (($string==='') || ($string===false) || ($string===null)) { + if (($string === '') || ($string === false) || ($string === null)) { return false; } @@ -1820,8 +1968,9 @@ function is_not_null($string) { * Used in elgg_get_entities*() functions to support shortcutting plural * names by singular names. * - * @param array $options The options array. $options['keys'] = 'values'; + * @param array $options The options array. $options['keys'] = 'values'; * @param array $singulars A list of sinular words to pluralize by adding 's'. + * * @return array * @since 1.7.0 */ @@ -1851,25 +2000,28 @@ function elgg_normalise_plural_options_array($options, $singulars) { */ function full_url() { $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; - $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s; - $port = ($_SERVER["SERVER_PORT"] == "80" || $_SERVER["SERVER_PORT"] == "443") ? "" : (":".$_SERVER["SERVER_PORT"]); + $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, + strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s; + + $port = ($_SERVER["SERVER_PORT"] == "80" || $_SERVER["SERVER_PORT"] == "443") ? + "" : (":" . $_SERVER["SERVER_PORT"]); // This is here to prevent XSS in poorly written browsers used by 80% of the population. // {@trac [5813]} $quotes = array('\'', '"'); $encoded = array('%27', '%22'); - return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . str_replace($quotes, $encoded, $_SERVER['REQUEST_URI']); + return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . + str_replace($quotes, $encoded, $_SERVER['REQUEST_URI']); } /** * Does nothing. * - * @param $range - * @param $ip * @deprecated 1.7 + * @return 0 */ -function test_ip($range, $ip) { +function test_ip() { elgg_deprecated_notice('test_ip() was removed because of licensing issues.', 1.7); return 0; @@ -1878,12 +2030,10 @@ function test_ip($range, $ip) { /** * Does nothing. * - * @param array $networks - * @param string $ip * @return bool * @deprecated 1.7 */ -function is_ip_in_array(array $networks, $ip) { +function is_ip_in_array() { elgg_deprecated_notice('is_ip_in_array() was removed because of licensing issues.', 1.7); return false; @@ -1894,8 +2044,9 @@ function is_ip_in_array(array $networks, $ip) { * * @note If only partial information is passed, a partial URL will be returned. * - * @param array $parts Associative array of URL components like parse_url() returns - * @param bool $htmlencode HTML Encode the url? + * @param array $parts Associative array of URL components like parse_url() returns + * @param bool $html_encode HTML Encode the url? + * * @return str Full URL * @since 1.7.0 */ @@ -1927,8 +2078,9 @@ function elgg_http_build_url(array $parts, $html_encode = TRUE) { * add tokens to the action. The form view automatically handles * tokens. * - * @param str $link Full action URL - * @param bool $htmlencode html encode the url? + * @param str $url Full action URL + * @param bool $html_encode HTML encode the url? + * * @return str URL with action tokens * @since 1.7.0 * @link http://docs.elgg.org/Tutorials/Actions @@ -1959,10 +2111,15 @@ function elgg_add_action_tokens_to_url($url, $html_encode = TRUE) { /** * Add action tokens to URL. * + * @param string $url URL + * + * @return string + * * @deprecated 1.7 final */ function elgg_validate_action_url($url) { - elgg_deprecated_notice('elgg_validate_action_url had a short life. Use elgg_add_action_tokens_to_url() instead.', '1.7b'); + elgg_deprecated_notice('elgg_validate_action_url() deprecated by elgg_add_action_tokens_to_url().', + '1.7b'); return elgg_add_action_tokens_to_url($url); } @@ -1973,8 +2130,9 @@ function elgg_validate_action_url($url) { * * @note You can send a partial URL string. * - * @param string $url - * @param string $element + * @param string $url Full URL + * @param string $element The element to remove + * * @return string The new URL with the query element removed. * @since 1.7.0 */ @@ -2000,8 +2158,9 @@ function elgg_http_remove_url_query_element($url, $element) { /** * Adds an element or elements to a URL's query string. * - * @param str $url The URL - * @param array $elements key/value pairs to add to the URL + * @param str $url The URL + * @param array $elements Key/value pairs to add to the URL + * * @return str The new URL with the query strings added * @since 1.7.0 */ @@ -2028,7 +2187,10 @@ function elgg_http_add_url_query_elements($url, array $elements) { * Adds a breadcrumb to the breadcrumbs stack. * * @param string $title The title to display - * @param string $link Optional. The link for the title. + * @param string $link Optional. The link for the title. + * + * @return void + * * @link http://docs.elgg.org/Tutorials/UI/Breadcrumbs */ function elgg_push_breadcrumb($title, $link = NULL) { @@ -2075,6 +2237,9 @@ function elgg_get_breadcrumbs() { * Call this from an action when you want all your submitted variables * available if the submission fails validation and is sent back to the form * + * @param string $form_name Name of the sticky form + * + * @return void * @link http://docs.elgg.org/Tutorials/UI/StickyForms */ function elgg_make_sticky_form($form_name) { @@ -2088,7 +2253,7 @@ function elgg_make_sticky_form($form_name) { } $_SESSION['sticky_forms'][$form_name] = array(); - foreach($_REQUEST as $key => $var) { + foreach ($_REQUEST as $key => $var) { // will go through XSS filtering on the get function $_SESSION['sticky_forms'][$form_name][$key] = $var; } @@ -2101,7 +2266,9 @@ function elgg_make_sticky_form($form_name) { * when they sticky values have been used to repopulate the form * after a validation error. * - * @param string $name Form namespace + * @param string $form_name Form namespace + * + * @return void * @link http://docs.elgg.org/Tutorials/UI/StickyForms */ function elgg_clear_sticky_form($form_name) { @@ -2111,7 +2278,8 @@ function elgg_clear_sticky_form($form_name) { /** * Has this form been made sticky? * - * @param string $name Form namespace + * @param string $form_name Form namespace + * * @return boolean * @link http://docs.elgg.org/Tutorials/UI/StickyForms */ @@ -2122,15 +2290,17 @@ function elgg_is_sticky_form($form_name) { /** * Get a specific sticky variable * - * @param string $variable The name of the variable - * @param mixed $default Default value if the variable does not exist in sticky cache + * @param string $form_name The name of the form + * @param string $variable The name of the variable + * @param mixed $default Default value if the variable does not exist in sticky cache * @param boolean $filter_result Filter for bad input if true + * * @return mixed * * @todo should this filter the default value? * @link http://docs.elgg.org/Tutorials/UI/StickyForms */ -function elgg_get_sticky_value($form_name, $variable='', $default = NULL, $filter_result = true) { +function elgg_get_sticky_value($form_name, $variable = '', $default = NULL, $filter_result = true) { if (isset($_SESSION['sticky_forms'][$form_name][$variable])) { $value = $_SESSION['sticky_forms'][$form_name][$variable]; if ($filter_result) { @@ -2145,7 +2315,10 @@ function elgg_get_sticky_value($form_name, $variable='', $default = NULL, $filte /** * Clear a specific sticky variable * - * @param string $variable The name of the variable to clear + * @param string $form_name The name of the form + * @param string $variable The name of the variable to clear + * + * @return void * @link http://docs.elgg.org/Tutorials/UI/StickyForms */ function elgg_clear_sticky_value($form_name, $variable) { @@ -2154,6 +2327,7 @@ function elgg_clear_sticky_value($form_name, $variable) { /** * Returns the current active sticky form. + * * @return mixed Str | FALSE * @link http://docs.elgg.org/Tutorials/UI/StickyForms */ @@ -2172,7 +2346,9 @@ function elgg_get_active_sticky_form() { /** * Sets the active sticky form. * - * @param string $form_name + * @param string $form_name The name of the form + * + * @return void * @link http://docs.elgg.org/Tutorials/UI/StickyForms */ function elgg_set_active_sticky_form($form_name) { @@ -2186,7 +2362,8 @@ function elgg_set_active_sticky_form($form_name) { * * @tip Use this for arithmetic when determining if a file can be uploaded. * - * @param str $setting + * @param str $setting The php.ini setting + * * @return int * @since 1.7.0 * @link http://www.php.net/manual/en/function.ini-get.php @@ -2196,7 +2373,7 @@ function elgg_get_ini_setting_in_bytes($setting) { $val = ini_get($setting); // convert INI setting when shorthand notation is used - $last = strtolower($val[strlen($val)-1]); + $last = strtolower($val[strlen($val) - 1]); switch($last) { case 'g': $val *= 1024; @@ -2216,17 +2393,18 @@ function elgg_get_ini_setting_in_bytes($setting) { * Searches for views under js/ and outputs them with special * headers for caching control. * - * @param $page - * @return unknown_type + * @param array $page The page array + * + * @return void * @elgg_pagehandler js */ function js_page_handler($page) { if (is_array($page) && sizeof($page)) { - $js = str_replace('.js','',$page[0]); + $js = str_replace('.js', '', $page[0]); $return = elgg_view('js/' . $js); header('Content-type: text/javascript'); - header('Expires: ' . date('r',time() + 864000)); + header('Expires: ' . date('r', time() + 864000)); header("Pragma: public"); header("Cache-Control: public"); header("Content-Length: " . strlen($return)); @@ -2241,12 +2419,14 @@ function js_page_handler($page) { * * @tip Register for the shutdown:system event to perform functions at the end of page loads. * - * @warning Using this event to perform long-running functions is not very useful. Servers will hold pages until processing is done - * before sending them out to the browser. + * @warning Using this event to perform long-running functions is not very + * useful. Servers will hold pages until processing is done before sending + * them out to the browser. * + * @return void * @see register_shutdown_hook() */ -function __elgg_shutdown_hook() { +function _elgg_shutdown_hook() { global $START_MICROTIME; trigger_elgg_event('shutdown', 'system'); @@ -2262,10 +2442,11 @@ function __elgg_shutdown_hook() { * Handles core actions for comments and likes, the JS pagehandler, and the shutdown function. * * @elgg_event_handler init system + * @return void */ function elgg_init() { global $CONFIG; - + register_action('comments/add'); register_action('comments/delete'); register_action('likes/add'); @@ -2274,7 +2455,7 @@ function elgg_init() { register_page_handler('js', 'js_page_handler'); // Trigger the shutdown:system event upon PHP shutdown. - register_shutdown_function('__elgg_shutdown_hook'); + register_shutdown_function('_elgg_shutdown_hook'); // Sets a blacklist of words in the current language. // This is a comma separated list in word:blacklist. @@ -2293,6 +2474,7 @@ function elgg_init() { * * @link http://docs.elgg.org/Tutorials/WalledGarden * @elgg_plugin_hook index system + * @return void */ function elgg_walled_garden_index() { $login = elgg_view('account/forms/login_walled_garden'); @@ -2306,7 +2488,13 @@ function elgg_walled_garden_index() { /** * Adds unit tests for the general API. * + * @param string $hook unit_test + * @param string $type system + * @param array $value array of test files + * @param array $params empty + * * @elgg_plugin_hook unit_tests system + * @return void */ function elgg_api_test($hook, $type, $value, $params) { global $CONFIG; @@ -2374,6 +2562,7 @@ function elgg_get_nav_items() { * @since 1.8 * @link http://docs.elgg.org/Tutorials/UI/SiteMenu * @elgg_event_handler init system + * @return void */ function add_custom_menu_items() { if ($custom_items = get_config('menu_items_custom_items')) { @@ -2390,9 +2579,10 @@ function add_custom_menu_items() { * * @tip The order of GET params doesn't matter. * - * @param string $url1 - * @param string $url2 - * @param array $ignore_params - GET params to ignore in the comparison + * @param string $url1 First URL + * @param string $url2 Second URL + * @param array $ignore_params GET params to ignore in the comparison + * * @return BOOL * @since 1.8 */ @@ -2424,7 +2614,8 @@ function elgg_http_url_is_identical($url1, $url2, $ignore_params = array('offset $parts = array('scheme', 'host', 'path'); foreach ($parts as $part) { - if ((isset($url1_info[$part]) && isset($url2_info[$part])) && $url1_info[$part] != $url2_info[$part]) { + if ((isset($url1_info[$part]) && isset($url2_info[$part])) + && $url1_info[$part] != $url2_info[$part]) { return FALSE; } elseif (isset($url1_info[$part]) && !isset($url2_info[$part])) { return FALSE; @@ -2434,7 +2625,8 @@ function elgg_http_url_is_identical($url1, $url2, $ignore_params = array('offset } // quick compare of get params - if (isset($url1_info['query']) && isset($url2_info['query']) && $url1_info['query'] == $url2_info['query']) { + if (isset($url1_info['query']) && isset($url2_info['query']) + && $url1_info['query'] == $url2_info['query']) { return TRUE; } @@ -2489,13 +2681,14 @@ function elgg_http_url_is_identical($url1, $url2, $ignore_params = array('offset * @since 1.8 * @elgg_event_handler init system * @link http://docs.elgg.org/Tutorials/WalledGarden + * @return void */ function elgg_walled_garden() { global $CONFIG; // check for external page view if (isset($CONFIG->site) && $CONFIG->site instanceof ElggSite) { - $CONFIG->site->check_walled_garden(); + $CONFIG->site->checkWalledGarden(); } } @@ -2505,9 +2698,11 @@ function elgg_walled_garden() { * * Shorthand for $value = (isset($array['key'])) ? $array['key'] : 'default'; * - * @param string $key The key to check. - * @param array $array The array to check against. - * @param mixed $default Default value to return if nothing is found. + * @param string $key The key to check. + * @param array $array The array to check against. + * @param mixed $default Default value to return if nothing is found. + * + * @return void * @since 1.8 */ function elgg_get_array_value($key, array $array, $default = NULL) { @@ -2520,18 +2715,23 @@ function elgg_get_array_value($key, array $array, $default = NULL) { * @warning Will re-index numeric indexes. * * @note This operates the same as the built-in sort functions. - * ie, sorts the array and returns a bool for success. + * It sorts the array and returns a bool for success. * * Do this: elgg_sort_3d_array_by_value($my_array); * Not this: $my_array = elgg_sort_3d_array_by_value($my_array); * - * @param array $array Array to sort - * @param string $element Element to sort by - * @param $sort_order - * @param $sort_type + * @param array &$array Array to sort + * @param string $element Element to sort by + * @param int $sort_order PHP sort order + * {@see http://us2.php.net/array_multisort} + * @param int $sort_type PHP sort type + * {@see http://us2.php.net/sort} + * * @return bool */ -function elgg_sort_3d_array_by_value(&$array, $element, $sort_order = SORT_ASC, $sort_type = SORT_LOCALE_STRING) { +function elgg_sort_3d_array_by_value(&$array, $element, $sort_order = SORT_ASC, +$sort_type = SORT_LOCALE_STRING) { + $sort = array(); foreach ($array as $k => $v) { diff --git a/engine/lib/entities.php b/engine/lib/entities.php index e788018e0..50e41ab2c 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -25,6 +25,8 @@ $SUBTYPE_CACHE = NULL; /** * Initialise the entity cache. + * + * @return void * @todo remove this. * @access private */ @@ -40,6 +42,8 @@ function initialise_entity_cache() { * Invalidate this class's entry in the cache. * * @param int $guid The entity guid + * + * @return void * @access private */ function invalidate_cache_for_entity($guid) { @@ -56,6 +60,8 @@ function invalidate_cache_for_entity($guid) { * Stores an entity in $ENTITY_CACHE; * * @param ElggEntity $entity Entity to cache + * + * @return void * @see retrieve_cached_entity() * @see invalidate_cache_for_entity() * @access private @@ -70,6 +76,8 @@ function cache_entity(ElggEntity $entity) { * Retrieve a entity from the cache. * * @param int $guid The guid + * + * @return void * @see cache_entity() * @see invalidate_cache_for_entity() * @access private @@ -89,10 +97,12 @@ function retrieve_cached_entity($guid) { } /** - * As retrieve_cached_entity, but returns the result as a stdClass (compatible with load functions that - * expect a database row.) + * As retrieve_cached_entity, but returns the result as a stdClass + * (compatible with load functions that expect a database row.) * * @param int $guid The guid + * + * @return mixed * @todo unused * @access private */ @@ -129,8 +139,9 @@ function retrieve_cached_entity_row($guid) { * * @todo Move to a nicer place? * - * @param string $type - * @param string $subtype + * @param string $type Type + * @param string $subtype Subtype + * * @return int Subtype ID * @link http://docs.elgg.org/DataModel/Entities/Subtypes * @see get_subtype_from_id() @@ -142,7 +153,7 @@ function get_subtype_id($type, $subtype) { $type = sanitise_string($type); $subtype = sanitise_string($subtype); - if ($subtype=="") { + if ($subtype == "") { return FALSE; } @@ -167,7 +178,8 @@ function get_subtype_id($type, $subtype) { * * @todo Move to a nicer place? * - * @param int $subtype_id + * @param int $subtype_id Subtype ID + * * @return string Subtype name * @link http://docs.elgg.org/DataModel/Entities/Subtypes * @see get_subtype_from_id() @@ -206,8 +218,9 @@ function get_subtype_from_id($subtype_id) { * with {@link register_entity_subtype()}. This function returns * the class name if found, and NULL if not. * - * @param string $type The type + * @param string $type The type * @param string $subtype The subtype + * * @return string|null a class name or null * @see get_subtype_from_id() * @see get_subtype_class_from_id() @@ -239,6 +252,7 @@ function get_subtype_class($type, $subtype) { * Returns the classname for a subtype id. * * @param int $subtype_id The subtype id + * * @return string|null * @see get_subtype_class() * @see get_subtype_from_id() @@ -278,9 +292,11 @@ function get_subtype_class_from_id($subtype_id) { * it will be loaded as that class automatically when retrieved from the database with * {@link get_entity()}. * - * @param string $type The type you're subtyping (site, user, object, or group) + * @param string $type The type you're subtyping (site, user, object, or group) * @param string $subtype The subtype - * @param string $class Optional class name for the object + * @param string $class Optional class name for the object + * + * @return int * @link http://docs.elgg.org/Tutorials/Subclasses * @link http://docs.elgg.org/DataModel/Entities * @see update_subtype() @@ -300,8 +316,9 @@ function add_subtype($type, $subtype, $class = "") { $id = get_subtype_id($type, $subtype); - if ($id==0) { - return insert_data("insert into {$CONFIG->dbprefix}entity_subtypes (type, subtype, class) values ('$type','$subtype','$class')"); + if ($id == 0) { + return insert_data("insert into {$CONFIG->dbprefix}entity_subtypes" + . " (type, subtype, class) values ('$type','$subtype','$class')"); } return $id; @@ -310,8 +327,10 @@ function add_subtype($type, $subtype, $class = "") { /** * Removes a registered ElggEntity type, subtype, and classname. * - * @param string $type - * @param string $subtype + * @param string $type Type + * @param string $subtype Subtype + * + * @return bool * @see add_subtype() * @see update_subtype() */ @@ -321,15 +340,18 @@ function remove_subtype($type, $subtype) { $type = sanitise_string($type); $subtype = sanitise_string($subtype); - return delete_data("DELETE FROM {$CONFIG->dbprefix}entity_subtypes WHERE type = '$type' AND subtype = '$subtype'"); + return delete_data("DELETE FROM {$CONFIG->dbprefix}entity_subtypes" + . " WHERE type = '$type' AND subtype = '$subtype'"); } /** * Update a registered ElggEntity type, subtype, and classname * - * @param string $type - * @param string $subtype - * @param string $class + * @param string $type Type + * @param string $subtype Subtype + * @param string $class Class name to use when loading this entity + * + * @return bool */ function update_subtype($type, $subtype, $class = '') { global $CONFIG; @@ -354,10 +376,11 @@ function update_subtype($type, $subtype, $class = '') { * * @warning Plugin authors should never call this directly. Use ->save() instead. * - * @param int $guid - * @param int $owner_guid - * @param int $access_id - * @param int $container_guid + * @param int $guid The guid of the entity to update + * @param int $owner_guid The new owner guid + * @param int $access_id The new access id + * @param int $container_guid The new container guid + * * @return bool * @link http://docs.elgg.org/DataModel/Entities * @access private @@ -378,10 +401,12 @@ function update_entity($guid, $owner_guid, $access_id, $container_guid = null) { if ($entity && $entity->canEdit()) { if (trigger_elgg_event('update', $entity->type, $entity)) { - $ret = update_data("UPDATE {$CONFIG->dbprefix}entities set owner_guid='$owner_guid', access_id='$access_id', container_guid='$container_guid', time_updated='$time' WHERE guid=$guid"); + $ret = update_data("UPDATE {$CONFIG->dbprefix}entities" + . " set owner_guid='$owner_guid', access_id='$access_id'," + . " container_guid='$container_guid', time_updated='$time' WHERE guid=$guid"); if ($entity instanceof ElggObject) { - update_river_access_by_object($guid,$access_id); + update_river_access_by_object($guid, $access_id); } // If memcache is available then delete this entry from the cache @@ -394,7 +419,7 @@ function update_entity($guid, $owner_guid, $access_id, $container_guid = null) { } // Handle cases where there was no error BUT no rows were updated! - if ($ret===false) { + if ($ret === false) { return false; } @@ -412,8 +437,10 @@ function update_entity($guid, $owner_guid, $access_id, $container_guid = null) { * A plugin hook container_permissions_check:$entity_type is emitted to allow granular * access controls in plugins. * - * @param int $user_guid The user guid, or 0 for get_loggedin_userid() - * @param int $container_guid The container, or 0 for the current page owner. + * @param int $user_guid The user guid, or 0 for get_loggedin_userid() + * @param int $container_guid The container, or 0 for the current page owner. + * @param string $entity_type The type of entities. Defauts to 'all' + * * @return bool * @link http://docs.elgg.org/DataModel/Containers */ @@ -428,7 +455,7 @@ function can_write_to_container($user_guid = 0, $container_guid = 0, $entity_typ $container_guid = (int)$container_guid; if (!$container_guid) { - $container_guid = page_owner(); + $container_guid = get_page_owner_guid(); } if (!$container_guid) { @@ -470,17 +497,21 @@ function can_write_to_container($user_guid = 0, $container_guid = 0, $entity_typ * @warning Entities must have an entry in both the entities table and their type table * or they will throw an exception when loaded. * - * @param string $type The type of the entity (site, user, object, group). - * @param string $subtype The subtype of the entity. - * @param int $owner_guid The GUID of the object's owner. - * @param int $access_id The access control group to create the entity with. - * @param int $site_guid The site to add this entity to. Leave as 0 (default) for the current site. + * @param string $type The type of the entity (site, user, object, group). + * @param string $subtype The subtype of the entity. + * @param int $owner_guid The GUID of the object's owner. + * @param int $access_id The access control group to create the entity with. + * @param int $site_guid The site to add this entity to. 0 for current. + * @param int $container_guid The container GUID + * * @return int|false The new entity's GUID, or false on failure * @throws InvalidParameterException * @access private * @link http://docs.elgg.org/DataModel/Entities */ -function create_entity($type, $subtype, $owner_guid, $access_id, $site_guid = 0, $container_guid = 0) { +function create_entity($type, $subtype, $owner_guid, $access_id, $site_guid = 0, +$container_guid = 0) { + global $CONFIG; $type = sanitise_string($type); @@ -505,13 +536,16 @@ function create_entity($type, $subtype, $owner_guid, $access_id, $site_guid = 0, return false; } } - if ($type=="") { + if ($type == "") { throw new InvalidParameterException(elgg_echo('InvalidParameterException:EntityTypeNotSet')); } return insert_data("INSERT into {$CONFIG->dbprefix}entities - (type, subtype, owner_guid, site_guid, container_guid, access_id, time_created, time_updated, last_action) values - ('$type',$subtype, $owner_guid, $site_guid, $container_guid, $access_id, $time, $time, $time)"); + (type, subtype, owner_guid, site_guid, container_guid, + access_id, time_created, time_updated, last_action) + values + ('$type',$subtype, $owner_guid, $site_guid, $container_guid, + $access_id, $time, $time, $time)"); } /** @@ -523,6 +557,7 @@ function create_entity($type, $subtype, $owner_guid, $access_id, $site_guid = 0, * see {@link get_access_sql_suffix()}. * * @param int $guid The GUID of the object to extract + * * @return stdClass|false * @link http://docs.elgg.org/DataModel/Entities * @see entity_row_to_elggstar() @@ -546,7 +581,8 @@ function get_entity_as_row($guid) { * * Handles loading all tables into the correct class. * - * @param stdClass The row of the entry in the entities table. + * @param stdClass $row The row of the entry in the entities table. + * * @return object|false * @link http://docs.elgg.org/DataModel/Entities * @see get_entity_as_row() @@ -579,12 +615,13 @@ function entity_row_to_elggstar($row) { // load class for entity if one is registered $classname = get_subtype_class_from_id($row->subtype); - if ($classname!="") { + if ($classname != "") { if (class_exists($classname)) { $new_entity = new $classname($row); if (!($new_entity instanceof ElggEntity)) { - throw new ClassException(sprintf(elgg_echo('ClassException:ClassnameNotClass'), $classname, 'ElggEntity')); + $msg = sprintf(elgg_echo('ClassException:ClassnameNotClass'), $classname, 'ElggEntity'); + throw new ClassException($msg); } } else { error_log(sprintf(elgg_echo('ClassNotFoundException:MissingClass'), $classname)); @@ -606,7 +643,8 @@ function entity_row_to_elggstar($row) { $new_entity = new ElggSite($row); break; default: - throw new InstallationException(sprintf(elgg_echo('InstallationException:TypeNotSupported'), $row->type)); + $msg = sprintf(elgg_echo('InstallationException:TypeNotSupported'), $row->type); + throw new InstallationException($msg); } } @@ -622,6 +660,7 @@ function entity_row_to_elggstar($row) { * Loads and returns an entity object from a guid. * * @param int $guid The GUID of the entity + * * @return object The correct Elgg or custom object based upon entity type and subtype * @link http://docs.elgg.org/DataModel/Entities */ @@ -665,11 +704,13 @@ function get_entity($guid) { * * @param array $options Array in format: * - * types => NULL|STR entity type (SQL: type IN ('type1', 'type2') Joined with subtypes by AND...see below) + * types => NULL|STR entity type (type IN ('type1', 'type2') + * Joined with subtypes by AND. See below) * * subtypes => NULL|STR entity subtype (SQL: subtype IN ('subtype1', 'subtype2)) * - * type_subtype_pairs => NULL|ARR (array('type' => 'subtype')) (SQL: type = '$type' AND subtype = '$subtype') pairs + * type_subtype_pairs => NULL|ARR (array('type' => 'subtype')) + * (type = '$type' AND subtype = '$subtype') pairs * * owner_guids => NULL|INT entity guid * @@ -735,10 +776,12 @@ function elgg_get_entities(array $options = array()) { $options = array_merge($defaults, $options); - // can't use helper function with type_subtype_pair because it's already an array...just need to merge it + // can't use helper function with type_subtype_pair because + // it's already an array...just need to merge it if (isset($options['type_subtype_pair'])) { if (isset($options['type_subtype_pairs'])) { - $options['type_subtype_pairs'] = array_merge($options['type_subtype_pairs'], $options['type_subtype_pair']); + $options['type_subtype_pairs'] = array_merge($options['type_subtype_pairs'], + $options['type_subtype_pair']); } else { $options['type_subtype_pairs'] = $options['type_subtype_pair']; } @@ -754,7 +797,8 @@ function elgg_get_entities(array $options = array()) { $wheres = $options['wheres']; - $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'], $options['subtypes'], $options['type_subtype_pairs']); + $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'], + $options['subtypes'], $options['type_subtype_pairs']); $wheres[] = elgg_get_entity_site_where_sql('e', $options['site_guids']); $wheres[] = elgg_get_entity_owner_where_sql('e', $options['owner_guids']); $wheres[] = elgg_get_entity_container_where_sql('e', $options['container_guids']); @@ -846,22 +890,28 @@ function elgg_get_entities(array $options = array()) { } /** + * Returns entities. + * * @deprecated 1.7. Use elgg_get_entities(). - * @param $type - * @param $subtype - * @param $owner_guid - * @param $order_by - * @param $limit - * @param $offset - * @param $count - * @param $site_guid - * @param $container_guid - * @param $timelower - * @param $timeupper - * @return unknown_type - */ -function get_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, -$count = false, $site_guid = 0, $container_guid = null, $timelower = 0, $timeupper = 0) { + * + * @param string $type Entity type + * @param string $subtype Entity subtype + * @param int $owner_guid Owner GUID + * @param string $order_by Order by clause + * @param int $limit Limit + * @param int $offset Offset + * @param bool $count Return a count or an array of entities + * @param int $site_guid Site GUID + * @param int $container_guid Container GUID + * @param int $timelower Lower time limit + * @param int $timeupper Upper time limit + * + * @return array + */ +function get_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, +$offset = 0, $count = false, $site_guid = 0, $container_guid = null, $timelower = 0, +$timeupper = 0) { + elgg_deprecated_notice('get_entities() was deprecated by elgg_get_entities().', 1.7); // rewrite owner_guid to container_guid to emulate old functionality @@ -935,10 +985,11 @@ $count = false, $site_guid = 0, $container_guid = null, $timelower = 0, $timeupp /** * Returns SQL where clause for type and subtype on main entity table * - * @param string $table entity table prefix as defined in SELECT ... FROM prefix_entities $table - * @param NULL|$types - * @param NULL|array $subtypes - * @param NULL|array $pairs + * @param string $table Entity table prefix as defined in SELECT...FROM entities $table + * @param NULL|array $types Array of types or NULL if none. + * @param NULL|array $subtypes Array of subtypes or NULL if none + * @param NULL|array $pairs Array of pairs of types and subtypes + * * @return FALSE|string * @since 1.7.0 * @access private @@ -1052,8 +1103,11 @@ function elgg_get_entity_type_subtype_where_sql($table, $types, $subtypes, $pair if (is_array($paired_subtypes)) { $paired_subtype_ids = array(); foreach ($paired_subtypes as $paired_subtype) { - if (ELGG_ENTITIES_NO_VALUE === $paired_subtype || ($paired_subtype_id = get_subtype_id($paired_type, $paired_subtype))) { - $paired_subtype_ids[] = (ELGG_ENTITIES_NO_VALUE === $paired_subtype) ? ELGG_ENTITIES_NO_VALUE : $paired_subtype_id; + if (ELGG_ENTITIES_NO_VALUE === $paired_subtype + || ($paired_subtype_id = get_subtype_id($paired_type, $paired_subtype))) { + + $paired_subtype_ids[] = (ELGG_ENTITIES_NO_VALUE === $paired_subtype) ? + ELGG_ENTITIES_NO_VALUE : $paired_subtype_id; } else { $valid_pairs_subtypes_count--; elgg_log("Type-subtype $paired_type:$paired_subtype' does not exist!", 'WARNING'); @@ -1069,7 +1123,8 @@ function elgg_get_entity_type_subtype_where_sql($table, $types, $subtypes, $pair if ($paired_subtype_ids_str = implode(',', $paired_subtype_ids)) { - $wheres[] = "({$table}.type = '$paired_type' AND {$table}.subtype IN ($paired_subtype_ids_str))"; + $wheres[] = "({$table}.type = '$paired_type'" + . " AND {$table}.subtype IN ($paired_subtype_ids_str))"; } } else { $wheres[] = "({$table}.type = '$paired_type')"; @@ -1090,8 +1145,10 @@ function elgg_get_entity_type_subtype_where_sql($table, $types, $subtypes, $pair * Returns SQL where clause for owner and containers. * * @todo Probably DRY up once things are settled. - * @param string $table entity table prefix as defined in SELECT ... FROM prefix_entities $table - * @param NULL|array $owner_guids + * + * @param string $table Entity table prefix as defined in SELECT...FROM entities $table + * @param NULL|array $owner_guids Owner GUIDs + * * @return FALSE|str * @since 1.7.0 * @access private @@ -1119,7 +1176,9 @@ function elgg_get_entity_owner_where_sql($table, $owner_guids) { $where = ''; // implode(',', 0) returns 0. - if (($owner_str = implode(',', $owner_guids_sanitised)) && ($owner_str !== FALSE) && ($owner_str !== '')) { + if (($owner_str = implode(',', $owner_guids_sanitised)) + && ($owner_str !== FALSE) && ($owner_str !== '')) { + $where = "({$table}.owner_guid IN ($owner_str))"; } @@ -1129,8 +1188,10 @@ function elgg_get_entity_owner_where_sql($table, $owner_guids) { /** * Returns SQL where clause for containers. * - * @param string $table entity table prefix as defined in SELECT ... FROM prefix_entities $table - * @param NULL|array $container_guids + * @param string $table Entity table prefix as defined in + * SELECT...FROM entities $table + * @param NULL|array $container_guids Array of container guids + * * @return FALSE|string * @since 1.7.0 * @access private @@ -1168,17 +1229,19 @@ function elgg_get_entity_container_where_sql($table, $container_guids) { /** * Returns SQL where clause for entity time limits. * - * @param string $table entity table prefix as defined in SELECT ... FROM prefix_entities $table - * @param NULL|int $time_created_upper - * @param NULL|int $time_created_lower - * @param NULL|int $time_updated_upper - * @param NULL|int $time_updated_lower + * @param string $table Entity table prefix as defined in + * SELECT...FROM entities $table + * @param NULL|int $time_created_upper Time crated upper limit + * @param NULL|int $time_created_lower Time created lower limit + * @param NULL|int $time_updated_upper Time updated upper limit + * @param NULL|int $time_updated_lower Time updated lower limit + * * @return FALSE|str FALSE on fail, string on success. * @since 1.7.0 * @access private */ -function elgg_get_entity_time_where_sql($table, $time_created_upper = NULL, $time_created_lower = NULL, - $time_updated_upper = NULL, $time_updated_lower = NULL) { +function elgg_get_entity_time_where_sql($table, $time_created_upper = NULL, +$time_created_lower = NULL, $time_updated_upper = NULL, $time_updated_lower = NULL) { $wheres = array(); @@ -1210,8 +1273,9 @@ function elgg_get_entity_time_where_sql($table, $time_created_upper = NULL, $tim /** * Returns SQL where clause for site entities * - * @param string $table entity table prefix as defined in SELECT ... FROM prefix_entities $table - * @param NULL|array $site_guids + * @param string $table Entity table prefix as defined in SELECT...FROM entities $table + * @param NULL|array $site_guids Array of site guids + * * @return FALSE|string * @since 1.7.0 * @access private @@ -1281,17 +1345,23 @@ function elgg_list_entities($options) { } /** + * Lists entities + * * @deprecated 1.7. Use elgg_list_entities(). - * @param $type - * @param $subtype - * @param $owner_guid - * @param $limit - * @param $fullview - * @param $viewtypetoggle - * @param $pagination - * @return unknown_type - */ -function list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $pagination = true) { + * + * @param string $type Entity type + * @param string $subtype Entity subtype + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param bool $fullview Display entity full views? + * @param bool $viewtypetoggle Allow switching to gallery mode? + * @param bool $pagination Show pagination? + * + * @return string + */ +function list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, +$viewtypetoggle = false, $pagination = true) { + elgg_deprecated_notice('list_entities() was deprecated by elgg_list_entities()!', 1.7); $options = array(); @@ -1327,26 +1397,33 @@ function list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $ /** * Lists entities that belong to a group. * - * @warning This function is largely redundant. The preferred - * method of listing group entities is by setting the container - * guid option in {@link elgg_list_entities()}. - * - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param int $container_guid The GUID of the containing group - * @param int $limit The number of entities to display per page (default: 10) - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view (default: true) - * @param true|false $pagination Whether to display pagination (default: true) + * @warning This function is redundant and will be deprecated in 1.8. + * The preferred method of listing group entities is by setting the + * container guid option in {@link elgg_list_entities()}. + * + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param int $container_guid The GUID of the containing group + * @param int $limit The number of entities to display per page (default: 10) + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow gallery view (default: true) + * @param bool $pagination Whether to display pagination (default: true) + * * @return string List of parsed entities + * * @see elgg_list_entities() */ -function list_entities_groups($subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) { +function list_entities_groups($subtype = "", $owner_guid = 0, $container_guid = 0, +$limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) { + $offset = (int) get_input('offset'); - $count = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset, true); - $entities = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset); + $count = get_objects_in_group($container_guid, $subtype, $owner_guid, + 0, "", $limit, $offset, true); + $entities = get_objects_in_group($container_guid, $subtype, $owner_guid, + 0, "", $limit, $offset); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, + $fullview, $viewtypetoggle, $pagination); } /** @@ -1356,14 +1433,17 @@ function list_entities_groups($subtype = "", $owner_guid = 0, $container_guid = * * @warning Months are returned in the form YYYYMM. * - * @param string $type The type of entity - * @param string $subtype The subtype of entity - * @param int $container_guid The container GUID that the entinties belong to - * @param int $site_guid The site GUID - * @param str order_by SQL order by clause + * @param string $type The type of entity + * @param string $subtype The subtype of entity + * @param int $container_guid The container GUID that the entinties belong to + * @param int $site_guid The site GUID + * @param str $order_by Order_by SQL order by clause + * * @return array|false Either an array months as YYYYMM, or false on failure */ -function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_guid = 0, $order_by = 'time_created') { +function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_guid = 0, +$order_by = 'time_created') { + global $CONFIG; $site_guid = (int) $site_guid; @@ -1380,16 +1460,19 @@ function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_ if (is_array($subtype)) { $tempwhere = ""; if (sizeof($subtype)) { - foreach($subtype as $typekey => $subtypearray) { - foreach($subtypearray as $subtypeval) { + foreach ($subtype as $typekey => $subtypearray) { + foreach ($subtypearray as $subtypeval) { $typekey = sanitise_string($typekey); if (!empty($subtypeval)) { - if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval)) + if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval)) { return false; + } } else { $subtypeval = 0; } - if (!empty($tempwhere)) $tempwhere .= " or "; + if (!empty($tempwhere)) { + $tempwhere .= " or "; + } $tempwhere .= "(type = '{$typekey}' and subtype = {$subtypeval})"; } } @@ -1409,10 +1492,10 @@ function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_ if ($container_guid !== 0) { if (is_array($container_guid)) { - foreach($container_guid as $key => $val) { + foreach ($container_guid as $key => $val) { $container_guid[$key] = (int) $val; } - $where[] = "container_guid in (" . implode(",",$container_guid) . ")"; + $where[] = "container_guid in (" . implode(",", $container_guid) . ")"; } else { $container_guid = (int) $container_guid; $where[] = "container_guid = {$container_guid}"; @@ -1435,7 +1518,7 @@ function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_ $sql .= "1=1 ORDER BY $order_by"; if ($result = get_data($sql)) { $endresult = array(); - foreach($result as $res) { + foreach ($result as $res) { $endresult[] = $res->yearmonth; } return $endresult; @@ -1456,9 +1539,10 @@ function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_ * * @note Use ElggEntity::disable() instead. * - * @param int $guid The guid - * @param string $reason Optional reason - * @param bool $recursive Recursively disable all entities owned or contained by $guid? + * @param int $guid The guid + * @param string $reason Optional reason + * @param bool $recursive Recursively disable all entities owned or contained by $guid? + * * @return bool * @access private * @see access_show_hidden_entities() @@ -1471,7 +1555,7 @@ function disable_entity($guid, $reason = "", $recursive = true) { $reason = sanitise_string($reason); if ($entity = get_entity($guid)) { - if (trigger_elgg_event('disable',$entity->type,$entity)) { + if (trigger_elgg_event('disable', $entity->type, $entity)) { if ($entity->canEdit()) { if ($reason) { create_metadata($guid, 'disable_reason', $reason, '', 0, ACCESS_PUBLIC); @@ -1515,7 +1599,8 @@ function disable_entity($guid, $reason = "", $recursive = true) { * @warning In order to enable an entity using ElggEntity::enable(), * you must first use {@link access_show_hidden_entities()}. * - * @param int $guid + * @param int $guid GUID of entity to enable + * * @return bool */ function enable_entity($guid) { @@ -1528,7 +1613,7 @@ function enable_entity($guid) { access_show_hidden_entities(true); if ($entity = get_entity($guid)) { - if (trigger_elgg_event('enable',$entity->type,$entity)) { + if (trigger_elgg_event('enable', $entity->type, $entity)) { if ($entity->canEdit()) { access_show_hidden_entities($access_status); @@ -1561,9 +1646,12 @@ function enable_entity($guid) { * the entity. That means that if the container_guid = $guid, the item will be deleted * regardless of who owns it. * - * @param int $guid - * @param bool $recursive If true (default) then all entities which are owned or contained by $guid will also be deleted. + * @param int $guid The guid of the entity to delete + * @param bool $recursive If true (default) then all entities which are + * owned or contained by $guid will also be deleted. + * * @access private + * @return bool */ function delete_entity($guid, $recursive = true) { global $CONFIG, $ENTITY_CACHE; @@ -1641,13 +1729,17 @@ function delete_entity($guid, $recursive = true) { /** * Delete multiple entities that match a given query. - * This function iterates through and calls delete_entity on each one, this is somewhat inefficient but lets - * the 'delete' even be called for each entity. + * This function iterates through and calls delete_entity on + * each one, this is somewhat inefficient but lets + * the 'delete' event be called for each entity. * * @deprecated 1.7. This is a dangerous function as it defaults to deleting everything. - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user + * + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * + * @return false */ function delete_entities($type = "", $subtype = "", $owner_guid = 0) { elgg_deprecated_notice('delete_entities() was deprecated because no one should use it.', 1.7); @@ -1657,10 +1749,11 @@ function delete_entities($type = "", $subtype = "", $owner_guid = 0) { /** * Exports attributes generated on the fly (volatile) about an entity. * - * @param unknown_type $hook - * @param unknown_type $entity_type - * @param unknown_type $returnvalue - * @param unknown_type $params The parameters, passed 'guid' and 'varname' + * @param string $hook volatile + * @param string $entity_type metadata + * @param string $returnvalue Return value from previous hook + * @param array $params The parameters, passed 'guid' and 'varname' + * * @return null * @elgg_plugin_hook_handler volatile metadata * @todo investigate more. @@ -1698,8 +1791,13 @@ function volatile_data_export_plugin_hook($hook, $entity_type, $returnvalue, $pa * * @warning Only exports fields in the entity and entity type tables. * + * @param string $hook export + * @param string $entity_type all + * @param mixed $returnvalue Previous hook return value + * @param array $params Parameters + * * @elgg_event_handler export all - * @todo document + * @return mixed */ function export_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) { // Sanity check values @@ -1716,7 +1814,8 @@ function export_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) { // Get the entity $entity = get_entity($guid); if (!($entity instanceof ElggEntity)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, get_class())); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, get_class()); + throw new InvalidClassException($msg); } $export = $entity->export(); @@ -1733,9 +1832,11 @@ function export_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) { } /** - * Utility function used by import_entity_plugin_hook() to process an ODDEntity into an unsaved ElggEntity. + * Utility function used by import_entity_plugin_hook() to + * process an ODDEntity into an unsaved ElggEntity. * * @param ODDEntity $element The OpenDD element + * * @return ElggEntity the unsaved entity which should be populated by items. * @todo Remove this. */ @@ -1749,18 +1850,18 @@ function oddentity_to_elggentity(ODDEntity $element) { if (!$tmp) { // Construct new class with owner from session $classname = get_subtype_class($class, $subclass); - if ($classname!="") { + if ($classname != "") { if (class_exists($classname)) { $tmp = new $classname(); if (!($tmp instanceof ElggEntity)) { - throw new ClassException(sprintf(elgg_echo('ClassException:ClassnameNotClass', $classname, get_class()))); + $msg = sprintf(elgg_echo('ClassException:ClassnameNotClass', $classname, get_class())); + throw new ClassException($msg); } - } - else + } else { error_log(sprintf(elgg_echo('ClassNotFoundException:MissingClass'), $classname)); - } - else { + } + } else { switch ($class) { case 'object' : $tmp = new ElggObject($row); @@ -1775,14 +1876,16 @@ function oddentity_to_elggentity(ODDEntity $element) { $tmp = new ElggSite($row); break; default: - throw new InstallationException(sprintf(elgg_echo('InstallationException:TypeNotSupported'), $class)); + $msg = sprintf(elgg_echo('InstallationException:TypeNotSupported'), $class); + throw new InstallationException($msg); } } } if ($tmp) { if (!$tmp->import($element)) { - throw new ImportException(sprintf(elgg_echo('ImportException:ImportFailed'), $element->getAttribute('uuid'))); + $msg = sprintf(elgg_echo('ImportException:ImportFailed'), $element->getAttribute('uuid')); + throw new ImportException($msg); } return $tmp; @@ -1794,11 +1897,19 @@ function oddentity_to_elggentity(ODDEntity $element) { /** * Import an entity. * - * This function checks the passed XML doc (as array) to see if it is a user, if so it constructs a new - * elgg user and returns "true" to inform the importer that it's been handled. + * This function checks the passed XML doc (as array) to see if it is + * a user, if so it constructs a new elgg user and returns "true" + * to inform the importer that it's been handled. + * + * @param string $hook import + * @param string $entity_type all + * @param mixed $returnvalue Value from previous hook + * @param mixed $params Array of params * + * @return mixed * @elgg_plugin_hook_handler import all * @todo document + * */ function import_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) { $element = $params['element']; @@ -1811,7 +1922,8 @@ function import_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) { if ($tmp) { // Make sure its saved if (!$tmp->save()) { - throw new ImportException(sprintf(elgg_echo('ImportException:ProblemSaving'), $element->getAttribute('uuid'))); + sprintf(elgg_echo('ImportException:ProblemSaving'), $element->getAttribute('uuid')); + throw new ImportException($msg); } // Belts and braces @@ -1838,7 +1950,8 @@ function import_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) { * @tip Use ElggEntity::canEdit() instead. * * @param int $entity_guid The GUID of the entity - * @param int $user_guid The GUID of the user + * @param int $user_guid The GUID of the user + * * @return bool * @link http://docs.elgg.org/Entities/AccessControl */ @@ -1888,9 +2001,10 @@ function can_edit_entity($entity_guid, $user_guid = 0) { * * @warning If a $user_guid isn't specified, the currently logged in user is used. * - * @param int $entity_guid The GUID of the entity - * @param int $user_guid The GUID of the user - * @param ElggMetadata $metadata The metadata to specifically check (if any; default null) + * @param int $entity_guid The GUID of the entity + * @param int $user_guid The GUID of the user + * @param ElggMetadata $metadata The metadata to specifically check (if any; default null) + * * @return bool * @see register_plugin_hook() */ @@ -1907,7 +2021,8 @@ function can_edit_entity_metadata($entity_guid, $user_guid = 0, $metadata = null } $user = get_entity($user_guid); - $return = trigger_plugin_hook('permissions_check:metadata',$entity->type,array('entity' => $entity, 'user' => $user, 'metadata' => $metadata),$return); + $params = array('entity' => $entity, 'user' => $user, 'metadata' => $metadata); + $return = trigger_plugin_hook('permissions_check:metadata', $entity->type, $parms, $return); return $return; } else { return false; @@ -1922,7 +2037,8 @@ function can_edit_entity_metadata($entity_guid, $user_guid = 0, $metadata = null * @internal This is passed an entity rather than a guid to handle non-created entities. * * @param ElggEntity $entity The entity - * @param string $size + * @param string $size Icon size + * * @return string URL to the entity icon. */ function get_entity_icon_url(ElggEntity $entity, $size = 'medium') { @@ -1960,7 +2076,8 @@ function get_entity_icon_url(ElggEntity $entity, $size = 'medium') { $viewtype = elgg_get_viewtype(); // Step one, see if anyone knows how to render this in the current view - $url = trigger_plugin_hook('entity:icon:url', $entity->getType(), array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size), $url); + $params = array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size); + $url = trigger_plugin_hook('entity:icon:url', $entity->getType(), $params, $url); // Fail, so use default if (!$url) { @@ -1968,13 +2085,13 @@ function get_entity_icon_url(ElggEntity $entity, $size = 'medium') { $subtype = $entity->getSubtype(); if (!empty($subtype)) { - $overrideurl = elgg_view("icon/{$type}/{$subtype}/{$size}",array('entity' => $entity)); + $overrideurl = elgg_view("icon/{$type}/{$subtype}/{$size}", array('entity' => $entity)); if (!empty($overrideurl)) { return $overrideurl; } } - $overrideurl = elgg_view("icon/{$type}/default/{$size}",array('entity' => $entity)); + $overrideurl = elgg_view("icon/{$type}/default/{$size}", array('entity' => $entity)); if (!empty($overrideurl)) { return $overrideurl; } @@ -1991,6 +2108,7 @@ function get_entity_icon_url(ElggEntity $entity, $size = 'medium') { * @tip Can be overridden with {@link register_entity_url_handler()}. * * @param int $entity_guid The GUID of the entity + * * @return string The URL of the entity * @see register_entity_url_handler() */ @@ -2001,17 +2119,17 @@ function get_entity_url($entity_guid) { $url = ""; if (isset($CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()])) { - $function = $CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()]; + $function = $CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()]; if (is_callable($function)) { $url = $function($entity); } } elseif (isset($CONFIG->entity_url_handler[$entity->getType()]['all'])) { - $function = $CONFIG->entity_url_handler[$entity->getType()]['all']; + $function = $CONFIG->entity_url_handler[$entity->getType()]['all']; if (is_callable($function)) { $url = $function($entity); } } elseif (isset($CONFIG->entity_url_handler['all']['all'])) { - $function = $CONFIG->entity_url_handler['all']['all']; + $function = $CONFIG->entity_url_handler['all']['all']; if (is_callable($function)) { $url = $function($entity); } @@ -2030,14 +2148,17 @@ function get_entity_url($entity_guid) { /** * Sets the URL handler for a particular entity type and subtype * - * @param string $function_name The function to register - * @param string $entity_type The entity type + * @param string $function_name The function to register + * @param string $entity_type The entity type * @param string $entity_subtype The entity subtype + * * @return true|false Depending on success * @see get_entity_url() * @see ElggEntity::getURL() */ -function register_entity_url_handler($function_name, $entity_type = "all", $entity_subtype = "all") { +function register_entity_url_handler($function_name, $entity_type = "all", +$entity_subtype = "all") { + global $CONFIG; if (!is_callable($function_name)) { @@ -2063,10 +2184,12 @@ function register_entity_url_handler($function_name, $entity_type = "all", $enti * @tip This will attempt to find a default entity for the current view and return a url. * This is registered at a high priority so that other handlers will pick it up first. * - * @param unknown_type $hook - * @param unknown_type $entity_type - * @param unknown_type $returnvalue - * @param unknown_type $params + * @param string $hook entity:icon:url + * @param string $entity_type all + * @param mixed $returnvalue Previous hook's return value + * @param array $params Array of params + * + * @return string|null String of URL for entity's icon * @elgg_plugin_hook_handler entity:icon:url all */ function default_entity_icon_hook($hook, $entity_type, $returnvalue, $params) { @@ -2085,7 +2208,7 @@ function default_entity_icon_hook($hook, $entity_type, $returnvalue, $params) { $url = "views/$viewtype/graphics/icons/$type/default/$size.png"; } - if(!@file_exists($CONFIG->path . $url)) { + if (!@file_exists($CONFIG->path . $url)) { $url = "views/$viewtype/graphics/icons/default/$size.png"; } @@ -2103,8 +2226,9 @@ function default_entity_icon_hook($hook, $entity_type, $returnvalue, $params) { * * @tip Add a language string item:type:subtype to make sure the items are display properly. * - * @param string $type The type of entity (object, site, user, group) + * @param string $type The type of entity (object, site, user, group) * @param string $subtype The subtype to register (may be blank) + * * @return true|false Depending on success * @see get_registered_entity_types() * @link http://docs.elgg.org/Search @@ -2139,8 +2263,9 @@ function register_entity_type($type, $subtype) { * @warning With a blank subtype, it unregisters that entity type including * all subtypes. This must be called after all subtypes have been registered. * - * @param string $type The type of entity (object, site, user, group) + * @param string $type The type of entity (object, site, user, group) * @param string $subtype The subtype to register (may be blank) + * * @return true|false Depending on success * @see register_entity_type() */ @@ -2178,6 +2303,7 @@ function unregister_entity_type($type, $subtype) { * Returns registered entity types and subtypes * * @param string $type The type of entity (object, site, user, group) or blank for all + * * @return array|false Depending on whether entities have been registered * @see register_entity_type() */ @@ -2204,8 +2330,9 @@ function get_registered_entity_types($type = '') { /** * Returns if the entity type and subtype have been registered with {@see register_entity_type()}. * - * @param string $type The type of entity (object, site, user, group) + * @param string $type The type of entity (object, site, user, group) * @param string $subtype The subtype (may be blank) + * * @return true|false Depending on whether or not the type has been registered */ function is_registered_entity_type($type, $subtype) { @@ -2227,26 +2354,33 @@ function is_registered_entity_type($type, $subtype) { * Page handler for generic entities view system * * @param array $page Page elements from pain page handler + * + * @return void * @elgg_page_handler view */ function entities_page_handler($page) { if (isset($page[0])) { global $CONFIG; - set_input('guid',$page[0]); + set_input('guid', $page[0]); include($CONFIG->path . "pages/entities/index.php"); } } /** + * Lists entities. + * + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param bool $fullview Show entity full views + * @param bool $viewtypetoggle Show list type toggle + * @param bool $allowedtypes A string of the allowed types + * + * @return string * @deprecated 1.7. Use elgg_list_registered_entities(). - * @param $owner_guid - * @param $limit - * @param $fullview - * @param $viewtypetoggle - * @param $allowedtypes - * @return unknown_type - */ -function list_registered_entities($owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $allowedtypes = true) { + */ +function list_registered_entities($owner_guid = 0, $limit = 10, $fullview = true, +$viewtypetoggle = false, $allowedtypes = true) { + elgg_deprecated_notice('list_registered_entities() was deprecated by elgg_list_registered_entities().', 1.7); $options = array(); @@ -2304,7 +2438,7 @@ function elgg_list_registered_entities($options) { $typearray = array(); if ($object_types = get_registered_entity_types()) { - foreach($object_types as $object_type => $subtype_array) { + foreach ($object_types as $object_type => $subtype_array) { if (in_array($object_type, $options['allowed_types']) || $options['allowed_types'] === TRUE) { $typearray[$object_type] = array(); @@ -2329,21 +2463,25 @@ function elgg_list_registered_entities($options) { /** * Get entities based on their private data. * - * @param string $name The name of the setting - * @param string $value The value of the setting - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param string $order_by The field to order by; by default, time_created desc - * @param int $limit The number of entities to return; 10 by default - * @param int $offset The indexing offset, 0 by default - * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param int|array $container_guid The container or containers to get entities from (default: all containers). + * @param string $name The name of the setting + * @param string $value The value of the setting + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param string $order_by The field to order by; by default, time_created desc + * @param int $limit The number of entities to return; 10 by default + * @param int $offset The indexing offset, 0 by default + * @param boolean $count Return a count of entities + * @param int $site_guid The site to get entities for. 0 for current, -1 for any + * @param mixed $container_guid The container(s) GUIDs + * * @return array A list of entities. * @todo deprecate */ -function get_entities_from_private_setting($name = "", $value = "", $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) { +function get_entities_from_private_setting($name = "", $value = "", $type = "", $subtype = "", +$owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, +$container_guid = null) { + global $CONFIG; if ($subtype === false || $subtype === null || $subtype === 0) { @@ -2369,8 +2507,8 @@ function get_entities_from_private_setting($name = "", $value = "", $type = "", if (is_array($type)) { $tempwhere = ""; if (sizeof($type)) { - foreach($type as $typekey => $subtypearray) { - foreach($subtypearray as $subtypeval) { + foreach ($type as $typekey => $subtypearray) { + foreach ($subtypearray as $subtypeval) { $typekey = sanitise_string($typekey); if (!empty($subtypeval)) { if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval)) { @@ -2379,7 +2517,9 @@ function get_entities_from_private_setting($name = "", $value = "", $type = "", } else { $subtypeval = 0; } - if (!empty($tempwhere)) $tempwhere .= " or "; + if (!empty($tempwhere)) { + $tempwhere .= " or "; + } $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})"; } } @@ -2396,7 +2536,7 @@ function get_entities_from_private_setting($name = "", $value = "", $type = "", if ($type != "") { $where[] = "e.type='$type'"; } - if ($subtype!=="") { + if ($subtype !== "") { $where[] = "e.subtype=$subtype"; } } @@ -2405,13 +2545,8 @@ function get_entities_from_private_setting($name = "", $value = "", $type = "", if (!is_array($owner_guid)) { $owner_array = array($owner_guid); $owner_guid = (int) $owner_guid; - // $where[] = "owner_guid = '$owner_guid'"; } else if (sizeof($owner_guid) > 0) { $owner_array = array_map('sanitise_int', $owner_guid); - // Cast every element to the owner_guid array to int - // $owner_guid = array_map("sanitise_int", $owner_guid); - // $owner_guid = implode(",",$owner_guid); - // $where[] = "owner_guid in ({$owner_guid})"; } if (is_null($container_guid)) { $container_guid = $owner_array; @@ -2424,19 +2559,21 @@ function get_entities_from_private_setting($name = "", $value = "", $type = "", if (!is_null($container_guid)) { if (is_array($container_guid)) { - foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val; - $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")"; + foreach ($container_guid as $key => $val) { + $container_guid[$key] = (int) $val; + } + $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")"; } else { $container_guid = (int) $container_guid; $where[] = "e.container_guid = {$container_guid}"; } } - if ($name!="") { + if ($name != "") { $where[] = "s.name = '$name'"; } - if ($value!="") { + if ($value != "") { $where[] = "s.value='$value'"; } @@ -2472,21 +2609,24 @@ function get_entities_from_private_setting($name = "", $value = "", $type = "", /** * Get entities based on their private data by multiple keys. * - * @param string $name The name of the setting - * @param string $value The value of the setting - * @param string|array $type The type of entity (eg "user", "object" etc) or array(type1 => array('subtype1', ...'subtypeN'), ...) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param string $order_by The field to order by; by default, time_created desc - * @param int $limit The number of entities to return; 10 by default - * @param int $offset The indexing offset, 0 by default - * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param int|array $container_guid The container or containers to get entities from (default: all containers). + * @param string $name The name of the setting + * @param mixed $type Entity type + * @param string $subtype Entity subtype + * @param int $owner_guid The GUID of the owning user + * @param string $order_by The field to order by; by default, time_created desc + * @param int $limit The number of entities to return; 10 by default + * @param int $offset The indexing offset, 0 by default + * @param bool $count Count entities + * @param int $site_guid Site GUID. 0 for current, -1 for any. + * @param mixed $container_guid Container GUID + * * @return array A list of entities. * @todo deprecate */ -function get_entities_from_private_setting_multi(array $name, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) { +function get_entities_from_private_setting_multi(array $name, $type = "", $subtype = "", +$owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, +$site_guid = 0, $container_guid = null) { + global $CONFIG; if ($subtype === false || $subtype === null || $subtype === 0) { @@ -2509,8 +2649,8 @@ function get_entities_from_private_setting_multi(array $name, $type = "", $subty if (is_array($type)) { $tempwhere = ""; if (sizeof($type)) { - foreach($type as $typekey => $subtypearray) { - foreach($subtypearray as $subtypeval) { + foreach ($type as $typekey => $subtypearray) { + foreach ($subtypearray as $subtypeval) { $typekey = sanitise_string($typekey); if (!empty($subtypeval)) { if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval)) { @@ -2519,7 +2659,9 @@ function get_entities_from_private_setting_multi(array $name, $type = "", $subty } else { $subtypeval = 0; } - if (!empty($tempwhere)) $tempwhere .= " or "; + if (!empty($tempwhere)) { + $tempwhere .= " or "; + } $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})"; } } @@ -2538,7 +2680,7 @@ function get_entities_from_private_setting_multi(array $name, $type = "", $subty $where[] = "e.type='$type'"; } - if ($subtype!=="") { + if ($subtype !== "") { $where[] = "e.subtype=$subtype"; } } @@ -2547,13 +2689,8 @@ function get_entities_from_private_setting_multi(array $name, $type = "", $subty if (!is_array($owner_guid)) { $owner_array = array($owner_guid); $owner_guid = (int) $owner_guid; - // $where[] = "owner_guid = '$owner_guid'"; } else if (sizeof($owner_guid) > 0) { $owner_array = array_map('sanitise_int', $owner_guid); - // Cast every element to the owner_guid array to int - // $owner_guid = array_map("sanitise_int", $owner_guid); - // $owner_guid = implode(",",$owner_guid); - // $where[] = "owner_guid in ({$owner_guid})"; } if (is_null($container_guid)) { $container_guid = $owner_array; @@ -2565,8 +2702,10 @@ function get_entities_from_private_setting_multi(array $name, $type = "", $subty if (!is_null($container_guid)) { if (is_array($container_guid)) { - foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val; - $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")"; + foreach ($container_guid as $key => $val) { + $container_guid[$key] = (int) $val; + } + $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")"; } else { $container_guid = (int) $container_guid; $where[] = "e.container_guid = {$container_guid}"; @@ -2624,8 +2763,9 @@ function get_entities_from_private_setting_multi(array $name, $type = "", $subty * @internal Private data is used to store settings for plugins * and user settings. * - * @param int $entity_guid The entity GUID - * @param string $name The name of the setting + * @param int $entity_guid The entity GUID + * @param string $name The name of the setting + * * @return mixed The setting value, or false on failure * @see set_private_setting() * @see get_all_private_settings() @@ -2638,7 +2778,11 @@ function get_private_setting($entity_guid, $name) { $entity_guid = (int) $entity_guid; $name = sanitise_string($name); - if ($setting = get_data_row("SELECT value from {$CONFIG->dbprefix}private_settings where name = '{$name}' and entity_guid = {$entity_guid}")) { + $query = "SELECT value from {$CONFIG->dbprefix}private_settings + where name = '{$name}' and entity_guid = {$entity_guid}"; + $setting = get_data_row($query); + + if ($setting) { return $setting->value; } return false; @@ -2648,6 +2792,7 @@ function get_private_setting($entity_guid, $name) { * Return an array of all private settings. * * @param int $entity_guid The entity GUID + * * @return array|false * @see set_private_setting() * @see get_private_settings() @@ -2660,7 +2805,8 @@ function get_all_private_settings($entity_guid) { $entity_guid = (int) $entity_guid; - $result = get_data("SELECT * from {$CONFIG->dbprefix}private_settings where entity_guid = {$entity_guid}"); + $query = "SELECT * from {$CONFIG->dbprefix}private_settings where entity_guid = {$entity_guid}"; + $result = get_data($query); if ($result) { $return = array(); foreach ($result as $r) { @@ -2676,9 +2822,10 @@ function get_all_private_settings($entity_guid) { /** * Sets a private setting for an entity. * - * @param int $entity_guid The entity GUID - * @param string $name The name of the setting - * @param string $value The value of the setting + * @param int $entity_guid The entity GUID + * @param string $name The name of the setting + * @param string $value The value of the setting + * * @return mixed The setting ID, or false on failure * @see get_private_setting() * @see get_all_private_settings() @@ -2706,8 +2853,9 @@ function set_private_setting($entity_guid, $name, $value) { /** * Deletes a private setting for an entity. * - * @param int $entity_guid The Entity GUID - * @param string $name The name of the setting + * @param int $entity_guid The Entity GUID + * @param string $name The name of the setting + * * @return true|false depending on success * @see get_private_setting() * @see get_all_private_settings() @@ -2730,6 +2878,7 @@ function remove_private_setting($entity_guid, $name) { * Deletes all private settings for an entity. * * @param int $entity_guid The Entity GUID + * * @return true|false depending on success * @see get_private_setting() * @see get_all_private_settings() @@ -2745,7 +2894,7 @@ function remove_all_private_settings($entity_guid) { where entity_guid = {$entity_guid}"); } -/* +/** * Check the recursive delete permissions token. * * If an entity is deleted recursively, a permissions override is required to allow @@ -2756,12 +2905,11 @@ function remove_all_private_settings($entity_guid) { * @elgg_plugin_hook_handler permissions_check all * @elgg_plugin_hook_handler permissions_check:metadata all */ -function recursive_delete_permissions_check($hook, $entity_type, $returnvalue, $params) { +function recursive_delete_permissions_check() { static $__RECURSIVE_DELETE_TOKEN; - $entity = $params['entity']; - - if ((isloggedin()) && ($__RECURSIVE_DELETE_TOKEN) && (strcmp($__RECURSIVE_DELETE_TOKEN, md5(get_loggedin_userid())))) { + if ((isloggedin()) && ($__RECURSIVE_DELETE_TOKEN) + && (strcmp($__RECURSIVE_DELETE_TOKEN, md5(get_loggedin_userid())))) { return true; } @@ -2775,9 +2923,11 @@ function recursive_delete_permissions_check($hook, $entity_type, $returnvalue, $ * @tip Use this function in actions and views to check that you are dealing * with the correct type of entity. * - * @param $entity - * @param $type - * @param $subtype + * @param mixed $entity Entity + * @param string $type Entity type + * @param string $subtype Entity subtype + * @param string $class Class name + * * @return Bool * @since 1.8 */ @@ -2808,10 +2958,12 @@ function elgg_instanceof($entity, $type = NULL, $subtype = NULL, $class = NULL) * @warning This is different to time_updated. Time_updated is automatically set, * while last_action is only set when explicitly called. * - * @param int $guid Entity annotation|relationship action carried out on + * @param int $guid Entity annotation|relationship action carried out on * @param int $posted Timestamp of last action + * + * @return bool **/ -function update_entity_last_action($guid, $posted = NULL){ +function update_entity_last_action($guid, $posted = NULL) { global $CONFIG; $guid = (int)$guid; @@ -2819,10 +2971,11 @@ function update_entity_last_action($guid, $posted = NULL){ $posted = time(); } - if ($guid){ + if ($guid) { //now add to the river updated table - $query = update_data("UPDATE {$CONFIG->dbprefix}entities SET last_action = {$posted} WHERE guid = {$guid}"); - if ($query) { + $query = "UPDATE {$CONFIG->dbprefix}entities SET last_action = {$posted} WHERE guid = {$guid}"; + $result = update_data($query); + if ($result) { return TRUE; } else { return FALSE; @@ -2835,13 +2988,10 @@ function update_entity_last_action($guid, $posted = NULL){ /** * Garbage collect stub and fragments from any broken delete/create calls * - * @param unknown_type $hook - * @param unknown_type $user - * @param unknown_type $returnvalue - * @param unknown_type $tag + * @return void * @elgg_plugin_hook_handler gc system */ -function entities_gc($hook, $user, $returnvalue, $tag) { +function entities_gc() { global $CONFIG; $tables = array ('sites_entity', 'objects_entity', 'groups_entity', 'users_entity'); @@ -2855,7 +3005,12 @@ function entities_gc($hook, $user, $returnvalue, $tag) { /** * Runs unit tests for the entity objects. * - * @elgg_plugin_hook_handler unit_test system + * @param sting $hook unit_test + * @param string $type system + * @param mixed $value Array of tests + * @param mixed $params Params + * + * @return array */ function entities_test($hook, $type, $value, $params) { global $CONFIG; @@ -2866,19 +3021,20 @@ function entities_test($hook, $type, $value, $params) { /** * Entities init function; establishes the default entity page handler * + * @return void * @elgg_event_handler init system */ function entities_init() { - register_page_handler('view','entities_page_handler'); + register_page_handler('view', 'entities_page_handler'); register_plugin_hook('unit_test', 'system', 'entities_test'); // Allow a permission override for recursive entity deletion // @todo Can this be done better? - register_plugin_hook('permissions_check','all','recursive_delete_permissions_check'); - register_plugin_hook('permissions_check:metadata','all','recursive_delete_permissions_check'); + register_plugin_hook('permissions_check', 'all', 'recursive_delete_permissions_check'); + register_plugin_hook('permissions_check:metadata', 'all', 'recursive_delete_permissions_check'); - register_plugin_hook('gc','system','entities_gc'); + register_plugin_hook('gc', 'system', 'entities_gc'); } /** Register the import hook */ diff --git a/engine/lib/export.php b/engine/lib/export.php index 667366cc4..eaf2fd3dd 100644 --- a/engine/lib/export.php +++ b/engine/lib/export.php @@ -2,14 +2,15 @@ /** * Elgg Data import export functionality. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage DataModel.Export */ /** * Get a UUID from a given object. * - * @param $object The object either an ElggEntity, ElggRelationship or ElggExtender + * @param mixed $object The object either an ElggEntity, ElggRelationship or ElggExtender + * * @return the UUID or false */ function get_uuid_from_object($object) { @@ -18,9 +19,9 @@ function get_uuid_from_object($object) { } else if ($object instanceof ElggExtender) { $type = $object->type; if ($type == 'volatile') { - $uuid = guid_to_uuid($object->entity_guid). $type . "/{$object->name}/"; + $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->name}/"; } else { - $uuid = guid_to_uuid($object->entity_guid). $type . "/{$object->id}/"; + $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->id}/"; } return $uuid; @@ -35,6 +36,8 @@ function get_uuid_from_object($object) { * Generate a UUID from a given GUID. * * @param int $guid The GUID of an object. + * + * @return string */ function guid_to_uuid($guid) { global $CONFIG; @@ -44,7 +47,9 @@ function guid_to_uuid($guid) { /** * Test to see if a given uuid is for this domain, returning true if so. - * @param $uuid + * + * @param string $uuid A unique ID + * * @return bool */ function is_uuid_this_domain($uuid) { @@ -60,12 +65,15 @@ function is_uuid_this_domain($uuid) { /** * This function attempts to retrieve a previously imported entity via its UUID. * - * @param $uuid + * @param string $uuid A unique ID + * + * @return mixed */ function get_entity_from_uuid($uuid) { $uuid = sanitise_string($uuid); - $entities = elgg_get_entities_from_metadata(array('metadata_name' => 'import_uuid', 'metadata_value' => $uuid)); + $options = array('metadata_name' => 'import_uuid', 'metadata_value' => $uuid); + $entities = elgg_get_entities_from_metadata($options); if ($entities) { return $entities[0]; @@ -77,8 +85,9 @@ function get_entity_from_uuid($uuid) { /** * Tag a previously created guid with the uuid it was imported on. * - * @param int $guid - * @param string $uuid + * @param int $guid A GUID + * @param string $uuid A Unique ID + * * @return bool */ function add_uuid_to_guid($guid, $uuid) { @@ -100,8 +109,10 @@ $IMPORTED_OBJECT_COUNTER = 0; * If nobody processes the top level element, the sub level elements are processed. * * @param ODD $odd The odd element to process + * + * @return bool */ -function __process_element(ODD $odd) { +function _process_element(ODD $odd) { global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER; // See if anyone handles this element, return true if it is. @@ -122,17 +133,22 @@ function __process_element(ODD $odd) { return false; } +/** + * Exports an entity as an array + * + * @param int $guid Entity GUID + * + * @return array + * @throws ExportException + */ function exportAsArray($guid) { $guid = (int)$guid; - // Initialise the array - $to_be_serialised = array(); - // Trigger a hook to - $to_be_serialised = trigger_plugin_hook("export", "all", array("guid" => $guid), $to_be_serialised); + $to_be_serialised = trigger_plugin_hook("export", "all", array("guid" => $guid), array()); // Sanity check - if ((!is_array($to_be_serialised)) || (count($to_be_serialised)==0)) { + if ((!is_array($to_be_serialised)) || (count($to_be_serialised) == 0)) { throw new ExportException(sprintf(elgg_echo('ExportException:NoSuchEntity'), $guid)); } @@ -147,10 +163,10 @@ function exportAsArray($guid) { * This function makes use of the "serialise" plugin hook, which is passed an array to which plugins * should add data to be serialised to. * - * @see ElggEntity for an example of its usage. * @param int $guid The GUID. - * @param ODDWrapperFactory $wrapper Optional wrapper permitting the export process to embed ODD in other document formats. + * * @return xml + * @see ElggEntity for an example of its usage. */ function export($guid) { $odd = new ODDDocument(exportAsArray($guid)); @@ -162,7 +178,8 @@ function export($guid) { * Import an XML serialisation of an object. * This will make a best attempt at importing a given xml doc. * - * @param string $xml + * @param string $xml XML string + * * @return bool * @throws Exception if there was a problem importing the data. */ @@ -178,10 +195,10 @@ function import($xml) { } foreach ($document as $element) { - __process_element($element); + _process_element($element); } - if ($IMPORTED_OBJECT_COUNTER!= count($IMPORTED_DATA)) { + if ($IMPORTED_OBJECT_COUNTER != count($IMPORTED_DATA)) { throw new ImportException(elgg_echo('ImportException:NotAllImported')); } @@ -191,6 +208,8 @@ function import($xml) { /** * Register the OpenDD import action + * + * @return void */ function export_init() { global $CONFIG; diff --git a/engine/lib/extender.php b/engine/lib/extender.php index 8fe9958c6..0f7ab24ea 100644 --- a/engine/lib/extender.php +++ b/engine/lib/extender.php @@ -3,8 +3,8 @@ * Elgg Entity Extender. * This file contains ways of extending an Elgg entity in custom ways. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage DataModel.Extender */ /** @@ -13,12 +13,13 @@ * * @todo Make better! * - * @param mixed $value + * @param mixed $value The value * @param string $value_type If specified, overrides the detection. + * * @return string */ function detect_extender_valuetype($value, $value_type = "") { - if ($value_type!="") { + if ($value_type != "") { return $value_type; } @@ -35,11 +36,13 @@ function detect_extender_valuetype($value, $value_type = "") { } /** - * Utility function used by import_extender_plugin_hook() to process an ODDMetaData and add it to an entity. - * This function does not hit ->save() on the entity (this lets you construct in memory) + * Utility function used by import_extender_plugin_hook() to process + * an ODDMetaData and add it to an entity. This function does not + * hit ->save() on the entity (this lets you construct in memory) * - * @param ElggEntity The entity to add the data to. + * @param ElggEntity $entity The entity to add the data to. * @param ODDMetaData $element The OpenDD element + * * @return bool */ function oddmetadata_to_elggextender(ElggEntity $entity, ODDMetaData $element) { @@ -73,6 +76,16 @@ function oddmetadata_to_elggextender(ElggEntity $entity, ODDMetaData $element) { /** * Handler called by trigger_plugin_hook on the "import" event. + * + * @param string $hook volatile + * @param string $entity_type metadata + * @param string $returnvalue Return value from previous hook + * @param array $params The parameters + * + * @return null + * @elgg_plugin_hook_handler volatile metadata + * @todo investigate more. + * @access private */ function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params) { $element = $params['element']; @@ -91,7 +104,8 @@ function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params) // Save if (!$entity->save()) { - throw new ImportException(sprintf(elgg_echo('ImportException:ProblemUpdatingMeta'), $attr_name, $entity_uuid)); + $msg = sprintf(elgg_echo('ImportException:ProblemUpdatingMeta'), $attr_name, $entity_uuid); + throw new ImportException($msg); } return true; @@ -101,9 +115,10 @@ function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params) /** * Determines whether or not the specified user can edit the specified piece of extender * - * @param int $extender_id The ID of the piece of extender - * @param string $type 'metadata' or 'annotation' - * @param int $user_guid The GUID of the user + * @param int $extender_id The ID of the piece of extender + * @param string $type 'metadata' or 'annotation' + * @param int $user_guid The GUID of the user + * * @return true|false */ function can_edit_extender($extender_id, $type, $user_guid = 0) { @@ -124,7 +139,7 @@ function can_edit_extender($extender_id, $type, $user_guid = 0) { return false; } - if (!is_a($extender,"ElggExtender")) { + if (!is_a($extender, "ElggExtender")) { return false; } @@ -134,25 +149,29 @@ function can_edit_extender($extender_id, $type, $user_guid = 0) { } // If the user can edit the entity this is attached to, great! They can edit. - if (can_edit_entity($extender->entity_guid,$user->getGUID())) { + if (can_edit_entity($extender->entity_guid, $user->getGUID())) { return true; } // Trigger plugin hooks - return trigger_plugin_hook('permissions_check',$type,array('entity' => $entity, 'user' => $user),false); + $params = array('entity' => $entity, 'user' => $user); + return trigger_plugin_hook('permissions_check', $type, $params, false); } /** * Sets the URL handler for a particular extender type and name. - * It is recommended that you do not call this directly, instead use one of the wrapper functions in the - * subtype files. + * It is recommended that you do not call this directly, instead use + * one of the wrapper functions in the subtype files. * * @param string $function_name The function to register * @param string $extender_type Extender type * @param string $extender_name The name of the extender + * * @return true|false Depending on success */ -function register_extender_url_handler($function_name, $extender_type = "all", $extender_name = "all") { +function register_extender_url_handler($function_name, $extender_type = "all", +$extender_name = "all") { + global $CONFIG; if (!is_callable($function_name)) { @@ -174,7 +193,9 @@ function register_extender_url_handler($function_name, $extender_type = "all", $ * Get the URL of a given elgg extender. * Used by get_annotation_url and get_metadata_url. * - * @param ElggExtender $extender + * @param ElggExtender $extender An extender object + * + * @return string */ function get_extender_url(ElggExtender $extender) { global $CONFIG; @@ -206,7 +227,7 @@ function get_extender_url(ElggExtender $extender) { if ($url == "") { $nameid = $extender->id; if ($type == 'volatile') { - $nameid== $extender->name; + $nameid == $extender->name; } $url = $CONFIG->wwwroot . "export/$view/$guid/$type/$nameid/"; } diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php index 2e133690c..0c9f8107c 100644 --- a/engine/lib/filestore.php +++ b/engine/lib/filestore.php @@ -1,28 +1,30 @@ <?php /** * Elgg filestore. - * This file contains classes, interfaces and functions for saving and retrieving data to various file - * stores. + * This file contains classes, interfaces and functions for + * saving and retrieving data to various file stores. * - * @package Elgg - * @subpackage API + * @package Elgg.Core + * @subpackage DataModel.FileStorage */ /** * Get the size of the specified directory. * - * @param string $dir The full path of the directory + * @param string $dir The full path of the directory + * @param int $totalsize Add to current dir size + * * @return int The size of the directory. */ -function get_dir_size($dir, $totalsize = 0){ +function get_dir_size($dir, $totalsize = 0) { $handle = @opendir($dir); - while ($file = @readdir ($handle)){ + while ($file = @readdir ($handle)) { if (eregi("^\.{1,2}$", $file)) { continue; } - if(is_dir($dir . $file)) { + if (is_dir($dir . $file)) { $totalsize = get_dir_size($dir . $file . "/", $totalsize); - } else{ + } else { $totalsize += filesize($dir . $file); } } @@ -36,6 +38,7 @@ function get_dir_size($dir, $totalsize = 0){ * (Returns false if there was an issue.) * * @param string $input_name The name of the file input field on the submission form + * * @return mixed|false The contents of the file, or false on failure. */ function get_uploaded_file($input_name) { @@ -51,17 +54,24 @@ function get_uploaded_file($input_name) { * (Returns false if the uploaded file was not an image) * * @param string $input_name The name of the file input field on the submission form - * @param int $maxwidth The maximum width of the resized image - * @param int $maxheight The maximum height of the resized image - * @param true|false $square If set to true, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped. - * @param true|false $upscale Resize images smaller than $maxwidth x $maxheight? + * @param int $maxwidth The maximum width of the resized image + * @param int $maxheight The maximum height of the resized image + * @param bool $square If set to true, will take the smallest + * of maxwidth and maxheight and use it to set the + * dimensions on all size; the image will be cropped. + * @param bool $upscale Resize images smaller than $maxwidth x $maxheight? + * * @return false|mixed The contents of the resized image, or false on failure */ -function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight, $square = false, $upscale = false) { +function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight, +$square = false, $upscale = false) { + // If our file exists ... if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) { - return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth, $maxheight, $square, 0, 0, 0, 0, $upscale); + return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth, + $maxheight, $square, 0, 0, 0, 0, $upscale); } + return false; } @@ -70,21 +80,24 @@ function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight * (Returns false if the file was not an image) * * @param string $input_name The name of the file on the disk - * @param int $maxwidth The desired width of the resized image - * @param int $maxheight The desired height of the resized image - * @param true|false $square If set to true, takes the smallest of maxwidth and - * maxheight and use it to set the dimensions on the new image. If no - * crop parameters are set, the largest square that fits in the image - * centered will be used for the resize. If square, the crop must be a - * square region. - * @param int $x1 x coordinate for top, left corner - * @param int $y1 y coordinate for top, left corner - * @param int $x2 x coordinate for bottom, right corner - * @param int $y2 y coordinate for bottom, right corner - * @param bool $upscale Resize images smaller than $maxwidth x $maxheight? + * @param int $maxwidth The desired width of the resized image + * @param int $maxheight The desired height of the resized image + * @param bool $square If set to true, takes the smallest of maxwidth and + * maxheight and use it to set the dimensions on the new image. + * If no crop parameters are set, the largest square that fits + * in the image centered will be used for the resize. If square, + * the crop must be a square region. + * @param int $x1 x coordinate for top, left corner + * @param int $y1 y coordinate for top, left corner + * @param int $x2 x coordinate for bottom, right corner + * @param int $y2 y coordinate for bottom, right corner + * @param bool $upscale Resize images smaller than $maxwidth x $maxheight? + * * @return false|mixed The contents of the resized image, or false on failure */ -function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0, $upscale = FALSE) { +function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight, $square = FALSE, +$x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0, $upscale = FALSE) { + // Get the size information from the image $imgsizearray = getimagesize($input_name); if ($imgsizearray == FALSE) { @@ -164,9 +177,10 @@ function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight /** * Calculate the parameters for resizing an image * - * @param int $width Width of the original image - * @param int $height Height of the original image + * @param int $width Width of the original image + * @param int $height Height of the original image * @param array $options See $defaults for the options + * * @return array or FALSE * @since 1.7.2 */ @@ -175,7 +189,7 @@ function get_image_resize_parameters($width, $height, $options) { $defaults = array( 'maxwidth' => 100, 'maxheight' => 100, - + 'square' => FALSE, 'upscale' => FALSE, @@ -278,7 +292,13 @@ function get_image_resize_parameters($width, $height, $options) { return $params; } -// putting these here for now +/** + * Delete an ElggFile file + * + * @param int $guid ElggFile GUID + * + * @return bool + */ function file_delete($guid) { if ($file = get_entity($guid)) { if ($file->canEdit()) { @@ -317,6 +337,7 @@ function file_delete($guid) { * Returns an overall file type from the mimetype * * @param string $mimetype The MIME type + * * @return string The overall type */ function file_get_general_file_type($mimetype) { @@ -330,30 +351,41 @@ function file_get_general_file_type($mimetype) { break; } - if (substr_count($mimetype,'text/')) { + if (substr_count($mimetype, 'text/')) { return "document"; } - if (substr_count($mimetype,'audio/')) { + if (substr_count($mimetype, 'audio/')) { return "audio"; } - if (substr_count($mimetype,'image/')) { + if (substr_count($mimetype, 'image/')) { return "image"; } - if (substr_count($mimetype,'video/')) { + if (substr_count($mimetype, 'video/')) { return "video"; } - if (substr_count($mimetype,'opendocument')) { + if (substr_count($mimetype, 'opendocument')) { return "document"; } return "general"; } -function file_handle_upload($prefix,$subtype,$plugin) { +/** + * Not currently used + * + * @todo remove + * + * @param string $prefix Unknown + * @param string $subtype Unknown + * @param string $plugin Unknown + * + * @return void + */ +function file_handle_upload($prefix, $subtype, $plugin) { $desc = get_input("description"); $tags = get_input("tags"); $tags = explode(",", $tags); @@ -370,31 +402,42 @@ function file_handle_upload($prefix,$subtype,$plugin) { // Extract file from, save to default filestore (for now) // see if a plugin has set a quota for this user - $file_quota = trigger_plugin_hook("$plugin:quotacheck",'user',array('container_guid'=>$container_guid)); + $params = array('container_guid'=>$container_guid); + $file_quota = trigger_plugin_hook("$plugin:quotacheck", 'user', $param); + if (!$file_quota) { // no, see if there is a generic quota set $file_quota = get_plugin_setting('quota', $plugin); } if ($file_quota) { // convert to megabytes - $file_quota = $file_quota*1000*1024; + $file_quota = $file_quota * 1000 * 1024; } // handle uploaded files - $number_of_files = get_input('number_of_files',0); + $number_of_files = get_input('number_of_files', 0); $quota_exceeded = false; $bad_mime_type = false; for ($i = 0; $i < $number_of_files; $i++) { - $title = get_input("title_".$i); - $uploaded = $_FILES["upload_".$i]; + $title = get_input("title_" . $i); + $uploaded = $_FILES["upload_" . $i]; if (!$uploaded || !$uploaded['name']) { // no such file, so skip it continue; } if ($plugin == "photo") { // do a mime type test - if (in_array($uploaded['type'],array('image/jpeg','image/gif','image/png','image/jpg','image/jpe','image/pjpeg','image/x-png'))) { + $supported_types = array( + 'image/jpeg', + 'image/gif', + 'image/png', + 'image/jpg', + 'image/jpe', + 'image/pjpeg', + 'image/x-png' + ); + if (in_array($uploaded['type'], $supported_types)) { $file = new PhotoPluginFile(); } else { $bad_mime_type = true; @@ -403,9 +446,9 @@ function file_handle_upload($prefix,$subtype,$plugin) { } else { $file = new FilePluginFile(); } - $dir_size = $file->getFilestoreSize($prefix,$container_guid); - $filestorename = strtolower(time().$uploaded['name']); - $file->setFilename($prefix.$filestorename); + $dir_size = $file->getFilestoreSize($prefix, $container_guid); + $filestorename = strtolower(time() . $uploaded['name']); + $file->setFilename($prefix . $filestorename); $file->setMimeType($uploaded['type']); $file->originalfilename = $uploaded['name']; @@ -414,7 +457,7 @@ function file_handle_upload($prefix,$subtype,$plugin) { $file->access_id = $access_id; - $uf = get_uploaded_file('upload_'.$i); + $uf = get_uploaded_file('upload_' . $i); if ($file_quota) { $file_size = strlen($uf); @@ -447,39 +490,43 @@ function file_handle_upload($prefix,$subtype,$plugin) { if ($result) { // Generate thumbnail (if image) - if (substr_count($file->getMimeType(),'image/')) { - $thumbnail = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),60,60, true); - $thumbsmall = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),153,153, true); - $thumblarge = get_resized_image_from_existing_file($file->getFilenameOnFilestore(),600,600, false); + if (substr_count($file->getMimeType(), 'image/')) { + $thumbnail = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 60, + 60, true); + $thumbsmall = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 153, + 153, true); + $thumblarge = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 600, + 600, false); + if ($thumbnail) { $thumb = new ElggFile(); $thumb->setMimeType($uploaded['type']); - $thumb->setFilename($prefix."thumb".$filestorename); + $thumb->setFilename($prefix . "thumb" . $filestorename); $thumb->open("write"); $thumb->write($thumbnail); $thumb->close(); - $file->thumbnail = $prefix."thumb".$filestorename; + $file->thumbnail = $prefix . "thumb" . $filestorename; - $thumb->setFilename($prefix."smallthumb".$filestorename); + $thumb->setFilename($prefix . "smallthumb" . $filestorename); $thumb->open("write"); $thumb->write($thumbsmall); $thumb->close(); - $file->smallthumb = $prefix."smallthumb".$filestorename; + $file->smallthumb = $prefix . "smallthumb" . $filestorename; - $thumb->setFilename($prefix."largethumb".$filestorename); + $thumb->setFilename($prefix . "largethumb" . $filestorename); $thumb->open("write"); $thumb->write($thumblarge); $thumb->close(); - $file->largethumb = $prefix."largethumb".$filestorename; + $file->largethumb = $prefix . "largethumb" . $filestorename; } } // add to this user's file folders - file_add_to_folders($folder,$container_guid,$plugin); + file_add_to_folders($folder, $container_guid, $plugin); - add_to_river("river/object/$plugin/create",'create',$_SESSION['user']->guid,$file->guid); + add_to_river("river/object/$plugin/create", 'create', $_SESSION['user']->guid, $file->guid); } else { break; } @@ -490,7 +537,7 @@ function file_handle_upload($prefix,$subtype,$plugin) { if ($quota_exceeded) { echo elgg_echo("$plugin:quotaexceeded"); - } else if ($bad_mime_type) { + } else if ($bad_mime_type) { echo elgg_echo("$plugin:badmimetype"); } else if ($result) { if ($number_of_files > 1) { @@ -507,19 +554,26 @@ function file_handle_upload($prefix,$subtype,$plugin) { } } -function file_add_to_folders($folder,$container_guid,$plugin) { +/** + * @todo remove + * + * @param unknown_type $folder + * @param unknown_type $container_guid + * @param unknown_type $plugin + */ +function file_add_to_folders($folder, $container_guid, $plugin) { if ($container_guid && ($container = get_entity($container_guid))) { - $folder_field_name = 'elgg_'.$plugin.'_folders'; + $folder_field_name = 'elgg_' . $plugin . '_folders'; $folders = $container->$folder_field_name; if ($folders) { if (is_array($folders)) { - if (!in_array($folder,$folders)) { + if (!in_array($folder, $folders)) { $folders[] = $folder; $container->$folder_field_name = $folders; } } else { if ($folders != $folder) { - $container->$folder_field_name = array($folders,$folder); + $container->$folder_field_name = array($folders, $folder); } } } else { @@ -528,7 +582,13 @@ function file_add_to_folders($folder,$container_guid,$plugin) { } } -function file_handle_save($forward,$plugin) { +/** + * @todo remove + * + * @param unknown_type $forward + * @param unknown_type $plugin + */ +function file_handle_save($forward, $plugin) { // Get variables $title = get_input("title"); $desc = get_input("description"); @@ -558,10 +618,10 @@ function file_handle_save($forward,$plugin) { $file->description = $desc; $file->folder = $folder; // add to this user's file folders - file_add_to_folders($folder,$container_guid,$plugin); + file_add_to_folders($folder, $container_guid, $plugin); // Save tags - $tags = explode(",", $tags); + $tags = explode(", ", $tags); $file->tags = $tags; $result = $file->save(); @@ -578,7 +638,9 @@ function file_handle_save($forward,$plugin) { /** * Manage a file download. * - * @param unknown_type $plugin + * @todo remove + * + * @param unknown_type $plugin Unknown * @param unknown_type $file_guid If not specified then file_guid will be found in input. */ function file_manage_download($plugin, $file_guid = "") { @@ -617,6 +679,7 @@ function file_manage_download($plugin, $file_guid = "") { /** * Manage the download of a file icon. * + * @todo remove * @param unknown_type $plugin * @param unknown_type $file_guid The guid, if not specified this is obtained from the input. */ @@ -672,7 +735,13 @@ function file_manage_icon_download($plugin, $file_guid = "") { } } -function file_display_thumbnail($file_guid,$size) { +/** + * @todo remove + * + * @param unknown_type $file_guid + * @param unknown_type $size + */ +function file_display_thumbnail($file_guid, $size) { // Get file entity if ($file = get_entity($file_guid)) { $simpletype = $file->simpletype; @@ -700,6 +769,11 @@ function file_display_thumbnail($file_guid,$size) { } } +/** + * @todo remove + * + * @param unknown_type $file + */ function file_set_page_owner($file) { $page_owner = page_owner_entity(); if ($page_owner === false || is_null($page_owner)) { @@ -718,9 +792,11 @@ function file_set_page_owner($file) { } /** - * Recursively delete a directory + * Delete a directory and all its contents * - * @param str $directory + * @param str $directory Directory to delete + * + * @return bool */ function delete_directory($directory) { // sanity check: must be a directory @@ -754,7 +830,11 @@ function delete_directory($directory) { /** * Removes all user files * - * @param ElggUser $user + * @warning This only deletes the physical files and not their entities. + * This will result in FileExceptions being thrown. Don't use this function. + * + * @param ElggUser $user And ElggUser + * * @return void */ function clear_user_files($user) { @@ -784,6 +864,10 @@ function get_default_filestore() { /** * Set the default filestore for the system. + * + * @param ElggFilestore $filestore An ElggFilestore object. + * + * @return true */ function set_default_filestore(ElggFilestore $filestore) { global $DEFAULT_FILE_STORE; @@ -794,7 +878,10 @@ function set_default_filestore(ElggFilestore $filestore) { } /** - * Run once and only once. + * Register entity type objects, subtype file as + * ElggFile. + * + * @return void */ function filestore_run_once() { // Register a class @@ -804,6 +891,8 @@ function filestore_run_once() { /** * Initialise the file modules. * Listens to system boot and registers any appropriate file types and classes + * + * @return void */ function filestore_init() { global $CONFIG; @@ -815,13 +904,25 @@ function filestore_init() { run_function_once("filestore_run_once"); } -// Register a startup event -register_elgg_event_handler('init', 'system', 'filestore_init', 100); - -// Unit testing -register_plugin_hook('unit_test', 'system', 'filestore_test'); +/** + * Unit tests for files + * + * @param sting $hook unit_test + * @param string $type system + * @param mixed $value Array of tests + * @param mixed $params Params + * + * @return array + */ function filestore_test($hook, $type, $value, $params) { global $CONFIG; $value[] = "{$CONFIG->path}engine/tests/objects/filestore.php"; return $value; } + + +// Register a startup event +register_elgg_event_handler('init', 'system', 'filestore_init', 100); + +// Unit testing +register_plugin_hook('unit_test', 'system', 'filestore_test');
\ No newline at end of file diff --git a/engine/lib/group.php b/engine/lib/group.php index 64299ff10..8c68e0aca 100644 --- a/engine/lib/group.php +++ b/engine/lib/group.php @@ -1,19 +1,19 @@ <?php /** * Elgg Groups. - * Groups contain other entities, or rather act as a placeholder for other entities to mark any given container - * as their container. + * Groups contain other entities, or rather act as a placeholder for other entities to + * mark any given container as their container. * - * @package Elgg - * @subpackage Core - - + * @package Elgg.Core + * @subpackage DataModel.Group */ /** * Get the group entity. * - * @param int $guid + * @param int $guid GUID for a group + * + * @return array|false */ function get_group_entity_as_row($guid) { global $CONFIG; @@ -27,9 +27,11 @@ function get_group_entity_as_row($guid) { * Create or update the extras table for a given group. * Call create_entity first. * - * @param int $guid - * @param string $name - * @param string $description + * @param int $guid GUID + * @param string $name Name + * @param string $description Description + * + * @return bool */ function create_group_entity($guid, $name, $description) { global $CONFIG; @@ -42,28 +44,32 @@ function create_group_entity($guid, $name, $description) { if ($row) { // Exists and you have access to it - if ($exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}groups_entity WHERE guid = {$guid}")) { - $result = update_data("UPDATE {$CONFIG->dbprefix}groups_entity set name='$name', description='$description' where guid=$guid"); - if ($result!=false) { + $exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}groups_entity WHERE guid = {$guid}"); + if ($exists) { + $query = "UPDATE {$CONFIG->dbprefix}groups_entity set" + . " name='$name', description='$description' where guid=$guid"; + $result = update_data($query); + if ($result != false) { // Update succeeded, continue $entity = get_entity($guid); - if (trigger_elgg_event('update',$entity->type,$entity)) { + if (trigger_elgg_event('update', $entity->type, $entity)) { return $guid; } else { $entity->delete(); - //delete_entity($guid); } } } else { // Update failed, attempt an insert. - $result = insert_data("INSERT into {$CONFIG->dbprefix}groups_entity (guid, name, description) values ($guid, '$name','$description')"); - if ($result!==false) { + $query = "INSERT into {$CONFIG->dbprefix}groups_entity" + . " (guid, name, description) values ($guid, '$name', '$description')"; + + $result = insert_data($query); + if ($result !== false) { $entity = get_entity($guid); - if (trigger_elgg_event('create',$entity->type,$entity)) { + if (trigger_elgg_event('create', $entity->type, $entity)) { return $guid; } else { $entity->delete(); - //delete_entity($guid); } } } @@ -79,6 +85,7 @@ function create_group_entity($guid, $name, $description) { * Delete a group's extra data. * * @param int $guid The guid of the group + * * @return bool */ function delete_group_entity($guid) { @@ -91,9 +98,11 @@ function delete_group_entity($guid) { /** * Add an object to the given group. * - * @param int $group_guid The group to add the object to. + * @param int $group_guid The group to add the object to. * @param int $object_guid The guid of the elgg object (must be ElggObject or a child thereof) + * * @return bool + * @throws InvalidClassException */ function add_object_to_group($group_guid, $object_guid) { $group_guid = (int)$group_guid; @@ -107,11 +116,13 @@ function add_object_to_group($group_guid, $object_guid) { } if (!($group instanceof ElggGroup)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $group_guid, 'ElggGroup')); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $group_guid, 'ElggGroup'); + throw new InvalidClassException($msg); } if (!($object instanceof ElggObject)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $object_guid, 'ElggObject')); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $object_guid, 'ElggObject'); + throw new InvalidClassException($msg); } $object->container_guid = $group_guid; @@ -121,8 +132,11 @@ function add_object_to_group($group_guid, $object_guid) { /** * Remove an object from the given group. * - * @param int $group_guid The group to remove the object from + * @param int $group_guid The group to remove the object from * @param int $object_guid The object to remove + * + * @return bool + * @throws InvalidClassException */ function remove_object_from_group($group_guid, $object_guid) { $group_guid = (int)$group_guid; @@ -136,11 +150,13 @@ function remove_object_from_group($group_guid, $object_guid) { } if (!($group instanceof ElggGroup)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $group_guid, 'ElggGroup')); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $group_guid, 'ElggGroup'); + throw new InvalidClassException($msg); } if (!($object instanceof ElggObject)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $object_guid, 'ElggObject')); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $object_guid, 'ElggObject'); + throw new InvalidClassException($msg); } $object->container_guid = $object->owner_guid; @@ -149,20 +165,25 @@ function remove_object_from_group($group_guid, $object_guid) { /** * Return an array of objects in a given container. + * * @see get_entities() * - * @param int $group_guid The container (defaults to current page owner) - * @param string $subtype The subtype - * @param int $owner_guid Owner - * @param int $site_guid The site - * @param string $order_by Order - * @param unknown_type $limit Limit on number of elements to return, by default 10. - * @param unknown_type $offset Where to start, by default 0. - * @param unknown_type $count Whether to return the entities or a count of them. + * @param int $group_guid The container (defaults to current page owner) + * @param string $subtype The subtype + * @param int $owner_guid Owner + * @param int $site_guid The site + * @param string $order_by Order + * @param int $limit Limit on number of elements to return, by default 10. + * @param int $offset Where to start, by default 0. + * @param bool $count Whether to return the entities or a count of them. + * + * @return array|false */ -function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = FALSE) { +function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site_guid = 0, +$order_by = "", $limit = 10, $offset = 0, $count = FALSE) { + global $CONFIG; - + if ($subtype === FALSE || $subtype === null || $subtype === 0) { return FALSE; } @@ -186,7 +207,7 @@ function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site $where = array(); $where[] = "e.type='object'"; - + if (!empty($subtype)) { if (!$subtype = get_subtype_id('object', $subtype)) { return FALSE; @@ -200,7 +221,7 @@ function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site } else if (sizeof($owner_guid) > 0) { // Cast every element to the owner_guid array to int $owner_guid = array_map("sanitise_int", $owner_guid); - $owner_guid = implode(",",$owner_guid); + $owner_guid = implode(",", $owner_guid); $where[] = "e.container_guid in ({$owner_guid})"; } } @@ -213,9 +234,11 @@ function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site } if (!$count) { - $query = "SELECT * from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where "; + $query = "SELECT * from {$CONFIG->dbprefix}entities e" + . " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where "; } else { - $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where "; + $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e" + . " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where "; } foreach ($where as $w) { $query .= " $w and "; @@ -242,18 +265,23 @@ function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site /** * Get all the entities from metadata from a group. * - * @param int $group_guid The ID of the group. - * @param mixed $meta_name - * @param mixed $meta_value - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param int $group_guid The ID of the group. + * @param mixed $meta_name Metadata name + * @param mixed $meta_value Metadata value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity. - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * @param int $owner_guid Owner guid + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Optional ordering. + * @param int $site_guid Site GUID. 0 for current, -1 for any + * @param bool $count Return count instead of entities + * + * @return array|false */ -function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) { +function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value = "", +$entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, +$order_by = "", $site_guid = 0, $count = false) { global $CONFIG; $meta_n = get_metastring_id($meta_name); @@ -269,7 +297,7 @@ function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value $order_by = sanitise_string($order_by); $site_guid = (int) $site_guid; if (is_array($owner_guid)) { - foreach($owner_guid as $key => $guid) { + foreach ($owner_guid as $key => $guid) { $owner_guid[$key] = (int) $guid; } } else { @@ -284,20 +312,18 @@ function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value $container_guid = page_owner(); } - //$access = get_access_list(); - $where = array(); - if ($entity_type!="") { + if ($entity_type != "") { $where[] = "e.type='$entity_type'"; } if ($entity_subtype) { $where[] = "e.subtype=$entity_subtype"; } - if ($meta_name!="") { + if ($meta_name != "") { $where[] = "m.name_id='$meta_n'"; } - if ($meta_value!="") { + if ($meta_value != "") { $where[] = "m.value_id='$meta_v'"; } if ($site_guid > 0) { @@ -308,9 +334,10 @@ function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value } if (is_array($owner_guid)) { - $where[] = "e.container_guid in (".implode(",",$owner_guid).")"; - } else if ($owner_guid > 0) + $where[] = "e.container_guid in (" . implode(",", $owner_guid ) . ")"; + } else if ($owner_guid > 0) { $where[] = "e.container_guid = {$owner_guid}"; + } if (!$count) { $query = "SELECT distinct e.* "; @@ -318,7 +345,10 @@ function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value $query = "SELECT count(e.guid) as total "; } - $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid join {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid where"; + $query .= "from {$CONFIG->dbprefix}entities e" + . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid " + . " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid where"; + foreach ($where as $w) { $query .= " $w and "; } @@ -340,18 +370,23 @@ function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value /** * As get_entities_from_metadata_groups() but with multiple entities. * - * @param int $group_guid The ID of the group. - * @param array $meta_array Array of 'name' => 'value' pairs - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param int $group_guid The ID of the group. + * @param array $meta_array Array of 'name' => 'value' pairs + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity. - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Optional ordering. + * @param int $site_guid Site GUID. 0 for current, -1 for any + * @param bool $count Return count of entities instead of entities + * * @return int|array List of ElggEntities, or the total number if count is set to false */ -function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) { +function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $entity_type = "", +$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", +$site_guid = 0, $count = false) { + global $CONFIG; if (!is_array($meta_array) || sizeof($meta_array) == 0) { @@ -362,15 +397,17 @@ function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $enti $mindex = 1; $join = ""; - foreach($meta_array as $meta_name => $meta_value) { + foreach ($meta_array as $meta_name => $meta_value) { $meta_n = get_metastring_id($meta_name); $meta_v = get_metastring_id($meta_value); - $join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid join {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid "; - if ($meta_name!="") { + $join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid" + . " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid "; + + if ($meta_name != "") { $where[] = "m{$mindex}.name_id='$meta_n'"; } - if ($meta_value!="") { + if ($meta_value != "") { $where[] = "m{$mindex}.value_id='$meta_v'"; } @@ -394,7 +431,7 @@ function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $enti //$access = get_access_list(); - if ($entity_type!="") { + if ($entity_type != "") { $where[] = "e.type = '{$entity_type}'"; } @@ -440,11 +477,12 @@ function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $enti /** * Return a list of this group's members. * - * @param int $group_guid The ID of the container/group. - * @param int $limit The limit - * @param int $offset The offset - * @param int $site_guid The site - * @param bool $count Return the users (false) or the count of them (true) + * @param int $group_guid The ID of the container/group. + * @param int $limit The limit + * @param int $offset The offset + * @param int $site_guid The site + * @param bool $count Return the users (false) or the count of them (true) + * * @return mixed */ function get_group_members($group_guid, $limit = 10, $offset = 0, $site_guid = 0, $count = false) { @@ -470,7 +508,8 @@ function get_group_members($group_guid, $limit = 10, $offset = 0, $site_guid = 0 * Return whether a given user is a member of the group or not. * * @param int $group_guid The group ID - * @param int $user_guid The user guid + * @param int $user_guid The user guid + * * @return bool */ function is_group_member($group_guid, $user_guid) { @@ -486,11 +525,16 @@ function is_group_member($group_guid, $user_guid) { * Join a user to a group. * * @param int $group_guid The group. - * @param int $user_guid The user. + * @param int $user_guid The user. + * + * @return bool */ function join_group($group_guid, $user_guid) { $result = add_entity_relationship($user_guid, 'member', $group_guid); - trigger_elgg_event('join', 'group', array('group' => get_entity($group_guid), 'user' => get_entity($user_guid))); + + $param = array('group' => get_entity($group_guid), 'user' => get_entity($user_guid)); + trigger_elgg_event('join', 'group', $params); + return $result; } @@ -498,11 +542,15 @@ function join_group($group_guid, $user_guid) { * Remove a user from a group. * * @param int $group_guid The group. - * @param int $user_guid The user. + * @param int $user_guid The user. + * + * @return bool */ function leave_group($group_guid, $user_guid) { // event needs to be triggered while user is still member of group to have access to group acl - trigger_elgg_event('leave', 'group', array('group' => get_entity($group_guid), 'user' => get_entity($user_guid))); + $params = array('group' => get_entity($group_guid), 'user' => get_entity($user_guid)); + + trigger_elgg_event('leave', 'group', $params); $result = remove_entity_relationship($user_guid, 'member', $group_guid); return $result; } @@ -510,16 +558,25 @@ function leave_group($group_guid, $user_guid) { /** * Return all groups a user is a member of. * - * @param unknown_type $user_guid + * @param int $user_guid GUID of user + * + * @return array|false */ function get_users_membership($user_guid) { - return elgg_get_entities_from_relationship(array('relationship' => 'member', 'relationship_guid' => $user_guid, 'inverse_relationship' => FALSE)); + $options = array( + 'relationship' => 'member', + 'relationship_guid' => $user_guid, + 'inverse_relationship' => FALSE + ); + return elgg_get_entities_from_relationship($options); } /** * Checks access to a group. * - * @param boolean $forward If set to true (default), will forward the page; if set to false, will return true or false. + * @param boolean $forward If set to true (default), will forward the page; + * if set to false, will return true or false. + * * @return true|false If $forward is set to false. */ function group_gatekeeper($forward = true) { @@ -555,12 +612,13 @@ function group_gatekeeper($forward = true) { /** * Manages group tool options * - * @param string $name Name of the group tool option - * @param string $label Used for the group edit form + * @param string $name Name of the group tool option + * @param string $label Used for the group edit form * @param boolean $default_on True if this option should be active by default * + * @return void */ -function add_group_tool_option($name,$label,$default_on=true) { +function add_group_tool_option($name, $label, $default_on = true) { global $CONFIG; if (!isset($CONFIG->group_tool_options)) { @@ -579,11 +637,13 @@ function add_group_tool_option($name,$label,$default_on=true) { /** * Searches for a group based on a complete or partial name or description * - * @param string $criteria The partial or full name or description - * @param int $limit Limit of the search. - * @param int $offset Offset. - * @param string $order_by The order. - * @param boolean $count Whether to return the count of results or just the results. + * @param string $criteria The partial or full name or description + * @param int $limit Limit of the search. + * @param int $offset Offset. + * @param string $order_by The order. + * @param boolean $count Whether to return the count of results or just the results. + * + * @return mixed * @deprecated 1.7 */ function search_for_group($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) { @@ -606,8 +666,9 @@ function search_for_group($criteria, $limit = 10, $offset = 0, $order_by = "", $ } else { $query = "SELECT e.* "; } - $query .= "from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}groups_entity g on e.guid=g.guid where "; - // $query .= " match(u.name,u.username) against ('$criteria') "; + $query .= "from {$CONFIG->dbprefix}entities e" + . " JOIN {$CONFIG->dbprefix}groups_entity g on e.guid=g.guid where "; + $query .= "(g.name like \"%{$criteria}%\" or g.description like \"%{$criteria}%\")"; $query .= " and $access"; @@ -624,7 +685,15 @@ function search_for_group($criteria, $limit = 10, $offset = 0, $order_by = "", $ /** * Returns a formatted list of groups suitable for injecting into search. + * * @deprecated 1.7 + * + * @param string $hook Hook name + * @param string $user User + * @param mixed $returnvalue Previous hook's return value + * @param string $tag Tag to search on + * + * @return string */ function search_list_groups_by_name($hook, $user, $returnvalue, $tag) { elgg_deprecated_notice('search_list_groups_by_name() was deprecated by new search plugin', 1.7); @@ -634,14 +703,15 @@ function search_list_groups_by_name($hook, $user, $returnvalue, $tag) { $object = get_input('object'); if (!get_input('offset') && (empty($object) || $object == 'group')) { - if ($groups = search_for_group($tag,$threshold)) { - $countgroups = search_for_group($tag,0,0,"",true); + if ($groups = search_for_group($tag, $threshold)) { + $countgroups = search_for_group($tag, 0, 0, "", true); - $return = elgg_view('group/search/startblurb',array('count' => $countgroups, 'tag' => $tag)); - foreach($groups as $group) { + $return = elgg_view('group/search/startblurb', array('count' => $countgroups, 'tag' => $tag)); + foreach ($groups as $group) { $return .= elgg_view_entity($group); } - $return .= elgg_view('group/search/finishblurb',array('count' => $countgroups, 'threshold' => $threshold, 'tag' => $tag)); + $vars = array('count' => $countgroups, 'threshold' => $threshold, 'tag' => $tag); + $return .= elgg_view('group/search/finishblurb', $vars); return $return; } } @@ -652,8 +722,9 @@ function search_list_groups_by_name($hook, $user, $returnvalue, $tag) { * * @see elgg_view_entity_list * - * @param string $tag Search criteria - * @param int $limit The number of entities to display on a page + * @param string $tag Search criteria + * @param int $limit The number of entities to display on a page + * * @return string The list in a form suitable to display * @deprecated 1.7 */ @@ -671,10 +742,11 @@ function list_group_search($tag, $limit = 10) { /** * Performs initialisation functions for groups * + * @return void */ function group_init() { // Register an entity type - register_entity_type('group',''); + register_entity_type('group', ''); } -register_elgg_event_handler('init','system','group_init'); +register_elgg_event_handler('init', 'system', 'group_init'); diff --git a/engine/lib/input.php b/engine/lib/input.php index 9316b51f8..4ba6f500c 100644 --- a/engine/lib/input.php +++ b/engine/lib/input.php @@ -3,8 +3,8 @@ * Parameter input functions. * This file contains functions for getting input from get/post variables. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Input */ /** @@ -13,9 +13,11 @@ * Note: this function does not handle nested arrays (ex: form input of param[m][n]) * because of the filtering done in htmlawed from the filter_tags call. * - * @param $variable string The variable we want to return. - * @param $default mixed A default value for the variable if it is not found. - * @param $filter_result If true then the result is filtered for bad tags. + * @param string $variable The variable we want to return. + * @param mixed $default A default value for the variable if it is not found. + * @param bool $filter_result If true then the result is filtered for bad tags. + * + * @return string */ function get_input($variable, $default = NULL, $filter_result = TRUE) { @@ -54,7 +56,9 @@ function get_input($variable, $default = NULL, $filter_result = TRUE) { * Note: this function does not handle nested arrays (ex: form input of param[m][n]) * * @param string $variable The name of the variable - * @param string $value The value of the variable + * @param string $value The value of the variable + * + * @return void */ function set_input($variable, $value) { global $CONFIG; @@ -74,7 +78,8 @@ function set_input($variable, $value) { * Filter tags from a given string based on registered hooks. * * @param mixed $var Anything that does not include an object (strings, ints, arrays) - * This includes multi-dimensional arrays. + * This includes multi-dimensional arrays. + * * @return mixed The filtered result - everything will be strings */ function filter_tags($var) { @@ -85,6 +90,7 @@ function filter_tags($var) { * Validates an email address. * * @param string $address Email address. + * * @return bool */ function is_email_address($address) { @@ -94,7 +100,8 @@ function is_email_address($address) { /** * Page handler for autocomplete endpoint. * - * @param $page + * @param array $page Pages array + * * @return unknown_type */ function input_livesearch_page_handler($page) { @@ -139,7 +146,8 @@ function input_livesearch_page_handler($page) { case 'all': // only need to pull up title from objects. - if (!$entities = elgg_get_entities(array('owner_guid' => $owner_guid, 'limit' => $limit)) AND is_array($entities)) { + $options = array('owner_guid' => $owner_guid, 'limit' => $limit); + if (!$entities = elgg_get_entities($options) AND is_array($entities)) { $results = array_merge($results, $entities); } break; @@ -159,10 +167,11 @@ function input_livesearch_page_handler($page) { 'type' => 'user', 'name' => $entity->name, 'desc' => $entity->username, - 'icon' => '<img class="livesearch_icon" src="' . get_entity($entity->guid)->getIcon('tiny') . '" />', + 'icon' => '<img class="livesearch_icon" src="' . + get_entity($entity->guid)->getIcon('tiny') . '" />', 'guid' => $entity->guid )); - $results[$entity->name . rand(1,100)] = $json; + $results[$entity->name . rand(1, 100)] = $json; } } break; @@ -185,18 +194,22 @@ function input_livesearch_page_handler($page) { 'type' => 'group', 'name' => $entity->name, 'desc' => strip_tags($entity->description), - 'icon' => '<img class="livesearch_icon" src="' . get_entity($entity->guid)->getIcon('tiny') . '" />', + 'icon' => '<img class="livesearch_icon" src="' + . get_entity($entity->guid)->getIcon('tiny') . '" />', 'guid' => $entity->guid )); - //$results[$entity->name . rand(1,100)] = "$json|{$entity->guid}"; - $results[$entity->name . rand(1,100)] = $json; + + $results[$entity->name . rand(1, 100)] = $json; } } break; case 'friends': $access = get_access_sql_suffix(); - $query = "SELECT * FROM {$CONFIG->dbprefix}users_entity as ue, {$CONFIG->dbprefix}entity_relationships as er, {$CONFIG->dbprefix}entities as e + $query = "SELECT * FROM + {$CONFIG->dbprefix}users_entity as ue, + {$CONFIG->dbprefix}entity_relationships as er, + {$CONFIG->dbprefix}entities as e WHERE er.relationship = 'friend' AND er.guid_one = {$user->getGUID()} AND er.guid_two = ue.guid @@ -213,10 +226,11 @@ function input_livesearch_page_handler($page) { 'type' => 'user', 'name' => $entity->name, 'desc' => $entity->username, - 'icon' => '<img class="livesearch_icon" src="' . get_entity($entity->guid)->getIcon('tiny') . '" />', + 'icon' => '<img class="livesearch_icon" src="' + . get_entity($entity->guid)->getIcon('tiny') . '" />', 'guid' => $entity->guid )); - $results[$entity->name . rand(1,100)] = $json; + $results[$entity->name . rand(1, 100)] = $json; } } break; @@ -235,12 +249,24 @@ function input_livesearch_page_handler($page) { exit; } +/** + * Register input functions and sanitize input + * + * @return void + */ function input_init() { // register an endpoint for live search / autocomplete. register_page_handler('livesearch', 'input_livesearch_page_handler'); - if (ini_get_bool('magic_quotes_gpc') ) { - //do keys as well, cos array_map ignores them + if (ini_get_bool('magic_quotes_gpc')) { + + /** + * do keys as well, cos array_map ignores them + * + * @param array $array Array of values + * + * @return array Sanitized array + */ function stripslashes_arraykeys($array) { if (is_array($array)) { $array2 = array(); @@ -257,6 +283,13 @@ function input_init() { } } + /** + * Strip slashes on everything + * + * @param mixed $value The value to remove slashes from + * + * @return mixed + */ function stripslashes_deep($value) { if (is_array($value)) { $value = stripslashes_arraykeys($value); @@ -297,4 +330,4 @@ function input_init() { } } -register_elgg_event_handler('init','system','input_init'); +register_elgg_event_handler('init', 'system', 'input_init'); diff --git a/engine/lib/install.php b/engine/lib/install.php index 470f71d84..c47eedd40 100644 --- a/engine/lib/install.php +++ b/engine/lib/install.php @@ -4,8 +4,8 @@ * Elgg installation * Various functions to assist with installing and upgrading the system * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Installation */ /** @@ -45,6 +45,12 @@ function is_installed() { return datalist_get('installed'); } +/** + * Check that installation has completed and the database is populated. + * + * @throws InstallationException + * @return void + */ function verify_installation() { $installed = FALSE; try { diff --git a/engine/lib/languages.php b/engine/lib/languages.php index 5dd98e893..3472d0d29 100644 --- a/engine/lib/languages.php +++ b/engine/lib/languages.php @@ -3,8 +3,8 @@ * Elgg language module * Functions to manage language and translations. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Languages */ /** @@ -15,8 +15,9 @@ * $english = array('message1' => 'message1', 'message2' => 'message2'); * $german = array('message1' => 'Nachricht1','message2' => 'Nachricht2'); * - * @param string $country_code Standard country code (eg 'en', 'nl', 'es') - * @param array $language_array Formatted array of strings + * @param string $country_code Standard country code (eg 'en', 'nl', 'es') + * @param array $language_array Formatted array of strings + * * @return true|false Depending on success */ function add_translation($country_code, $language_array) { @@ -85,7 +86,9 @@ function get_language() { * Given a message shortcode, returns an appropriately translated full-text string * * @param string $message_key The short message code - * @param string $language Optionally, the standard language code (defaults to site/user default, then English) + * @param string $language Optionally, the standard language code + * (defaults to site/user default, then English) + * * @return string Either the translated string or the original English string */ function elgg_echo($message_key, $language = "") { @@ -111,14 +114,19 @@ function elgg_echo($message_key, $language = "") { /** * When given a full path, finds translation files and loads them * - * @param string $path Full path - * @param bool $load_all If true all languages are loaded, if false only the current language + en are loaded + * @param string $path Full path + * @param bool $load_all If true all languages are loaded, if + * false only the current language + en are loaded + * + * @return void */ function register_translations($path, $load_all = false) { global $CONFIG; // Make a note of this path just incase we need to register this language later - if(!isset($CONFIG->language_paths)) $CONFIG->language_paths = array(); + if (!isset($CONFIG->language_paths)) { + $CONFIG->language_paths = array(); + } $CONFIG->language_paths[$path] = true; // Get the current language based on site defaults and user preference @@ -128,8 +136,8 @@ function register_translations($path, $load_all = false) { if ($handle = opendir($path)) { while ($language = readdir($handle)) { if ( - ((in_array($language, array('en.php', $current_language . '.php'))) /*&& (!is_dir($path . $language))*/) || - (($load_all) && (strpos($language, '.php')!==false)/* && (!is_dir($path . $language))*/) + ((in_array($language, array('en.php', $current_language . '.php'))) ) || + (($load_all) && (strpos($language, '.php') !== false)) ) { include_once($path . $language); } @@ -165,7 +173,10 @@ function reload_all_translations() { } /** - * Return an array of installed translations as an associative array "two letter code" => "native language name". + * Return an array of installed translations as an associative + * array "two letter code" => "native language name". + * + * @return array */ function get_installed_translations() { global $CONFIG; @@ -190,6 +201,10 @@ function get_installed_translations() { /** * Return the level of completeness for a given language code (compared to english) + * + * @param string $language Language + * + * @return int */ function get_language_completeness($language) { global $CONFIG; @@ -215,7 +230,12 @@ function get_language_completeness($language) { } /** - * Return the translation keys missing from a given language, or those that are identical to the english version. + * Return the translation keys missing from a given language, + * or those that are identical to the english version. + * + * @param string $language The language + * + * @return mixed */ function get_missing_language_keys($language) { global $CONFIG; @@ -239,4 +259,4 @@ function get_missing_language_keys($language) { return false; } -register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/"); +register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
\ No newline at end of file diff --git a/engine/lib/location.php b/engine/lib/location.php index 73f3c4dbd..f3aae709b 100644 --- a/engine/lib/location.php +++ b/engine/lib/location.php @@ -9,15 +9,19 @@ /** * Encode a location into a latitude and longitude, caching the result. * - * Works by triggering the 'geocode' 'location' plugin hook, and requires a geocoding module to be installed + * Works by triggering the 'geocode' 'location' plugin + * hook, and requires a geocoding module to be installed * activated in order to work. * * @param String $location The location, e.g. "London", or "24 Foobar Street, Gotham City" + * + * @return string */ function elgg_geocode_location($location) { global $CONFIG; - // Handle cases where we are passed an array (shouldn't be but can happen if location is a tag field) + // Handle cases where we are passed an array (shouldn't be + // but can happen if location is a tag field) if (is_array($location)) { $location = implode(', ', $location); } @@ -25,7 +29,8 @@ function elgg_geocode_location($location) { $location = sanitise_string($location); // Look for cached version - $cached_location = get_data_row("SELECT * from {$CONFIG->dbprefix}geocode_cache WHERE location='$location'"); + $query = "SELECT * from {$CONFIG->dbprefix}geocode_cache WHERE location='$location'"; + $cached_location = get_data_row($query); if ($cached_location) { return array('lat' => $cached_location->lat, 'long' => $cached_location->long); @@ -41,7 +46,10 @@ function elgg_geocode_location($location) { $long = (float)$return['long']; // Put into cache at the end of the page since we don't really care that much - execute_delayed_write_query("INSERT DELAYED INTO {$CONFIG->dbprefix}geocode_cache (location, lat, `long`) VALUES ('$location', '{$lat}', '{$long}') ON DUPLICATE KEY UPDATE lat='{$lat}', `long`='{$long}'"); + $query = "INSERT DELAYED INTO {$CONFIG->dbprefix}geocode_cache " + . " (location, lat, `long`) VALUES ('$location', '{$lat}', '{$long}')" + . " ON DUPLICATE KEY UPDATE lat='{$lat}', `long`='{$long}'"; + execute_delayed_write_query($query); } return $return; @@ -50,30 +58,33 @@ function elgg_geocode_location($location) { /** * Return entities within a given geographic area. * - * @param real $lat Latitude - * @param real $long Longitude - * @param real $radius The radius - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param string $order_by The field to order by; by default, time_created desc - * @param int $limit The number of entities to return; 10 by default - * @param int $offset The indexing offset, 0 by default - * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param int|array $container_guid The container or containers to get entities from (default: all containers). + * @param float $lat Latitude + * @param float $long Longitude + * @param float $radius The radius + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param string $order_by The field to order by; by default, time_created desc + * @param int $limit The number of entities to return; 10 by default + * @param int $offset The indexing offset, 0 by default + * @param boolean $count Count entities + * @param int $site_guid Site GUID. 0 for current, -1 for any + * @param int|array $container_guid Container GUID + * * @return array A list of entities. */ -function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid) { +function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $owner_guid = 0, +$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid) { + global $CONFIG; if ($subtype === false || $subtype === null || $subtype === 0) { return false; } - $lat = (real)$lat; - $long = (real)$long; - $radius = (real)$radius; + $lat = (float)$lat; + $long = (float)$long; + $radius = (float)$radius; $order_by = sanitise_string($order_by); $limit = (int)$limit; @@ -88,15 +99,18 @@ function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $ if (is_array($type)) { $tempwhere = ""; if (sizeof($type)) { - foreach($type as $typekey => $subtypearray) { - foreach($subtypearray as $subtypeval) { + foreach ($type as $typekey => $subtypearray) { + foreach ($subtypearray as $subtypeval) { $typekey = sanitise_string($typekey); if (!empty($subtypeval)) { $subtypeval = (int) get_subtype_id($typekey, $subtypeval); } else { $subtypeval = 0; } - if (!empty($tempwhere)) $tempwhere .= " or "; + if (!empty($tempwhere)) { + $tempwhere .= " or "; + } + $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})"; } } @@ -112,7 +126,7 @@ function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $ $where[] = "e.type='$type'"; } - if ($subtype!=="") { + if ($subtype !== "") { $where[] = "e.subtype=$subtype"; } } @@ -125,7 +139,7 @@ function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $ } else if (sizeof($owner_guid) > 0) { $owner_array = array_map('sanitise_int', $owner_guid); // Cast every element to the owner_guid array to int - $owner_guid = implode(",",$owner_guid); // + $owner_guid = implode(",", $owner_guid); // $where[] = "e.owner_guid in ({$owner_guid})" ; // } if (is_null($container_guid)) { @@ -139,8 +153,10 @@ function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $ if (!is_null($container_guid)) { if (is_array($container_guid)) { - foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val; - $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")"; + foreach ($container_guid as $key => $val) { + $container_guid[$key] = (int) $val; + } + $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")"; } else { $container_guid = (int) $container_guid; $where[] = "e.container_guid = {$container_guid}"; @@ -198,42 +214,51 @@ function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $ /** * List entities in a given location * - * @param string $location Location - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param int $limit The number of entities to display per page (default: 10) - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view - * @param true|false $pagination Display pagination? Default: true + * @param string $location Location + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param int $limit The number of entities to display per page (default: 10) + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow gallery view + * @param bool $navigation Display pagination? Default: true + * * @return string A viewable list of entities */ -function list_entities_location($location, $type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) { - return list_entities_from_metadata('location', $location, $type, $subtype, $owner_guid, $limit, $fullview, $viewtypetoggle, $navigation); +function list_entities_location($location, $type= "", $subtype = "", $owner_guid = 0, $limit = 10, +$fullview = true, $viewtypetoggle = false, $navigation = true) { + + return list_entities_from_metadata('location', $location, $type, $subtype, $owner_guid, $limit, + $fullview, $viewtypetoggle, $navigation); } /** * List items within a given geographic area. * - * @param real $lat Latitude - * @param real $long Longitude - * @param real $radius The radius - * @param string $type The type of entity (eg "user", "object" etc) - * @param string $subtype The arbitrary subtype of the entity - * @param int $owner_guid The GUID of the owning user - * @param int $limit The number of entities to display per page (default: 10) - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view - * @param true|false $pagination Display pagination? Default: true + * @param real $lat Latitude + * @param real $long Longitude + * @param real $radius The radius + * @param string $type The type of entity (eg "user", "object" etc) + * @param string $subtype The arbitrary subtype of the entity + * @param int $owner_guid The GUID of the owning user + * @param int $limit The number of entities to display per page (default: 10) + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow gallery view + * @param bool $navigation Display pagination? Default: true + * * @return string A viewable list of entities */ -function list_entities_in_area($lat, $long, $radius, $type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) { +function list_entities_in_area($lat, $long, $radius, $type= "", $subtype = "", $owner_guid = 0, +$limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) { $offset = (int) get_input('offset'); - $count = get_entities_in_area($lat, $long, $radius, $type, $subtype, $owner_guid, "", $limit, $offset, true); - $entities = get_entities_in_area($lat, $long, $radius, $type, $subtype, $owner_guid, "", $limit, $offset); + $count = get_entities_in_area($lat, $long, $radius, $type, $subtype, $owner_guid, + "", $limit, $offset, true); + $entities = get_entities_in_area($lat, $long, $radius, $type, $subtype, $owner_guid, + "", $limit, $offset); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $navigation); + return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, + $viewtypetoggle, $navigation); } // Some distances in degrees (approximate) diff --git a/engine/lib/memcache.php b/engine/lib/memcache.php index df65adc8a..6e905b0d4 100644 --- a/engine/lib/memcache.php +++ b/engine/lib/memcache.php @@ -4,8 +4,8 @@ * * Requires php5-memcache to work. * - * @package Elgg - * @subpackage API + * @package Elgg.Core + * @subpackage Cache.Memcache */ /** @@ -23,7 +23,7 @@ function is_memcache_available() { } // If we haven't set variable to something - if (($memcache_available!==true) && ($memcache_available!==false)) { + if (($memcache_available !== true) && ($memcache_available !== false)) { try { $tmp = new ElggMemcache(); // No exception thrown so we have memcache available diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 37a00e6a2..b0117bfd0 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -3,14 +3,15 @@ * Elgg metadata * Functions to manage object metadata. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage DataModel.Metadata */ /** * Convert a database row to a new ElggMetadata * - * @param stdClass $row + * @param stdClass $row An object from the database + * * @return stdClass or ElggMetadata */ function row_to_elggmetadata($row) { @@ -24,7 +25,9 @@ function row_to_elggmetadata($row) { /** * Get a specific item of metadata. * - * @param $id int The item of metadata being retrieved. + * @param int $id The item of metadata being retrieved. + * + * @return mixed */ function get_metadata($id) { global $CONFIG; @@ -33,16 +36,24 @@ function get_metadata($id) { $access = get_access_sql_suffix("e"); $md_access = get_access_sql_suffix("m"); - return row_to_elggmetadata(get_data_row("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}entities e on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.id=$id and $access and $md_access")); + $query = "SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m" + . " JOIN {$CONFIG->dbprefix}entities e on e.guid = m.entity_guid" + . " JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id" + . " JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id" + . " where m.id=$id and $access and $md_access"; + + + return row_to_elggmetadata(get_data_row($query)); } /** * Removes metadata on an entity with a particular name, optionally with a given value. * - * @param int $entity_guid The entity GUID - * @param string $name The name of the metadata - * @param string $value The optional value of the item (useful for removing a single item in a multiple set) - * @return true|false Depending on success + * @param int $entity_guid The entity GUID + * @param string $name The name of the metadata + * @param string $value The value of the item (useful to remove a single item of a set) + * + * @return bool Depending on success */ function remove_metadata($entity_guid, $name, $value = "") { global $CONFIG; @@ -50,13 +61,15 @@ function remove_metadata($entity_guid, $name, $value = "") { $name = sanitise_string($name); $value = sanitise_string($value); - $query = "SELECT * from {$CONFIG->dbprefix}metadata WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name); - if ($value!="") { + $query = "SELECT * from {$CONFIG->dbprefix}metadata" + . " WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name); + + if ($value != "") { $query .= " and value_id=" . add_metastring($value); } if ($existing = get_data($query)) { - foreach($existing as $ex) { + foreach ($existing as $ex) { delete_metadata($ex->id); } return true; @@ -71,16 +84,19 @@ function remove_metadata($entity_guid, $name, $value = "") { * Metadata can be an array by setting allow_multiple to TRUE, but it is an * indexed array with no control over the indexing. * - * @param int $entity_guid The entity to attach the metadata to - * @param string $name Name of the metadata - * @param string $value Value of the metadata - * @param string $value_type 'text', 'integer', or '' for automatic detection - * @param int $owner_guid GUID of entity that owns the metadata - * @param int $access_id Default is ACCESS_PRIVATE - * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE + * @param int $entity_guid The entity to attach the metadata to + * @param string $name Name of the metadata + * @param string $value Value of the metadata + * @param string $value_type 'text', 'integer', or '' for automatic detection + * @param int $owner_guid GUID of entity that owns the metadata + * @param int $access_id Default is ACCESS_PRIVATE + * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE + * * @return int/bool id of metadata or FALSE if failure */ -function create_metadata($entity_guid, $name, $value, $value_type, $owner_guid, $access_id = ACCESS_PRIVATE, $allow_multiple = false) { +function create_metadata($entity_guid, $name, $value, $value_type, $owner_guid, + $access_id = ACCESS_PRIVATE, $allow_multiple = false) { + global $CONFIG; $entity_guid = (int)$entity_guid; @@ -96,7 +112,7 @@ function create_metadata($entity_guid, $name, $value, $value_type, $owner_guid, return FALSE; } - if ($owner_guid==0) { + if ($owner_guid == 0) { $owner_guid = get_loggedin_userid(); } @@ -104,7 +120,10 @@ function create_metadata($entity_guid, $name, $value, $value_type, $owner_guid, $id = false; - $existing = get_data_row("SELECT * from {$CONFIG->dbprefix}metadata WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name) . " limit 1"); + $query = "SELECT * from {$CONFIG->dbprefix}metadata" + . " WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name) . " limit 1"; + + $existing = get_data_row($query); if ($existing && !$allow_multiple) { $id = (int)$existing->id; $result = update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id); @@ -134,7 +153,11 @@ function create_metadata($entity_guid, $name, $value, $value_type, $owner_guid, } // If ok then add it - $id = insert_data("INSERT into {$CONFIG->dbprefix}metadata (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id) VALUES ($entity_guid, '$name','$value','$value_type', $owner_guid, $time, $access_id)"); + $query = "INSERT into {$CONFIG->dbprefix}metadata" + . " (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id)" + . " VALUES ($entity_guid, '$name','$value','$value_type', $owner_guid, $time, $access_id)"; + + $id = insert_data($query); if ($id !== false) { $obj = get_metadata($id); @@ -152,12 +175,14 @@ function create_metadata($entity_guid, $name, $value, $value_type, $owner_guid, /** * Update an item of metadata. * - * @param int $id - * @param string $name - * @param string $value - * @param string $value_type - * @param int $owner_guid - * @param int $access_id + * @param int $id Metadata id + * @param string $name Metadata name + * @param string $value Metadata value + * @param string $value_type Value type + * @param int $owner_guid Owner guid + * @param int $access_id Access ID + * + * @return bool */ function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id) { global $CONFIG; @@ -181,12 +206,10 @@ function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_i $metabyname_memcache->delete("{$md->entity_guid}:{$md->name_id}"); } - //$name = sanitise_string(trim($name)); - //$value = sanitise_string(trim($value)); $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type))); $owner_guid = (int)$owner_guid; - if ($owner_guid==0) { + if ($owner_guid == 0) { $owner_guid = get_loggedin_userid(); } @@ -215,8 +238,12 @@ function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_i } // If ok then add it - $result = update_data("UPDATE {$CONFIG->dbprefix}metadata set value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid where id=$id and name_id='$name'"); - if ($result!==false) { + $query = "UPDATE {$CONFIG->dbprefix}metadata" + . " set value_id='$value', value_type='$value_type', access_id=$access_id," + . " owner_guid=$owner_guid where id=$id and name_id='$name'"; + + $result = update_data($query); + if ($result !== false) { $obj = get_metadata($id); if (trigger_elgg_event('update', 'metadata', $obj)) { return true; @@ -235,16 +262,22 @@ function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_i * allow_multiple set to TRUE. This creates an indexed array. It does not support * associative arrays and there is no guarantee on the ordering in the array. * - * @param int $entity_guid The entity to attach the metadata to + * @param int $entity_guid The entity to attach the metadata to * @param string $name_and_values Associative array - a value can be a string, number, bool - * @param string $value_type 'text', 'integer', or '' for automatic detection - * @param int $owner_guid GUID of entity that owns the metadata - * @param int $access_id Default is ACCESS_PRIVATE - * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE + * @param string $value_type 'text', 'integer', or '' for automatic detection + * @param int $owner_guid GUID of entity that owns the metadata + * @param int $access_id Default is ACCESS_PRIVATE + * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE + * + * @return bool */ -function create_metadata_from_array($entity_guid, array $name_and_values, $value_type, $owner_guid, $access_id = ACCESS_PRIVATE, $allow_multiple = false) { +function create_metadata_from_array($entity_guid, array $name_and_values, $value_type, $owner_guid, +$access_id = ACCESS_PRIVATE, $allow_multiple = false) { + foreach ($name_and_values as $k => $v) { - if (!create_metadata($entity_guid, $k, $v, $value_type, $owner_guid, $access_id, $allow_multiple)) { + $result = create_metadata($entity_guid, $k, $v, $value_type, $owner_guid, + $access_id, $allow_multiple); + if (!$result) { return false; } } @@ -254,7 +287,9 @@ function create_metadata_from_array($entity_guid, array $name_and_values, $value /** * Delete an item of metadata, where the current user has access. * - * @param $id int The item of metadata to delete. + * @param int $id The item of metadata to delete. + * + * @return bool */ function delete_metadata($id) { global $CONFIG; @@ -284,10 +319,12 @@ function delete_metadata($id) { /** * Return the metadata values that match your query. * - * @param string $meta_name + * @param int $entity_guid Entity GUID + * @param string $meta_name Metadata name + * * @return mixed either a value, an array of ElggMetadata or false. */ -function get_metadata_byname($entity_guid, $meta_name) { +function get_metadata_byname($entity_guid, $meta_name) { global $CONFIG; $meta_name = get_metastring_id($meta_name); @@ -300,7 +337,8 @@ function get_metadata_byname($entity_guid, $meta_name) { $access = get_access_sql_suffix("e"); $md_access = get_access_sql_suffix("m"); - // If memcache is available then cache this (cache only by name for now since this is the most common query) + // If memcache is available then cache this (cache only by name for now + // since this is the most common query) $meta = null; static $metabyname_memcache; if ((!$metabyname_memcache) && (is_memcache_available())) { @@ -313,7 +351,16 @@ function get_metadata_byname($entity_guid, $meta_name) { return $meta; } - $result = get_data("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.entity_guid=$entity_guid and m.name_id='$meta_name' and $access and $md_access ORDER BY m.id ASC", "row_to_elggmetadata"); + $query = "SELECT m.*, n.string as name, v.string as value" + . " from {$CONFIG->dbprefix}metadata m" + . " JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.entity_guid" + . " JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id" + . " JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id" + . " where m.entity_guid=$entity_guid and m.name_id='$meta_name'" + . " and $access and $md_access ORDER BY m.id ASC" ; + + $result = get_data($query, "row_to_elggmetadata"); + if (!$result) { return false; } @@ -341,7 +388,9 @@ function get_metadata_byname($entity_guid, $meta_name) { /** * Return all the metadata for a given GUID. * - * @param int $entity_guid + * @param int $entity_guid Entity GUID + * + * @return mixed */ function get_metadata_for_entity($entity_guid) { global $CONFIG; @@ -350,22 +399,32 @@ function get_metadata_for_entity($entity_guid) { $access = get_access_sql_suffix("e"); $md_access = get_access_sql_suffix("m"); - return get_data("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.entity_guid=$entity_guid and $access and $md_access", "row_to_elggmetadata"); + $query = "SELECT m.*, n.string as name, v.string as value + from {$CONFIG->dbprefix}metadata m + JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.entity_guid + JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id + JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id + where m.entity_guid=$entity_guid and $access and $md_access"; + + return get_data($query, "row_to_elggmetadata"); } /** * Get the metadata where the entities they are referring to match a given criteria. * - * @param mixed $meta_name - * @param mixed $meta_value - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param mixed $meta_name Metadata name + * @param mixed $meta_value Metadata value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity. - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Optional ordering. + * @param int $site_guid Site GUID. 0 for current, -1 for any + * + * @return mixed */ -function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $entity_subtype = "", $limit = 10, $offset = 0, $order_by = "", $site_guid = 0) { +function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $entity_subtype = "", + $limit = 10, $offset = 0, $order_by = "", $site_guid = 0) { global $CONFIG; $meta_n = get_metastring_id($meta_name); @@ -387,7 +446,7 @@ function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $en $where = array(); - if ($entity_type!="") { + if ($entity_type != "") { $where[] = "e.type='$entity_type'"; } @@ -395,14 +454,14 @@ function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $en $where[] = "e.subtype=$entity_subtype"; } - if ($meta_name!="") { + if ($meta_name != "") { if (!$meta_v) { // The value is set, but we didn't get a value... so something went wrong. return false; } $where[] = "m.name_id='$meta_n'"; } - if ($meta_value!="") { + if ($meta_value != "") { // The value is set, but we didn't get a value... so something went wrong. if (!$meta_v) { return false; @@ -413,7 +472,11 @@ function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $en $where[] = "e.site_guid = {$site_guid}"; } - $query = "SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where"; + $query = "SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}entities e + JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid + JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id + JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where"; + foreach ($where as $w) { $query .= " $w and "; } @@ -438,21 +501,34 @@ function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $en * * @see elgg_get_entities * @see elgg_get_entities_from_annotations + * * @param array $options Array in format: * * metadata_names => NULL|ARR metadata names * * metadata_values => NULL|ARR metadata values * - * metadata_name_value_pairs => NULL|ARR (name => 'name', value => 'value', 'operand' => '=', 'case_sensitive' => TRUE) entries. - * Currently if multiple values are sent via an array (value => array('value1', 'value2') the pair's operand will be forced to "IN". + * metadata_name_value_pairs => NULL|ARR ( + * name => 'name', + * value => 'value', + * 'operand' => '=', + * 'case_sensitive' => TRUE + * ) + * Currently if multiple values are sent via + * an array (value => array('value1', 'value2') + * the pair's operand will be forced to "IN". * - * metadata_name_value_pairs_operator => NULL|STR The operator to use for combining (name = value) OPERATOR (name = value); default AND + * metadata_name_value_pairs_operator => NULL|STR The operator to use for combining + * (name = value) OPERATOR (name = value); default AND * * metadata_case_sensitive => BOOL Overall Case sensitive * - * order_by_metadata => NULL|ARR (array('name' => 'metadata_text1', 'direction' => ASC|DESC, 'as' => text|integer), - * Also supports array('name' => 'metadata_text1') + * order_by_metadata => NULL|ARR array( + * 'name' => 'metadata_text1', + * 'direction' => ASC|DESC, + * 'as' => text|integer + * ) + * Also supports array('name' => 'metadata_text1') * * metadata_owner_guids => NULL|ARR guids for metadata owners * @@ -474,7 +550,9 @@ function elgg_get_entities_from_metadata(array $options = array()) { $options = array_merge($defaults, $options); - $singulars = array('metadata_name', 'metadata_value', 'metadata_name_value_pair', 'metadata_owner_guid'); + $singulars = array('metadata_name', 'metadata_value', + 'metadata_name_value_pair', 'metadata_owner_guid'); + $options = elgg_normalise_plural_options_array($options, $singulars); if (!$options = elgg_entities_get_metastrings_options('metadata', $options)) { @@ -487,8 +565,8 @@ function elgg_get_entities_from_metadata(array $options = array()) { /** * Returns options to pass to elgg_get_entities() for metastrings operations. * - * @param string $type Metastring type: annotations or metadata - * @param array $options Options + * @param string $type Metastring type: annotations or metadata + * @param array $options Options * * @return array * @since 1.7.0 @@ -503,11 +581,13 @@ function elgg_entities_get_metastrings_options($type, $options) { // is plural (elgg_annotations) so rewrite for the table name. $n_table = ($type == 'annotation') ? 'annotations' : $type; - $singulars = array("{$type}_name", "{$type}_value", "{$type}_name_value_pair", "{$type}_owner_guid"); + $singulars = array("{$type}_name", "{$type}_value", + "{$type}_name_value_pair", "{$type}_owner_guid"); $options = elgg_normalise_plural_options_array($options, $singulars); - $clauses = elgg_get_entity_metadata_where_sql('e', $n_table, $options["{$type}_names"], $options["{$type}_values"], - $options["{$type}_name_value_pairs"], $options["{$type}_name_value_pairs_operator"], $options["{$type}_case_sensitive"], + $clauses = elgg_get_entity_metadata_where_sql('e', $n_table, $options["{$type}_names"], + $options["{$type}_values"], $options["{$type}_name_value_pairs"], + $options["{$type}_name_value_pairs_operator"], $options["{$type}_case_sensitive"], $options["order_by_{$type}"], $options["{$type}_owner_guids"]); if ($clauses) { @@ -530,7 +610,7 @@ function elgg_entities_get_metastrings_options($type, $options) { $options['joins'] = array_merge($options['joins'], $clauses['joins']); if ($clauses['orders']) { - $order_by_metadata = implode(", ",$clauses['orders']); + $order_by_metadata = implode(", ", $clauses['orders']); if (isset($options['order_by']) && $options['order_by']) { $options['order_by'] = "$order_by_metadata, {$options['order_by']}"; } else { @@ -550,18 +630,24 @@ function elgg_entities_get_metastrings_options($type, $options) { * This function is reused for annotations because the tables are * exactly the same. * - * @param string $e_table Entities table name - * @param string $n_table Normalized metastrings table name (Where entities, values, and names are joined. annotations / metadata) - * @param ARR|NULL $names - * @param ARR|NULL $values - * @param ARR|NULL $pairs array of names / values / operands - * @param AND|OR $pair_operator Operator to use to join the where clauses for pairs - * @param BOOL $case_sensitive - * @param ARR|NULL $order_by_metadata array of names / direction + * @param string $e_table Entities table name + * @param string $n_table Normalized metastrings table name (Where entities, + * values, and names are joined. annotations / metadata) + * @param arr|null $names Array of names + * @param arr|null $values Array of values + * @param arr|null $pairs Array of names / values / operands + * @param and|or $pair_operator Operator to use to join the where clauses for pairs + * @param bool $case_sensitive Case sensitive metadata names? + * @param arr|null $order_by_metadata Array of names / direction + * @param arr|null $owner_guids Array of owner GUIDs + * * @return FALSE|array False on fail, array('joins', 'wheres') * @since 1.7.0 */ -function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $values = NULL, $pairs = NULL, $pair_operator = 'AND', $case_sensitive = TRUE, $order_by_metadata = NULL, $owner_guids = NULL) { +function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $values = NULL, +$pairs = NULL, $pair_operator = 'AND', $case_sensitive = TRUE, $order_by_metadata = NULL, +$owner_guids = NULL) { + global $CONFIG; // short circuit if nothing requested @@ -593,7 +679,8 @@ function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $ ); // will always want to join these tables if pulling metastrings. - $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table on {$e_table}.guid = n_table.entity_guid"; + $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table on + {$e_table}.guid = n_table.entity_guid"; $wheres = array(); @@ -727,11 +814,15 @@ function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $ $name = sanitise_string($pair['name']); // @todo The multiple joins are only needed when the operator is AND - $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i} on {$e_table}.guid = n_table{$i}.entity_guid"; - $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i} on n_table{$i}.name_id = msn{$i}.id"; - $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i} on n_table{$i}.value_id = msv{$i}.id"; + $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i} + on {$e_table}.guid = n_table{$i}.entity_guid"; + $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i} + on n_table{$i}.name_id = msn{$i}.id"; + $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i} + on n_table{$i}.value_id = msv{$i}.id"; - $pair_wheres[] = "(msn{$i}.string = '$name' AND {$pair_binary}msv{$i}.string $operand $value AND $access)"; + $pair_wheres[] = "(msn{$i}.string = '$name' AND {$pair_binary}msv{$i}.string + $operand $value AND $access)"; $i++; } @@ -770,9 +861,12 @@ function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $ } else { $direction = 'ASC'; } - $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i} on {$e_table}.guid = n_table{$i}.entity_guid"; - $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i} on n_table{$i}.name_id = msn{$i}.id"; - $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i} on n_table{$i}.value_id = msv{$i}.id"; + $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i} + on {$e_table}.guid = n_table{$i}.entity_guid"; + $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i} + on n_table{$i}.name_id = msn{$i}.id"; + $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i} + on n_table{$i}.value_id = msv{$i}.id"; $access = get_access_sql_suffix("n_table{$i}"); @@ -794,22 +888,24 @@ function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $ * Return a list of entities based on the given search criteria. * * @deprecated 1.7 use elgg_get_entities_from_metadata(). - * @param mixed $meta_name - * @param mixed $meta_value - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * + * @param mixed $meta_name Metadat name + * @param mixed $meta_value Metadata value + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity. - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. - * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false) - * @param true|false $case_sensitive If set to false this searches for the meta data without case sensitivity. (Default: true) + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Optional ordering. + * @param int $site_guid Site GUID. 0 for current, -1 for any. + * @param bool $count Return a count instead of entities + * @param bool $case_sensitive Metadata names case sensitivity * * @return int|array A list of entities, or a count if $count is set to true */ -function get_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", -$owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, -$count = FALSE, $case_sensitive = TRUE) { +function get_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "", +$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", +$site_guid = 0, $count = FALSE, $case_sensitive = TRUE) { elgg_deprecated_notice('get_entities_from_metadata() was deprecated by elgg_get_entities_from_metadata()!', 1.7); @@ -869,18 +965,27 @@ $count = FALSE, $case_sensitive = TRUE) { * @see elgg_view_entity_list * * @deprecated 1.8 Use elgg_list_entities_from_metadata - * @param mixed $meta_name Metadata name to search on - * @param mixed $meta_value The value to match, optionally - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * + * @param mixed $meta_name Metadata name to search on + * @param mixed $meta_value The value to match, optionally + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity - * @param int $limit Number of entities to display per page - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow users to toggle to the gallery view. Default: true - * @param true|false $pagination Display pagination? Default: true + * @param int $owner_guid Owner GUID + * @param int $limit Number of entities to display per page + * @param bool $fullview WDisplay the full view (default: true) + * @param bool $viewtypetoggle Allow users to toggle to the gallery view. Default: true + * @param bool $pagination Display pagination? Default: true + * @param bool $case_sensitive Case sensitive metadata names? + * + * @return string * * @return string A list of entities suitable for display */ -function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type = ELGG_ENTITIES_ANY_VALUE, $entity_subtype = ELGG_ENTITIES_ANY_VALUE, $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true, $case_sensitive = true ) { +function list_entities_from_metadata($meta_name, $meta_value = "", +$entity_type = ELGG_ENTITIES_ANY_VALUE, $entity_subtype = ELGG_ENTITIES_ANY_VALUE, +$owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, +$pagination = true, $case_sensitive = true) { + elgg_deprecated_notice('list_entities_from_metadata() was deprecated by elgg_list_entities_from_metadata()!', 1.8); $offset = (int) get_input('offset'); @@ -901,7 +1006,8 @@ function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type $options['count'] = FALSE; $entities = elgg_get_entities_from_metadata($options); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, + $fullview, $viewtypetoggle, $pagination); } /** @@ -909,7 +1015,9 @@ function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type * * @see elgg_get_entities_from_metadata * - * @param array $options + * @param array $options Options array + * + * @return array * @since 1.7.0 */ function elgg_list_entities_from_metadata($options) { @@ -926,26 +1034,32 @@ function elgg_list_entities_from_metadata($options) { $count = elgg_get_entities_from_metadata(array_merge(array('count' => TRUE), $options)); $entities = elgg_get_entities_from_metadata($options); - return elgg_view_entity_list($entities, $count, $options['offset'], $options['limit'], $options['full_view'], $options['view_type_toggle'], $options['pagination']); + return elgg_view_entity_list($entities, $count, $options['offset'], $options['limit'], + $options['full_view'], $options['view_type_toggle'], $options['pagination']); } /** + * Return entities from metadata + * * @deprecated 1.7. Use elgg_get_entities_from_metadata(). - * @param $meta_array - * @param $entity_type - * @param $entity_subtype - * @param $owner_guid - * @param $limit - * @param $offset - * @param $order_by - * @param $site_guid - * @param $count - * @param $meta_array_operator - * @return unknown_type + * + * @param mixed $meta_array Metadata name + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param string $entity_subtype The subtype of the entity. + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param int $offset Offset + * @param string $order_by Optional ordering. + * @param int $site_guid Site GUID. 0 for current, -1 for any. + * @param bool $count Return a count instead of entities + * @param bool $meta_array_operator Operator for metadata values + * + * @return int|array A list of entities, or a count if $count is set to true */ function get_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false, $meta_array_operator = 'and') { + elgg_deprecated_notice('get_entities_from_metadata_multi() was deprecated by elgg_get_entities_from_metadata()!', 1.7); if (!is_array($meta_array) || sizeof($meta_array) == 0) { @@ -1002,30 +1116,37 @@ $count = false, $meta_array_operator = 'and') { * * @see elgg_view_entity_list * - * @param array $meta_array Array of 'name' => 'value' pairs - * @param string $entity_type The type of entity to look for, eg 'site' or 'object' + * @param array $meta_array Array of 'name' => 'value' pairs + * @param string $entity_type The type of entity to look for, eg 'site' or 'object' * @param string $entity_subtype The subtype of the entity. - * @param int $limit - * @param int $offset - * @param string $order_by Optional ordering. - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow users to toggle to the gallery view. Default: true - * @param true|false $pagination Display pagination? Default: true + * @param int $owner_guid Owner GUID + * @param int $limit Limit + * @param bool $fullview WDisplay the full view (default: true) + * @param bool $viewtypetoggle Allow users to toggle to the gallery view. Default: true + * @param bool $pagination Display pagination? Default: true + * * @return string List of ElggEntities suitable for display */ -function list_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) { +function list_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", +$owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) { + $offset = (int) get_input('offset'); $limit = (int) $limit; - $count = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, true); - $entities = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, false); + $count = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, + $owner_guid, $limit, $offset, "", $site_guid, true); + $entities = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, + $owner_guid, $limit, $offset, "", $site_guid, false); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, + $viewtypetoggle, $pagination); } /** * Clear all the metadata for a given entity, assuming you have access to that metadata. * - * @param int $guid + * @param int $entity_guid Entity GUID + * + * @return bool */ function clear_metadata($entity_guid) { global $CONFIG; @@ -1043,6 +1164,8 @@ function clear_metadata($entity_guid) { * Clear all annotations belonging to a given owner_guid * * @param int $owner_guid The owner + * + * @return bool */ function clear_metadata_by_owner($owner_guid) { global $CONFIG; @@ -1066,6 +1189,13 @@ function clear_metadata_by_owner($owner_guid) { /** * Handler called by trigger_plugin_hook on the "export" event. + * + * @param string $hook export + * @param string $entity_type all + * @param mixed $returnvalue Value returned from previous hook + * @param mixed $params Params + * + * @return array */ function export_metadata_plugin_hook($hook, $entity_type, $returnvalue, $params) { // Sanity check values @@ -1092,17 +1222,23 @@ function export_metadata_plugin_hook($hook, $entity_type, $returnvalue, $params) } /** - * Takes in a comma-separated string and returns an array of tags which have been trimmed and set to lower case + * Takes in a comma-separated string and returns an array of tags + * which have been trimmed and set to lower case * * @param string $string Comma-separated tag string + * * @return array|false An array of strings, or false on failure */ function string_to_tag_array($string) { if (is_string($string)) { - $ar = explode(",",$string); - $ar = array_map('trim', $ar); // trim blank spaces - $ar = array_map('elgg_strtolower', $ar); // make lower case : [Marcus Povey 20090605 - Using mb wrapper function using UTF8 safe function where available] - $ar = array_filter($ar, 'is_not_null'); // Remove null values + $ar = explode(",", $string); + // trim blank spaces + $ar = array_map('trim', $ar); + // make lower case : [Marcus Povey 20090605 - Using mb wrapper function + // using UTF8 safe function where available] + $ar = array_map('elgg_strtolower', $ar); + // Remove null values + $ar = array_filter($ar, 'is_not_null'); return $ar; } return false; @@ -1110,16 +1246,18 @@ function string_to_tag_array($string) { } /** - * Takes a metadata array (which has all kinds of properties) and turns it into a simple array of strings + * Takes a metadata array (which has all kinds of properties) + * and turns it into a simple array of strings * * @param array $array Metadata array + * * @return array Array of strings */ function metadata_array_to_values($array) { $valuearray = array(); if (is_array($array)) { - foreach($array as $element) { + foreach ($array as $element) { $valuearray[] = $element->value; } } @@ -1128,9 +1266,12 @@ function metadata_array_to_values($array) { } /** - * Get the URL for this item of metadata, by default this links to the export handler in the current view. + * Get the URL for this item of metadata, by default this + * links to the export handler in the current view. + * + * @param int $id Metadata ID * - * @param int $id + * @return mixed */ function get_metadata_url($id) { $id = (int)$id; @@ -1145,8 +1286,10 @@ function get_metadata_url($id) { * Mark entities with a particular type and subtype as having access permissions * that can be changed independently from their parent entity * - * @param string $type The type - object, user, etc + * @param string $type The type - object, user, etc * @param string $subtype The subtype; all subtypes by default + * + * @return void */ function register_metadata_as_independent($type, $subtype = '*') { global $CONFIG; @@ -1160,9 +1303,10 @@ function register_metadata_as_independent($type, $subtype = '*') { * Determines whether entities of a given type and subtype should not change * their metadata in line with their parent entity * - * @param string $type The type - object, user, etc + * @param string $type The type - object, user, etc * @param string $subtype The entity subtype - * @return true|false + * + * @return bool */ function is_metadata_independent($type, $subtype) { global $CONFIG; @@ -1179,9 +1323,11 @@ function is_metadata_independent($type, $subtype) { /** * When an entity is updated, resets the access ID on all of its child metadata * - * @param string $event The name of the event - * @param string $object_type The type of object - * @param ElggEntity $object The entity itself + * @param string $event The name of the event + * @param string $object_type The type of object + * @param ElggEntity $object The entity itself + * + * @return true */ function metadata_update($event, $object_type, $object) { if ($object instanceof ElggEntity) { @@ -1189,7 +1335,8 @@ function metadata_update($event, $object_type, $object) { global $CONFIG; $access_id = (int) $object->access_id; $guid = (int) $object->getGUID(); - update_data("update {$CONFIG->dbprefix}metadata set access_id = {$access_id} where entity_guid = {$guid}"); + $query = "update {$CONFIG->dbprefix}metadata set access_id = {$access_id} where entity_guid = {$guid}"; + update_data($query); } } return true; @@ -1200,6 +1347,8 @@ function metadata_update($event, $object_type, $object) { * * @param string $function_name The function. * @param string $extender_name The name, default 'all'. + * + * @return bool */ function register_metadata_url_handler($function_name, $extender_name = "all") { return register_extender_url_handler($function_name, 'metadata', $extender_name); @@ -1207,11 +1356,23 @@ function register_metadata_url_handler($function_name, $extender_name = "all") { /** Register the hook */ register_plugin_hook("export", "all", "export_metadata_plugin_hook", 2); + /** Call a function whenever an entity is updated **/ -register_elgg_event_handler('update','all','metadata_update'); +register_elgg_event_handler('update', 'all', 'metadata_update'); // unit testing register_plugin_hook('unit_test', 'system', 'metadata_test'); + +/** + * Metadata unit test + * + * @param string $hook unit_test + * @param string $type system + * @param mixed $value Array of other tests + * @param mixed $params Params + * + * @return array + */ function metadata_test($hook, $type, $value, $params) { global $CONFIG; $value[] = $CONFIG->path . 'engine/tests/objects/metadata.php'; diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php index 4ca4f1fe2..8a105b822 100644 --- a/engine/lib/metastrings.php +++ b/engine/lib/metastrings.php @@ -3,8 +3,8 @@ * Elgg metastrngs * Functions to manage object metastrings. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage DataModel.MetaStrings */ /** Cache metastrings for a page */ @@ -16,20 +16,22 @@ $METASTRINGS_DEADNAME_CACHE = array(); /** * Return the meta string id for a given tag, or false. * - * @param string $string The value (whatever that is) to be stored - * @param bool $case_sensitive Do we want to make the query case sensitive? If not there may be more than one result - * @return int|array|false meta string id, array of ids or false if none found + * @param string $string The value to store + * @param bool $case_sensitive Do we want to make the query case sensitive? + * If not there may be more than one result + * + * @return int|array|false meta string id, array of ids or false if none found */ function get_metastring_id($string, $case_sensitive = TRUE) { global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE; $string = sanitise_string($string); - - // caching doesn't work for case insensitive searches - if ($case_sensitive) { + + // caching doesn't work for case insensitive searches + if ($case_sensitive) { $result = array_search($string, $METASTRINGS_CACHE, true); - - if ($result!==false) { + + if ($result !== false) { elgg_log("** Returning id for string:$string from cache."); return $result; } @@ -38,7 +40,7 @@ function get_metastring_id($string, $case_sensitive = TRUE) { if (in_array($string, $METASTRINGS_DEADNAME_CACHE, true)) { return false; } - + // Experimental memcache $msfc = null; static $metastrings_memcache; @@ -65,7 +67,7 @@ function get_metastring_id($string, $case_sensitive = TRUE) { if (is_array($metaStrings)) { if (sizeof($metaStrings) > 1) { $ids = array(); - foreach($metaStrings as $metaString) { + foreach ($metaStrings as $metaString) { $ids[] = $metaString->id; } return $ids; @@ -73,7 +75,7 @@ function get_metastring_id($string, $case_sensitive = TRUE) { $row = $metaStrings[0]; } } - + if ($row) { $METASTRINGS_CACHE[$row->id] = $row->string; // Cache it @@ -96,6 +98,7 @@ function get_metastring_id($string, $case_sensitive = TRUE) { * When given an ID, returns the corresponding metastring * * @param int $id Metastring ID + * * @return string Metastring */ function get_metastring($id) { @@ -124,8 +127,9 @@ function get_metastring($id) { * Add a metastring. * It returns the id of the tag, whether by creating it or updating it. * - * @param string $string The value (whatever that is) to be stored - * @param bool $case_sensitive Do we want to make the query case sensitive? + * @param string $string The value (whatever that is) to be stored + * @param bool $case_sensitive Do we want to make the query case sensitive? + * * @return mixed Integer tag or false. */ function add_metastring($string, $case_sensitive = true) { @@ -152,6 +156,7 @@ function add_metastring($string, $case_sensitive = true) { /** * Delete any orphaned entries in metastrings. This is run by the garbage collector. * + * @return bool */ function delete_orphaned_metastrings() { global $CONFIG; diff --git a/engine/lib/notification.php b/engine/lib/notification.php index 98bdcbca5..cfb79715c 100644 --- a/engine/lib/notification.php +++ b/engine/lib/notification.php @@ -3,20 +3,19 @@ * Notifications * This file contains classes and functions which allow plugins to register and send notifications. * - * There are notification methods which are provided out of the box (see notification_init() ). Each method - * is identified by a string, e.g. "email". + * There are notification methods which are provided out of the box + * (see notification_init() ). Each method is identified by a string, e.g. "email". * - * To register an event use register_notification_handler() and pass the method name and a handler function. + * To register an event use register_notification_handler() and pass the method name and a + * handler function. * - * To send a notification call notify() passing it the method you wish to use combined with a number of method - * specific addressing parameters. + * To send a notification call notify() passing it the method you wish to use combined with a + * number of method specific addressing parameters. * * Catch NotificationException to trap errors. * - * @package Elgg - * @subpackage API - - + * @package Elgg.Core + * @subpackage Notifications */ /** Notification handlers */ @@ -25,9 +24,15 @@ $NOTIFICATION_HANDLERS = array(); /** * This function registers a handler for a given notification type (eg "email") * - * @param string $method The method - * @param string $handler The handler function, in the format "handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL)". This function should return false on failure, and true/a tracking message ID on success. - * @param array $params A associated array of other parameters for this handler defining some properties eg. supported message length or rich text support. + * @param string $method The method + * @param string $handler The handler function, in the format + * "handler(ElggEntity $from, ElggUser $to, $subject, + * $message, array $params = NULL)". This function should + * return false on failure, and true/a tracking message ID on success. + * @param array $params An associated array of other parameters for this handler + * defining some properties eg. supported msg length or rich text support. + * + * @return bool */ function register_notification_handler($method, $handler, $params = NULL) { global $NOTIFICATION_HANDLERS; @@ -52,6 +57,8 @@ function register_notification_handler($method, $handler, $params = NULL) { * This function unregisters a handler for a given notification type (eg "email") * * @param string $method The method + * + * @return void * @since 1.7.1 */ function unregister_notification_handler($method) { @@ -65,13 +72,15 @@ function unregister_notification_handler($method) { /** * Notify a user via their preferences. * - * @param mixed $to Either a guid or an array of guid's to notify. - * @param int $from GUID of the sender, which may be a user, site or object. - * @param string $subject Message subject. - * @param string $message Message body. - * @param array $params Misc additional parameters specific to various methods. - * @param mixed $methods_override A string, or an array of strings specifying the delivery methods to use - or leave blank - * for delivery using the user's chosen delivery methods. + * @param mixed $to Either a guid or an array of guid's to notify. + * @param int $from GUID of the sender, which may be a user, site or object. + * @param string $subject Message subject. + * @param string $message Message body. + * @param array $params Misc additional parameters specific to various methods. + * @param mixed $methods_override A string, or an array of strings specifying the delivery + * methods to use - or leave blank for delivery using the + * user's chosen delivery methods. + * * @return array Compound array of each delivery user/delivery method's success or failure. * @throws NotificationException */ @@ -102,7 +111,7 @@ function notify_user($to, $from, $subject, $message, array $params = NULL, $meth if (!$methods) { $tmp = (array)get_user_notification_settings($guid); $methods = array(); - foreach($tmp as $k => $v) { + foreach ($tmp as $k => $v) { // Add method if method is turned on for user! if ($v) { $methods[] = $k; @@ -153,6 +162,7 @@ function notify_user($to, $from, $subject, $message, array $params = NULL, $meth * Get the notification settings for a given user. * * @param int $user_guid The user id + * * @return stdClass */ function get_user_notification_settings($user_guid = 0) { @@ -185,9 +195,10 @@ function get_user_notification_settings($user_guid = 0) { /** * Set a user notification pref. * - * @param int $user_guid The user id. - * @param string $method The delivery method (eg. email) - * @param bool $value On(true) or off(false). + * @param int $user_guid The user id. + * @param string $method The delivery method (eg. email) + * @param bool $value On(true) or off(false). + * * @return bool */ function set_user_notification_setting($user_guid, $method, $value) { @@ -213,26 +224,32 @@ function set_user_notification_setting($user_guid, $method, $value) { /** * Send a notification via email. * - * @param ElggEntity $from The from user/site/object - * @param ElggUser $to To which user? - * @param string $subject The subject of the message. - * @param string $message The message body - * @param array $params Optional parameters (none taken in this instance) + * @param ElggEntity $from The from user/site/object + * @param ElggUser $to To which user? + * @param string $subject The subject of the message. + * @param string $message The message body + * @param array $params Optional parameters (none taken in this instance) + * * @return bool */ -function email_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL) { +function email_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message, +array $params = NULL) { + global $CONFIG; if (!$from) { - throw new NotificationException(sprintf(elgg_echo('NotificationException:MissingParameter'), 'from')); + $msg = sprintf(elgg_echo('NotificationException:MissingParameter'), 'from'); + throw new NotificationException($msg); } if (!$to) { - throw new NotificationException(sprintf(elgg_echo('NotificationException:MissingParameter'), 'to')); + $msg = sprintf(elgg_echo('NotificationException:MissingParameter'), 'to'); + throw new NotificationException($msg); } - if ($to->email=="") { - throw new NotificationException(sprintf(elgg_echo('NotificationException:NoEmailAddress'), $to->guid)); + if ($to->email == "") { + $msg = sprintf(elgg_echo('NotificationException:NoEmailAddress'), $to->guid); + throw new NotificationException($msg); } // To @@ -257,11 +274,12 @@ function email_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message /** * Send an email to any email address * - * @param string $from Email address or string: "name <email>" - * @param string $to Email address or string: "name <email>" + * @param string $from Email address or string: "name <email>" + * @param string $to Email address or string: "name <email>" * @param string $subject The subject of the message - * @param string $body The message body - * @param array $params Optional parameters (none used in this function) + * @param string $body The message body + * @param array $params Optional parameters (none used in this function) + * * @return bool * @since 1.7.2 */ @@ -269,19 +287,24 @@ function elgg_send_email($from, $to, $subject, $body, array $params = NULL) { global $CONFIG; if (!$from) { - throw new NotificationException(sprintf(elgg_echo('NotificationException:NoEmailAddress'), 'from')); + $msg = sprintf(elgg_echo('NotificationException:NoEmailAddress'), 'from'); + throw new NotificationException($msg); } if (!$to) { - throw new NotificationException(sprintf(elgg_echo('NotificationException:NoEmailAddress'), 'to')); + $msg = sprintf(elgg_echo('NotificationException:NoEmailAddress'), 'to'); + throw new NotificationException($msg); } // return TRUE/FALSE to stop elgg_send_email() from sending - $mail_params = array( 'to' => $to, + $mail_params = array( + 'to' => $to, 'from' => $from, 'subject' => $subject, 'body' => $body, - 'params' => $params); + 'params' => $params + ); + $result = trigger_plugin_hook('email', 'system', $mail_params, NULL); if ($result !== NULL) { return $result; @@ -294,7 +317,7 @@ function elgg_send_email($from, $to, $subject, $body, array $params = NULL) { } // Windows is somewhat broken, so we use just address for to and from - if (strtolower(substr(PHP_OS, 0 , 3)) == 'win') { + if (strtolower(substr(PHP_OS, 0, 3)) == 'win') { // strip name from to and from if (strpos($to, '<')) { preg_match('/<(.*)>/', $to, $matches); @@ -315,7 +338,7 @@ function elgg_send_email($from, $to, $subject, $body, array $params = NULL) { // Sanitise subject by stripping line endings $subject = preg_replace("/(\r\n|\r|\n)/", " ", $subject); if (is_callable('mb_encode_mimeheader')) { - $subject = mb_encode_mimeheader($subject,"UTF-8", "B"); + $subject = mb_encode_mimeheader($subject, "UTF-8", "B"); } // Format message @@ -330,6 +353,7 @@ function elgg_send_email($from, $to, $subject, $body, array $params = NULL) { /** * Correctly initialise notifications and register the email handler. * + * @return void */ function notification_init() { // Register a notification handler for the default email method @@ -338,11 +362,15 @@ function notification_init() { // Add settings view to user settings & register action extend_elgg_settings_page('notifications/settings/usersettings', 'usersettings/user'); - register_plugin_hook('usersettings:save','user','notification_user_settings_save'); - - //register_action("notifications/settings/usersettings/save"); + register_plugin_hook('usersettings:save', 'user', 'notification_user_settings_save'); } +/** + * Includes the action to save user notifications + * + * @return void + * @todo why can't this call action(...)? + */ function notification_user_settings_save() { global $CONFIG; include($CONFIG->path . "actions/notifications/settings/usersettings/save.php"); @@ -351,11 +379,13 @@ function notification_user_settings_save() { /** * Register an entity type and subtype to be eligible for notifications * - * @param string $entity_type The type of entity + * @param string $entity_type The type of entity * @param string $object_subtype Its subtype - * @param string $english_name It's English notification string (eg "New blog post") + * @param string $language_name Its localized notification string (eg "New blog post") + * + * @return void */ -function register_notification_object($entity_type, $object_subtype, $english_name) { +function register_notification_object($entity_type, $object_subtype, $language_name) { global $CONFIG; if ($entity_type == '') { @@ -373,14 +403,15 @@ function register_notification_object($entity_type, $object_subtype, $english_na $CONFIG->register_objects[$entity_type] = array(); } - $CONFIG->register_objects[$entity_type][$object_subtype] = $english_name; + $CONFIG->register_objects[$entity_type][$object_subtype] = $language_name; } /** * Establish a 'notify' relationship between the user and a content author * - * @param int $user_guid The GUID of the user who wants to follow a user's content + * @param int $user_guid The GUID of the user who wants to follow a user's content * @param int $author_guid The GUID of the user whose content the user wants to follow + * * @return true|false Depending on success */ function register_notification_interest($user_guid, $author_guid) { @@ -390,8 +421,9 @@ function register_notification_interest($user_guid, $author_guid) { /** * Remove a 'notify' relationship between the user and a content author * - * @param int $user_guid The GUID of the user who is following a user's content + * @param int $user_guid The GUID of the user who is following a user's content * @param int $author_guid The GUID of the user whose content the user wants to unfollow + * * @return true|false Depending on success */ function remove_notification_interest($user_guid, $author_guid) { @@ -403,6 +435,12 @@ function remove_notification_interest($user_guid, $author_guid) { * objects and attempts to send notifications to anybody who's interested * * @see register_notification_object + * + * @param string $event create + * @param string $object_type mixed + * @param mixed $object The object created + * + * @return void */ function object_notifications($event, $object_type, $object) { // We only want to trigger notification events for ElggEntities @@ -411,7 +449,7 @@ function object_notifications($event, $object_type, $object) { // Get config data global $CONFIG, $SESSION, $NOTIFICATION_HANDLERS; - $hookresult = trigger_plugin_hook('object:notifications',$object_type,array( + $hookresult = trigger_plugin_hook('object:notifications', $object_type, array( 'event' => $event, 'object_type' => $object_type, 'object' => $object, @@ -437,7 +475,7 @@ function object_notifications($event, $object_type, $object) { // Get users interested in content from this person and notify them // (Person defined by container_guid so we can also subscribe to groups if we want) - foreach($NOTIFICATION_HANDLERS as $method => $foo) { + foreach ($NOTIFICATION_HANDLERS as $method => $foo) { $interested_users = elgg_get_entities_from_relationship(array( 'relationship' => 'notify' . $method, 'relationship_guid' => $object->container_guid, @@ -447,19 +485,20 @@ function object_notifications($event, $object_type, $object) { )); if ($interested_users && is_array($interested_users)) { - foreach($interested_users as $user) { + foreach ($interested_users as $user) { if ($user instanceof ElggUser && !$user->isBanned()) { - if (($user->guid != $SESSION['user']->guid) && has_access_to_entity($object,$user) + if (($user->guid != $SESSION['user']->guid) && has_access_to_entity($object, $user) && $object->access_id != ACCESS_PRIVATE) { - $methodstring = trigger_plugin_hook('notify:entity:message',$object->getType(),array( + $methodstring = trigger_plugin_hook('notify:entity:message', $object->getType(), array( 'entity' => $object, 'to_entity' => $user, - 'method' => $method),$string); + 'method' => $method), $string); if (empty($methodstring) && $methodstring !== false) { $methodstring = $string; } if ($methodstring !== false) { - notify_user($user->guid,$object->container_guid,$descr,$methodstring,NULL,array($method)); + notify_user($user->guid, $object->container_guid, $descr, $methodstring, + NULL, array($method)); } } } @@ -471,5 +510,5 @@ function object_notifications($event, $object_type, $object) { } // Register a startup event -register_elgg_event_handler('init','system','notification_init',0); -register_elgg_event_handler('create','object','object_notifications'); +register_elgg_event_handler('init', 'system', 'notification_init', 0); +register_elgg_event_handler('create', 'object', 'object_notifications');
\ No newline at end of file diff --git a/engine/lib/objects.php b/engine/lib/objects.php index c078074c4..ae30edb13 100644 --- a/engine/lib/objects.php +++ b/engine/lib/objects.php @@ -10,7 +10,9 @@ /** * Return the object specific details of a object by a row. * - * @param int $guid + * @param int $guid The guid to retreive + * + * @return bool */ function get_object_entity_as_row($guid) { global $CONFIG; @@ -23,9 +25,11 @@ function get_object_entity_as_row($guid) { * Create or update the extras table for a given object. * Call create_entity first. * - * @param int $guid The guid of the entity you're creating (as obtained by create_entity) - * @param string $title The title of the object + * @param int $guid The guid of the entity you're creating (as obtained by create_entity) + * @param string $title The title of the object * @param string $description The object's description + * + * @return bool */ function create_object_entity($guid, $title, $description) { global $CONFIG; @@ -38,12 +42,16 @@ function create_object_entity($guid, $title, $description) { if ($row) { // Core entities row exists and we have access to it - if ($exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}objects_entity where guid = {$guid}")) { - $result = update_data("UPDATE {$CONFIG->dbprefix}objects_entity set title='$title', description='$description' where guid=$guid"); - if ($result!=false) { + $query = "SELECT guid from {$CONFIG->dbprefix}objects_entity where guid = {$guid}"; + if ($exists = get_data_row($query)) { + $query = "UPDATE {$CONFIG->dbprefix}objects_entity + set title='$title', description='$description' where guid=$guid"; + + $result = update_data($query); + if ($result != false) { // Update succeeded, continue $entity = get_entity($guid); - if (trigger_elgg_event('update',$entity->type,$entity)) { + if (trigger_elgg_event('update', $entity->type, $entity)) { return $guid; } else { $entity->delete(); @@ -51,14 +59,16 @@ function create_object_entity($guid, $title, $description) { } } else { // Update failed, attempt an insert. - $result = insert_data("INSERT into {$CONFIG->dbprefix}objects_entity (guid, title, description) values ($guid, '$title','$description')"); - if ($result!==false) { + $query = "INSERT into {$CONFIG->dbprefix}objects_entity + (guid, title, description) values ($guid, '$title','$description')"; + + $result = insert_data($query); + if ($result !== false) { $entity = get_entity($guid); - if (trigger_elgg_event('create',$entity->type,$entity)) { + if (trigger_elgg_event('create', $entity->type, $entity)) { return $guid; } else { $entity->delete(); - //delete_entity($guid); } } } @@ -71,8 +81,12 @@ function create_object_entity($guid, $title, $description) { * THIS FUNCTION IS DEPRECATED. * * Delete a object's extra data. + * * @todo - this should be removed - was deprecated in 1.5 or earlier - * @param int $guid + * + * @param int $guid GUID + * + * @return 1 */ function delete_object_entity($guid) { system_message(sprintf(elgg_echo('deprecatedfunction'), 'delete_user_entity')); @@ -81,17 +95,20 @@ function delete_object_entity($guid) { } /** - * Searches for an object based on a complete or partial title or description using full text searching. + * Searches for an object based on a complete or partial title + * or description using full text searching. * * IMPORTANT NOTE: With MySQL's default setup: * 1) $criteria must be 4 or more characters long * 2) If $criteria matches greater than 50% of results NO RESULTS ARE RETURNED! * - * @param string $criteria The partial or full name or username. - * @param int $limit Limit of the search. - * @param int $offset Offset. - * @param string $order_by The order. - * @param boolean $count Whether to return the count of results or just the results. + * @param string $criteria The partial or full name or username. + * @param int $limit Limit of the search. + * @param int $offset Offset. + * @param string $order_by The order. + * @param boolean $count Whether to return the count of results or just the results. + * + * @return int|false * @deprecated 1.7 */ function search_for_object($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) { @@ -115,7 +132,9 @@ function search_for_object($criteria, $limit = 10, $offset = 0, $order_by = "", } else { $query = "SELECT e.* "; } - $query .= "from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where match(o.title,o.description) against ('$criteria') and $access"; + $query .= "from {$CONFIG->dbprefix}entities e + join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid + where match(o.title,o.description) against ('$criteria') and $access"; if (!$count) { $query .= " order by $order_by limit $offset, $limit"; // Add order and limit @@ -132,8 +151,9 @@ function search_for_object($criteria, $limit = 10, $offset = 0, $order_by = "", * Get the sites this object is part of * * @param int $object_guid The object's GUID - * @param int $limit Number of results to return - * @param int $offset Any indexing offset + * @param int $limit Number of results to return + * @param int $offset Any indexing offset + * * @return false|array On success, an array of ElggSites */ function get_object_sites($object_guid, $limit = 10, $offset = 0) { @@ -152,6 +172,13 @@ function get_object_sites($object_guid, $limit = 10, $offset = 0) { /** * Runs unit tests for ElggObject + * + * @param sting $hook unit_test + * @param string $type system + * @param mixed $value Array of tests + * @param mixed $params Params + * + * @return array */ function objects_test($hook, $type, $value, $params) { global $CONFIG; @@ -162,8 +189,15 @@ function objects_test($hook, $type, $value, $params) { /** * Returns a formatted list of objects suitable for injecting into search. + * * @deprecated 1.7 * + * @param sting $hook Hook + * @param string $user user + * @param mixed $returnvalue Previous return value + * @param mixed $tag Search term + * + * @return array */ function search_list_objects_by_name($hook, $user, $returnvalue, $tag) { elgg_deprecated_notice('search_list_objects_by_name was deprecated by new search plugin.', 1.7); @@ -174,14 +208,16 @@ function search_list_objects_by_name($hook, $user, $returnvalue, $tag) { $object = get_input('object'); if (!get_input('offset') && (empty($object) || $object == 'user')) { - if ($users = search_for_user($tag,$threshold)) { - $countusers = search_for_user($tag,0,0,"",true); + if ($users = search_for_user($tag, $threshold)) { + $countusers = search_for_user($tag, 0, 0, "", true); - $return = elgg_view('user/search/startblurb',array('count' => $countusers, 'tag' => $tag)); - foreach($users as $user) { + $return = elgg_view('user/search/startblurb', array('count' => $countusers, 'tag' => $tag)); + foreach ($users as $user) { $return .= elgg_view_entity($user); } - $return .= elgg_view('user/search/finishblurb',array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag)); + $return .= elgg_view('user/search/finishblurb', + array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag)); + return $return; } @@ -189,4 +225,4 @@ function search_list_objects_by_name($hook, $user, $returnvalue, $tag) { } register_elgg_event_handler('init', 'system', 'objects_init', 0); -register_plugin_hook('unit_test', 'system', 'objects_test'); +register_plugin_hook('unit_test', 'system', 'objects_test');
\ No newline at end of file diff --git a/engine/lib/opendd.php b/engine/lib/opendd.php index f3f9f017d..d856806f5 100644 --- a/engine/lib/opendd.php +++ b/engine/lib/opendd.php @@ -2,8 +2,8 @@ /** * OpenDD PHP Library. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage ODD * @version 0.4 */ @@ -11,21 +11,22 @@ * Attempt to construct an ODD object out of a XmlElement or sub-elements. * * @param XmlElement $element The element(s) + * * @return mixed An ODD object if the element can be handled, or false. */ -function ODD_factory(XmlElement $element) { +function ODD_factory (XmlElement $element) { $name = $element->name; $odd = false; switch ($name) { case 'entity' : - $odd = new ODDEntity("","",""); + $odd = new ODDEntity("", "", ""); break; case 'metadata' : - $odd = new ODDMetaData("","","",""); + $odd = new ODDMetaData("", "", "", ""); break; case 'relationship' : - $odd = new ODDRelationship("","",""); + $odd = new ODDRelationship("", "", ""); break; } @@ -33,15 +34,15 @@ function ODD_factory(XmlElement $element) { if ($odd) { // Attributes foreach ($element->attributes as $k => $v) { - $odd->setAttribute($k,$v); + $odd->setAttribute($k, $v); } // Body $body = $element->content; $a = stripos($body, "<![CDATA"); $b = strripos($body, "]]>"); - if (($body) && ($a!==false) && ($b!==false)) { - $body = substr($body, $a+8, $b-($a+8)); + if (($body) && ($a !== false) && ($b !== false)) { + $body = substr($body, $a + 8, $b - ($a + 8)); } $odd->setBody($body); @@ -54,6 +55,7 @@ function ODD_factory(XmlElement $element) { * Import an ODD document. * * @param string $xml The XML ODD. + * * @return ODDDocument */ function ODD_Import($xml) { @@ -92,7 +94,8 @@ function ODD_Import($xml) { * Export an ODD Document. * * @param ODDDocument $document The Document. - * @param ODDWrapperFactory $wrapper Optional wrapper permitting the export process to embed ODD in other document formats. + * + * @return string */ function ODD_Export(ODDDocument $document) { return "$document"; diff --git a/engine/lib/output.php b/engine/lib/output.php index b4311787a..6fd820486 100644 --- a/engine/lib/output.php +++ b/engine/lib/output.php @@ -11,6 +11,7 @@ * Takes a string and turns any URLs into formatted links * * @param string $text The input string + * * @return string The output stirng with formatted links **/ function parse_urls($text) { @@ -44,8 +45,10 @@ function parse_urls($text) { * Create paragraphs from text with line spacing * Borrowed from Wordpress. * - * @param string $pee - * @param bool $br + * @param string $pee The string + * @param bool $br Add BRs? + * + * @todo Rewrite * @return string **/ function autop($pee, $br = 1) { @@ -93,8 +96,9 @@ function autop($pee, $br = 1) { * If no spaces are found (like in Japanese) will crop off at the * n char mark. Adds ... if any text was chopped. * - * @param string $text - * @param int $num_chars Return a string up to $num_chars long + * @param string $text The full text to excerpt + * @param int $num_chars Return a string up to $num_chars long + * * @return string * @since 1.7.2 */ @@ -126,7 +130,8 @@ function elgg_get_excerpt($text, $num_chars = 250) { /** * Handles formatting of ampersands in urls * - * @param string $url + * @param string $url The URL + * * @return string * @since 1.7.1 */ @@ -138,6 +143,7 @@ function elgg_format_url($url) { * When given a title, returns a version suitable for inclusion in a URL * * @param string $title The title + * * @return string The optimised title * @deprecated 1.8 */ @@ -150,6 +156,7 @@ function friendly_title($title) { * When given a title, returns a version suitable for inclusion in a URL * * @param string $title The title + * * @return string The optimised title * @since 1.7.2 */ @@ -163,9 +170,9 @@ function elgg_get_friendly_title($title) { } //$title = iconv('UTF-8', 'ASCII//TRANSLIT', $title); - $title = preg_replace("/[^\w ]/","",$title); - $title = str_replace(" ","-",$title); - $title = str_replace("--","-",$title); + $title = preg_replace("/[^\w ]/", "", $title); + $title = str_replace(" ", "-", $title); + $title = str_replace("--", "-", $title); $title = trim($title); $title = strtolower($title); return $title; @@ -175,6 +182,7 @@ function elgg_get_friendly_title($title) { * Displays a UNIX timestamp in a friendly way (eg "less than a minute ago") * * @param int $time A UNIX epoch timestamp + * * @return string The friendly time * @deprecated 1.8 */ @@ -187,8 +195,9 @@ function friendly_time($time) { * Formats a UNIX timestamp in a friendly way (eg "less than a minute ago") * * @see elgg_view_friendly_time() - * + * * @param int $time A UNIX epoch timestamp + * * @return string The friendly time string * @since 1.7.2 */ @@ -251,6 +260,7 @@ function elgg_get_friendly_time($time) { * Original string included in $params['original_string'] * * @param string $string Formatted string + * * @return string String run through strip_tags() and any plugin hooks. */ function elgg_strip_tags($string) { @@ -266,7 +276,9 @@ function elgg_strip_tags($string) { * Filters a string into an array of significant words * * @deprecated 1.8 - * @param string $string + * + * @param string $string A string + * * @return array */ function filter_string($string) { @@ -278,17 +290,22 @@ function filter_string($string) { // Remove links and email addresses // match protocol://address/path/file.extension?some=variable&another=asf% - $string = preg_replace("/\s([a-zA-Z]+:\/\/[a-z][a-z0-9\_\.\-]*[a-z]{2,6}[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu"," ", $string); + $string = preg_replace("/\s([a-zA-Z]+:\/\/[a-z][a-z0-9\_\.\-]*[a-z]{2,6}" + . "[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu", " ", $string); + // match www.something.domain/path/file.extension?some=variable&another=asf% - $string = preg_replace("/\s(www\.[a-z][a-z0-9\_\.\-]*[a-z]{2,6}[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu"," ", $string); + $string = preg_replace("/\s(www\.[a-z][a-z0-9\_\.\-]*[a-z]{2,6}" + . "[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu", " ", $string); + // match name@address - $string = preg_replace("/\s([a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]*\@[a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]{2,6})([\s|\.|\,])/iu"," ", $string); + $string = preg_replace("/\s([a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]" + . "*\@[a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]{2,6})([\s|\.|\,])/iu", " ", $string); // Sanitise the string; remove unwanted characters $string = preg_replace('/\W/ui', ' ', $string); // Explode it into an array - $terms = explode(' ',$string); + $terms = explode(' ', $string); // Remove any blacklist terms //$terms = array_filter($terms, 'remove_blacklist'); @@ -300,7 +317,9 @@ function filter_string($string) { * Returns true if the word in $input is considered significant * * @deprecated 1.8 - * @param string $input + * + * @param string $input A word + * * @return true|false */ function remove_blacklist($input) { @@ -312,7 +331,7 @@ function remove_blacklist($input) { return $input; } - if (strlen($input) < 3 || in_array($input,$CONFIG->wordblacklist)) { + if (strlen($input) < 3 || in_array($input, $CONFIG->wordblacklist)) { return false; } diff --git a/engine/lib/pagehandler.php b/engine/lib/pagehandler.php index 53f68630b..5685ecd9f 100644 --- a/engine/lib/pagehandler.php +++ b/engine/lib/pagehandler.php @@ -2,8 +2,8 @@ /** * Elgg page handler functions * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Routing */ /** @@ -12,7 +12,8 @@ * If a page handler returns FALSE, the request is handed over to the default_page_handler. * * @param string $handler The name of the handler type (eg 'blog') - * @param array $page The parameters to the page, as an array (exploded by '/' slashes) + * @param array $page The parameters to the page, as an array (exploded by '/' slashes) + * * @return true|false Depending on whether a registered page handler was found */ function page_handler($handler, $page) { @@ -20,7 +21,7 @@ function page_handler($handler, $page) { set_context($handler); - $page = explode('/',$page); + $page = explode('/', $page); // remove empty array element when page url ends in a / (see #1480) if ($page[count($page) - 1] === '') { array_pop($page); @@ -52,7 +53,7 @@ function page_handler($handler, $page) { * Registers a page handler for a particular identifier * * For example, you can register a function called 'blog_page_handler' for handler type 'blog' - * Now for all URLs of type http://yoururl/pg/blog/*, the blog_page_handler() function will be called. + * For all URLs http://yoururl/pg/blog/*, the blog_page_handler() function will be called. * The part of the URL marked with * above will be exploded on '/' characters and passed as an * array to that function. * For example, the URL http://yoururl/blog/username/friends/ would result in the call: @@ -66,8 +67,9 @@ function page_handler($handler, $page) { * The context is set to the page handler identifier before the registered * page handler function is called. For the above example, the context is set to 'blog'. * - * @param string $handler The page type to handle + * @param string $handler The page type to handle * @param string $function Your function name + * * @return true|false Depending on success */ function register_page_handler($handler, $function) { @@ -87,13 +89,15 @@ function register_page_handler($handler, $function) { * Unregister a page handler for an identifier * * Note: to replace a page handler, call register_page_handler() - * + * * @param string $handler The page type identifier + * * @since 1.7.2 + * @return void */ function unregister_page_handler($handler) { global $CONFIG; - + if (!isset($CONFIG->pagehandler)) { return; } @@ -105,8 +109,9 @@ function unregister_page_handler($handler) { * A default page handler * Tries to locate a suitable file to include. Only works for core pages, not plugins. * - * @param array $page The page URL elements + * @param array $page The page URL elements * @param string $handler The base handler + * * @return true|false Depending on success */ function default_page_handler($page, $handler) { @@ -116,7 +121,7 @@ function default_page_handler($page, $handler) { // protect against including arbitary files $page = str_replace("..", "", $page); - + $callpath = $CONFIG->path . $handler . "/" . $page; if (is_dir($callpath)) { $callpath = sanitise_filepath($callpath); diff --git a/engine/lib/pageowner.php b/engine/lib/pageowner.php index fb2e6255a..6b0ef491f 100644 --- a/engine/lib/pageowner.php +++ b/engine/lib/pageowner.php @@ -3,14 +3,15 @@ * Elgg page owner library * Contains functions for managing page ownership and context * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage PageOwner */ - /** * Gets the guid of the entity that owns the current page. + * * @param int $guid Optional parameter used by elgg_set_page_owner_guid(). + * * @return int The current page owner guid (0 if none). * @since 1.8 */ @@ -33,7 +34,11 @@ function elgg_get_page_owner_guid($guid = 0) { } /** + * Gets the guid of the entity that owns the current page. + * * @deprecated 1.8 Use get_page_owner_guid() + * + * @return int The current page owner guid (0 if none). */ function page_owner() { elgg_deprecated_notice('page_owner() was deprecated by elgg_get_page_owner_guid().', 1.8); @@ -42,7 +47,9 @@ function page_owner() { /** * Gets the owner entity for the current page. + * * @return ElggEntity|false The current page owner or false if none. + * * @since 1.8 */ function elgg_get_page_owner() { @@ -55,7 +62,12 @@ function elgg_get_page_owner() { } /** + * Gets the owner entity for the current page. + * * @deprecated 1.8 Use elgg_get_page_owner() + * @return ElggEntity|false The current page owner or false if none. + * + * @since 1.8 */ function page_owner_entity() { elgg_deprecated_notice('page_owner_entity() was deprecated by elgg_get_page_owner().', 1.8); @@ -64,8 +76,11 @@ function page_owner_entity() { /** * Set the guid of the entity that owns this page - * @param int $guid + * + * @param int $guid The guid of the page owner + * * @since 1.8 + * @return void */ function elgg_set_page_owner_guid($guid) { elgg_get_page_owner_guid($guid); @@ -73,14 +88,24 @@ function elgg_set_page_owner_guid($guid) { /** + * Registers a page owner handler function + * + * @param string $functionname The callback function + * * @deprecated 1.8 Use the 'page_owner', 'system' plugin hook + * @return void */ function add_page_owner_handler($functionname) { elgg_deprecated_notice("add_page_owner_handler() was deprecated by the plugin hook 'page_owner', 'system'.", 1.8); } /** + * Set a page owner entity + * + * @param int $entitytoset The GUID of the entity + * * @deprecated 1.8 Use elgg_set_page_owner_guid() + * @return void */ function set_page_owner($entitytoset = -1) { elgg_deprecated_notice('set_page_owner() was deprecated by elgg_set_page_owner_guid().', 1.8); @@ -91,6 +116,7 @@ function set_page_owner($entitytoset = -1) { * Sets the functional context of a page * * @param string $context The context of the page + * * @return string|false Either the context string, or false on failure */ function set_context($context) { @@ -121,12 +147,22 @@ function get_context() { return "main"; } +/** + * Handles default page owners + * + * @param string $hook page_owner + * @param string $entity_type system + * @param mixed $returnvalue Previous function's return value + * @param mixed $params Params + * + * @return int + */ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params) { if ($returnvalue) { return $returnvalue; } - + $username = get_input("username"); if ($username) { if (substr_count($username, 'group:')) { @@ -152,6 +188,11 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params) return $returnvalue; } +/** + * Loads the page owner functions + * + * @return void + */ function page_owner_init() { register_plugin_hook('page_owner', 'system', 'default_page_owner_handler'); } diff --git a/engine/lib/pam.php b/engine/lib/pam.php index e0bb0cf21..21cfdbbb9 100644 --- a/engine/lib/pam.php +++ b/engine/lib/pam.php @@ -2,20 +2,20 @@ /** * Elgg Simple PAM library * Contains functions for managing authentication. - * This is not a full implementation of PAM. It supports a single facility + * This is not a full implementation of PAM. It supports a single facility * (authentication) and allows multiple policies (user authentication is the - * default). There are two control flags possible for each module: sufficient - * or required. The entire chain for a policy is processed (or until a - * required module fails). A module fails by returning false or throwing an - * exception. The order that modules are processed is determined by the order - * they are registered. For an example of a PAM, see pam_auth_userpass() in + * default). There are two control flags possible for each module: sufficient + * or required. The entire chain for a policy is processed (or until a + * required module fails). A module fails by returning false or throwing an + * exception. The order that modules are processed is determined by the order + * they are registered. For an example of a PAM, see pam_auth_userpass() in * sessions.php. - * + * * For more information on PAMs see: * http://www.freebsd.org/doc/en/articles/pam/index.html * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Authentication.PAM */ $_PAM_HANDLERS = array(); @@ -24,10 +24,11 @@ $_PAM_HANDLERS_MSG = array(); /** * Register a PAM handler. * - * @param string $handler The handler function in the format - * pam_handler($credentials = NULL); + * @param string $handler The handler function in the format + * pam_handler($credentials = NULL); * @param string $importance The importance - "sufficient" (default) or "required" - * @param string $policy - the policy type, default is "user" + * @param string $policy The policy type, default is "user" + * * @return boolean */ function register_pam_handler($handler, $importance = "sufficient", $policy = "user") { @@ -37,7 +38,7 @@ function register_pam_handler($handler, $importance = "sufficient", $policy = "u if (!isset($_PAM_HANDLERS[$policy])) { $_PAM_HANDLERS[$policy] = array(); } - + if (is_callable($handler)) { $_PAM_HANDLERS[$policy][$handler] = new stdClass; @@ -54,7 +55,9 @@ function register_pam_handler($handler, $importance = "sufficient", $policy = "u * Unregisters a PAM handler. * * @param string $handler The PAM handler function name - * @param string $policy - the policy type, default is "user" + * @param string $policy The policy type, default is "user" + * + * @return void * @since 1.7.0 */ function unregister_pam_handler($handler, $policy = "user") { @@ -65,26 +68,27 @@ function unregister_pam_handler($handler, $policy = "user") { /** * Attempt to authenticate. - * This function will process all registered PAM handlers or stop when the first - * handler fails. A handler fails by either returning false or throwing an + * This function will process all registered PAM handlers or stop when the first + * handler fails. A handler fails by either returning false or throwing an * exception. The advantage of throwing an exception is that it returns a message - * through the global $_PAM_HANDLERS_MSG which can be used in communication with + * through the global $_PAM_HANDLERS_MSG which can be used in communication with * a user. The order that handlers are processed is determined by the order that * they were registered. * - * If $credentials are provided the PAM handler should authenticate using the - * provided credentials, if not then credentials should be prompted for or + * If $credentials are provided the PAM handler should authenticate using the + * provided credentials, if not then credentials should be prompted for or * otherwise retrieved (eg from the HTTP header or $_SESSION). * - * @param mixed $credentials Mixed PAM handler specific credentials (e.g. username, password) - * @param string $policy - the policy type, default is "user" + * @param mixed $credentials Mixed PAM handler specific credentials (e.g. username, password) + * @param string $policy The policy type, default is "user" + * * @return bool true if authenticated, false if not. */ function pam_authenticate($credentials = NULL, $policy = "user") { global $_PAM_HANDLERS, $_PAM_HANDLERS_MSG; $_PAM_HANDLERS_MSG = array(); - + $authenticated = false; foreach ($_PAM_HANDLERS[$policy] as $k => $v) { diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php index e6a0132d6..e75a2993c 100644 --- a/engine/lib/plugins.php +++ b/engine/lib/plugins.php @@ -3,8 +3,8 @@ * Elgg plugins library * Contains functions for managing plugins * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Plugins */ /// Cache enabled plugins per page @@ -62,6 +62,7 @@ function get_plugin_list() { * elgg_filepath_cache_reset(); * * @param array $pluginorder Optionally, a list of existing plugins and their orders + * * @return array The new list of plugins and their orders */ function regenerate_plugin_list($pluginorder = FALSE) { @@ -83,10 +84,11 @@ function regenerate_plugin_list($pluginorder = FALSE) { $max = 0; if (sizeof($pluginorder)) { - foreach($pluginorder as $key => $plugin) { + foreach ($pluginorder as $key => $plugin) { if (is_dir($CONFIG->pluginspath . "/" . $plugin)) { - if ($key > $max) + if ($key > $max) { $max = $key; + } } else { unset($pluginorder[$key]); } @@ -111,7 +113,7 @@ function regenerate_plugin_list($pluginorder = FALSE) { $key = 10; $plugins = array(); if (sizeof($pluginorder)) { - foreach($pluginorder as $plugin) { + foreach ($pluginorder as $plugin) { $plugins[$key] = $plugin; $key = $key + 10; } @@ -131,9 +133,10 @@ function regenerate_plugin_list($pluginorder = FALSE) { /** * For now, loads plugins directly * - * @todo Add proper plugin handler that launches plugins in an admin-defined order and activates them on admin request - * @package Elgg - * @subpackage Core + * @todo Add proper plugin handler that launches plugins in an + * admin-defined order and activates them on admin request + * + * @return void */ function load_plugins() { global $CONFIG; @@ -153,7 +156,7 @@ function load_plugins() { $plugins = get_plugin_list(); if (sizeof($plugins)) { - foreach($plugins as $mod) { + foreach ($plugins as $mod) { if (is_plugin_enabled($mod)) { if (file_exists($CONFIG->pluginspath . $mod)) { if (!include($CONFIG->pluginspath . $mod . "/start.php")) { @@ -189,7 +192,7 @@ function load_plugins() { if (is_dir($CONFIG->pluginspath . $mod . "/languages")) { register_translations($CONFIG->pluginspath . $mod . "/languages/"); } - + if (is_dir($CONFIG->pluginspath . "$mod/classes")) { elgg_register_classes($CONFIG->pluginspath . "$mod/classes"); } @@ -206,34 +209,37 @@ function load_plugins() { } /** - * Get the name of the most recent plugin to be called in the call stack (or the plugin that owns the current page, if any). + * Get the name of the most recent plugin to be called in the + * call stack (or the plugin that owns the current page, if any). * * i.e., if the last plugin was in /mod/foobar/, get_plugin_name would return foo_bar. * - * @param boolean $mainfilename If set to true, this will instead determine the context from the main script filename called by the browser. Default = false. + * @param boolean $mainfilename If set to true, this will instead determine the + * context from the main script filename called by + * the browser. Default = false. + * * @return string|false Plugin name, or false if no plugin name was called */ function get_plugin_name($mainfilename = false) { if (!$mainfilename) { if ($backtrace = debug_backtrace()) { - foreach($backtrace as $step) { + foreach ($backtrace as $step) { $file = $step['file']; - $file = str_replace("\\","/",$file); - $file = str_replace("//","/",$file); - if (preg_match("/mod\/([a-zA-Z0-9\-\_]*)\/start\.php$/",$file,$matches)) { + $file = str_replace("\\", "/", $file); + $file = str_replace("//", "/", $file); + if (preg_match("/mod\/([a-zA-Z0-9\-\_]*)\/start\.php$/", $file, $matches)) { return $matches[1]; } } } } else { - //if (substr_count($file,'handlers/pagehandler')) { - if (preg_match("/pg\/([a-zA-Z0-9\-\_]*)\//",$_SERVER['REQUEST_URI'],$matches)) { + if (preg_match("/pg\/([a-zA-Z0-9\-\_]*)\//", $_SERVER['REQUEST_URI'], $matches)) { return $matches[1]; } else { $file = $_SERVER["SCRIPT_NAME"]; - $file = str_replace("\\","/",$file); - $file = str_replace("//","/",$file); - if (preg_match("/mod\/([a-zA-Z0-9\-\_]*)\//",$file,$matches)) { + $file = str_replace("\\", "/", $file); + $file = str_replace("//", "/", $file); + if (preg_match("/mod\/([a-zA-Z0-9\-\_]*)\//", $file, $matches)) { return $matches[1]; } } @@ -263,12 +269,13 @@ function get_plugin_name($mainfilename = false) { * </plugin_manifest> * * @param string $plugin Plugin name. + * * @return array of values */ function load_plugin_manifest($plugin) { global $CONFIG; - $xml = xml_to_object(file_get_contents($CONFIG->pluginspath . $plugin. "/manifest.xml")); + $xml = xml_to_object(file_get_contents($CONFIG->pluginspath . $plugin . "/manifest.xml")); if ($xml) { // set up some defaults to normalize expected values to arrays @@ -308,7 +315,9 @@ function load_plugin_manifest($plugin) { /** * This function checks a plugin manifest 'elgg_version' value against the current install * returning TRUE if the elgg_version is >= the current install's version. - * @param $manifest_elgg_version_string The build version (eg 2009010201). + * + * @param string $manifest_elgg_version_string The build version (eg 2009010201). + * * @return bool */ function check_plugin_compatibility($manifest_elgg_version_string) { @@ -327,8 +336,10 @@ function check_plugin_compatibility($manifest_elgg_version_string) { /** * Shorthand function for finding the plugin settings. * - * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you - * are calling from. + * @param string $plugin_name Optional plugin name, if not specified + * then it is detected from where you are calling from. + * + * @return mixed */ function find_plugin_settings($plugin_name = "") { $options = array('type' => 'object', 'subtype' => 'plugin', 'limit' => 9999); @@ -340,7 +351,7 @@ function find_plugin_settings($plugin_name = "") { if ($plugins) { foreach ($plugins as $plugin) { - if (strcmp($plugin->title, $plugin_name)==0) { + if (strcmp($plugin->title, $plugin_name) == 0) { return $plugin; } } @@ -353,7 +364,8 @@ function find_plugin_settings($plugin_name = "") { * Find the plugin settings for a user. * * @param string $plugin_name Plugin name. - * @param int $user_guid The guid who's settings to retrieve. + * @param int $user_guid The guid who's settings to retrieve. + * * @return array of settings in an associative array minus prefix. */ function find_plugin_usersettings($plugin_name = "", $user_guid = 0) { @@ -392,10 +404,13 @@ function find_plugin_usersettings($plugin_name = "", $user_guid = 0) { /** * Set a user specific setting for a plugin. * - * @param string $name The name - note, can't be "title". - * @param mixed $value The value. - * @param int $user_guid Optional user. - * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you are calling from. + * @param string $name The name - note, can't be "title". + * @param mixed $value The value. + * @param int $user_guid Optional user. + * @param string $plugin_name Optional plugin name, if not specified then it + * is detected from where you are calling from. + * + * @return bool */ function set_plugin_usersetting($name, $value, $user_guid = 0, $plugin_name = "") { $plugin_name = sanitise_string($plugin_name); @@ -433,12 +448,13 @@ function set_plugin_usersetting($name, $value, $user_guid = 0, $plugin_name = "" /** * Clears a user-specific plugin setting * - * @param str $name Name of the plugin setting - * @param int $user_guid Defaults to logged in user + * @param str $name Name of the plugin setting + * @param int $user_guid Defaults to logged in user * @param str $plugin_name Defaults to contextual plugin name + * * @return bool Success */ -function clear_plugin_usersetting($name, $user_guid=0, $plugin_name='') { +function clear_plugin_usersetting($name, $user_guid = 0, $plugin_name = '') { $plugin_name = sanitise_string($plugin_name); $name = sanitise_string($name); @@ -463,8 +479,12 @@ function clear_plugin_usersetting($name, $user_guid=0, $plugin_name='') { /** * Get a user specific setting for a plugin. * - * @param string $name The name. - * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you are calling from. + * @param string $name The name. + * @param int $user_guid Guid of owning user + * @param string $plugin_name Optional plugin name, if not specified + * then it is detected from where you are calling from. + * + * @return mixed */ function get_plugin_usersetting($name, $user_guid = 0, $plugin_name = "") { $plugin_name = sanitise_string($plugin_name); @@ -482,7 +502,7 @@ function get_plugin_usersetting($name, $user_guid = 0, $plugin_name = "") { if (($user) && ($user instanceof ElggUser)) { $prefix = "plugin:settings:$plugin_name:$name"; - return get_private_setting($user->guid, $prefix); //$user->$prefix; + return get_private_setting($user->guid, $prefix); } return false; @@ -491,9 +511,12 @@ function get_plugin_usersetting($name, $user_guid = 0, $plugin_name = "") { /** * Set a setting for a plugin. * - * @param string $name The name - note, can't be "title". - * @param mixed $value The value. - * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you are calling from. + * @param string $name The name - note, can't be "title". + * @param mixed $value The value. + * @param string $plugin_name Optional plugin name, if not specified + * then it is detected from where you are calling from. + * + * @return int|false */ function set_plugin_setting($name, $value, $plugin_name = "") { if (!$plugin_name) { @@ -505,7 +528,7 @@ function set_plugin_setting($name, $value, $plugin_name = "") { $plugin = new ElggPlugin(); } - if ($name!='title') { + if ($name != 'title') { // Hook to validate setting $value = trigger_plugin_hook('plugin:setting', 'plugin', array( 'plugin' => $plugin_name, @@ -527,8 +550,11 @@ function set_plugin_setting($name, $value, $plugin_name = "") { /** * Get setting for a plugin. * - * @param string $name The name. - * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you are calling from. + * @param string $name The name. + * @param string $plugin_name Optional plugin name, if not specified + * then it is detected from where you are calling from. + * + * @return mixed */ function get_plugin_setting($name, $plugin_name = "") { $plugin = find_plugin_settings($plugin_name); @@ -543,8 +569,11 @@ function get_plugin_setting($name, $plugin_name = "") { /** * Clear a plugin setting. * - * @param string $name The name. - * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you are calling from. + * @param string $name The name. + * @param string $plugin_name Optional plugin name, if not specified + * then it is detected from where you are calling from. + * + * @return bool */ function clear_plugin_setting($name, $plugin_name = "") { $plugin = find_plugin_settings($plugin_name); @@ -559,7 +588,10 @@ function clear_plugin_setting($name, $plugin_name = "") { /** * Clear all plugin settings. * - * @param string $plugin_name Optional plugin name, if not specified then it is detected from where you are calling from. + * @param string $plugin_name Optional plugin name, if not specified + * then it is detected from where you are calling from. + * + * @return bool * @since 1.7.0 */ function clear_all_plugin_settings($plugin_name = "") { @@ -574,6 +606,8 @@ function clear_all_plugin_settings($plugin_name = "") { /** * Return an array of installed plugins. + * + * @return array */ function get_installed_plugins() { global $CONFIG; @@ -583,7 +617,7 @@ function get_installed_plugins() { if (!empty($CONFIG->pluginspath)) { $plugins = get_plugin_list(); - foreach($plugins as $mod) { + foreach ($plugins as $mod) { // require manifest. if (!$manifest = load_plugin_manifest($mod)) { continue; @@ -606,8 +640,11 @@ function get_installed_plugins() { * elgg_view_regenerate_simplecache(); * elgg_filepath_cache_reset(); * - * @param string $plugin The plugin name. - * @param int $site_guid The site id, if not specified then this is detected. + * @param string $plugin The plugin name. + * @param int $site_guid The site id, if not specified then this is detected. + * + * @return array + * @throws InvalidClassException */ function enable_plugin($plugin, $site_guid = 0) { global $CONFIG, $ENABLED_PLUGINS_CACHE; @@ -620,7 +657,8 @@ function enable_plugin($plugin, $site_guid = 0) { $site = get_entity($site_guid); if (!($site instanceof ElggSite)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite")); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite"); + throw new InvalidClassException($msg); } if (!$plugin_info = load_plugin_manifest($plugin)) { @@ -642,7 +680,8 @@ function enable_plugin($plugin, $site_guid = 0) { if ($return = $site->setMetaData('enabled_plugins', $enabled)) { // for other plugins that want to hook into this. - if ($return && !trigger_elgg_event('enable', 'plugin', array('plugin' => $plugin, 'manifest' => $plugin_info))) { + $params = array('plugin' => $plugin, 'manifest' => $plugin_info); + if ($return && !trigger_elgg_event('enable', 'plugin', $params)) { $return = FALSE; } @@ -688,8 +727,11 @@ function enable_plugin($plugin, $site_guid = 0) { * elgg_view_regenerate_simplecache(); * elgg_filepath_cache_reset(); * - * @param string $plugin The plugin name. - * @param int $site_guid The site id, if not specified then this is detected. + * @param string $plugin The plugin name. + * @param int $site_guid The site id, if not specified then this is detected. + * + * @return bool + * @throws InvalidClassException */ function disable_plugin($plugin, $site_guid = 0) { global $CONFIG, $ENABLED_PLUGINS_CACHE; @@ -702,7 +744,8 @@ function disable_plugin($plugin, $site_guid = 0) { $site = get_entity($site_guid); if (!($site instanceof ElggSite)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite")); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite"); + throw new InvalidClassException(); } if (!$plugin_info = load_plugin_manifest($plugin)) { @@ -731,7 +774,8 @@ function disable_plugin($plugin, $site_guid = 0) { if ($return) { // for other plugins that want to hook into this. - if ($return && !trigger_elgg_event('disable', 'plugin', array('plugin' => $plugin, 'manifest' => $plugin_info))) { + $params = array('plugin' => $plugin, 'manifest' => $plugin_info); + if ($return && !trigger_elgg_event('disable', 'plugin', $params)) { $return = FALSE; } @@ -761,9 +805,11 @@ function disable_plugin($plugin, $site_guid = 0) { /** * Return whether a plugin is enabled or not. * - * @param string $plugin The plugin name. - * @param int $site_guid The site id, if not specified then this is detected. + * @param string $plugin The plugin name. + * @param int $site_guid The site id, if not specified then this is detected. + * * @return bool + * @throws InvalidClassException */ function is_plugin_enabled($plugin, $site_guid = 0) { global $CONFIG, $ENABLED_PLUGINS_CACHE; @@ -780,7 +826,8 @@ function is_plugin_enabled($plugin, $site_guid = 0) { if (!$ENABLED_PLUGINS_CACHE) { $site = get_entity($site_guid); if (!($site instanceof ElggSite)) { - throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite")); + $msg = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite"); + throw new InvalidClassException($msg); } $enabled_plugins = $site->enabled_plugins; @@ -800,7 +847,9 @@ function is_plugin_enabled($plugin, $site_guid = 0) { } /** - * Run once and only once. + * Register object, plugin entities as ElggPlugin classes + * + * @return void */ function plugin_run_once() { // Register a class @@ -810,6 +859,8 @@ function plugin_run_once() { /** * Initialise the file modules. * Listens to system boot and registers any appropriate file types and classes + * + * @return void */ function plugin_init() { // Now run this stuff, but only once @@ -819,13 +870,13 @@ function plugin_init() { register_action("plugins/settings/save", false, "", true); register_action("plugins/usersettings/save"); - register_action('admin/plugins/enable', false, "", true); // Enable - register_action('admin/plugins/disable', false, "", true); // Disable - register_action('admin/plugins/enableall', false, "", true); // Enable all - register_action('admin/plugins/disableall', false, "", true); // Disable all + register_action('admin/plugins/enable', false, "", true); + register_action('admin/plugins/disable', false, "", true); + register_action('admin/plugins/enableall', false, "", true); + register_action('admin/plugins/disableall', false, "", true); - register_action('admin/plugins/reorder', false, "", true); // Reorder + register_action('admin/plugins/reorder', false, "", true); } // Register a startup event -register_elgg_event_handler('init','system','plugin_init'); +register_elgg_event_handler('init', 'system', 'plugin_init'); diff --git a/engine/lib/relationships.php b/engine/lib/relationships.php index 3a3b8c4c0..6c43b1757 100644 --- a/engine/lib/relationships.php +++ b/engine/lib/relationships.php @@ -3,14 +3,15 @@ * Elgg relationships. * Stub containing relationship functions, making import and export easier. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage DataModel.Relationship */ /** * Convert a database row to a new ElggRelationship * - * @param stdClass $row + * @param stdClass $row Database row from the relationship table + * * @return stdClass or ElggMetadata */ function row_to_elggrelationship($row) { @@ -24,20 +25,25 @@ function row_to_elggrelationship($row) { /** * Return a relationship. * - * @param int $id + * @param int $id The ID of a relationship + * + * @return mixed */ function get_relationship($id) { global $CONFIG; $id = (int)$id; - return row_to_elggrelationship(get_data_row("SELECT * from {$CONFIG->dbprefix}entity_relationships where id=$id")); + $query = "SELECT * from {$CONFIG->dbprefix}entity_relationships where id=$id"; + return row_to_elggrelationship(get_data_row($query)); } /** * Delete a specific relationship. * - * @param int $id + * @param int $id The relationship ID + * + * @return bool */ function delete_relationship($id) { global $CONFIG; @@ -59,9 +65,11 @@ function delete_relationship($id) { * * This function lets you make the statement "$guid_one is a $relationship of $guid_two". * - * @param int $guid_one - * @param string $relationship - * @param int $guid_two + * @param int $guid_one First GUID + * @param string $relationship Relationship name + * @param int $guid_two Second GUID + * + * @return bool */ function add_entity_relationship($guid_one, $relationship, $guid_two) { global $CONFIG; @@ -76,11 +84,11 @@ function add_entity_relationship($guid_one, $relationship, $guid_two) { return false; } - $result = insert_data("INSERT into {$CONFIG->dbprefix}entity_relationships + $result = insert_data("INSERT into {$CONFIG->dbprefix}entity_relationships (guid_one, relationship, guid_two, time_created) values ($guid_one, '$relationship', $guid_two, $time)"); - if ($result!==false) { + if ($result !== false) { $obj = get_relationship($result); if (trigger_elgg_event('create', $relationship, $obj)) { return true; @@ -93,11 +101,13 @@ function add_entity_relationship($guid_one, $relationship, $guid_two) { } /** - * Determine whether or not a relationship between two entities exists and returns the relationship object if it does + * Determine if a relationship between two entities exists + * and returns the relationship object if it does * - * @param int $guid_one The GUID of the entity "owning" the relationship + * @param int $guid_one The GUID of the entity "owning" the relationship * @param string $relationship The type of relationship - * @param int $guid_two The GUID of the entity the relationship is with + * @param int $guid_two The GUID of the entity the relationship is with + * * @return object|false Depending on success */ function check_entity_relationship($guid_one, $relationship, $guid_two) { @@ -107,7 +117,13 @@ function check_entity_relationship($guid_one, $relationship, $guid_two) { $relationship = sanitise_string($relationship); $guid_two = (int)$guid_two; - if ($row = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entity_relationships WHERE guid_one=$guid_one AND relationship='$relationship' AND guid_two=$guid_two limit 1")) { + $query = "SELECT * FROM {$CONFIG->dbprefix}entity_relationships + WHERE guid_one=$guid_one + AND relationship='$relationship' + AND guid_two=$guid_two limit 1"; + + $row = $row = get_data_row($query); + if ($row) { return $row; } @@ -117,9 +133,11 @@ function check_entity_relationship($guid_one, $relationship, $guid_two) { /** * Remove an arbitrary relationship between two entities. * - * @param int $guid_one - * @param string $relationship - * @param int $guid_two + * @param int $guid_one First GUID + * @param string $relationship Relationship name + * @param int $guid_two Second GUID + * + * @return bool */ function remove_entity_relationship($guid_one, $relationship, $guid_two) { global $CONFIG; @@ -134,7 +152,12 @@ function remove_entity_relationship($guid_one, $relationship, $guid_two) { } if (trigger_elgg_event('delete', $relationship, $obj)) { - return delete_data("DELETE from {$CONFIG->dbprefix}entity_relationships where guid_one=$guid_one and relationship='$relationship' and guid_two=$guid_two"); + $query = "DELETE from {$CONFIG->dbprefix}entity_relationships + where guid_one=$guid_one + and relationship='$relationship' + and guid_two=$guid_two"; + + return delete_data($query); } else { return false; } @@ -143,11 +166,12 @@ function remove_entity_relationship($guid_one, $relationship, $guid_two) { /** * Removes all arbitrary relationships originating from a particular entity * - * @param int $guid_one The GUID of the entity - * @param string $relationship The name of the relationship (optionally) - * @param true|false $inverse Whether we're deleting inverse relationships (default false) - * @param string $type The type of entity to limit this relationship delete to (defaults to all) - * @return true|false Depending on success + * @param int $guid_one The GUID of the entity + * @param string $relationship The name of the relationship (optional) + * @param bool $inverse Whether we're deleting inverse relationships (default false) + * @param string $type The type of entity to the delete to (defaults to all) + * + * @return bool Depending on success */ function remove_entity_relationships($guid_one, $relationship = "", $inverse = false, $type = '') { global $CONFIG; @@ -175,10 +199,16 @@ function remove_entity_relationships($guid_one, $relationship = "", $inverse = f } if (!$inverse) { - $sql = "DELETE er from {$CONFIG->dbprefix}entity_relationships as er {$join} where guid_one={$guid_one} {$where}"; + $sql = "DELETE er from {$CONFIG->dbprefix}entity_relationships as er + {$join} + where guid_one={$guid_one} {$where}"; + return delete_data($sql); } else { - $sql = "DELETE er from {$CONFIG->dbprefix}entity_relationships as er {$join} where guid_two={$guid_one} {$where}"; + $sql = "DELETE er from {$CONFIG->dbprefix}entity_relationships as er + {$join} where + guid_two={$guid_one} {$where}"; + return delete_data($sql); } } @@ -186,7 +216,10 @@ function remove_entity_relationships($guid_one, $relationship = "", $inverse = f /** * Get all the relationships for a given guid. * - * @param int $guid + * @param int $guid The GUID of the relationship owner + * @param bool $inverse_relationship Inverse relationship owners? + * + * @return mixed */ function get_entity_relationships($guid, $inverse_relationship = FALSE) { global $CONFIG; @@ -255,13 +288,17 @@ function elgg_get_entities_from_relationship($options) { * * @todo add support for multiple relationships and guids. * - * @param $table Entities table name - * @param $relationship relationship string - * @param $entity_guid entity guid to check + * @param string $table Entities table name + * @param string $relationship Relationship string + * @param int $relationship_guid Entity guid to check + * @param string $inverse_relationship Inverse relationship check? + * * @return mixed * @since 1.7.0 */ -function elgg_get_entity_relationship_where_sql($table, $relationship = NULL, $relationship_guid = NULL, $inverse_relationship = FALSE) { +function elgg_get_entity_relationship_where_sql($table, $relationship = NULL, +$relationship_guid = NULL, $inverse_relationship = FALSE) { + if ($relationship == NULL && $entity_guid == NULL) { return ''; } @@ -273,10 +310,8 @@ function elgg_get_entity_relationship_where_sql($table, $relationship = NULL, $r if ($inverse_relationship) { $joins[] = "JOIN {$CONFIG->dbprefix}entity_relationships r on r.guid_one = e.guid"; - //$wheres[] = "{$table}.guid = {$CONFIG->dbprefix}entity_relationships.guid_two"; } else { $joins[] = "JOIN {$CONFIG->dbprefix}entity_relationships r on r.guid_two = e.guid"; - //$wheres[] = "{$table}.guid = {$CONFIG->dbprefix}entity_relationships.guid_one"; } if ($relationship) { @@ -291,7 +326,7 @@ function elgg_get_entity_relationship_where_sql($table, $relationship = NULL, $r } } - if ($where_str = implode(' AND ' , $wheres)) { + if ($where_str = implode(' AND ', $wheres)) { return array('wheres' => array("($where_str)"), 'joins' => $joins); } @@ -300,23 +335,27 @@ function elgg_get_entity_relationship_where_sql($table, $relationship = NULL, $r } /** - * @deprecated 1.7. Use elgg_get_entities_from_relationship(). - * @param $relationship - * @param $relationship_guid - * @param $inverse_relationship - * @param $type - * @param $subtype - * @param $owner_guid - * @param $order_by - * @param $limit - * @param $offset - * @param $count - * @param $site_guid - * @return unknown_type + * Return entities from relationships + * + * @deprecated 1.7 Use elgg_get_entities_from_relationship() + * + * @param string $relationship The relationship type + * @param int $relationship_guid The GUID of the relationship owner + * @param bool $inverse_relationship Invert relationship? + * @param string $type Entity type + * @param string $subtype Entity subtype + * @param int $owner_guid Entity owner GUID + * @param string $order_by Order by clause + * @param int $limit Limit + * @param int $offset Offset + * @param bool $count Return a count instead of entities? + * @param int $site_guid Site GUID + * + * @return mixed */ -function get_entities_from_relationship($relationship, $relationship_guid, $inverse_relationship = false, -$type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, -$count = false, $site_guid = 0) { +function get_entities_from_relationship($relationship, $relationship_guid, +$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0, +$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) { elgg_deprecated_notice('get_entities_from_relationship() was deprecated by elgg_get_entities_from_relationship()!', 1.7); @@ -364,57 +403,67 @@ $count = false, $site_guid = 0) { * * @see elgg_view_entity_list * - * @param string $relationship The relationship eg "friends_of" - * @param int $relationship_guid The guid of the entity to use query - * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of" - * @param string $type The type of entity (eg 'object') - * @param string $subtype The entity subtype - * @param int $owner_guid The owner (default: all) - * @param int $limit The number of entities to display on a page - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view - * @param true|false $pagination Whether to display pagination (default: true) + * @param string $relationship The relationship eg "friends_of" + * @param int $relationship_guid The guid of the entity to use query + * @param bool $inverse_relationship Invert relationship owner + * @param string $type The type of entity (eg 'object') + * @param string $subtype The entity subtype + * @param int $owner_guid The owner (default: all) + * @param int $limit The number of entities to display on a page + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow gallery view + * @param bool $pagination Whether to display pagination (default: true) + * * @return string The viewable list of entities */ -function list_entities_from_relationship($relationship, $relationship_guid, $inverse_relationship = false, $type = ELGG_ENTITIES_ANY_VALUE, $subtype = ELGG_ENTITIES_ANY_VALUE, $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $pagination = true) { +function list_entities_from_relationship($relationship, $relationship_guid, +$inverse_relationship = false, $type = ELGG_ENTITIES_ANY_VALUE, +$subtype = ELGG_ENTITIES_ANY_VALUE, $owner_guid = 0, $limit = 10, +$fullview = true, $viewtypetoggle = false, $pagination = true) { + $limit = (int) $limit; $offset = (int) get_input('offset'); $options = array( - 'relationship' => $relationship, - 'relationship_guid' => $relationship_guid, - 'inverse_relationship' => $inverse_relationship, - 'types' => $type, - 'subtypes' => $subtype, - 'owner_guid' => $owner_guid, - 'order_by' => '', - 'limit' => $limit, - 'offset' => $offset, + 'relationship' => $relationship, + 'relationship_guid' => $relationship_guid, + 'inverse_relationship' => $inverse_relationship, + 'types' => $type, + 'subtypes' => $subtype, + 'owner_guid' => $owner_guid, + 'order_by' => '', + 'limit' => $limit, + 'offset' => $offset, 'count' => TRUE ); $count = elgg_get_entities_from_relationship($options); $options['count'] = FALSE; $entities = elgg_get_entities_from_relationship($options); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, + $fullview, $viewtypetoggle, $pagination); } /** * Gets the number of entities by a the number of entities related to them in a particular way. - * This is a good way to get out the users with the most friends, or the groups with the most members. - * - * @param string $relationship The relationship eg "friends_of" - * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of" (default: true) - * @param string $type The type of entity (default: all) - * @param string $subtype The entity subtype (default: all) - * @param int $owner_guid The owner of the entities (default: none) - * @param int $limit - * @param int $offset - * @param boolean $count Set to true if you want to count the number of entities instead (default false) - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * This is a good way to get out the users with the most friends, or the groups with the + * most members. + * + * @param string $relationship The relationship eg "friends_of" + * @param bool $inverse_relationship Inverse relationship owners + * @param string $type The type of entity (default: all) + * @param string $subtype The entity subtype (default: all) + * @param int $owner_guid The owner of the entities (default: none) + * @param int $limit Limit + * @param int $offset Offset + * @param bool $count Return a count instead of entities + * @param int $site_guid Site GUID + * * @return array|int|false An array of entities, or the number of entities, or false on failure */ -function get_entities_by_relationship_count($relationship, $inverse_relationship = true, $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) { +function get_entities_by_relationship_count($relationship, $inverse_relationship = true, $type = "", +$subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) { + global $CONFIG; $relationship = sanitise_string($relationship); @@ -436,7 +485,7 @@ function get_entities_by_relationship_count($relationship, $inverse_relationship $where = array(); - if ($relationship!="") { + if ($relationship != "") { $where[] = "r.relationship='$relationship'"; } @@ -467,18 +516,19 @@ function get_entities_by_relationship_count($relationship, $inverse_relationship $query = "SELECT e.*, count(e.guid) as total "; } - $query .= " from {$CONFIG->dbprefix}entity_relationships r JOIN {$CONFIG->dbprefix}entities e on {$on} where "; + $query .= " from {$CONFIG->dbprefix}entity_relationships r + JOIN {$CONFIG->dbprefix}entities e on {$on} where "; if (!empty($where)) { foreach ($where as $w) { $query .= " $w and "; } } - $query .= get_access_sql_suffix("e"); // Add access controls + $query .= get_access_sql_suffix("e"); if (!$count) { $query .= " group by e.guid "; - $query .= " order by total desc limit {$offset}, {$limit}"; // Add order and limit + $query .= " order by total desc limit {$offset}, {$limit}"; return get_data($query, "entity_row_to_elggstar"); } else { if ($count = get_data_row($query)) { @@ -492,46 +542,56 @@ function get_entities_by_relationship_count($relationship, $inverse_relationship /** * Displays a human-readable list of entities * - * @param string $relationship The relationship eg "friends_of" - * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of" (default: true) - * @param string $type The type of entity (eg 'object') - * @param string $subtype The entity subtype - * @param int $owner_guid The owner (default: all) - * @param int $limit The number of entities to display on a page - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view - * @param true|false $pagination Whether to display pagination (default: true) + * @param string $relationship The relationship eg "friends_of" + * @param bool $inverse_relationship Inverse relationship owners + * @param string $type The type of entity (eg 'object') + * @param string $subtype The entity subtype + * @param int $owner_guid The owner (default: all) + * @param int $limit The number of entities to display on a page + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow gallery view + * @param bool $pagination Whether to display pagination (default: true) + * * @return string The viewable list of entities */ -function list_entities_by_relationship_count($relationship, $inverse_relationship = true, $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $pagination = true) { +function list_entities_by_relationship_count($relationship, $inverse_relationship = true, +$type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, +$viewtypetoggle = false, $pagination = true) { + $limit = (int) $limit; $offset = (int) get_input('offset'); - $count = get_entities_by_relationship_count($relationship,$inverse_relationship,$type,$subtype,$owner_guid,0,0,true); - $entities = get_entities_by_relationship_count($relationship,$inverse_relationship,$type,$subtype,$owner_guid,$limit,$offset); + $count = get_entities_by_relationship_count($relationship, $inverse_relationship, + $type, $subtype, $owner_guid, 0, 0, true); + $entities = get_entities_by_relationship_count($relationship, $inverse_relationship, + $type, $subtype, $owner_guid, $limit, $offset); return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); } /** - * Gets the number of entities by a the number of entities related to them in a particular way also constrained by - * metadata - * - * @param string $relationship The relationship eg "friends_of" - * @param int $relationship_guid The guid of the entity to use query - * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of" (default: true) - * @param String $meta_name The metadata name - * @param String $meta_value The metadata value - * @param string $type The type of entity (default: all) - * @param string $subtype The entity subtype (default: all) - * @param int $owner_guid The owner of the entities (default: none) - * @param int $limit - * @param int $offset - * @param boolean $count Set to true if you want to count the number of entities instead (default false) - * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites. + * Gets the number of entities by a the number of entities related to + * them in a particular way also constrained by metadata + * + * @param string $relationship The relationship eg "friends_of" + * @param int $relationship_guid The guid of the entity to use query + * @param bool $inverse_relationship Inverse relationship owner + * @param String $meta_name The metadata name + * @param String $meta_value The metadata value + * @param string $type The type of entity (default: all) + * @param string $subtype The entity subtype (default: all) + * @param int $owner_guid The owner of the entities (default: none) + * @param int $limit Limit + * @param int $offset Offset + * @param bool $count Return a count instead of entities + * @param int $site_guid Site GUID + * * @return array|int|false An array of entities, or the number of entities, or false on failure */ -function get_entities_from_relationships_and_meta($relationship, $relationship_guid, $inverse_relationship = false, $meta_name = "", $meta_value = "", $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) { +function get_entities_from_relationships_and_meta($relationship, $relationship_guid, +$inverse_relationship = false, $meta_name = "", $meta_value = "", $type = "", +$subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) { + elgg_deprecated_notice('get_entities_from_relationship_and_meta() was deprecated by elgg_get_entities_from_relationship()!', 1.7); $options = array(); @@ -552,7 +612,7 @@ function get_entities_from_relationships_and_meta($relationship, $relationship_g $options['types'] = $type; } - if (subtype) { + if ($subtype) { $options['subtypes'] = $subtype; } @@ -586,9 +646,10 @@ function get_entities_from_relationships_and_meta($relationship, $relationship_g /** * Sets the URL handler for a particular relationship type * - * @param string $function_name The function to register + * @param string $function_name The function to register * @param string $relationship_type The relationship type. - * @return true|false Depending on success + * + * @return bool Depending on success */ function register_relationship_url_handler($function_name, $relationship_type = "all") { global $CONFIG; @@ -609,8 +670,9 @@ function register_relationship_url_handler($function_name, $relationship_type = /** * Get the url for a given relationship. * - * @param unknown_type $id - * @return unknown + * @param int $id Relationship ID + * + * @return string */ function get_relationship_url($id) { global $CONFIG; @@ -650,16 +712,18 @@ function get_relationship_url($id) { } /**** HELPER FUNCTIONS FOR RELATIONSHIPS OF TYPE 'ATTACHED' ****/ +// @todo what is this? /** * Function to determine if the object trying to attach to other, has already done so + * * @param int $guid_one This is the target object * @param int $guid_two This is the object trying to attach to $guid_one - * @return true | false + * + * @return bool **/ - -function already_attached($guid_one, $guid_two){ - if ($attached = check_entity_relationship($guid_one, "attached", $guid_two)){ +function already_attached($guid_one, $guid_two) { + if ($attached = check_entity_relationship($guid_one, "attached", $guid_two)) { return true; } else { return false; @@ -668,37 +732,53 @@ function already_attached($guid_one, $guid_two){ /** * Function to get all objects attached to a particular object - * @param int $guid - * @param string $type - the type of object to return e.g. 'file', 'friend_of' etc + * + * @param int $guid Entity GUID + * @param string $type The type of object to return e.g. 'file', 'friend_of' etc + * * @return an array of objects **/ - -function get_attachments($guid, $type=""){ - $attached = elgg_get_entities_from_relationship(array('relationship' => 'attached', 'relationship_guid' => $guid, 'inverse_relationship' => $inverse_relationship = false, 'types' => $type, 'subtypes' => '', 'owner_guid' => 0, 'order_by' => 'time_created desc', 'limit' => 10, 'offset' => 0, 'count' => false, 'site_guid' => 0)); +function get_attachments($guid, $type = "") { + $options = array( + 'relationship' => 'attached', + 'relationship_guid' => $guid, + 'inverse_relationship' => false, + 'types' => $type, + 'subtypes' => '', + 'owner_guid' => 0, + 'order_by' => 'time_created desc', + 'limit' => 10, + 'offset' => 0, + 'count' => false, + 'site_guid' => 0 + ); + $attached = elgg_get_entities_from_relationship($options); return $attached; } /** * Function to remove a particular attachment between two objects + * * @param int $guid_one This is the target object * @param int $guid_two This is the object to remove from $guid_one - * @return a view + * + * @return void **/ - -function remove_attachment($guid_one, $guid_two){ - if(already_attached($guid_one, $guid_two)) { +function remove_attachment($guid_one, $guid_two) { + if (already_attached($guid_one, $guid_two)) { remove_entity_relationship($guid_one, "attached", $guid_two); } } /** * Function to start the process of attaching one object to another + * * @param int $guid_one This is the target object * @param int $guid_two This is the object trying to attach to $guid_one - * @return a view + * + * @return true|void **/ - -function make_attachment($guid_one, $guid_two){ +function make_attachment($guid_one, $guid_two) { if (!(already_attached($guid_one, $guid_two))) { if (add_entity_relationship($guid_one, "attached", $guid_two)) { return true; @@ -707,7 +787,15 @@ function make_attachment($guid_one, $guid_two){ } /** - * Handler called by trigger_plugin_hook on the "import" event. + * Handler called by trigger_plugin_hook on the "import" event. + * + * @param string $hook import + * @param string $entity_type all + * @param mixed $returnvalue Value from previous hook + * @param mixed $params Array of params + * + * @return mixed + * */ function import_relationship_plugin_hook($hook, $entity_type, $returnvalue, $params) { $element = $params['element']; @@ -723,7 +811,15 @@ function import_relationship_plugin_hook($hook, $entity_type, $returnvalue, $par } /** - * Handler called by trigger_plugin_hook on the "export" event. + * Handler called by trigger_plugin_hook on the "export" event. + * + * @param string $hook export + * @param string $entity_type all + * @param mixed $returnvalue Previous hook return value + * @param array $params Parameters + * + * @elgg_event_handler export all + * @return mixed */ function export_relationship_plugin_hook($hook, $entity_type, $returnvalue, $params) { global $CONFIG; @@ -753,9 +849,11 @@ function export_relationship_plugin_hook($hook, $entity_type, $returnvalue, $par /** * An event listener which will notify users based on certain events. * - * @param unknown_type $event - * @param unknown_type $object_type - * @param unknown_type $object + * @param string $event Event name + * @param string $object_type Object type + * @param mixed $object Object + * + * @return bool */ function relationship_notification_hook($event, $object_type, $object) { global $CONFIG; @@ -764,13 +862,13 @@ function relationship_notification_hook($event, $object_type, $object) { ($object instanceof ElggRelationship) && ($event == 'create') && ($object_type == 'friend') - ) - { + ) { $user_one = get_entity($object->guid_one); $user_two = get_entity($object->guid_two); // Notify target user - return notify_user($object->guid_two, $object->guid_one, sprintf(elgg_echo('friend:newfriend:subject'), $user_one->name), + return notify_user($object->guid_two, $object->guid_one, + sprintf(elgg_echo('friend:newfriend:subject'), $user_one->name), sprintf(elgg_echo("friend:newfriend:body"), $user_one->name, $user_one->getURL()) ); } @@ -783,4 +881,4 @@ register_plugin_hook("import", "all", "import_relationship_plugin_hook", 3); register_plugin_hook("export", "all", "export_relationship_plugin_hook", 3); /** Register event to listen to some events **/ -register_elgg_event_handler('create','friend','relationship_notification_hook'); +register_elgg_event_handler('create', 'friend', 'relationship_notification_hook'); diff --git a/engine/lib/river.php b/engine/lib/river.php index fefd56ef2..ad069d5cf 100644 --- a/engine/lib/river.php +++ b/engine/lib/river.php @@ -3,22 +3,26 @@ * Elgg river 2.0. * Functions for listening for and generating the river separately from the system log. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage SocialModel.River */ /** * Adds an item to the river. * - * @param string $view The view that will handle the river item (must exist) - * @param string $action_type An arbitrary one-word string to define the action (eg 'comment', 'create') - * @param int $subject_guid The GUID of the entity doing the action - * @param int $object_guid The GUID of the entity being acted upon - * @param int $access_id The access ID of the river item (default: same as the object) - * @param int $posted The UNIX epoch timestamp of the river item (default: now) - * @return true|false Depending on success + * @param string $view The view that will handle the river item (must exist) + * @param string $action_type An arbitrary string to define the action (eg 'comment', 'create') + * @param int $subject_guid The GUID of the entity doing the action + * @param int $object_guid The GUID of the entity being acted upon + * @param int $access_id The access ID of the river item (default: same as the object) + * @param int $posted The UNIX epoch timestamp of the river item (default: now) + * @param int $annotation_id The annotation ID associated with this river entry + * + * @return bool Depending on success */ -function add_to_river($view,$action_type,$subject_guid,$object_guid,$access_id = "",$posted = 0, $annotation_id = 0) { +function add_to_river($view, $action_type, $subject_guid, $object_guid, $access_id = "", +$posted = 0, $annotation_id = 0) { + // use default viewtype for when called from REST api if (!elgg_view_exists($view, 'default')) { return false; @@ -59,7 +63,7 @@ function add_to_river($view,$action_type,$subject_guid,$object_guid,$access_id = " posted = {$posted} "); //update the entities which had the action carried out on it - if($insert_data){ + if ($insert_data) { update_entity_last_action($object_guid, $posted); return $insert_data; } @@ -69,7 +73,8 @@ function add_to_river($view,$action_type,$subject_guid,$object_guid,$access_id = * Removes all items relating to a particular acting entity from the river * * @param int $subject_guid The GUID of the entity - * @return true|false Depending on success + * + * @return bool Depending on success */ function remove_from_river_by_subject($subject_guid) { // Sanitise @@ -86,7 +91,8 @@ function remove_from_river_by_subject($subject_guid) { * Removes all items relating to a particular entity being acted upon from the river * * @param int $object_guid The GUID of the entity - * @return true|false Depending on success + * + * @return bool Depending on success */ function remove_from_river_by_object($object_guid) { // Sanitise @@ -102,8 +108,9 @@ function remove_from_river_by_object($object_guid) { /** * Removes all items relating to a particular annotation being acted upon from the river * - * @param int annotation_id The ID of the annotation - * @return true|false Depending on success + * @param int $annotation_id The ID of the annotation + * + * @return bool Depending on success * @since 1.7.0 */ function remove_from_river_by_annotation($annotation_id) { @@ -121,7 +128,8 @@ function remove_from_river_by_annotation($annotation_id) { * Removes a single river entry * * @param int $id The ID of the river entry - * @return true|false Depending on success + * + * @return bool Depending on success * @since 1.7.2 */ function remove_from_river_by_id($id) { @@ -137,8 +145,9 @@ function remove_from_river_by_id($id) { * Sets the access ID on river items for a particular object * * @param int $object_guid The GUID of the entity - * @param int $access_id The access ID - * @return true|false Depending on success + * @param int $access_id The access ID + * + * @return bool Depending on success */ function update_river_access_by_object($object_guid, $access_id) { // Sanitise @@ -149,28 +158,35 @@ function update_river_access_by_object($object_guid, $access_id) { global $CONFIG; // Remove - return update_data("update {$CONFIG->dbprefix}river set access_id = {$access_id} where object_guid = {$object_guid}"); + $query = "update {$CONFIG->dbprefix}river + set access_id = {$access_id} + where object_guid = {$object_guid}"; + return update_data($query); } /** * Retrieves items from the river. All parameters are optional. * - * @param int|array $subject_guid Acting entity to restrict to. Default: all - * @param int|array $object_guid Entity being acted on to restrict to. Default: all - * @param string $subject_relationship If set to a relationship type, this will use - * $subject_guid as the starting point and set the subjects to be all users this - * entity has this relationship with (eg 'friend'). Default: blank - * @param string $type The type of entity to restrict to. Default: all - * @param string $subtype The subtype of entity to restrict to. Default: all - * @param string $action_type The type of river action to restrict to. Default: all - * @param int $limit The number of items to retrieve. Default: 20 - * @param int $offset The page offset. Default: 0 - * @param int $posted_min The minimum time period to look at. Default: none - * @param int $posted_max The maximum time period to look at. Default: none + * @param int|array $subject_guid Acting entity to restrict to. Default: all + * @param int|array $object_guid Entity being acted on to restrict to. Default: all + * @param string $subject_relationship If set to a relationship type, this will use + * $subject_guid as the starting point and set the + * subjects to be all users this + * entity has this relationship with (eg 'friend'). + * Default: blank + * @param string $type The type of entity to restrict to. Default: all + * @param string $subtype The subtype of entity to restrict to. Default: all + * @param string $action_type The type of river action to restrict to. Default: all + * @param int $limit The number of items to retrieve. Default: 20 + * @param int $offset The page offset. Default: 0 + * @param int $posted_min The minimum time period to look at. Default: none + * @param int $posted_max The maximum time period to look at. Default: none + * * @return array|false Depending on success */ -function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '', $type = '', - $subtype = '', $action_type = '', $limit = 20, $offset = 0, $posted_min = 0, $posted_max = 0) { +function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '', +$type = '', $subtype = '', $action_type = '', $limit = 20, $offset = 0, $posted_min = 0, +$posted_max = 0) { // Get config global $CONFIG; @@ -179,14 +195,14 @@ function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relations if (!is_array($subject_guid)) { $subject_guid = (int) $subject_guid; } else { - foreach($subject_guid as $key => $temp) { + foreach ($subject_guid as $key => $temp) { $subject_guid[$key] = (int) $temp; } } if (!is_array($object_guid)) { $object_guid = (int) $object_guid; } else { - foreach($object_guid as $key => $temp) { + foreach ($object_guid as $key => $temp) { $object_guid[$key] = (int) $temp; } } @@ -207,40 +223,41 @@ function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relations // Construct 'where' clauses for the river $where = array(); // river table does not have columns expected by get_access_sql_suffix so we modify its output - $where[] = str_replace("and enabled='yes'",'',str_replace('owner_guid','subject_guid',get_access_sql_suffix())); + $where[] = str_replace("and enabled='yes'", '', + str_replace('owner_guid', 'subject_guid', get_access_sql_suffix())); if (empty($subject_relationship)) { if (!empty($subject_guid)) { if (!is_array($subject_guid)) { $where[] = " subject_guid = {$subject_guid} "; } else { - $where[] = " subject_guid in (" . implode(',',$subject_guid) . ") "; + $where[] = " subject_guid in (" . implode(',', $subject_guid) . ") "; } } } else { if (!is_array($subject_guid)) { - if ($entities = elgg_get_entities_from_relationship(array( + if ($entities = elgg_get_entities_from_relationship(array ( 'relationship' => $subject_relationship, 'relationship_guid' => $subject_guid, 'limit' => 9999)) ) { $guids = array(); - foreach($entities as $entity) { + foreach ($entities as $entity) { $guids[] = (int) $entity->guid; } - // $guids[] = $subject_guid; - $where[] = " subject_guid in (" . implode(',',$guids) . ") "; + $where[] = " subject_guid in (" . implode(',', $guids) . ") "; } else { return array(); } } } - if (!empty($object_guid)) + if (!empty($object_guid)) { if (!is_array($object_guid)) { $where[] = " object_guid = {$object_guid} "; } else { - $where[] = " object_guid in (" . implode(',',$object_guid) . ") "; + $where[] = " object_guid in (" . implode(',', $object_guid) . ") "; } + } if (!empty($type)) { $where[] = " type = '{$type}' "; } @@ -260,8 +277,10 @@ function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relations $whereclause = implode(' and ', $where); // Construct main SQL - $sql = "select id,type,subtype,action_type,access_id,view,subject_guid,object_guid,annotation_id,posted" . - " from {$CONFIG->dbprefix}river where {$whereclause} order by posted desc limit {$offset},{$limit}"; + $sql = "select id, type, subtype, action_type, access_id, view, + subject_guid, object_guid, annotation_id, posted + from {$CONFIG->dbprefix}river + where {$whereclause} order by posted desc limit {$offset}, {$limit}"; // Get data return get_data($sql); @@ -270,22 +289,25 @@ function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relations /** * Retrieves items from the river. All parameters are optional. * - * @param int|array $subject_guid Acting entity to restrict to. Default: all - * @param int|array $object_guid Entity being acted on to restrict to. Default: all - * @param string $subject_relationship If set to a relationship type, this will use - * $subject_guid as the starting point and set the subjects to be all users this - * entity has this relationship with (eg 'friend'). Default: blank - * @param string $type The type of entity to restrict to. Default: all - * @param string $subtype The subtype of entity to restrict to. Default: all - * @param string $action_type The type of river action to restrict to. Default: all - * @param int $limit The number of items to retrieve. Default: 20 - * @param int $offset The page offset. Default: 0 - * @param int $posted_min The minimum time period to look at. Default: none - * @param int $posted_max The maximum time period to look at. Default: none + * @param int|array $subject_guid Acting entity to restrict to. Default: all + * @param int|array $object_guid Entity being acted on to restrict to. Default: all + * @param string $subject_relationship If set to a relationship type, this will use + * $subject_guid as the starting point and set the + * subjects to be all users this entity has this + * relationship with (eg 'friend'). Default: blank + * @param string $type The type of entity to restrict to. Default: all + * @param string $subtype The subtype of entity to restrict to. Default: all + * @param string $action_type The type of river action to restrict to. Default: all + * @param int $limit The number of items to retrieve. Default: 20 + * @param int $offset The page offset. Default: 0 + * @param int $posted_min The minimum time period to look at. Default: none + * @param int $posted_max The maximum time period to look at. Default: none + * * @return array|false Depending on success */ -function elgg_get_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '', $type = '', - $subtype = '', $action_type = '', $limit = 10, $offset = 0, $posted_min = 0, $posted_max = 0) { +function elgg_get_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '', +$type = '', $subtype = '', $action_type = '', $limit = 10, $offset = 0, $posted_min = 0, +$posted_max = 0) { // Get config global $CONFIG; @@ -294,14 +316,14 @@ function elgg_get_river_items($subject_guid = 0, $object_guid = 0, $subject_rela if (!is_array($subject_guid)) { $subject_guid = (int) $subject_guid; } else { - foreach($subject_guid as $key => $temp) { + foreach ($subject_guid as $key => $temp) { $subject_guid[$key] = (int) $temp; } } if (!is_array($object_guid)) { $object_guid = (int) $object_guid; } else { - foreach($object_guid as $key => $temp) { + foreach ($object_guid as $key => $temp) { $object_guid[$key] = (int) $temp; } } @@ -322,14 +344,15 @@ function elgg_get_river_items($subject_guid = 0, $object_guid = 0, $subject_rela // Construct 'where' clauses for the river $where = array(); // river table does not have columns expected by get_access_sql_suffix so we modify its output - $where[] = str_replace("and enabled='yes'",'',str_replace('owner_guid','subject_guid',get_access_sql_suffix_new('er','e'))); + $where[] = str_replace("and enabled='yes'", '', + str_replace('owner_guid', 'subject_guid', get_access_sql_suffix_new('er', 'e'))); if (empty($subject_relationship)) { if (!empty($subject_guid)) { if (!is_array($subject_guid)) { $where[] = " subject_guid = {$subject_guid} "; } else { - $where[] = " subject_guid in (" . implode(',',$subject_guid) . ") "; + $where[] = " subject_guid in (" . implode(',', $subject_guid) . ") "; } } } else { @@ -341,22 +364,23 @@ function elgg_get_river_items($subject_guid = 0, $object_guid = 0, $subject_rela )); if (is_array($entities) && !empty($entities)) { $guids = array(); - foreach($entities as $entity) { + foreach ($entities as $entity) { $guids[] = (int) $entity->guid; } // $guids[] = $subject_guid; - $where[] = " subject_guid in (" . implode(',',$guids) . ") "; + $where[] = " subject_guid in (" . implode(',', $guids) . ") "; } else { return array(); } } } - if (!empty($object_guid)) + if (!empty($object_guid)) { if (!is_array($object_guid)) { $where[] = " object_guid = {$object_guid} "; } else { - $where[] = " object_guid in (" . implode(',',$object_guid) . ") "; + $where[] = " object_guid in (" . implode(',', $object_guid) . ") "; } + } if (!empty($type)) { $where[] = " er.type = '{$type}' "; } @@ -379,7 +403,7 @@ function elgg_get_river_items($subject_guid = 0, $object_guid = 0, $subject_rela $sql = "select er.*" . " from {$CONFIG->dbprefix}river er, {$CONFIG->dbprefix}entities e " . " where {$whereclause} AND er.object_guid = e.guid GROUP BY object_guid " . - " ORDER BY e.last_action desc LIMIT {$offset},{$limit}"; + " ORDER BY e.last_action desc LIMIT {$offset}, {$limit}"; // Get data return get_data($sql); @@ -391,6 +415,7 @@ function elgg_get_river_items($subject_guid = 0, $object_guid = 0, $subject_rela * @see get_river_items * * @param stdClass $item A river item object as returned from get_river_items + * * @return string|false Depending on success */ function elgg_view_river_item($item) { @@ -402,12 +427,12 @@ function elgg_view_river_item($item) { return false; } else { if (elgg_view_exists($item->view)) { - $body = elgg_view($item->view,array( + $body = elgg_view($item->view, array( 'item' => $item )); } } - return elgg_view('river/item/wrapper',array( + return elgg_view('river/item/wrapper', array( 'item' => $item, 'body' => $body )); @@ -418,36 +443,43 @@ function elgg_view_river_item($item) { /** * Returns a human-readable version of the river. * - * @param int|array $subject_guid Acting entity to restrict to. Default: all - * @param int|array $object_guid Entity being acted on to restrict to. Default: all - * @param string $subject_relationship If set to a relationship type, this will use - * $subject_guid as the starting point and set the subjects to be all users this - * entity has this relationship with (eg 'friend'). Default: blank - * @param string $type The type of entity to restrict to. Default: all - * @param string $subtype The subtype of entity to restrict to. Default: all - * @param string $action_type The type of river action to restrict to. Default: all - * @param int $limit The number of items to retrieve. Default: 20 - * @param int $posted_min The minimum time period to look at. Default: none - * @param int $posted_max The maximum time period to look at. Default: none + * @param int|array $subject_guid Acting entity to restrict to. Default: all + * @param int|array $object_guid Entity being acted on to restrict to. Default: all + * @param string $subject_relationship If set to a relationship type, this will use + * $subject_guid as the starting point and set + * the subjects to be all users this entity has this + * relationship with (eg 'friend'). Default: blank + * @param string $type The type of entity to restrict to. Default: all + * @param string $subtype The subtype of entity to restrict to. Default: all + * @param string $action_type The type of river action to restrict to. Default: all + * @param int $limit The number of items to retrieve. Default: 20 + * @param int $posted_min The minimum time period to look at. Default: none + * @param int $posted_max The maximum time period to look at. Default: none + * @param bool $pagination Show pagination? + * @param $bool $chronological Show in chronological order? + * * @return string Human-readable river. */ function elgg_view_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '', - $type = '', $subtype = '', $action_type = '', $limit = 20, $posted_min = 0, $posted_max = 0, $pagination = true, $chronological = false) { +$type = '', $subtype = '', $action_type = '', $limit = 20, $posted_min = 0, +$posted_max = 0, $pagination = true, $chronological = false) { // Get input from outside world and sanitise it - $offset = (int) get_input('offset',0); + $offset = (int) get_input('offset', 0); // Get the correct function - if($chronological == true){ - $riveritems = get_river_items($subject_guid,$object_guid,$subject_relationship,$type,$subtype,$action_type,($limit + 1),$offset,$posted_min,$posted_max); - }else{ - $riveritems = elgg_get_river_items($subject_guid,$object_guid,$subject_relationship,$type,$subtype,$action_type,($limit + 1),$offset,$posted_min,$posted_max); + if ($chronological == true) { + $riveritems = get_river_items($subject_guid, $object_guid, $subject_relationship, $type, + $subtype, $action_type, ($limit + 1), $offset, $posted_min, $posted_max); + } else { + $riveritems = elgg_get_river_items($subject_guid, $object_guid, $subject_relationship, $type, + $subtype, $action_type, ($limit + 1), $offset, $posted_min, $posted_max); } // Get river items, if they exist if ($riveritems) { - return elgg_view('river/item/list',array( + return elgg_view('river/item/list', array( 'limit' => $limit, 'offset' => $offset, 'items' => $riveritems, @@ -463,10 +495,14 @@ function elgg_view_river_items($subject_guid = 0, $object_guid = 0, $subject_rel * This function has been added here until we decide if it is going to roll into core or not * Add access restriction sql code to a given query. * Note that if this code is executed in privileged mode it will return blank. + * * @TODO: DELETE once Query classes are fully integrated * - * @param string $table_prefix Optional table. prefix for the access code. - * @param int $owner + * @param string $table_prefix_one Optional table. prefix for the access code. + * @param string $table_prefix_two Another optiona table prefix? + * @param int $owner Owner GUID + * + * @return string */ function get_access_sql_suffix_new($table_prefix_one = '', $table_prefix_two = '', $owner = null) { global $ENTITY_SHOW_HIDDEN_OVERRIDE, $CONFIG; @@ -503,16 +539,19 @@ function get_access_sql_suffix_new($table_prefix_one = '', $table_prefix_two = ' WHERE relationship='friend' AND guid_two=$owner )"; - $friends_bit = '('.$friends_bit.') OR '; + $friends_bit = '(' . $friends_bit . ') OR '; if ((isset($CONFIG->user_block_and_filter_enabled)) && ($CONFIG->user_block_and_filter_enabled)) { // check to see if the user is in the entity owner's block list // or if the entity owner is in the user's filter list // if so, disallow access - $enemies_bit = get_annotation_sql('elgg_block_list', "{$table_prefix_one}owner_guid", $owner, false); + $enemies_bit = get_annotation_sql('elgg_block_list', "{$table_prefix_one}owner_guid", + $owner, false); + $enemies_bit = '(' . $enemies_bit - . ' AND ' . get_annotation_sql('elgg_filter_list', $owner, "{$table_prefix_one}owner_guid", false) + . ' AND ' . get_annotation_sql('elgg_filter_list', $owner, "{$table_prefix_one}owner_guid", + false) . ')'; } } @@ -531,9 +570,11 @@ function get_access_sql_suffix_new($table_prefix_one = '', $table_prefix_two = ' $sql = "$enemies_bit AND ($sql)"; } - if (!$ENTITY_SHOW_HIDDEN_OVERRIDE) + if (!$ENTITY_SHOW_HIDDEN_OVERRIDE) { $sql .= " and {$table_prefix_two}enabled='yes'"; - return '('.$sql.')'; + } + + return '(' . $sql . ')'; } /** @@ -541,15 +582,22 @@ function get_access_sql_suffix_new($table_prefix_one = '', $table_prefix_two = ' * * @deprecated 1.8 * - * @param int $limit Limit the query. - * @param int $offset Execute from the given object - * @param mixed $type A type, or array of types to look for. Note: This is how they appear in the SYSTEM LOG. - * @param mixed $subtype A subtype, or array of types to look for. Note: This is how they appear in the SYSTEM LOG. - * @param mixed $owner_guid The guid or a collection of GUIDs - * @param string $owner_relationship If defined, the relationship between $owner_guid and the entity owner_guid - so "is $owner_guid $owner_relationship with $entity->owner_guid" + * @param int $limit Limit the query. + * @param int $offset Execute from the given object + * @param mixed $type A type, or array of types to look for. + * Note: This is how they appear in the SYSTEM LOG. + * @param mixed $subtype A subtype, or array of types to look for. + * Note: This is how they appear in the SYSTEM LOG. + * @param mixed $owner_guid The guid or a collection of GUIDs + * @param string $owner_relationship If defined, the relationship between $owner_guid and + * the entity owner_guid - so "is $owner_guid $owner_relationship + * with $entity->owner_guid" + * * @return array An array of system log entries. */ -function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype = "", $owner_guid = "", $owner_relationship = "") { +function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype = "", +$owner_guid = "", $owner_relationship = "") { + global $CONFIG; $limit = (int)$limit; @@ -588,14 +636,15 @@ function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype $owner_relationship = sanitise_string($owner_relationship); // Get a list of possible views - $activity_events= array(); - $activity_views = array_merge(elgg_view_tree('activity', 'default'), elgg_view_tree('river', 'default')); // Join activity with river + $activity_events = array(); + $activity_views = array_merge(elgg_view_tree('activity', 'default'), + elgg_view_tree('river', 'default')); $done = array(); foreach ($activity_views as $view) { $fragments = explode('/', $view); - $tmp = explode('/',$view, 2); + $tmp = explode('/', $view, 2); $tmp = $tmp[1]; if ((isset($fragments[0])) && (($fragments[0] == 'river') || ($fragments[0] == 'activity')) @@ -653,7 +702,7 @@ function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype } $access = ""; - if ($details['type']!='relationship') { + if ($details['type'] != 'relationship') { $access = " and " . get_access_sql_suffix('sl'); } @@ -667,7 +716,7 @@ function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype // User if ((count($owner_guid)) && ($owner_guid[0] != 0)) { - $user = " and sl.performed_by_guid in (".implode(',', $owner_guid).")"; + $user = " and sl.performed_by_guid in (" . implode(',', $owner_guid) . ")"; if ($owner_relationship) { $friendsarray = ""; @@ -681,11 +730,11 @@ function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype ) { $friendsarray = array(); - foreach($friends as $friend) { + foreach ($friends as $friend) { $friendsarray[] = $friend->getGUID(); } - $user = " and sl.performed_by_guid in (" . implode(',', $friendsarray).")"; + $user = " and sl.performed_by_guid in (" . implode(',', $friendsarray) . ")"; } } } diff --git a/engine/lib/sessions.php b/engine/lib/sessions.php index e4a3bfc76..887904371 100644 --- a/engine/lib/sessions.php +++ b/engine/lib/sessions.php @@ -4,8 +4,8 @@ * Elgg session management * Functions to manage logins * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Session */ /** Elgg magic session */ @@ -14,8 +14,10 @@ global $SESSION; /** * Return the current logged in user, or NULL if no user is logged in. * - * If no user can be found in the current session, a plugin hook - 'session:get' 'user' to give plugin - * authors another way to provide user details to the ACL system without touching the session. + * If no user can be found in the current session, a plugin + * hook - 'session:get' 'user' to give plugin authors another + * way to provide user details to the ACL system without touching the session. + * * @return ElggUser|NULL */ function get_loggedin_user() { @@ -46,7 +48,7 @@ function get_loggedin_userid() { /** * Returns whether or not the user is currently logged in * - * @return true|false + * @return bool */ function isloggedin() { if (!is_installed()) { @@ -66,7 +68,7 @@ function isloggedin() { * Returns whether or not the user is currently logged in and that they are an admin user. * * @uses isloggedin() - * @return true|false + * @return bool */ function isadminloggedin() { if (!is_installed()) { @@ -84,9 +86,11 @@ function isadminloggedin() { /** * Check if the given user has full access. + * * @todo: Will always return full access if the user is an admin. * - * @param $user_guid + * @param int $user_guid The user to check + * * @return bool * @since 1.7.1 */ @@ -134,8 +138,10 @@ function elgg_is_admin_user($user_guid) { * Returns an ElggUser object for use with login. * * @see login + * * @param string $username The username, optionally (for standard logins) * @param string $password The password, optionally (for standard logins) + * * @return ElggUser|false The authenticated user object, or false on failure. */ @@ -151,8 +157,11 @@ function authenticate($username, $password) { * Hook into the PAM system which accepts a username and password and attempts to authenticate * it against a known user. * - * @param array $credentials Associated array of credentials passed to pam_authenticate. This function expects - * 'username' and 'password' (cleartext). + * @param array $credentials Associated array of credentials passed to + * pam_authenticate. This function expects + * 'username' and 'password' (cleartext). + * + * @return bool */ function pam_auth_userpass($credentials = NULL) { @@ -179,7 +188,8 @@ function pam_auth_userpass($credentials = NULL) { /** * Log a failed login for $user_guid * - * @param $user_guid + * @param int $user_guid User GUID + * * @return bool on success */ function log_login_failure($user_guid) { @@ -201,7 +211,8 @@ function log_login_failure($user_guid) { /** * Resets the fail login count for $user_guid * - * @param $user_guid + * @param int $user_guid User GUID + * * @return bool on success (success = user has no logged failed attempts) */ function reset_login_failure_count($user_guid) { @@ -212,7 +223,7 @@ function reset_login_failure_count($user_guid) { $fails = (int)$user->getPrivateSetting("login_failures"); if ($fails) { - for ($n=1; $n <= $fails; $n++) { + for ($n = 1; $n <= $fails; $n++) { $user->removePrivateSetting("login_failure_$n"); } @@ -231,7 +242,8 @@ function reset_login_failure_count($user_guid) { /** * Checks if the rate limit of failed logins has been exceeded for $user_guid. * - * @param $user_guid + * @param int $user_guid User GUID + * * @return bool on exceeded limit. */ function check_rate_limit_exceeded($user_guid) { @@ -245,13 +257,13 @@ function check_rate_limit_exceeded($user_guid) { if ($fails >= $limit) { $cnt = 0; $time = time(); - for ($n=$fails; $n>0; $n--) { + for ($n = $fails; $n > 0; $n--) { $f = $user->getPrivateSetting("login_failure_$n"); - if ($f > $time - (60*5)) { + if ($f > $time - (60 * 5)) { $cnt++; } - if ($cnt==$limit) { + if ($cnt == $limit) { // Limit reached return true; } @@ -267,9 +279,11 @@ function check_rate_limit_exceeded($user_guid) { * with authenticate. * * @see authenticate - * @param ElggUser $user A valid Elgg user object - * @param boolean $persistent Should this be a persistent login? - * @return true|false Whether login was successful + * + * @param ElggUser $user A valid Elgg user object + * @param boolean $persistent Should this be a persistent login? + * + * @return bool Whether login was successful */ function login(ElggUser $user, $persistent = false) { global $CONFIG; @@ -295,7 +309,7 @@ function login(ElggUser $user, $persistent = false) { $code = (md5($user->name . $user->username . time() . rand())); $_SESSION['code'] = $code; $user->code = md5($code); - setcookie("elggperm", $code, (time()+(86400 * 30)), "/"); + setcookie("elggperm", $code, (time() + (86400 * 30)), "/"); } if (!$user->save() || !trigger_elgg_event('login', 'user', $user)) { @@ -305,7 +319,7 @@ function login(ElggUser $user, $persistent = false) { unset($_SESSION['guid']); unset($_SESSION['id']); unset($_SESSION['user']); - setcookie("elggperm", "", (time()-(86400 * 30)), "/"); + setcookie("elggperm", "", (time() - (86400 * 30)), "/"); return false; } @@ -322,13 +336,13 @@ function login(ElggUser $user, $persistent = false) { /** * Log the current user out * - * @return true|false + * @return bool */ function logout() { global $CONFIG; if (isset($_SESSION['user'])) { - if (!trigger_elgg_event('logout','user',$_SESSION['user'])) { + if (!trigger_elgg_event('logout', 'user', $_SESSION['user'])) { return false; } $_SESSION['user']->code = ""; @@ -342,7 +356,7 @@ function logout() { unset($_SESSION['id']); unset($_SESSION['user']); - setcookie("elggperm", "", (time()-(86400 * 30)),"/"); + setcookie("elggperm", "", (time() - (86400 * 30)), "/"); // pass along any messages $old_msg = $_SESSION['msg']; @@ -362,12 +376,16 @@ function logout() { * This function looks for: * * 1. $_SESSION['id'] - if not present, we're logged out, and this is set to 0 - * 2. The cookie 'elggperm' - if present, checks it for an authentication token, validates it, and potentially logs the user in + * 2. The cookie 'elggperm' - if present, checks it for an authentication + * token, validates it, and potentially logs the user in * * @uses $_SESSION - * @param unknown_type $event - * @param unknown_type $object_type - * @param unknown_type $object + * + * @param string $event Event name + * @param string $object_type Object type + * @param mixed $object Object + * + * @return bool */ function session_init($event, $object_type, $object) { global $DB_PREFIX, $CONFIG; @@ -380,12 +398,12 @@ function session_init($event, $object_type, $object) { // HACK to allow access to prefix after object destruction $DB_PREFIX = $CONFIG->dbprefix; if ((!isset($CONFIG->use_file_sessions))) { - session_set_save_handler("__elgg_session_open", - "__elgg_session_close", - "__elgg_session_read", - "__elgg_session_write", - "__elgg_session_destroy", - "__elgg_session_gc"); + session_set_save_handler("_elgg_session_open", + "_elgg_session_close", + "_elgg_session_read", + "_elgg_session_write", + "_elgg_session_destroy", + "_elgg_session_gc"); } session_name('Elgg'); @@ -393,7 +411,7 @@ function session_init($event, $object_type, $object) { // Generate a simple token (private from potentially public session id) if (!isset($_SESSION['__elgg_session'])) { - $_SESSION['__elgg_session'] = md5(microtime().rand()); + $_SESSION['__elgg_session'] = md5(microtime() . rand()); } // test whether we have a user session @@ -438,7 +456,7 @@ function session_init($event, $object_type, $object) { set_last_action($_SESSION['guid']); } - register_action("login",true); + register_action("login", true); register_action("logout"); // Register a default PAM handler @@ -463,6 +481,7 @@ function session_init($event, $object_type, $object) { /** * Used at the top of a page to mark it as logged in users only. * + * @return void */ function gatekeeper() { if (!isloggedin()) { @@ -475,6 +494,7 @@ function gatekeeper() { /** * Used at the top of a page to mark it as logged in admin or siteadmin only. * + * @return void */ function admin_gatekeeper() { gatekeeper(); @@ -487,9 +507,15 @@ function admin_gatekeeper() { } /** - * DB Based session handling code. + * Handles opening a session in the DB + * + * @param string $save_path The path to save the sessions + * @param string $session_name The name of the session + * + * @return true + * @todo Document */ -function __elgg_session_open($save_path, $session_name) { +function _elgg_session_open($save_path, $session_name) { global $sess_save_path; $sess_save_path = $save_path; @@ -497,16 +523,25 @@ function __elgg_session_open($save_path, $session_name) { } /** - * DB Based session handling code. + * Closes a session + * + * @todo implement + * @todo document + * + * @return true */ -function __elgg_session_close() { +function _elgg_session_close() { return true; } /** - * DB Based session handling code. + * Read the session data from DB failing back to file. + * + * @param string $id The session ID + * + * @return string */ -function __elgg_session_read($id) { +function _elgg_session_read($id) { global $DB_PREFIX; $id = sanitise_string($id); @@ -532,9 +567,14 @@ function __elgg_session_read($id) { } /** - * DB Based session handling code. + * Write session data to the DB falling back to file. + * + * @param string $id The session ID + * @param mixed $sess_data Session data + * + * @return bool */ -function __elgg_session_write($id, $sess_data) { +function _elgg_session_write($id, $sess_data) { global $DB_PREFIX; $id = sanitise_string($id); @@ -547,7 +587,7 @@ function __elgg_session_write($id, $sess_data) { (session, ts, data) VALUES ('$id', '$time', '$sess_data_sanitised')"; - if (insert_data($q)!==false) { + if (insert_data($q) !== false) { return true; } } catch (DatabaseException $e) { @@ -567,9 +607,13 @@ function __elgg_session_write($id, $sess_data) { } /** - * DB Based session handling code. + * Destroy a DB session, falling back to file. + * + * @param string $id Session ID + * + * @return bool */ -function __elgg_session_destroy($id) { +function _elgg_session_destroy($id) { global $DB_PREFIX; $id = sanitise_string($id); @@ -589,17 +633,22 @@ function __elgg_session_destroy($id) { } /** - * DB Based session handling code. + * Perform garbage collection on session table / files + * + * @param int $maxlifetime Max age of a session + * + * @return bool */ -function __elgg_session_gc($maxlifetime) { +function _elgg_session_gc($maxlifetime) { global $DB_PREFIX; - $life = time()-$maxlifetime; + $life = time() - $maxlifetime; try { return (bool)delete_data("DELETE from {$DB_PREFIX}users_sessions where ts<'$life'"); } catch (DatabaseException $e) { - // Fall back to file store in this case, since this likely means that the database hasn't been upgraded + // Fall back to file store in this case, since this likely means that the database + // hasn't been upgraded global $sess_save_path; foreach (glob("$sess_save_path/sess_*") as $filename) { @@ -612,4 +661,4 @@ function __elgg_session_gc($maxlifetime) { return true; } -register_elgg_event_handler("boot","system","session_init",20); +register_elgg_event_handler("boot", "system", "session_init", 20); diff --git a/engine/lib/sites.php b/engine/lib/sites.php index 378a2cfe1..d5984a75f 100644 --- a/engine/lib/sites.php +++ b/engine/lib/sites.php @@ -3,14 +3,16 @@ * Elgg sites * Functions to manage multiple or single sites in an Elgg install * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage DataModel.Site */ /** * Return the site specific details of a site by a row. * - * @param int $guid + * @param int $guid The site GUID + * + * @return mixed */ function get_site_entity_as_row($guid) { global $CONFIG; @@ -23,10 +25,12 @@ function get_site_entity_as_row($guid) { * Create or update the extras table for a given site. * Call create_entity first. * - * @param int $guid - * @param string $name - * @param string $description - * @param string $url + * @param int $guid Site GUID + * @param string $name Site name + * @param string $description Site Description + * @param string $url URL of the site + * + * @return bool */ function create_site_entity($guid, $name, $description, $url) { global $CONFIG; @@ -40,12 +44,16 @@ function create_site_entity($guid, $name, $description, $url) { if ($row) { // Exists and you have access to it - if ($exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}sites_entity where guid = {$guid}")) { - $result = update_data("UPDATE {$CONFIG->dbprefix}sites_entity set name='$name', description='$description', url='$url' where guid=$guid"); - if ($result!=false) { + $query = "SELECT guid from {$CONFIG->dbprefix}sites_entity where guid = {$guid}"; + if ($exists = get_data_row($query)) { + $query = "UPDATE {$CONFIG->dbprefix}sites_entity + set name='$name', description='$description', url='$url' where guid=$guid"; + $result = update_data($query); + + if ($result != false) { // Update succeeded, continue $entity = get_entity($guid); - if (trigger_elgg_event('update',$entity->type,$entity)) { + if (trigger_elgg_event('update', $entity->type, $entity)) { return $guid; } else { $entity->delete(); @@ -54,10 +62,13 @@ function create_site_entity($guid, $name, $description, $url) { } } else { // Update failed, attempt an insert. - $result = insert_data("INSERT into {$CONFIG->dbprefix}sites_entity (guid, name, description, url) values ($guid, '$name','$description','$url')"); - if ($result!==false) { + $query = "INSERT into {$CONFIG->dbprefix}sites_entity + (guid, name, description, url) values ($guid, '$name', '$description', '$url')"; + $result = insert_data($query); + + if ($result !== false) { $entity = get_entity($guid); - if (trigger_elgg_event('create',$entity->type,$entity)) { + if (trigger_elgg_event('create', $entity->type, $entity)) { return $guid; } else { $entity->delete(); @@ -74,8 +85,13 @@ function create_site_entity($guid, $name, $description, $url) { * THIS FUNCTION IS DEPRECATED. * * Delete a site's extra data. + * * @todo remove - * @param int $guid + * + * @param int $guid Site guid + * + * @deprecated 1.5 Or so? + * @return 1 */ function delete_site_entity($guid) { system_message(sprintf(elgg_echo('deprecatedfunction'), 'delete_user_entity')); @@ -86,8 +102,10 @@ function delete_site_entity($guid) { /** * Add a user to a site. * - * @param int $site_guid - * @param int $user_guid + * @param int $site_guid Site guid + * @param int $user_guid User guid + * + * @return bool */ function add_site_user($site_guid, $user_guid) { global $CONFIG; @@ -101,8 +119,10 @@ function add_site_user($site_guid, $user_guid) { /** * Remove a user from a site. * - * @param int $site_guid - * @param int $user_guid + * @param int $site_guid Site GUID + * @param int $user_guid User GUID + * + * @return bool */ function remove_site_user($site_guid, $user_guid) { $site_guid = (int)$site_guid; @@ -114,9 +134,11 @@ function remove_site_user($site_guid, $user_guid) { /** * Get the members of a site. * - * @param int $site_guid - * @param int $limit - * @param int $offset + * @param int $site_guid Site GUID + * @param int $limit User GUID + * @param int $offset Offset + * + * @return mixed */ function get_site_members($site_guid, $limit = 10, $offset = 0) { $site_guid = (int)$site_guid; @@ -124,10 +146,10 @@ function get_site_members($site_guid, $limit = 10, $offset = 0) { $offset = (int)$offset; return elgg_get_entities_from_relationship(array( - 'relationship' => 'member_of_site', - 'relationship_guid' => $site_guid, - 'inverse_relationship' => TRUE, - 'types' => 'user', + 'relationship' => 'member_of_site', + 'relationship_guid' => $site_guid, + 'inverse_relationship' => TRUE, + 'types' => 'user', 'limit' => $limit, 'offset' => $offset )); } @@ -135,21 +157,22 @@ function get_site_members($site_guid, $limit = 10, $offset = 0) { /** * Display a list of site members * - * @param int $site_guid The GUID of the site - * @param int $limit The number of members to display on a page - * @param true|false $fullview Whether or not to display the full view (default: true) + * @param int $site_guid The GUID of the site + * @param int $limit The number of members to display on a page + * @param bool $fullview Whether or not to display the full view (default: true) + * * @return string A displayable list of members */ function list_site_members($site_guid, $limit = 10, $fullview = true) { $offset = (int) get_input('offset'); $limit = (int) $limit; $options = array( - 'relationship' => 'member_of_site', - 'relationship_guid' => $site_guid, - 'inverse_relationship' => TRUE, + 'relationship' => 'member_of_site', + 'relationship_guid' => $site_guid, + 'inverse_relationship' => TRUE, 'types' => 'user', - 'limit' => $limit, - 'offset' => $offset, + 'limit' => $limit, + 'offset' => $offset, 'count' => TRUE ); $count = (int) elgg_get_entities_from_relationship($options); @@ -162,8 +185,10 @@ function list_site_members($site_guid, $limit = 10, $fullview = true) { /** * Add an object to a site. * - * @param int $site_guid - * @param int $object_guid + * @param int $site_guid Site GUID + * @param int $object_guid Object GUID + * + * @return mixed */ function add_site_object($site_guid, $object_guid) { global $CONFIG; @@ -177,8 +202,10 @@ function add_site_object($site_guid, $object_guid) { /** * Remove an object from a site. * - * @param int $site_guid - * @param int $object_guid + * @param int $site_guid Site GUID + * @param int $object_guid Object GUID + * + * @return bool */ function remove_site_object($site_guid, $object_guid) { $site_guid = (int)$site_guid; @@ -190,10 +217,12 @@ function remove_site_object($site_guid, $object_guid) { /** * Get the objects belonging to a site. * - * @param int $site_guid - * @param string $subtype - * @param int $limit - * @param int $offset + * @param int $site_guid Site GUID + * @param string $subtype Subtype + * @param int $limit Limit + * @param int $offset Offset + * + * @return mixed */ function get_site_objects($site_guid, $subtype = "", $limit = 10, $offset = 0) { $site_guid = (int)$site_guid; @@ -203,11 +232,11 @@ function get_site_objects($site_guid, $subtype = "", $limit = 10, $offset = 0) { return elgg_get_entities_from_relationship(array( 'relationship' => 'member_of_site', - 'relationship_guid' => $site_guid, - 'inverse_relationship' => TRUE, - 'types' => 'object', - 'subtypes' => $subtype, - 'limit' => $limit, + 'relationship_guid' => $site_guid, + 'inverse_relationship' => TRUE, + 'types' => 'object', + 'subtypes' => $subtype, + 'limit' => $limit, 'offset' => $offset )); } @@ -215,8 +244,10 @@ function get_site_objects($site_guid, $subtype = "", $limit = 10, $offset = 0) { /** * Add a collection to a site. * - * @param int $site_guid - * @param int $collection_guid + * @param int $site_guid Site GUID + * @param int $collection_guid Collection GUID + * + * @return mixed */ function add_site_collection($site_guid, $collection_guid) { global $CONFIG; @@ -230,8 +261,11 @@ function add_site_collection($site_guid, $collection_guid) { /** * Remove a collection from a site. * - * @param int $site_guid - * @param int $collection_guid + * @param int $site_guid Site GUID + * @param int $collection_guid Collection GUID + * + * @todo probably remove. + * @return mixed */ function remove_site_collection($site_guid, $collection_guid) { $site_guid = (int)$site_guid; @@ -243,10 +277,12 @@ function remove_site_collection($site_guid, $collection_guid) { /** * Get the collections belonging to a site. * - * @param int $site_guid - * @param string $subtype - * @param int $limit - * @param int $offset + * @param int $site_guid Site GUID + * @param string $subtype Subtype + * @param int $limit Limit + * @param int $offset Offset + * + * @return mixed */ function get_site_collections($site_guid, $subtype = "", $limit = 10, $offset = 0) { $site_guid = (int)$site_guid; @@ -256,11 +292,11 @@ function get_site_collections($site_guid, $subtype = "", $limit = 10, $offset = // collection isn't a valid type. This won't work. return elgg_get_entities_from_relationship(array( - 'relationship' => 'member_of_site', - 'relationship_guid' => $site_guid, - 'inverse_relationship' => TRUE, - 'types' => 'collection', - 'subtypes' => $subtype, + 'relationship' => 'member_of_site', + 'relationship_guid' => $site_guid, + 'inverse_relationship' => TRUE, + 'types' => 'collection', + 'subtypes' => $subtype, 'limit' => $limit, 'offset' => $offset )); @@ -268,6 +304,10 @@ function get_site_collections($site_guid, $subtype = "", $limit = 10, $offset = /** * Return the site via a url. + * + * @param string $url The URL of a site + * + * @return mixed */ function get_site_by_url($url) { global $CONFIG; @@ -284,17 +324,20 @@ function get_site_by_url($url) { } /** - * Searches for a site based on a complete or partial name or description or url using full text searching. + * Searches for a site based on a complete or partial name + * or description or url using full text searching. * * IMPORTANT NOTE: With MySQL's default setup: * 1) $criteria must be 4 or more characters long * 2) If $criteria matches greater than 50% of results NO RESULTS ARE RETURNED! * - * @param string $criteria The partial or full name or username. - * @param int $limit Limit of the search. - * @param int $offset Offset. - * @param string $order_by The order. - * @param boolean $count Whether to return the count of results or just the results. + * @param string $criteria The partial or full name or username. + * @param int $limit Limit of the search. + * @param int $offset Offset. + * @param string $order_by The order. + * @param boolean $count Whether to return the count of results or just the results. + * + * @return mixed * @deprecated 1.7 */ function search_for_site($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) { @@ -317,7 +360,9 @@ function search_for_site($criteria, $limit = 10, $offset = 0, $order_by = "", $c } else { $query = "SELECT e.* "; } - $query .= "from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}sites_entity s on e.guid=s.guid where match(s.name,s.description,s.url) against ('$criteria') and $access"; + $query .= "from {$CONFIG->dbprefix}entities e + join {$CONFIG->dbprefix}sites_entity s on e.guid=s.guid + where match(s.name, s.description, s.url) against ('$criteria') and $access"; if (!$count) { $query .= " order by $order_by limit $offset, $limit"; // Add order and limit @@ -333,7 +378,9 @@ function search_for_site($criteria, $limit = 10, $offset = 0, $order_by = "", $c /** * Retrieve a site and return the domain portion of its url. * - * @param int $guid + * @param int $guid ElggSite GUID + * + * @return string */ function get_site_domain($guid) { $guid = (int)$guid; @@ -355,16 +402,18 @@ function get_site_domain($guid) { * to the sites init event and changing $CONFIG->site_id. * * @uses $CONFIG - * @param string $event Event API required parameter + * + * @param string $event Event API required parameter * @param string $object_type Event API required parameter - * @param null $object Event API required parameter + * @param null $object Event API required parameter + * * @return true */ function sites_init($event, $object_type, $object) { global $CONFIG; if (is_installed() && is_db_installed()) { - $site = trigger_plugin_hook("siteid","system"); + $site = trigger_plugin_hook("siteid", "system"); if ($site === null || $site === false) { $CONFIG->site_id = (int) datalist_get('default_site'); } else { @@ -380,10 +429,21 @@ function sites_init($event, $object_type, $object) { } // Register event handlers -register_elgg_event_handler('boot','system','sites_init',2); +register_elgg_event_handler('boot', 'system', 'sites_init', 2); // Register with unit test register_plugin_hook('unit_test', 'system', 'sites_test'); + +/** + * Unit tests for sites + * + * @param sting $hook unit_test + * @param string $type system + * @param mixed $value Array of tests + * @param mixed $params Params + * + * @return array + */ function sites_test($hook, $type, $value, $params) { global $CONFIG; $value[] = "{$CONFIG->path}engine/tests/objects/sites.php"; diff --git a/engine/lib/statistics.php b/engine/lib/statistics.php index 91fea1257..0067f3672 100644 --- a/engine/lib/statistics.php +++ b/engine/lib/statistics.php @@ -1,18 +1,20 @@ <?php /** * Elgg statistics library. + * * This file contains a number of functions for obtaining statistics about the running system. - * These statistics are mainly used by the administration pages, and is also where the basic views for statistics - * are added. + * These statistics are mainly used by the administration pages, and is also where the basic + * views for statistics are added. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Statistics */ /** * Return an array reporting the number of various entities in the system. * * @param int $owner_guid Optional owner of the statistics + * * @return array */ function get_entity_statistics($owner_guid = 0) { @@ -21,7 +23,10 @@ function get_entity_statistics($owner_guid = 0) { $entity_stats = array(); $owner_guid = (int)$owner_guid; - $query = "SELECT distinct e.type,s.subtype,e.subtype as subtype_id from {$CONFIG->dbprefix}entities e left join {$CONFIG->dbprefix}entity_subtypes s on e.subtype=s.id"; + $query = "SELECT distinct e.type,s.subtype,e.subtype as subtype_id + from {$CONFIG->dbprefix}entities e left + join {$CONFIG->dbprefix}entity_subtypes s on e.subtype=s.id"; + $owner_query = ""; if ($owner_guid) { $query .= " where owner_guid=$owner_guid"; @@ -37,9 +42,11 @@ function get_entity_statistics($owner_guid = 0) { $entity_stats[$type->type] = array(); } - $query = "SELECT count(*) as count from {$CONFIG->dbprefix}entities where type='{$type->type}' $owner_query"; + $query = "SELECT count(*) as count + from {$CONFIG->dbprefix}entities where type='{$type->type}' $owner_query"; + if ($type->subtype) { - $query.= " and subtype={$type->subtype_id}"; + $query .= " and subtype={$type->subtype_id}"; } $subtype_cnt = get_data_row($query); @@ -57,7 +64,8 @@ function get_entity_statistics($owner_guid = 0) { /** * Return the number of users registered in the system. * - * @param bool $show_deactivated + * @param bool $show_deactivated Count not enabled users? + * * @return int */ function get_number_users($show_deactivated = false) { @@ -69,7 +77,10 @@ function get_number_users($show_deactivated = false) { $access = "and " . get_access_sql_suffix(); } - $result = get_data_row("SELECT count(*) as count from {$CONFIG->dbprefix}entities where type='user' $access"); + $query = "SELECT count(*) as count + from {$CONFIG->dbprefix}entities where type='user' $access"; + + $result = get_data_row($query); if ($result) { return $result->count; @@ -80,6 +91,8 @@ function get_number_users($show_deactivated = false) { /** * Return a list of how many users are currently online, rendered as a view. + * + * @return string */ function get_online_users() { $offset = get_input('offset', 0); @@ -87,12 +100,14 @@ function get_online_users() { $objects = find_active_users(600, 10, $offset); if ($objects) { - return elgg_view_entity_list($objects, $count,$offset,10,false); + return elgg_view_entity_list($objects, $count, $offset, 10, false); } } /** * Initialise the statistics admin page. + * + * @return void */ function statistics_init() { extend_elgg_admin_page('admin/statistics_opt/basic', 'admin/statistics'); @@ -104,4 +119,4 @@ function statistics_init() { } /// Register init function -register_elgg_event_handler('init','system','statistics_init');
\ No newline at end of file +register_elgg_event_handler('init', 'system', 'statistics_init');
\ No newline at end of file diff --git a/engine/lib/system_log.php b/engine/lib/system_log.php index 8816e24c3..05e3985eb 100644 --- a/engine/lib/system_log.php +++ b/engine/lib/system_log.php @@ -3,28 +3,35 @@ * Elgg system log. * Listens to events and writes crud events into the system log database. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Logging */ /** * Retrieve the system log based on a number of parameters. * - * @param int or array $by_user The guid(s) of the user(s) who initiated the event. - * @param string $event The event you are searching on. - * @param string $class The class of object it effects. - * @param string $type The type - * @param string $subtype The subtype. - * @param int $limit Maximum number of responses to return. - * @param int $offset Offset of where to start. - * @param bool $count Return count or not + * @param int|array $by_user The guid(s) of the user(s) who initiated the event. + * @param string $event The event you are searching on. + * @param string $class The class of object it effects. + * @param string $type The type + * @param string $subtype The subtype. + * @param int $limit Maximum number of responses to return. + * @param int $offset Offset of where to start. + * @param bool $count Return count or not + * @param int $timebefore Lower time limit + * @param int $timeafter Upper time limit + * @param int $object_id GUID of an object + * + * @return mixed */ -function get_system_log($by_user = "", $event = "", $class = "", $type = "", $subtype = "", $limit = 10, $offset = 0, $count = false, $timebefore = 0, $timeafter = 0, $object_id = 0) { +function get_system_log($by_user = "", $event = "", $class = "", $type = "", $subtype = "", +$limit = 10, $offset = 0, $count = false, $timebefore = 0, $timeafter = 0, $object_id = 0) { + global $CONFIG; $by_user_orig = $by_user; if (is_array($by_user) && sizeof($by_user) > 0) { - foreach($by_user as $key => $val) { + foreach ($by_user as $key => $val) { $by_user[$key] = (int) $val; } } else { @@ -39,23 +46,23 @@ function get_system_log($by_user = "", $event = "", $class = "", $type = "", $su $where = array(); - if ($by_user_orig!=="") { + if ($by_user_orig !== "") { if (is_int($by_user)) { $where[] = "performed_by_guid=$by_user"; } else if (is_array($by_user)) { - $where [] = "performed_by_guid in (". implode(",",$by_user) .")"; + $where [] = "performed_by_guid in (" . implode(",", $by_user) . ")"; } } if ($event != "") { $where[] = "event='$event'"; } - if ($class!=="") { + if ($class !== "") { $where[] = "object_class='$class'"; } if ($type != "") { $where[] = "object_type='$type'"; } - if ($subtype!=="") { + if ($subtype !== "") { $where[] = "object_subtype='$subtype'"; } @@ -98,6 +105,8 @@ function get_system_log($by_user = "", $event = "", $class = "", $type = "", $su * Return a specific log entry. * * @param int $entry_id The log entry + * + * @return mixed */ function get_log_entry($entry_id) { global $CONFIG; @@ -111,6 +120,8 @@ function get_log_entry($entry_id) { * Return the object referred to by a given log entry * * @param int $entry_id The log entry + * + * @return mixed */ function get_object_from_log_entry($entry_id) { $entry = get_log_entry($entry_id); @@ -133,8 +144,10 @@ function get_object_from_log_entry($entry_id) { * * This is called by the event system and should not be called directly. * - * @param $object The object you're talking about. - * @param $event String The event being logged + * @param object $object The object you're talking about. + * @param string $event String The event being logged + * + * @return mixed */ function system_log($object, $event) { global $CONFIG; @@ -173,7 +186,14 @@ function system_log($object, $event) { // Create log if we haven't already created it if (!isset($logcache[$time][$object_id][$event])) { - insert_data("INSERT DELAYED into {$CONFIG->dbprefix}system_log (object_id, object_class, object_type, object_subtype, event, performed_by_guid, owner_guid, access_id, enabled, time_created) VALUES ('$object_id','$object_class','$object_type', '$object_subtype', '$event',$performed_by, $owner_guid, $access_id, '$enabled', '$time')"); + $query = "INSERT DELAYED into {$CONFIG->dbprefix}system_log + (object_id, object_class, object_type, object_subtype, event, + performed_by_guid, owner_guid, access_id, enabled, time_created) + VALUES + ('$object_id','$object_class','$object_type', '$object_subtype', '$event', + $performed_by, $owner_guid, $access_id, '$enabled', '$time')"; + + insert_data($query); $logcache[$time][$object_id][$event] = true; } @@ -186,6 +206,8 @@ function system_log($object, $event) { * This function creates an archive copy of the system log. * * @param int $offset An offset in seconds from now to archive (useful for log rotation) + * + * @return bool */ function archive_log($offset = 0) { global $CONFIG; @@ -196,7 +218,10 @@ function archive_log($offset = 0) { $ts = $now - $offset; // create table - if (!update_data("CREATE TABLE {$CONFIG->dbprefix}system_log_$now as SELECT * from {$CONFIG->dbprefix}system_log WHERE time_created<$ts")) { + $query = "CREATE TABLE {$CONFIG->dbprefix}system_log_$now as + SELECT * from {$CONFIG->dbprefix}system_log WHERE time_created<$ts"; + + if (!update_data($query)) { return false; } @@ -217,10 +242,11 @@ function archive_log($offset = 0) { /** * Default system log handler, allows plugins to override, extend or disable logging. * - * @param string $event - * @param string $object_type - * @param Loggable $object - * @return unknown + * @param string $event Event name + * @param string $object_type Object type + * @param Loggable $object Object to log + * + * @return true */ function system_log_default_logger($event, $object_type, $object) { system_log($object['object'], $object['event']); @@ -232,12 +258,14 @@ function system_log_default_logger($event, $object_type, $object) { * System log listener. * This function listens to all events in the system and logs anything appropriate. * - * @param String $event - * @param String $object_type - * @param Loggable $object + * @param String $event Event name + * @param String $object_type Type of object + * @param Loggable $object Object to log + * + * @return true */ function system_log_listener($event, $object_type, $object) { - if (($object_type!='systemlog') && ($event!='log')) { + if (($object_type != 'systemlog') && ($event != 'log')) { trigger_elgg_event('log', 'systemlog', array('object' => $object, 'event' => $event)); } @@ -245,7 +273,7 @@ function system_log_listener($event, $object_type, $object) { } /** Register event to listen to all events **/ -register_elgg_event_handler('all','all','system_log_listener', 400); +register_elgg_event_handler('all', 'all', 'system_log_listener', 400); /** Register a default system log handler */ -register_elgg_event_handler('log','systemlog','system_log_default_logger', 999);
\ No newline at end of file +register_elgg_event_handler('log', 'systemlog', 'system_log_default_logger', 999);
\ No newline at end of file diff --git a/engine/lib/tags.php b/engine/lib/tags.php index e4b59b573..02c8e433c 100644 --- a/engine/lib/tags.php +++ b/engine/lib/tags.php @@ -3,25 +3,32 @@ * Elgg tags * Functions for managing tags and tag clouds. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Tags */ /** * The algorithm working out the size of font based on the number of tags. * This is quick and dirty. + * + * @param int $min Min size + * @param int $max Max size + * @param int $number_of_tags The number of tags + * @param int $buckets The number of buckets + * + * @return int */ function calculate_tag_size($min, $max, $number_of_tags, $buckets = 6) { - $delta = (($max - $min) / $buckets); + $delta = (($max - $min) / $buckets); $thresholds = array(); - for ($n=1; $n <= $buckets; $n++) { - $thresholds[$n-1] = ($min + $n) * $delta; + for ($n = 1; $n <= $buckets; $n++) { + $thresholds[$n - 1] = ($min + $n) * $delta; } // Correction - if ($thresholds[$buckets-1]>$max) { - $thresholds[$buckets-1] = $max; + if ($thresholds[$buckets - 1] > $max) { + $thresholds[$buckets - 1] = $max; } $size = 0; @@ -37,7 +44,9 @@ function calculate_tag_size($min, $max, $number_of_tags, $buckets = 6) { /** * This function generates an array of tags with a weighting. * - * @param array $tags The array of tags. + * @param array $tags The array of tags. + * @param int $buckets The number of buckets + * * @return An associated array of tags with a weighting, this can then be mapped to a display class. */ function generate_tag_cloud(array $tags, $buckets = 6) { @@ -49,11 +58,11 @@ function generate_tag_cloud(array $tags, $buckets = 6) { foreach ($tags as $tag) { $cloud[$tag]++; - if ($cloud[$tag]>$max) { + if ($cloud[$tag] > $max) { $max = $cloud[$tag]; } - if ($cloud[$tag]<$min) { + if ($cloud[$tag] < $min) { $min = $cloud[$tag]; } } @@ -70,7 +79,6 @@ function generate_tag_cloud(array $tags, $buckets = 6) { * * Supports similar arguments as elgg_get_entities() * - * * @param array $options Array in format: * * threshold => INT minimum tag count @@ -83,7 +91,8 @@ function generate_tag_cloud(array $tags, $buckets = 6) { * * subtypes => NULL|STR entity subtype (SQL: subtype = '$subtype') * - * type_subtype_pairs => NULL|ARR (array('type' => 'subtype')) (SQL: type = '$type' AND subtype = '$subtype') pairs + * type_subtype_pairs => NULL|ARR (array('type' => 'subtype')) + * (SQL: type = '$type' AND subtype = '$subtype') pairs * * owner_guids => NULL|INT entity guid * @@ -168,7 +177,8 @@ function elgg_get_tags(array $options = array()) { $tags_in = implode(',', $sanitised_tags); $wheres[] = "(msn.string IN ($tags_in))"; - $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'], $options['subtypes'], $options['type_subtype_pairs']); + $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'], + $options['subtypes'], $options['type_subtype_pairs']); $wheres[] = elgg_get_entity_site_where_sql('e', $options['site_guids']); $wheres[] = elgg_get_entity_owner_where_sql('e', $options['owner_guids']); $wheres[] = elgg_get_entity_container_where_sql('e', $options['container_guids']); @@ -240,19 +250,23 @@ function elgg_get_tags(array $options = array()) { * * @deprecated 1.8 Use elgg_get_tags(). * - * @param int $threshold Get the threshold of minimum number of each tags to bother with (ie only show tags where there are more than $threshold occurances) - * @param int $limit Number of tags to return - * @param string $metadata_name Optionally, the name of the field you want to grab for - * @param string $entity_type Optionally, the entity type ('object' etc) + * @param int $threshold Get the threshold of minimum number of each tags to + * bother with (ie only show tags where there are more + * than $threshold occurances) + * @param int $limit Number of tags to return + * @param string $metadata_name Optionally, the name of the field you want to grab for + * @param string $entity_type Optionally, the entity type ('object' etc) * @param string $entity_subtype The entity subtype, optionally - * @param int $owner_guid The GUID of the tags owner, optionally - * @param int $site_guid Optionally, the site to restrict to (default is the current site) - * @param int $start_ts Optionally specify a start timestamp for tags used to generate cloud. - * @param int $ent_ts Optionally specify an end timestamp for tags used to generate cloud. + * @param int $owner_guid The GUID of the tags owner, optionally + * @param int $site_guid Optionally, the site to restrict to (default is the current site) + * @param int $start_ts Optionally specify a start timestamp for tags used to + * generate cloud. + * @param int $end_ts Optionally specify an end timestamp for tags used to generate cloud + * * @return array|false Array of objects with ->tag and ->total values, or false on failure */ - -function get_tags($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object", $entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") { +function get_tags($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object", +$entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") { elgg_deprecated_notice('get_tags() has been replaced by elgg_get_tags()', 1.8); @@ -303,7 +317,6 @@ function get_tags($threshold = 1, $limit = 10, $metadata_name = "", $entity_type /** * Returns viewable tagcloud * - * * @see elgg_get_tags * * @param array $options Any elgg_get_tags() options except: @@ -324,9 +337,9 @@ function elgg_view_tagcloud(array $options = array()) { if (isset($options['subtype'])) { $subtype = $options['subtype']; } - + $tag_data = elgg_get_tags($options); - return elgg_view("output/tagcloud",array('value' => $tag_data, + return elgg_view("output/tagcloud", array('value' => $tag_data, 'type' => $type, 'subtype' => $subtype)); @@ -337,23 +350,30 @@ function elgg_view_tagcloud(array $options = array()) { * * @deprecated 1.8 use elgg_view_tagcloud() * - * @param int $threshold Get the threshold of minimum number of each tags to bother with (ie only show tags where there are more than $threshold occurances) - * @param int $limit Number of tags to return - * @param string $metadata_name Optionally, the name of the field you want to grab for - * @param string $entity_type Optionally, the entity type ('object' etc) + * @param int $threshold Get the threshold of minimum number of each tags + * to bother with (ie only show tags where there are + * more than $threshold occurances) + * @param int $limit Number of tags to return + * @param string $metadata_name Optionally, the name of the field you want to grab for + * @param string $entity_type Optionally, the entity type ('object' etc) * @param string $entity_subtype The entity subtype, optionally - * @param int $owner_guid The GUID of the tags owner, optionally - * @param int $site_guid Optionally, the site to restrict to (default is the current site) - * @param int $start_ts Optionally specify a start timestamp for tags used to generate cloud. - * @param int $ent_ts Optionally specify an end timestamp for tags used to generate cloud. + * @param int $owner_guid The GUID of the tags owner, optionally + * @param int $site_guid Optionally, the site to restrict to (default is the current site) + * @param int $start_ts Optionally specify a start timestamp for tags used to + * generate cloud. + * @param int $end_ts Optionally specify an end timestamp for tags used to generate + * cloud. + * * @return string The HTML (or other, depending on view type) of the tagcloud. */ - -function display_tagcloud($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object", $entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") { +function display_tagcloud($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object", +$entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") { elgg_deprecated_notice('display_cloud() was deprecated by elgg_view_tagcloud()!', 1.8); - - $tags = get_tags($threshold, $limit, $metadata_name, $entity_type, $entity_subtype, $owner_guid, $site_guid, $start_ts, $end_ts); + + $tags = get_tags($threshold, $limit, $metadata_name, $entity_type, + $entity_subtype, $owner_guid, $site_guid, $start_ts, $end_ts); + return elgg_view('output/tagcloud', array( 'value' => $tags, 'type' => $entity_type, @@ -366,8 +386,8 @@ function display_tagcloud($threshold = 1, $limit = 10, $metadata_name = "", $ent * This is required if you are using a non-standard metadata name * for your tags. * + * @param string $name Tag name * - * @param string $name * @return bool * @since 1.7.0 */ @@ -394,7 +414,9 @@ function elgg_register_tag_metadata_name($name) { function elgg_get_registered_tag_metadata_names() { global $CONFIG; - $names = (isset($CONFIG->registered_tag_metadata_names)) ? $CONFIG->registered_tag_metadata_names : array(); + $names = (isset($CONFIG->registered_tag_metadata_names)) + ? $CONFIG->registered_tag_metadata_names : array(); + return $names; } @@ -402,15 +424,23 @@ function elgg_get_registered_tag_metadata_names() { elgg_register_tag_metadata_name('tags'); register_page_handler('tags', 'elgg_tagcloud_page_handler'); + +/** + * Page hander for tags + * + * @param array $page Page array + * + * @return void + */ function elgg_tagcloud_page_handler($page) { global $CONFIG; - + switch ($page[0]) { default: $title = elgg_view_title(elgg_echo('tags:site_cloud')); $tags = display_tagcloud(0, 100, 'tags'); $body = elgg_view_layout('one_column_with_sidebar', $title . $tags); - + page_draw(elgg_echo('tags:site_cloud'), $body); break; } diff --git a/engine/lib/upgrades/2008100701.php b/engine/lib/upgrades/2008100701.php index cf976e84c..394a90046 100644 --- a/engine/lib/upgrades/2008100701.php +++ b/engine/lib/upgrades/2008100701.php @@ -1,8 +1,7 @@ <?php /// Activate mail plugin /** - * Because Elgg now has a plugable account activation process we need to activate + * Because Elgg now has a plugable account activation process we need to activate * the email account activation plugin for existing installs. - */ - enable_plugin('uservalidationbyemail', $CONFIG->site->guid); -?>
\ No newline at end of file + */ + enable_plugin('uservalidationbyemail', $CONFIG->site->guid);
\ No newline at end of file diff --git a/engine/lib/upgrades/2008101303.php b/engine/lib/upgrades/2008101303.php index c98eace74..69e44e3a0 100644 --- a/engine/lib/upgrades/2008101303.php +++ b/engine/lib/upgrades/2008101303.php @@ -1,11 +1,9 @@ <?php - // Upgrade to solve login issue - - if ($users = get_entities_from_metadata('validated_email', '', 'user', '', 0,9999)) { - foreach($users as $user) { - set_user_validation_status($user->guid, true, 'email'); - } - } - -?>
\ No newline at end of file +// Upgrade to solve login issue + +if ($users = get_entities_from_metadata('validated_email', '', 'user', '', 0, 9999)) { + foreach ($users as $user) { + set_user_validation_status($user->guid, true, 'email'); + } +} diff --git a/engine/lib/upgrades/2009022701.php b/engine/lib/upgrades/2009022701.php index 92d540cd3..2e83b56b3 100644 --- a/engine/lib/upgrades/2009022701.php +++ b/engine/lib/upgrades/2009022701.php @@ -1,8 +1,7 @@ <?php global $CONFIG; - + /** * Disable update client since this has now been removed. */ - disable_plugin('updateclient', $CONFIG->site->guid); -?>
\ No newline at end of file + disable_plugin('updateclient', $CONFIG->site->guid);
\ No newline at end of file diff --git a/engine/lib/upgrades/2009041701.php b/engine/lib/upgrades/2009041701.php index 609c7e569..acc8fc0bd 100644 --- a/engine/lib/upgrades/2009041701.php +++ b/engine/lib/upgrades/2009041701.php @@ -1,10 +1,9 @@ <?php global $CONFIG; - + /// Activate kses /** * Elgg now has kses tag filtering built as a plugin. This needs to be enabled. - */ - enable_plugin('kses', $CONFIG->site->guid); -?>
\ No newline at end of file + */ + enable_plugin('kses', $CONFIG->site->guid);
\ No newline at end of file diff --git a/engine/lib/upgrades/2009070101.php b/engine/lib/upgrades/2009070101.php index edd8ce4b4..3bf89e9b7 100644 --- a/engine/lib/upgrades/2009070101.php +++ b/engine/lib/upgrades/2009070101.php @@ -1,11 +1,10 @@ <?php global $CONFIG; - + /// Deprecate kses and activate htmlawed /** * Kses appears to be a dead project so we are deprecating it in favour of htmlawed. - */ + */ disable_plugin('kses', $CONFIG->site->guid); - enable_plugin('htmlawed', $CONFIG->site->guid); -?>
\ No newline at end of file + enable_plugin('htmlawed', $CONFIG->site->guid);
\ No newline at end of file diff --git a/engine/lib/upgrades/2009102801.php b/engine/lib/upgrades/2009102801.php index b72e0a781..8885dbb09 100644 --- a/engine/lib/upgrades/2009102801.php +++ b/engine/lib/upgrades/2009102801.php @@ -4,151 +4,176 @@ set_time_limit(0); /** - Elgg 1.0 + * Generates a file matrix like Elgg 1.0 did + * + * @param string $username Username of user + * + * @return string File matrix path */ -function file_matrix_1_0($username) -{ +function file_matrix_1_0($username) { $matrix = ""; - + $len = strlen($username); - if ($len > 5) + if ($len > 5) { $len = 5; - + } + for ($n = 0; $n < $len; $n++) { - if (ctype_alnum($username[$n])) + if (ctype_alnum($username[$n])) { $matrix .= $username[$n] . "/"; - } + } + } - return $matrix.$username."/"; + return $matrix . $username . "/"; } /** - Elgg 1.1, 1.2 and 1.5 + * Generate a file matrix like Elgg 1.1, 1.2 and 1.5 + * + * @param string $filename The filename + * + * @return string */ -function file_matrix_1_1($filename) -{ +function file_matrix_1_1($filename) { $matrix = ""; - + $name = $filename; $filename = mb_str_split($filename); - if (!$filename) return false; - + if (!$filename) { + return false; + } + $len = count($filename); - if ($len > 5) + if ($len > 5) { $len = 5; - + } + for ($n = 0; $n < $len; $n++) { $matrix .= $filename[$n] . "/"; - } + } - return $matrix.$name."/"; + return $matrix . $name . "/"; } -function mb_str_split($string, $charset = 'UTF8') -{ - if (is_callable('mb_substr')) - { +/** + * Handle splitting multibyte strings + * + * @param string $string String to split. + * @param string $charset Charset to use. + * + * @return array|false + */ +function mb_str_split($string, $charset = 'UTF8') { + if (is_callable('mb_substr')) { $length = mb_strlen($string); $array = array(); - - while ($length) - { + + while ($length) { $array[] = mb_substr($string, 0, 1, $charset); $string = mb_substr($string, 1, $length, $charset); - + $length = mb_strlen($string); } - + return $array; - } - else + } else { return str_split($string); - + } + return false; } /** - Elgg 1.6 + * 1.6 style file matrix + * + * @param string $filename The filename + * + * @return string */ -function file_matrix_1_6($filename) -{ +function file_matrix_1_6($filename) { $invalid_fs_chars = '*\'\\/"!$%^&*.%(){}[]#~?<>;|¬`@-+='; - + $matrix = ""; - + $name = $filename; $filename = mb_str_split($filename); - if (!$filename) return false; - + if (!$filename) { + return false; + } + $len = count($filename); - if ($len > 5) + if ($len > 5) { $len = 5; - + } + for ($n = 0; $n < $len; $n++) { - + // Prevent a matrix being formed with unsafe characters $char = $filename[$n]; - if (strpos($invalid_fs_chars, $char)!==false) + if (strpos($invalid_fs_chars, $char) !== false) { $char = '_'; - + } + $matrix .= $char . "/"; - } + } - return $matrix.$name."/"; + return $matrix . $name . "/"; } /** - * Scans a directory and moves any files from $from to $to + * Scans a directory and moves any files from $from to $to * preserving structure and handling existing paths. * Will no overwrite files in $to. * * TRAILING SLASHES REQUIRED. * - * @param $from From dir. - * @param $to To dir. - * @param $move Bool. True to move, false to copy. - * @param $preference str to|from If file collisions, which dir has preference. + * @param string $from From dir. + * @param string $to To dir. + * @param bool $move True to move, false to copy. + * @param string $preference to|from If file collisions, which dir has preference. + * + * @return bool */ -function merge_directories($from, $to, $move=false, $preference='to') { +function merge_directories($from, $to, $move = false, $preference = 'to') { if (!$entries = scandir($from)) { return false; } - + // character filtering needs to be elsewhere. if (!is_dir($to)) { mkdir($to, 0700, true); } - + if ($move === true) { $f = 'rename'; } else { $f = 'copy'; } - + foreach ($entries as $entry) { if ($entry == '.' || $entry == '..') { continue; } - + $from_path = $from . $entry; $to_path = $to . $entry; - + // check to see if the path exists and is a dir, if so, recurse. if (is_dir($from_path) && is_dir($to_path)) { $from_path .= '/'; $to_path .= '/'; merge_directories($from_path, $to_path, $move, $preference); - + // since it's a dir that already exists we don't need to move it continue; } - + // only move if target doesn't exist or if preference is for the from dir if (!file_exists($to_path) || $preference == 'from') { - + if ($f($from_path, $to_path)) { //elgg_dump("Moved/Copied $from_path to $to_path"); } @@ -158,20 +183,21 @@ function merge_directories($from, $to, $move=false, $preference='to') { } } +/** + * Create a 1.7 style user file matrix based upon date. + * + * @param int $guid Guid of owner + * + * @return string File matrix path + */ function user_file_matrix($guid) { // lookup the entity $user = get_entity($guid); - if ($user->type != 'user') - { + if ($user->type != 'user') { // only to be used for user directories return FALSE; } - - if (!$user->time_created) { - // fall back to deprecated method - return $this->deprecated_file_matrix($user->username); - } - + $time_created = date('Y/m/d', $user->time_created); return "$time_created/$user->guid/"; } @@ -180,7 +206,8 @@ global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE; /** Upgrade file locations */ -$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity WHERE username != ''"); +$users = mysql_query("SELECT guid, username + FROM {$CONFIG->dbprefix}users_entity WHERE username != ''"); while ($user = mysql_fetch_object($users)) { $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array(); @@ -188,6 +215,6 @@ while ($user = mysql_fetch_object($users)) { foreach (array('1_0', '1_1', '1_6') as $version) { $function = "file_matrix_$version"; $from = $CONFIG->dataroot . $function($user->username); - merge_directories($from, $to, $move=TRUE, $preference='from'); + merge_directories($from, $to, $move = TRUE, $preference = 'from'); } } diff --git a/engine/lib/upgrades/2010033101.php b/engine/lib/upgrades/2010033101.php index b137e0285..5c8ee036b 100644 --- a/engine/lib/upgrades/2010033101.php +++ b/engine/lib/upgrades/2010033101.php @@ -38,20 +38,24 @@ if ($dbversion < 2009100701) { $qs[] = "ALTER TABLE {$CONFIG->dbprefix}groups_entity DISABLE KEYS"; $qs[] = "REPLACE INTO {$CONFIG->dbprefix}groups_entity (guid, name, description) - SELECT guid, unhex(hex(convert(name using latin1))), unhex(hex(convert(description using latin1))) + SELECT guid, unhex(hex(convert(name using latin1))), + unhex(hex(convert(description using latin1))) FROM {$CONFIG->dbprefix}groups_entity"; $qs[] = "ALTER TABLE {$CONFIG->dbprefix}groups_entity ENABLE KEYS"; $qs[] = "ALTER TABLE {$CONFIG->dbprefix}objects_entity DISABLE KEYS"; $qs[] = "REPLACE INTO {$CONFIG->dbprefix}objects_entity (guid, title, description) - SELECT guid, unhex(hex(convert(title using latin1))), unhex(hex(convert(description using latin1))) + SELECT guid, unhex(hex(convert(title using latin1))), + unhex(hex(convert(description using latin1))) FROM {$CONFIG->dbprefix}objects_entity"; $qs[] = "ALTER TABLE {$CONFIG->dbprefix}objects_entity ENABLE KEYS"; $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity DISABLE KEYS"; - $qs[] = "REPLACE INTO {$CONFIG->dbprefix}users_entity (guid, name, username, password, salt, email, language, code, + $qs[] = "REPLACE INTO {$CONFIG->dbprefix}users_entity + (guid, name, username, password, salt, email, language, code, banned, last_action, prev_last_action, last_login, prev_last_login) - SELECT guid, unhex(hex(convert(name using latin1))), username, password, salt, email, language, code, + SELECT guid, unhex(hex(convert(name using latin1))), + username, password, salt, email, language, code, banned, last_action, prev_last_action, last_login, prev_last_login FROM {$CONFIG->dbprefix}users_entity"; $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity ENABLE KEYS"; diff --git a/engine/lib/upgrades/2010060401.php b/engine/lib/upgrades/2010060401.php index 2106bdbc0..6d628b8eb 100644 --- a/engine/lib/upgrades/2010060401.php +++ b/engine/lib/upgrades/2010060401.php @@ -11,7 +11,8 @@ $count = 0; $user_guids = mysql_query("SELECT guid FROM {$CONFIG->dbprefix}users_entity"); while ($user = mysql_fetch_object($user_guids)) { - $query = "SELECT * FROM {$CONFIG->dbprefix}entity_relationships WHERE guid_one=$user->guid AND relationship LIKE 'notify%'"; + $query = "SELECT * FROM {$CONFIG->dbprefix}entity_relationships + WHERE guid_one=$user->guid AND relationship LIKE 'notify%'"; $relationships = mysql_query($query); if (mysql_num_rows($relationships) == 0) { // no notify relationships for this user @@ -42,11 +43,12 @@ while ($user = mysql_fetch_object($user_guids)) { WHERE guid_one=$user->guid AND relationship='$relationship_type' AND guid_two=$obj->guid_two"; $results = mysql_query($query); - if (mysql_num_rows($results) == 0) { - $query = "DELETE FROM {$CONFIG->dbprefix}entity_relationships WHERE id=$obj->id"; - mysql_query($query); - $count++; - } + + if (mysql_num_rows($results) == 0) { + $query = "DELETE FROM {$CONFIG->dbprefix}entity_relationships WHERE id=$obj->id"; + mysql_query($query); + $count++; + } } } diff --git a/engine/lib/upgrades/2010061501.php b/engine/lib/upgrades/2010061501.php index 2b65cc5c7..d230236fc 100644 --- a/engine/lib/upgrades/2010061501.php +++ b/engine/lib/upgrades/2010061501.php @@ -1,7 +1,7 @@ <?php /** * utf8 conversion and file merging for usernames with multibyte chars - * + * */ @@ -14,56 +14,60 @@ if ($dbversion < 2009100701) { // start a new link to the DB to see what its defaults are. $link = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, TRUE); mysql_select_db($CONFIG->dbname, $link); - + $q = "SHOW VARIABLES LIKE 'character_set_client'"; $r = mysql_query($q); $client = mysql_fetch_assoc($r); - + $q = "SHOW VARIABLES LIKE 'character_set_connection'"; $r = mysql_query($q); $connection = mysql_fetch_assoc($r); - + // only run upgrade if not already talking utf8 if ($client['Value'] != 'utf8' && $connection['Value'] != 'utf8') { $qs = array(); $qs[] = "SET NAMES utf8"; - + $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity DISABLE KEYS"; - $qs[] = "REPLACE INTO {$CONFIG->dbprefix}users_entity (guid, name, username, password, salt, email, language, code, - banned, admin, last_action, prev_last_action, last_login, prev_last_login) - SELECT guid, name, unhex(hex(convert(username using latin1))), password, salt, email, language, code, + $qs[] = "REPLACE INTO {$CONFIG->dbprefix}users_entity + (guid, name, username, password, salt, email, language, code, + banned, admin, last_action, prev_last_action, last_login, prev_last_login) + + SELECT guid, name, unhex(hex(convert(username using latin1))), + password, salt, email, language, code, banned, admin, last_action, prev_last_action, last_login, prev_last_login FROM {$CONFIG->dbprefix}users_entity"; - + $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity ENABLE KEYS"; - + foreach ($qs as $q) { if (!update_data($q)) { throw new Exception('Couldn\'t execute upgrade query: ' . $q); } } - + global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE; - + /** Upgrade file locations */ // new connection to force into utf8 mode to get the old name $link = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, TRUE); mysql_select_db($CONFIG->dbname, $link); - + // must be the first command mysql_query("SET NAMES utf8"); - - $users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity WHERE username != ''", $link); + + $users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity + WHERE username != ''", $link); while ($user = mysql_fetch_object($users)) { $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array(); - + $to = $CONFIG->dataroot . user_file_matrix($user->guid); foreach (array('1_0', '1_1', '1_6') as $version) { $function = "file_matrix_$version"; $from = $CONFIG->dataroot . $function($user->username); - merge_directories($from, $to, $move=TRUE, $preference='from'); + merge_directories($from, $to, $move = TRUE, $preference = 'from'); } } } diff --git a/engine/lib/upgrades/2010062301.php b/engine/lib/upgrades/2010062301.php index 049a93440..f679fa46d 100644 --- a/engine/lib/upgrades/2010062301.php +++ b/engine/lib/upgrades/2010062301.php @@ -14,7 +14,8 @@ if ($groups) { $acl = $group->group_acl; try { - $query = "UPDATE {$CONFIG->dbprefix}access_collections SET owner_guid = $group->guid WHERE id = $acl"; + $query = "UPDATE {$CONFIG->dbprefix}access_collections + SET owner_guid = $group->guid WHERE id = $acl"; update_data($query); } catch (Exception $e) { // no acl so create one diff --git a/engine/lib/upgrades/2010071001.php b/engine/lib/upgrades/2010071001.php index 4df044cff..1b5d379d8 100644 --- a/engine/lib/upgrades/2010071001.php +++ b/engine/lib/upgrades/2010071001.php @@ -3,6 +3,14 @@ * Change profile image names to use guid rather than username */ +/** + * Need the same function to generate a user matrix, but can't call it + * the same thing as the previous update. + * + * @param int $guid User guid. + * + * @return string File matrix + */ function user_file_matrix_2010071001($guid) { // lookup the entity $user = get_entity($guid); @@ -23,7 +31,8 @@ function user_file_matrix_2010071001($guid) { $sizes = array('large', 'medium', 'small', 'tiny', 'master', 'topbar'); global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG; -$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity WHERE username != ''"); +$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity + WHERE username != ''"); while ($user = mysql_fetch_object($users)) { $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array(); diff --git a/engine/lib/upgrades/2010071002.php b/engine/lib/upgrades/2010071002.php index cdf08c830..30bd6538c 100644 --- a/engine/lib/upgrades/2010071002.php +++ b/engine/lib/upgrades/2010071002.php @@ -6,7 +6,8 @@ // loop through all users checking collections and notifications global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG; global $NOTIFICATION_HANDLERS; -$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity WHERE username != ''"); +$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity + WHERE username != ''"); while ($user = mysql_fetch_object($users)) { $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array(); @@ -25,7 +26,7 @@ while ($user = mysql_fetch_object($users)) { // check the all friends notifications if ($collection_id == -1) { $options = array( - 'relationship' => 'friend', + 'relationship' => 'friend', 'relationship_guid' => $user->guid, 'limit' => 0 ); diff --git a/engine/lib/users.php b/engine/lib/users.php index 3a15e9397..e980ee6f8 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -3,8 +3,8 @@ * Elgg users * Functions to manage multiple or single users in an Elgg install * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage DataModel.User */ /// Map a username to a cached GUID @@ -16,7 +16,9 @@ $CODE_TO_GUID_MAP_CACHE = array(); /** * Return the user specific details of a user by a row. * - * @param int $guid + * @param int $guid The ElggUser guid + * + * @return mixed */ function get_user_entity_as_row($guid) { global $CONFIG; @@ -29,10 +31,16 @@ function get_user_entity_as_row($guid) { * Create or update the extras table for a given user. * Call create_entity first. * - * @param int $guid - * @param string $name - * @param string $description - * @param string $url + * @param int $guid The user's GUID + * @param string $name The user's display name + * @param string $username The username + * @param string $password The password + * @param string $salt A salt for the password + * @param string $email The user's email address + * @param string $language The user's default language + * @param string $code A code + * + * @return bool */ function create_user_entity($guid, $name, $username, $password, $salt, $email, $language, $code) { global $CONFIG; @@ -50,12 +58,18 @@ function create_user_entity($guid, $name, $username, $password, $salt, $email, $ if ($row) { // Exists and you have access to it - if ($exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}users_entity where guid = {$guid}")) { - $result = update_data("UPDATE {$CONFIG->dbprefix}users_entity set name='$name', username='$username', password='$password', salt='$salt', email='$email', language='$language', code='$code', last_action = ". time() ." where guid = {$guid}"); + $query = "SELECT guid from {$CONFIG->dbprefix}users_entity where guid = {$guid}"; + if ($exists = get_data_row($query)) { + $query = "UPDATE {$CONFIG->dbprefix}users_entity + set name='$name', username='$username', password='$password', salt='$salt', + email='$email', language='$language', code='$code', last_action = " + . time() . " where guid = {$guid}"; + + $result = update_data($query); if ($result != false) { // Update succeeded, continue $entity = get_entity($guid); - if (trigger_elgg_event('update',$entity->type,$entity)) { + if (trigger_elgg_event('update', $entity->type, $entity)) { return $guid; } else { $entity->delete(); @@ -63,10 +77,14 @@ function create_user_entity($guid, $name, $username, $password, $salt, $email, $ } } else { // Update failed, attempt an insert. - $result = insert_data("INSERT into {$CONFIG->dbprefix}users_entity (guid, name, username, password, salt, email, language, code) values ($guid, '$name', '$username', '$password', '$salt', '$email', '$language', '$code')"); - if ($result!==false) { + $query = "INSERT into {$CONFIG->dbprefix}users_entity + (guid, name, username, password, salt, email, language, code) + values ($guid, '$name', '$username', '$password', '$salt', '$email', '$language', '$code')"; + + $result = insert_data($query); + if ($result !== false) { $entity = get_entity($guid); - if (trigger_elgg_event('create',$entity->type,$entity)) { + if (trigger_elgg_event('create', $entity->type, $entity)) { return $guid; } else { $entity->delete(); //delete_entity($guid); @@ -82,15 +100,20 @@ function create_user_entity($guid, $name, $username, $password, $salt, $email, $ * Disables all of a user's entities * * @param int $owner_guid The owner GUID - * @return true|false Depending on success + * + * @return bool Depending on success */ function disable_user_entities($owner_guid) { global $CONFIG; $owner_guid = (int) $owner_guid; if ($entity = get_entity($owner_guid)) { - if (trigger_elgg_event('disable',$entity->type,$entity)) { + if (trigger_elgg_event('disable', $entity->type, $entity)) { if ($entity->canEdit()) { - $res = update_data("UPDATE {$CONFIG->dbprefix}entities set enabled='no' where owner_guid={$owner_guid} or container_guid = {$owner_guid}"); + $query = "UPDATE {$CONFIG->dbprefix}entities + set enabled='no' where owner_guid={$owner_guid} + or container_guid = {$owner_guid}"; + + $res = update_data($query); return $res; } } @@ -102,8 +125,10 @@ function disable_user_entities($owner_guid) { /** * Ban a user * - * @param int $user_guid The user guid - * @param string $reason A reason + * @param int $user_guid The user guid + * @param string $reason A reason + * + * @return bool */ function ban_user($user_guid, $reason = "") { global $CONFIG; @@ -117,7 +142,7 @@ function ban_user($user_guid, $reason = "") { if (trigger_elgg_event('ban', 'user', $user)) { // Add reason if ($reason) { - create_metadata($user_guid, 'ban_reason', $reason,'', 0, ACCESS_PUBLIC); + create_metadata($user_guid, 'ban_reason', $reason, '', 0, ACCESS_PUBLIC); } // clear "remember me" cookie code so user cannot login in using it @@ -135,7 +160,8 @@ function ban_user($user_guid, $reason = "") { } // Set ban flag - return update_data("UPDATE {$CONFIG->dbprefix}users_entity set banned='yes' where guid=$user_guid"); + $query = "UPDATE {$CONFIG->dbprefix}users_entity set banned='yes' where guid=$user_guid"; + return update_data($query); } return FALSE; @@ -148,6 +174,8 @@ function ban_user($user_guid, $reason = "") { * Unban a user. * * @param int $user_guid Unban a user. + * + * @return bool */ function unban_user($user_guid) { global $CONFIG; @@ -158,7 +186,7 @@ function unban_user($user_guid) { if (($user) && ($user->canEdit()) && ($user instanceof ElggUser)) { if (trigger_elgg_event('unban', 'user', $user)) { - create_metadata($user_guid, 'ban_reason', '','', 0, ACCESS_PUBLIC); + create_metadata($user_guid, 'ban_reason', '', '', 0, ACCESS_PUBLIC); // invalidate memcache for this user static $newentity_cache; @@ -170,7 +198,9 @@ function unban_user($user_guid) { $newentity_cache->delete($user_guid); } - return update_data("UPDATE {$CONFIG->dbprefix}users_entity set banned='no' where guid=$user_guid"); + + $query = "UPDATE {$CONFIG->dbprefix}users_entity set banned='no' where guid=$user_guid"; + return update_data($query); } return FALSE; @@ -182,7 +212,8 @@ function unban_user($user_guid) { /** * Makes user $guid an admin. * - * @param int $guid + * @param int $user_guid User guid + * * @return bool */ function make_user_admin($user_guid) { @@ -217,7 +248,8 @@ function make_user_admin($user_guid) { /** * Removes user $guid's admin flag. * - * @param int $guid + * @param int $user_guid User GUID + * * @return bool */ function remove_user_admin($user_guid) { @@ -253,8 +285,12 @@ function remove_user_admin($user_guid) { * THIS FUNCTION IS DEPRECATED. * * Delete a user's extra data. + * * @todo remove - * @param int $guid + * + * @param int $guid User GUID + * + * @return 1 */ function delete_user_entity($guid) { system_message(sprintf(elgg_echo('deprecatedfunction'), 'delete_user_entity')); @@ -266,8 +302,9 @@ function delete_user_entity($guid) { * Get the sites this user is part of * * @param int $user_guid The user's GUID - * @param int $limit Number of results to return - * @param int $offset Any indexing offset + * @param int $limit Number of results to return + * @param int $offset Any indexing offset + * * @return false|array On success, an array of ElggSites */ function get_user_sites($user_guid, $limit = 10, $offset = 0) { @@ -288,9 +325,10 @@ function get_user_sites($user_guid, $limit = 10, $offset = 0) { /** * Adds a user to another user's friends list. * - * @param int $user_guid The GUID of the friending user + * @param int $user_guid The GUID of the friending user * @param int $friend_guid The GUID of the user to friend - * @return true|false Depending on success + * + * @return bool Depending on success */ function user_add_friend($user_guid, $friend_guid) { $user_guid = (int) $user_guid; @@ -313,9 +351,10 @@ function user_add_friend($user_guid, $friend_guid) { /** * Removes a user from another user's friends list. * - * @param int $user_guid The GUID of the friending user + * @param int $user_guid The GUID of the friending user * @param int $friend_guid The GUID of the user on the friends list - * @return true|false Depending on success + * + * @return bool Depending on success */ function user_remove_friend($user_guid, $friend_guid) { global $CONFIG; @@ -337,9 +376,10 @@ function user_remove_friend($user_guid, $friend_guid) { /** * Determines whether or not a user is another user's friend. * - * @param int $user_guid The GUID of the user + * @param int $user_guid The GUID of the user * @param int $friend_guid The GUID of the friend - * @return true|false + * + * @return bool */ function user_is_friend($user_guid, $friend_guid) { return check_entity_relationship($user_guid, "friend", $friend_guid); @@ -348,13 +388,16 @@ function user_is_friend($user_guid, $friend_guid) { /** * Obtains a given user's friends * - * @param int $user_guid The user's GUID - * @param string $subtype The subtype of users, if any - * @param int $limit Number of results to return (default 10) - * @param int $offset Indexing offset, if any + * @param int $user_guid The user's GUID + * @param string $subtype The subtype of users, if any + * @param int $limit Number of results to return (default 10) + * @param int $offset Indexing offset, if any + * * @return false|array Either an array of ElggUsers or false, depending on success */ -function get_user_friends($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, $offset = 0) { +function get_user_friends($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, +$offset = 0) { + return elgg_get_entities_from_relationship(array( 'relationship' => 'friend', 'relationship_guid' => $user_guid, @@ -368,13 +411,16 @@ function get_user_friends($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit /** * Obtains the people who have made a given user a friend * - * @param int $user_guid The user's GUID - * @param string $subtype The subtype of users, if any - * @param int $limit Number of results to return (default 10) - * @param int $offset Indexing offset, if any + * @param int $user_guid The user's GUID + * @param string $subtype The subtype of users, if any + * @param int $limit Number of results to return (default 10) + * @param int $offset Indexing offset, if any + * * @return false|array Either an array of ElggUsers or false, depending on success */ -function get_user_friends_of($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, $offset = 0) { +function get_user_friends_of($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, +$offset = 0) { + return elgg_get_entities_from_relationship(array( 'relationship' => 'friend', 'relationship_guid' => $user_guid, @@ -389,15 +435,18 @@ function get_user_friends_of($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $li /** * Obtains a list of objects owned by a user * - * @param int $user_guid The GUID of the owning user - * @param string $subtype Optionally, the subtype of objects - * @param int $limit The number of results to return (default 10) - * @param int $offset Indexing offset, if any - * @param int $timelower The earliest time the entity can have been created. Default: all - * @param int $timeupper The latest time the entity can have been created. Default: all + * @param int $user_guid The GUID of the owning user + * @param string $subtype Optionally, the subtype of objects + * @param int $limit The number of results to return (default 10) + * @param int $offset Indexing offset, if any + * @param int $timelower The earliest time the entity can have been created. Default: all + * @param int $timeupper The latest time the entity can have been created. Default: all + * * @return false|array An array of ElggObjects or false, depending on success */ -function get_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, $offset = 0, $timelower = 0, $timeupper = 0) { +function get_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, +$offset = 0, $timelower = 0, $timeupper = 0) { + $ntt = elgg_get_entities(array( 'type' => 'object', 'subtype' => $subtype, @@ -414,13 +463,16 @@ function get_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit /** * Counts the objects (optionally of a particular subtype) owned by a user * - * @param int $user_guid The GUID of the owning user - * @param string $subtype Optionally, the subtype of objects - * @param int $timelower The earliest time the entity can have been created. Default: all - * @param int $timeupper The latest time the entity can have been created. Default: all + * @param int $user_guid The GUID of the owning user + * @param string $subtype Optionally, the subtype of objects + * @param int $timelower The earliest time the entity can have been created. Default: all + * @param int $timeupper The latest time the entity can have been created. Default: all + * * @return int The number of objects the user owns (of this subtype) */ -function count_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $timelower = 0, $timeupper = 0) { +function count_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $timelower = 0, +$timeupper = 0) { + $total = elgg_get_entities(array( 'type' => 'object', 'subtype' => $subtype, @@ -438,40 +490,47 @@ function count_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $tim * * @see elgg_view_entity_list * - * @param int $user_guid The GUID of the user - * @param string $subtype The object subtype - * @param int $limit The number of entities to display on a page - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow gallery view (default: true) - * @param true|false $pagination Whether to display pagination (default: true) - * @param int $timelower The earliest time the entity can have been created. Default: all - * @param int $timeupper The latest time the entity can have been created. Default: all + * @param int $user_guid The GUID of the user + * @param string $subtype The object subtype + * @param int $limit The number of entities to display on a page + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow gallery view (default: true) + * @param bool $pagination Whether to display pagination (default: true) + * @param int $timelower The earliest time the entity can have been created. Default: all + * @param int $timeupper The latest time the entity can have been created. Default: all + * * @return string The list in a form suitable to display */ -function list_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true, $timelower = 0, $timeupper = 0) { +function list_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, +$fullview = true, $viewtypetoggle = true, $pagination = true, $timelower = 0, $timeupper = 0) { + $offset = (int) get_input('offset'); $limit = (int) $limit; - $count = (int) count_user_objects($user_guid, $subtype,$timelower,$timeupper); + $count = (int) count_user_objects($user_guid, $subtype, $timelower, $timeupper); $entities = get_user_objects($user_guid, $subtype, $limit, $offset, $timelower, $timeupper); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, + $pagination); } /** * Obtains a list of objects owned by a user's friends * - * @param int $user_guid The GUID of the user to get the friends of - * @param string $subtype Optionally, the subtype of objects - * @param int $limit The number of results to return (default 10) - * @param int $offset Indexing offset, if any - * @param int $timelower The earliest time the entity can have been created. Default: all - * @param int $timeupper The latest time the entity can have been created. Default: all + * @param int $user_guid The GUID of the user to get the friends of + * @param string $subtype Optionally, the subtype of objects + * @param int $limit The number of results to return (default 10) + * @param int $offset Indexing offset, if any + * @param int $timelower The earliest time the entity can have been created. Default: all + * @param int $timeupper The latest time the entity can have been created. Default: all + * * @return false|array An array of ElggObjects or false, depending on success */ -function get_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, $offset = 0, $timelower = 0, $timeupper = 0) { +function get_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10, +$offset = 0, $timelower = 0, $timeupper = 0) { + if ($friends = get_user_friends($user_guid, "", 999999, 0)) { $friendguids = array(); - foreach($friends as $friend) { + foreach ($friends as $friend) { $friendguids[] = $friend->getGUID(); } return elgg_get_entities(array( @@ -491,16 +550,19 @@ function get_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE /** * Counts the number of objects owned by a user's friends * - * @param int $user_guid The GUID of the user to get the friends of - * @param string $subtype Optionally, the subtype of objects - * @param int $timelower The earliest time the entity can have been created. Default: all - * @param int $timeupper The latest time the entity can have been created. Default: all + * @param int $user_guid The GUID of the user to get the friends of + * @param string $subtype Optionally, the subtype of objects + * @param int $timelower The earliest time the entity can have been created. Default: all + * @param int $timeupper The latest time the entity can have been created. Default: all + * * @return int The number of objects */ -function count_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $timelower = 0, $timeupper = 0) { +function count_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, +$timelower = 0, $timeupper = 0) { + if ($friends = get_user_friends($user_guid, "", 999999, 0)) { $friendguids = array(); - foreach($friends as $friend) { + foreach ($friends as $friend) { $friendguids[] = $friend->getGUID(); } return elgg_get_entities(array( @@ -521,44 +583,55 @@ function count_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VAL * * @see elgg_view_entity_list * - * @param int $user_guid The GUID of the user - * @param string $subtype The object subtype - * @param int $limit The number of entities to display on a page - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow you to flip to gallery mode (default: true) - * @param true|false $pagination Whether to display pagination (default: true) - * @param int $timelower The earliest time the entity can have been created. Default: all - * @param int $timeupper The latest time the entity can have been created. Default: all + * @param int $user_guid The GUID of the user + * @param string $subtype The object subtype + * @param int $limit The number of entities to display on a page + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow you to flip to gallery mode (default: true) + * @param bool $pagination Whether to display pagination (default: true) + * @param int $timelower The earliest time the entity can have been created. Default: all + * @param int $timeupper The latest time the entity can have been created. Default: all + * * @return string The list in a form suitable to display */ -function list_user_friends_objects($user_guid, $subtype = "", $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true, $timelower = 0, $timeupper = 0) { +function list_user_friends_objects($user_guid, $subtype = "", $limit = 10, $fullview = true, +$viewtypetoggle = true, $pagination = true, $timelower = 0, $timeupper = 0) { + $offset = (int) get_input('offset'); $limit = (int) $limit; $count = (int) count_user_friends_objects($user_guid, $subtype, $timelower, $timeupper); - $entities = get_user_friends_objects($user_guid, $subtype, $limit, $offset, $timelower, $timeupper); - return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); + $entities = get_user_friends_objects($user_guid, $subtype, $limit, $offset, + $timelower, $timeupper); + + return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, + $viewtypetoggle, $pagination); } /** * Get user objects by an array of metadata * - * @param int $user_guid The GUID of the owning user - * @param string $subtype Optionally, the subtype of objects - * @paran array $metadata An array of metadata - * @param int $limit The number of results to return (default 10) - * @param int $offset Indexing offset, if any + * @param int $user_guid The GUID of the owning user + * @param string $subtype Optionally, the subtype of objects + * @param array $metadata An array of metadata + * @param int $limit The number of results to return (default 10) + * @param int $offset Indexing offset, if any + * * @return false|array An array of ElggObjects or false, depending on success */ -function get_user_objects_by_metadata($user_guid, $subtype = "", $metadata = array(), $limit = 0, $offset = 0) { - return get_entities_from_metadata_multi($metadata,"object",$subtype,$user_guid,$limit,$offset); +function get_user_objects_by_metadata($user_guid, $subtype = "", $metadata = array(), +$limit = 0, $offset = 0) { + return get_entities_from_metadata_multi($metadata, "object", $subtype, $user_guid, + $limit, $offset); } /** * Get a user object from a GUID. * * This function returns an ElggUser from a given GUID. + * * @param int $guid The GUID + * * @return ElggUser|false */ function get_user($guid) { @@ -568,7 +641,6 @@ function get_user($guid) { } if ((!empty($result)) && (!($result instanceof ElggUser))) { - //throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, 'ElggUser')); return false; } @@ -583,6 +655,7 @@ function get_user($guid) { * Get user by username * * @param string $username The user's username + * * @return ElggUser|false Depending on success */ function get_user_by_username($username) { @@ -592,11 +665,16 @@ function get_user_by_username($username) { $access = get_access_sql_suffix('e'); // Caching - if ( (isset($USERNAME_TO_GUID_MAP_CACHE[$username])) && (retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username])) ) { + if ((isset($USERNAME_TO_GUID_MAP_CACHE[$username])) + && (retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]))) { return retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]); } - $row = get_data_row("SELECT e.* from {$CONFIG->dbprefix}users_entity u join {$CONFIG->dbprefix}entities e on e.guid=u.guid where u.username='$username' and $access "); + $query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u + join {$CONFIG->dbprefix}entities e on e.guid=u.guid + where u.username='$username' and $access "; + + $row = get_data_row($query); if ($row) { $USERNAME_TO_GUID_MAP_CACHE[$username] = $row->guid; return new ElggUser($row); @@ -609,6 +687,7 @@ function get_user_by_username($username) { * Get user by session code * * @param string $code The session code + * * @return ElggUser|false Depending on success */ function get_user_by_code($code) { @@ -619,11 +698,17 @@ function get_user_by_code($code) { $access = get_access_sql_suffix('e'); // Caching - if ( (isset($CODE_TO_GUID_MAP_CACHE[$code])) && (retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code])) ) { + if ((isset($CODE_TO_GUID_MAP_CACHE[$code])) + && (retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]))) { + return retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]); } - $row = get_data_row("SELECT e.* from {$CONFIG->dbprefix}users_entity u join {$CONFIG->dbprefix}entities e on e.guid=u.guid where u.code='$code' and $access"); + $query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u + join {$CONFIG->dbprefix}entities e on e.guid=u.guid + where u.code='$code' and $access"; + + $row = get_data_row($query); if ($row) { $CODE_TO_GUID_MAP_CACHE[$code] = $row->guid; return new ElggUser($row); @@ -636,6 +721,7 @@ function get_user_by_code($code) { * Get an array of users from their * * @param string $email Email address. + * * @return Array of users */ function get_user_by_email($email) { @@ -645,7 +731,9 @@ function get_user_by_email($email) { $access = get_access_sql_suffix('e'); - $query = "SELECT e.* from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid where email='$email' and $access"; + $query = "SELECT e.* from {$CONFIG->dbprefix}entities e + join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid + where email='$email' and $access"; return get_data($query, 'entity_row_to_elggstar'); } @@ -653,11 +741,13 @@ function get_user_by_email($email) { /** * Searches for a user based on a complete or partial name or username. * - * @param string $criteria The partial or full name or username. - * @param int $limit Limit of the search. - * @param int $offset Offset. - * @param string $order_by The order. - * @param boolean $count Whether to return the count of results or just the results. + * @param string $criteria The partial or full name or username. + * @param int $limit Limit of the search. + * @param int $offset Offset. + * @param string $order_by The order. + * @param boolean $count Whether to return the count of results or just the results. + * + * @return mixed * @deprecated 1.7 */ function search_for_user($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) { @@ -680,13 +770,14 @@ function search_for_user($criteria, $limit = 10, $offset = 0, $order_by = "", $c } else { $query = "SELECT e.* "; } - $query .= "from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid where "; - // $query .= " match(u.name,u.username) against ('$criteria') "; + $query .= "from {$CONFIG->dbprefix}entities e + join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid where "; + $query .= "(u.name like \"%{$criteria}%\" or u.username like \"%{$criteria}%\")"; $query .= " and $access"; if (!$count) { - $query .= " order by $order_by limit $offset, $limit"; // Add order and limit + $query .= " order by $order_by limit $offset, $limit"; return get_data($query, "entity_row_to_elggstar"); } else { if ($count = get_data_row($query)) { @@ -701,9 +792,11 @@ function search_for_user($criteria, $limit = 10, $offset = 0, $order_by = "", $c * * @see elgg_view_entity_list * - * @param string $tag Search criteria - * @param int $limit The number of entities to display on a page + * @param string $tag Search criteria + * @param int $limit The number of entities to display on a page + * * @return string The list in a form suitable to display + * * @deprecated 1.7 */ function list_user_search($tag, $limit = 10) { @@ -721,8 +814,10 @@ function list_user_search($tag, $limit = 10) { * $seconds seconds. * * @param int $seconds Number of seconds (default 600 = 10min) - * @param int $limit Limit, default 10. - * @param int $offset Offset, defualt 0. + * @param int $limit Limit, default 10. + * @param int $offset Offset, defualt 0. + * + * @return mixed */ function find_active_users($seconds = 600, $limit = 10, $offset = 0) { global $CONFIG; @@ -735,7 +830,10 @@ function find_active_users($seconds = 600, $limit = 10, $offset = 0) { $access = get_access_sql_suffix("e"); - $query = "SELECT distinct e.* from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}users_entity u on e.guid = u.guid where u.last_action >= {$time} and $access order by u.last_action desc limit {$offset},{$limit}"; + $query = "SELECT distinct e.* from {$CONFIG->dbprefix}entities e + join {$CONFIG->dbprefix}users_entity u on e.guid = u.guid + where u.last_action >= {$time} and $access + order by u.last_action desc limit {$offset}, {$limit}"; return get_data($query, "entity_row_to_elggstar"); } @@ -743,7 +841,9 @@ function find_active_users($seconds = 600, $limit = 10, $offset = 0) { /** * Generate and send a password request email to a given user's registered email address. * - * @param int $user_guid + * @param int $user_guid User GUID + * + * @return bool */ function send_new_password_request($user_guid) { global $CONFIG; @@ -754,7 +854,7 @@ function send_new_password_request($user_guid) { if ($user) { // generate code $code = generate_random_cleartext_password(); - //create_metadata($user_guid, 'conf_code', $code,'', 0, ACCESS_PRIVATE); + //create_metadata($user_guid, 'conf_code', $code, '', 0, ACCESS_PRIVATE); set_private_setting($user_guid, 'passwd_conf_code', $code); // generate link @@ -763,7 +863,8 @@ function send_new_password_request($user_guid) { // generate email $email = sprintf(elgg_echo('email:resetreq:body'), $user->name, $_SERVER['REMOTE_ADDR'], $link); - return notify_user($user->guid, $CONFIG->site->guid, elgg_echo('email:resetreq:subject'), $email, NULL, 'email'); + return notify_user($user->guid, $CONFIG->site->guid, + elgg_echo('email:resetreq:subject'), $email, NULL, 'email'); } return false; @@ -774,8 +875,10 @@ function send_new_password_request($user_guid) { * * This can only be called from execute_new_password_request(). * - * @param int $user_guid The user. - * @param string $password password text (which will then be converted into a hash and stored) + * @param int $user_guid The user. + * @param string $password Text (which will then be converted into a hash and stored) + * + * @return bool */ function force_user_password_reset($user_guid, $password) { global $CONFIG; @@ -789,7 +892,9 @@ function force_user_password_reset($user_guid, $password) { $hash = generate_user_password($user, $password); - return update_data("UPDATE {$CONFIG->dbprefix}users_entity set password='$hash', salt='$salt' where guid=$user_guid"); + $query = "UPDATE {$CONFIG->dbprefix}users_entity + set password='$hash', salt='$salt' where guid=$user_guid"; + return update_data($query); } } @@ -799,8 +904,10 @@ function force_user_password_reset($user_guid, $password) { /** * Validate and execute a password reset for a user. * - * @param int $user_guid The user id + * @param int $user_guid The user id * @param string $conf_code Confirmation code as sent in the request email. + * + * @return mixed */ function execute_new_password_request($user_guid, $conf_code) { global $CONFIG; @@ -818,7 +925,8 @@ function execute_new_password_request($user_guid, $conf_code) { $email = sprintf(elgg_echo('email:resetpassword:body'), $user->name, $password); - return notify_user($user->guid, $CONFIG->site->guid, elgg_echo('email:resetpassword:subject'), $email, NULL, 'email'); + return notify_user($user->guid, $CONFIG->site->guid, + elgg_echo('email:resetpassword:subject'), $email, NULL, 'email'); } } @@ -828,8 +936,9 @@ function execute_new_password_request($user_guid, $conf_code) { /** * Handles pages for password reset requests. * - * @param unknown_type $page - * @return unknown_type + * @param array $page Pages array + * + * @return void */ function elgg_user_resetpassword_page_handler($page) { global $CONFIG; @@ -873,9 +982,11 @@ function elgg_user_resetpassword_page_handler($page) { } /** - * Simple function that will generate a random clear text password suitable for feeding into generate_user_password(). + * Simple function that will generate a random clear text password + * suitable for feeding into generate_user_password(). * * @see generate_user_password + * * @return string */ function generate_random_cleartext_password() { @@ -885,10 +996,10 @@ function generate_random_cleartext_password() { /** * Generate a password for a user, currently uses MD5. * - * Later may introduce salting etc. + * @param ElggUser $user The user this is being generated for. + * @param string $password Password in clear text * - * @param ElggUser $user The user this is being generated for. - * @param string $password Password in clear text + * @return string */ function generate_user_password(ElggUser $user, $password) { return md5($password . $user->salt); @@ -899,7 +1010,9 @@ function generate_user_password(ElggUser $user, $password) { * * This should only permit chars that are valid on the file system as well. * - * @param string $username + * @param string $username Username + * + * @return bool * @throws RegistrationException on invalid */ function validate_username($username) { @@ -915,14 +1028,13 @@ function validate_username($username) { } // Blacklist for bad characters (partially nicked from mediawiki) - $blacklist = '/[' . - '\x{0080}-\x{009f}' . # iso-8859-1 control chars - '\x{00a0}' . # non-breaking space - '\x{2000}-\x{200f}' . # various whitespace - '\x{2028}-\x{202f}' . # breaks and control chars - '\x{3000}' . # ideographic space - '\x{e000}-\x{f8ff}' . # private use + '\x{0080}-\x{009f}' . // iso-8859-1 control chars + '\x{00a0}' . // non-breaking space + '\x{2000}-\x{200f}' . // various whitespace + '\x{2028}-\x{202f}' . // breaks and control chars + '\x{3000}' . // ideographic space + '\x{e000}-\x{f8ff}' . // private use ']/u'; if ( @@ -934,20 +1046,25 @@ function validate_username($username) { // Belts and braces // @todo Tidy into main unicode $blacklist2 = '\'/\\"*& ?#%^(){}[]~?<>;|¬`@-+='; - for ($n=0; $n < strlen($blacklist2); $n++) { - if (strpos($username, $blacklist2[$n])!==false) { - throw new RegistrationException(sprintf(elgg_echo('registration:invalidchars'), $blacklist2[$n], $blacklist2)); + + for ($n = 0; $n < strlen($blacklist2); $n++) { + if (strpos($username, $blacklist2[$n]) !== false) { + $msg = sprintf(elgg_echo('registration:invalidchars'), $blacklist2[$n], $blacklist2); + throw new RegistrationException($msg); } } $result = true; - return trigger_plugin_hook('registeruser:validate:username', 'all', array('username' => $username), $result); + return trigger_plugin_hook('registeruser:validate:username', 'all', + array('username' => $username), $result); } /** * Simple validation of a password. * - * @param string $password + * @param string $password Clear text password + * + * @return bool * @throws RegistrationException on invalid */ function validate_password($password) { @@ -958,13 +1075,15 @@ function validate_password($password) { } $result = true; - return trigger_plugin_hook('registeruser:validate:password', 'all', array('password' => $password), $result); + return trigger_plugin_hook('registeruser:validate:password', 'all', + array('password' => $password), $result); } /** * Simple validation of a email. * - * @param string $address + * @param string $address Email address + * * @throws RegistrationException on invalid * @return bool */ @@ -975,21 +1094,27 @@ function validate_email_address($address) { // Got here, so lets try a hook (defaulting to ok) $result = true; - return trigger_plugin_hook('registeruser:validate:email', 'all', array('email' => $address), $result); + return trigger_plugin_hook('registeruser:validate:email', 'all', + array('email' => $address), $result); } /** * Registers a user, returning false if the username already exists * - * @param string $username The username of the new user - * @param string $password The password - * @param string $name The user's display name - * @param string $email Their email address - * @param bool $allow_multiple_emails Allow the same email address to be registered multiple times? - * @param int $friend_guid Optionally, GUID of a user this user will friend once fully registered + * @param string $username The username of the new user + * @param string $password The password + * @param string $name The user's display name + * @param string $email Their email address + * @param bool $allow_multiple_emails Allow the same email address to be + * registered multiple times? + * @param int $friend_guid GUID of a user to friend once fully registered + * @param string $invitecode An invite code from a friend + * * @return int|false The new user's GUID; false on failure */ -function register_user($username, $password, $name, $email, $allow_multiple_emails = false, $friend_guid = 0, $invitecode = '') { +function register_user($username, $password, $name, $email, +$allow_multiple_emails = false, $friend_guid = 0, $invitecode = '') { + // Load the configuration global $CONFIG; @@ -1084,6 +1209,7 @@ function register_user($username, $password, $name, $email, $allow_multiple_emai * Generates a unique invite code for a user * * @param string $username The username of the user sending the invitation + * * @return string Invite code */ function generate_invite_code($username) { @@ -1094,24 +1220,32 @@ function generate_invite_code($username) { /** * Adds collection submenu items * + * @return void */ function collections_submenu_items() { global $CONFIG; $user = get_loggedin_user(); - add_submenu_item(elgg_echo('friends:collections'), $CONFIG->wwwroot . "pg/collections/" . $user->username); + + add_submenu_item(elgg_echo('friends:collections'), + $CONFIG->wwwroot . "pg/collections/" . $user->username); + add_submenu_item(elgg_echo('friends:collections:add'), $CONFIG->wwwroot . "pg/collections/add"); } /** * Page handler for friends * + * @param array $page_elements Page elements + * + * @return void */ function friends_page_handler($page_elements) { if (isset($page_elements[0]) && $user = get_user_by_username($page_elements[0])) { set_page_owner($user->getGUID()); } if (get_loggedin_userid() == page_owner()) { - // collections_submenu_items(); disabled for now as we no longer use friends collections (replaced by shared access) + // disabled for now as we no longer use friends collections (replaced by shared access) + // collections_submenu_items(); } require_once(dirname(dirname(dirname(__FILE__))) . "/pages/friends/index.php"); } @@ -1119,13 +1253,17 @@ function friends_page_handler($page_elements) { /** * Page handler for friends of * + * @param array $page_elements Page elements + * + * @return void */ function friends_of_page_handler($page_elements) { if (isset($page_elements[0]) && $user = get_user_by_username($page_elements[0])) { set_page_owner($user->getGUID()); } if (get_loggedin_userid() == page_owner()) { - // collections_submenu_items(); disabled for now as we no longer use friends collections (replaced by shared access) + // disabled for now as we no longer use friends collections (replaced by shared access) + // collections_submenu_items(); } require_once(dirname(dirname(dirname(__FILE__))) . "/pages/friends/of.php"); } @@ -1133,6 +1271,9 @@ function friends_of_page_handler($page_elements) { /** * Page handler for friends collections * + * @param array $page_elements Page elements + * + * @return void */ function collections_page_handler($page_elements) { if (isset($page_elements[0])) { @@ -1154,6 +1295,10 @@ function collections_page_handler($page_elements) { /** * Page handler for dashboard + * + * @param array $page_elements Page elements + * + * @return void */ function dashboard_page_handler($page_elements) { require_once(dirname(dirname(dirname(__FILE__))) . "/pages/dashboard/index.php"); @@ -1162,6 +1307,10 @@ function dashboard_page_handler($page_elements) { /** * Page handler for registration + * + * @param array $page_elements Page elements + * + * @return void */ function registration_page_handler($page_elements) { require_once(dirname(dirname(dirname(__FILE__))) . "/pages/account/register.php"); @@ -1172,6 +1321,9 @@ function registration_page_handler($page_elements) { * * This is a fallback for non-JS users who click on the * dropdown login link. + * + * @return void + * @todo finish */ function elgg_user_login_page_handler() { $content = elgg_view_layout('one_column', elgg_view('account/forms/login')); @@ -1187,34 +1339,46 @@ function elgg_user_login_page_handler() { * Sets the last action time of the given user to right now. * * @param int $user_guid The user GUID + * + * @return void */ function set_last_action($user_guid) { $user_guid = (int) $user_guid; global $CONFIG; $time = time(); - execute_delayed_write_query("UPDATE {$CONFIG->dbprefix}users_entity set prev_last_action = last_action, last_action = {$time} where guid = {$user_guid}"); + $query = "UPDATE {$CONFIG->dbprefix}users_entity + set prev_last_action = last_action, + last_action = {$time} where guid = {$user_guid}"; + + execute_delayed_write_query($query); } /** * Sets the last logon time of the given user to right now. * * @param int $user_guid The user GUID + * + * @return boid */ function set_last_login($user_guid) { $user_guid = (int) $user_guid; global $CONFIG; $time = time(); - execute_delayed_write_query("UPDATE {$CONFIG->dbprefix}users_entity set prev_last_login = last_login, last_login = {$time} where guid = {$user_guid}"); + $query = "UPDATE {$CONFIG->dbprefix}users_entity + set prev_last_login = last_login, last_login = {$time} where guid = {$user_guid}"; + + execute_delayed_write_query($query); } /** * Creates a relationship between this site and the user. * - * @param $event - * @param $object_type - * @param $object + * @param string $event create + * @param string $object_type user + * @param ElggUser $object User object + * * @return bool */ function user_create_hook_add_site_relationship($event, $object_type, $object) { @@ -1226,23 +1390,32 @@ function user_create_hook_add_site_relationship($event, $object_type, $object) { /** * Sets up user-related menu items * + * @return void */ function users_pagesetup() { // Load config global $CONFIG; //add submenu options - if (get_context() == "friends" || get_context() == "friendsof") { // || get_context() == "collections") { - disabled as we no longer use collections - add_submenu_item(elgg_echo('friends'),$CONFIG->wwwroot."pg/friends/" . page_owner_entity()->username); - add_submenu_item(elgg_echo('friends:of'),$CONFIG->wwwroot."pg/friendsof/" . page_owner_entity()->username); - if(is_plugin_enabled('members')) + if (get_context() == "friends" || get_context() == "friendsof") { + // || get_context() == "collections") { - disabled as we no longer use collections + + add_submenu_item(elgg_echo('friends'), $CONFIG->wwwroot . "pg/friends/" + . page_owner_entity()->username); + + add_submenu_item(elgg_echo('friends:of'), $CONFIG->wwwroot . "pg/friendsof/" + . page_owner_entity()->username); + + if (is_plugin_enabled('members')) { add_submenu_item(elgg_echo('members:browse'), $CONFIG->wwwroot . "mod/members/index.php"); + } } } /** * Users initialisation function, which establishes the page handler * + * @return void */ function users_init() { // Load config @@ -1253,7 +1426,8 @@ function users_init() { /* if ( isloggedin() && is_plugin_enabled('profile') ) { $user = get_loggedin_user(); - add_menu(elgg_echo('friends'), $CONFIG->wwwroot . "pg/friends/" . $user->username, array(), 'core:friends'); + add_menu(elgg_echo('friends'), $CONFIG->wwwroot . + "pg/friends/" . $user->username, array(), 'core:friends'); } */ @@ -1299,16 +1473,24 @@ function users_init() { //register_action("user/language"); // Register the user type - register_entity_type('user',''); + register_entity_type('user', ''); - register_plugin_hook('usersettings:save','user','users_settings_save'); + register_plugin_hook('usersettings:save', 'user', 'users_settings_save'); register_elgg_event_handler('create', 'user', 'user_create_hook_add_site_relationship'); } /** * Returns a formatted list of users suitable for injecting into search. + * * @deprecated 1.7 + * + * @param string $hook Hook name + * @param string $user User? + * @param mixed $returnvalue Previous hook's return value + * @param mixed $tag Tag to search against + * + * @return void */ function search_list_users_by_name($hook, $user, $returnvalue, $tag) { elgg_deprecated_notice('search_list_users_by_name() was deprecated by new search', 1.7); @@ -1318,20 +1500,29 @@ function search_list_users_by_name($hook, $user, $returnvalue, $tag) { $object = get_input('object'); if (!get_input('offset') && (empty($object) || $object == 'user')) { - if ($users = search_for_user($tag,$threshold)) { - $countusers = search_for_user($tag,0,0,"",true); + if ($users = search_for_user($tag, $threshold)) { + $countusers = search_for_user($tag, 0, 0, "", true); - $return = elgg_view('user/search/startblurb',array('count' => $countusers, 'tag' => $tag)); - foreach($users as $user) { + $return = elgg_view('user/search/startblurb', array('count' => $countusers, 'tag' => $tag)); + foreach ($users as $user) { $return .= elgg_view_entity($user); } - $return .= elgg_view('user/search/finishblurb',array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag)); + + $vars = array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag); + $return .= elgg_view('user/search/finishblurb', $vars); return $return; } } } +/** + * Saves user settings by directly including actions. + * + * @todo this is dirty. + * + * @return void + */ function users_settings_save() { global $CONFIG; include($CONFIG->path . "actions/user/name.php"); @@ -1343,6 +1534,13 @@ function users_settings_save() { /** * Runs unit tests for ElggObject + * + * @param sting $hook unit_test + * @param string $type system + * @param mixed $value Array of tests + * @param mixed $params Params + * + * @return array */ function users_test($hook, $type, $value, $params) { global $CONFIG; @@ -1350,7 +1548,6 @@ function users_test($hook, $type, $value, $params) { return $value; } -//register actions ************************************************************* -register_elgg_event_handler('init','system','users_init',0); -register_elgg_event_handler('pagesetup','system','users_pagesetup',0); +register_elgg_event_handler('init', 'system', 'users_init', 0); +register_elgg_event_handler('pagesetup', 'system', 'users_pagesetup', 0); register_plugin_hook('unit_test', 'system', 'users_test');
\ No newline at end of file diff --git a/engine/lib/usersettings.php b/engine/lib/usersettings.php index a815556dd..bec202b8a 100644 --- a/engine/lib/usersettings.php +++ b/engine/lib/usersettings.php @@ -3,31 +3,41 @@ * Elgg user settings functions. * Functions for adding and manipulating options on the user settings panel. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Settings.User */ /** * Register a user settings page with the admin panel. - * This function extends the view "usersettings/main" with the provided view. This view should provide a description - * and either a control or a link to. + * This function extends the view "usersettings/main" with the provided view. + * This view should provide a description and either a control or a link to. * * Usage: * - To add a control to the main admin panel then extend usersettings/main - * - To add a control to a new page create a page which renders a view usersettings/subpage (where subpage is your new page - - * nb. some pages already exist that you can extend), extend the main view to point to it, and add controls to your - * new view. + * - To add a control to a new page create a page which renders a view + * usersettings/subpage (where subpage is your new page - + * nb. some pages already exist that you can extend), extend the main view + * to point to it, and add controls to your new view. * * At the moment this is essentially a wrapper around elgg_extend_view(). * * @param string $new_settings_view The view associated with the control you're adding - * @param string $view The view to extend, by default this is 'usersettings/main'. - * @param int $priority Optional priority to govern the appearance in the list. + * @param string $view The view to extend, by default this is 'usersettings/main'. + * @param int $priority Optional priority to govern the appearance in the list. + * + * @return bool */ -function extend_elgg_settings_page( $new_settings_view, $view = 'usersettings/main', $priority = 500) { +function extend_elgg_settings_page($new_settings_view, $view = 'usersettings/main', +$priority = 500) { + return elgg_extend_view($view, $new_settings_view, $priority); } +/** + * Set up the page for user settings + * + * @return void + */ function usersettings_pagesetup() { // Get config global $CONFIG; @@ -35,12 +45,24 @@ function usersettings_pagesetup() { // Menu options if (get_context() == "settings") { $user = get_loggedin_user(); - add_submenu_item(elgg_echo('usersettings:user:opt:linktext'),$CONFIG->wwwroot . "pg/settings/user/{$user->username}/"); - add_submenu_item(elgg_echo('usersettings:plugins:opt:linktext'),$CONFIG->wwwroot . "pg/settings/plugins/{$user->username}/"); - add_submenu_item(elgg_echo('usersettings:statistics:opt:linktext'),$CONFIG->wwwroot . "pg/settings/statistics/{$user->username}/"); + add_submenu_item(elgg_echo('usersettings:user:opt:linktext'), + $CONFIG->wwwroot . "pg/settings/user/{$user->username}/"); + + add_submenu_item(elgg_echo('usersettings:plugins:opt:linktext'), + $CONFIG->wwwroot . "pg/settings/plugins/{$user->username}/"); + + add_submenu_item(elgg_echo('usersettings:statistics:opt:linktext'), + $CONFIG->wwwroot . "pg/settings/statistics/{$user->username}/"); } } +/** + * Page handler for user settings + * + * @param array $page Pages array + * + * @return void + */ function usersettings_page_handler($page) { global $CONFIG; @@ -69,12 +91,14 @@ function usersettings_page_handler($page) { /** * Initialise the admin page. + * + * @return void */ function usersettings_init() { // Page handler - register_page_handler('settings','usersettings_page_handler'); + register_page_handler('settings', 'usersettings_page_handler'); } /// Register init function -register_elgg_event_handler('init','system','usersettings_init'); -register_elgg_event_handler('pagesetup','system','usersettings_pagesetup');
\ No newline at end of file +register_elgg_event_handler('init', 'system', 'usersettings_init'); +register_elgg_event_handler('pagesetup', 'system', 'usersettings_pagesetup');
\ No newline at end of file diff --git a/engine/lib/version.php b/engine/lib/version.php index db3eb907e..c11707417 100644 --- a/engine/lib/version.php +++ b/engine/lib/version.php @@ -3,15 +3,17 @@ * Elgg version library. * Contains code for handling versioning and upgrades. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Version */ /** * Run any php upgrade scripts which are required * - * @param int $version Version upgrading from. - * @param bool $quiet Suppress errors. Don't use this. + * @param int $version Version upgrading from. + * @param bool $quiet Suppress errors. Don't use this. + * + * @return bool */ function upgrade_code($version, $quiet = FALSE) { global $CONFIG; @@ -42,7 +44,7 @@ function upgrade_code($version, $quiet = FALSE) { asort($upgrades); if (sizeof($upgrades) > 0) { - foreach($upgrades as $upgrade) { + foreach ($upgrades as $upgrade) { // hide all errors. if ($quiet) { // hide include errors as well as any exceptions that might happen @@ -68,7 +70,8 @@ function upgrade_code($version, $quiet = FALSE) { /** * Get the current version information * - * @param true|false $humanreadable Whether to return a human readable version (default: false) + * @param bool $humanreadable Whether to return a human readable version (default: false) + * * @return string|false Depending on success */ function get_version($humanreadable = false) { @@ -98,13 +101,15 @@ function version_upgrade_check() { } /** - * Upgrades Elgg + * Upgrades Elgg Database and code + * + * @return bool * */ function version_upgrade() { // It's possible large upgrades could exceed the max execution time. set_time_limit(0); - + $dbversion = (int) datalist_get('version'); // No version number? Oh snap...this is an upgrade from a clean installation < 1.7. diff --git a/engine/lib/views.php b/engine/lib/views.php index cceb71c55..755fa9da2 100644 --- a/engine/lib/views.php +++ b/engine/lib/views.php @@ -64,6 +64,7 @@ $CURRENT_SYSTEM_VIEWTYPE = ""; * @tip Call elgg_set_viewtype() with no parameter to reset. * * @param string $viewtype The view type, e.g. 'rss', or 'default'. + * * @return bool * @link http://docs.elgg.org/Views/Viewtype * @example views/viewtype.php @@ -102,10 +103,12 @@ function elgg_get_viewtype() { } // @todo what is this? Why would you want to save a viewtype to the session? - if ((empty($_SESSION['view'])) || ( (trim($CONFIG->view!="")) && ($_SESSION['view']!=$CONFIG->view) )) { + if ((empty($_SESSION['view'])) || ( (trim($CONFIG->view != "")) + && ($_SESSION['view'] != $CONFIG->view) )) { + $_SESSION['view'] = "default"; // If we have a config default view for this site then use that instead of 'default' - if ((!empty($CONFIG->view)) && (trim($CONFIG->view)!="")) { + if ((!empty($CONFIG->view)) && (trim($CONFIG->view) != "")) { $_SESSION['view'] = $CONFIG->view; } } @@ -128,6 +131,8 @@ function elgg_get_viewtype() { * @tip This is useful for alternate html viewtypes (such as for mobile devices). * * @param string $viewtype The viewtype to register + * + * @return void * @since 1.7.2 * @example views/viewtype_fallback.php Fallback from mobile to default. */ @@ -148,7 +153,8 @@ function elgg_register_viewtype_fallback($viewtype) { /** * Checks if a viewtype falls back to default. * - * @param string $viewtype + * @param string $viewtype Viewtype + * * @return boolean * @since 1.7.2 */ @@ -169,9 +175,10 @@ function elgg_does_viewtype_fallback($viewtype) { * @warning This doesn't check if the file exists, but only * constructs (or extracts) the path and returns it. * - * @param string $view The view. + * @param string $view The view. * @param string $viewtype The viewtype - * Views + * + * @return string */ function elgg_get_view_location($view, $viewtype = '') { global $CONFIG; @@ -213,11 +220,15 @@ function elgg_get_view_location($view, $viewtype = '') { * @warning Any variables in $_SESSION will override passed vars * upon name collision. See {@trac #2124}. * - * @param string $view The name and location of the view to use - * @param array $vars Variables to pass to the view. - * @param boolean $bypass If set to true, elgg_view will bypass any specified alternative template handler; by default, it will hand off to this if requested (see set_template_handler) - * @param boolean $debug If set to true, the viewer will complain if it can't find a view - * @param string $viewtype If set, forces the viewtype for the elgg_view call to be this value (default: standard detection) + * @param string $view The name and location of the view to use + * @param array $vars Variables to pass to the view. + * @param boolean $bypass If set to true, elgg_view will bypass any specified + * alternative template handler; by default, it will + * hand off to this if requested (see set_template_handler) + * @param boolean $debug If set to true, the viewer will complain if it can't find a view + * @param string $viewtype If set, forces the viewtype for the elgg_view call to be + * this value (default: standard detection) + * * @return string The parsed view * @see set_template_handler() * @example views/elgg_view.php @@ -240,7 +251,7 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie // Trigger the pagesetup event if (!isset($CONFIG->pagesetupdone)) { - trigger_elgg_event('pagesetup','system'); + trigger_elgg_event('pagesetup', 'system'); $CONFIG->pagesetupdone = true; } @@ -321,7 +332,7 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie // Start the output buffer, find the requested view file, and execute it ob_start(); - foreach($viewlist as $priority => $view) { + foreach ($viewlist as $priority => $view) { $view_location = elgg_get_view_location($view, $viewtype); $view_file = "$view_location$viewtype/$view.php"; @@ -357,7 +368,8 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie array('view' => $view_orig, 'vars' => $vars), $content); // backward compatibility with less grandular hook will be gone in 2.0 - $content_tmp = trigger_plugin_hook('display', 'view', array('view' => $view_orig, 'vars' => $vars), $content); + $params = array('view' => $view_orig, 'vars' => $vars); + $content_tmp = trigger_plugin_hook('display', 'view', $params, $content); if ($content_tmp != $content) { $content = $content_tmp; @@ -372,9 +384,10 @@ function elgg_view($view, $vars = array(), $bypass = false, $debug = false, $vie * * @note If $recurse is strue, also checks if a view exists only as an extension. * - * @param string $view The view name + * @param string $view The view name * @param string $viewtype If set, forces the viewtype - * @param bool $recurse If false, do not check extensions + * @param bool $recurse If false, do not check extensions + * * @return bool */ function elgg_view_exists($view, $viewtype = '', $recurse = true) { @@ -402,7 +415,7 @@ function elgg_view_exists($view, $viewtype = '', $recurse = true) { // If we got here then check whether this exists as an extension // We optionally recursively check whether the extended view exists also for the viewtype if ($recurse && isset($CONFIG->views->extensions[$view])) { - foreach( $CONFIG->views->extensions[$view] as $view_extension ) { + foreach ($CONFIG->views->extensions[$view] as $view_extension) { // do not recursively check to stay away from infinite loops if (elgg_view_exists($view_extension, $viewtype, false)) { return true; @@ -428,6 +441,8 @@ function elgg_view_exists($view, $viewtype = '', $recurse = true) { * @note CSS and the basic JS views are automatically cached. * * @param string $viewname View name + * + * @return void * @link http://docs.elgg.org/Views/Simplecache * @see elgg_view_regenerate_simplecache() */ @@ -451,6 +466,8 @@ function elgg_view_register_simplecache($viewname) { * @warning This does not invalidate the cache, but actively resets it. * * @param string $viewtype Optional viewtype to regenerate + * + * @return void * @see elgg_view_register_simplecache() */ function elgg_view_regenerate_simplecache($viewtype = NULL) { @@ -510,6 +527,7 @@ function elgg_view_regenerate_simplecache($viewtype = NULL) { * * @access private * @see elgg_view_register_simplecache() + * @return void */ function elgg_view_enable_simplecache() { global $CONFIG; @@ -526,18 +544,19 @@ function elgg_view_enable_simplecache() { * * @access private * @see elgg_view_register_simplecache() + * @return void */ function elgg_view_disable_simplecache() { global $CONFIG; if ($CONFIG->simplecache_enabled) { - datalist_set('simplecache_enabled',0); + datalist_set('simplecache_enabled', 0); $CONFIG->simplecache_enabled = 0; // purge simple cache - if ($handle = opendir($CONFIG->dataroot.'views_simplecache')) { + if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { - unlink($CONFIG->dataroot.'views_simplecache/'.$file); + unlink($CONFIG->dataroot . 'views_simplecache/' . $file); } } closedir($handle); @@ -548,6 +567,7 @@ function elgg_view_disable_simplecache() { /** * Invalidates all cached views in the simplecache * + * @return bool * @since 1.7.4 */ function elgg_invalidate_simplecache() { @@ -558,7 +578,7 @@ function elgg_invalidate_simplecache() { if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { - $return = $return && unlink($CONFIG->dataroot.'views_simplecache/'.$file); + $return = $return && unlink($CONFIG->dataroot . 'views_simplecache/' . $file); } } closedir($handle); @@ -574,24 +594,26 @@ function elgg_invalidate_simplecache() { * * Use this to get all namespaced views under the first element. * - * @param string $dir The main directory that holds the views. (mod/profile/views/) + * @param string $dir The main directory that holds the views. (mod/profile/views/) * @param string $base The root name of the view to use, without the viewtype. (profile) + * * @return array * @since 1.7.0 - * @todo Why isn't this used anywhere else but in elgg_view_tree()? Seems like a useful function for autodiscovery. + * @todo Why isn't this used anywhere else but in elgg_view_tree()? + * Seems like a useful function for autodiscovery. */ function elgg_get_views($dir, $base) { $return = array(); if (file_exists($dir) && is_dir($dir)) { if ($handle = opendir($dir)) { while ($view = readdir($handle)) { - if (!in_array($view, array('.','..','.svn','CVS'))) { + if (!in_array($view, array('.', '..', '.svn', 'CVS'))) { if (is_dir($dir . '/' . $view)) { if ($val = elgg_get_views($dir . '/' . $view, $base . '/' . $view)) { $return = array_merge($return, $val); } } else { - $view = str_replace('.php','',$view); + $view = str_replace('.php', '', $view); $return[] = $base . '/' . $view; } } @@ -603,9 +625,14 @@ function elgg_get_views($dir, $base) { } /** + * Get views in a dir + * * @deprecated 1.7. Use elgg_get_views(). - * @param $dir - * @param $base + * + * @param string $dir Dir + * @param string $base Base view + * + * @return array */ function get_views($dir, $base) { elgg_deprecated_notice('get_views() was deprecated by elgg_get_views()!', 1.7); @@ -619,7 +646,9 @@ function get_views($dir, $base) { * the "profile" namespace. * * @param string $view_root The root view - * @param string $viewtype Optionally specify a view type other than the current one. + * @param string $viewtype Optionally specify a view type + * other than the current one. + * * @return array A list of view names underneath that root view * @todo This is used once in the deprecated get_activity_stream_data() function. */ @@ -643,8 +672,8 @@ function elgg_view_tree($view_root, $viewtype = "") { // Examine $CONFIG->views->locations if (isset($CONFIG->views->locations[$viewtype])) { - foreach($CONFIG->views->locations[$viewtype] as $view => $path) { - $pos = strpos($view,$view_root); + foreach ($CONFIG->views->locations[$viewtype] as $view => $path) { + $pos = strpos($view, $view_root); if ($pos === 0) { $treecache[$view_root][] = $view; } @@ -684,9 +713,11 @@ function elgg_view_tree($view_root, $viewtype = "") { * {@link elgg_view_entity_annotations()}. * * @param ElggEntity $entity The entity to display - * @param boolean $full Passed to entity view to decide how much information to show. - * @param boolean $bypass If false, will not pass to a custom template handler. {@see set_template_handler()} - * @param boolean $debug Complain if views are missing + * @param boolean $full Passed to entity view to decide how much information to show. + * @param boolean $bypass If false, will not pass to a custom template handler. + * {@see set_template_handler()} + * @param boolean $debug Complain if views are missing + * * @return string HTML to display or false * @link http://docs.elgg.org/Views/Entity * @link http://docs.elgg.org/Entities @@ -729,13 +760,13 @@ function elgg_view_entity(ElggEntity $entity, $full = false, $bypass = true, $de ), $bypass, $debug); } if (empty($contents)) { - $contents = elgg_view("{$entity_type}/default",array( + $contents = elgg_view("{$entity_type}/default", array( 'entity' => $entity, 'full' => $full ), $bypass, $debug); } // Marcus Povey 20090616 : Speculative and low impact approach for fixing #964 - if ($full) { + if ($full) { $annotations = elgg_view_entity_annotations($entity, $full); if ($annotations) { @@ -758,8 +789,10 @@ function elgg_view_entity(ElggEntity $entity, $full = false, $bypass = true, $de * - ElggEntity 'annotation' The annotation being viewed. * * @param ElggAnnotation $annotation The annotation to display - * @param boolean $bypass If false, will not pass to a custom template handler. {@see set_template_handler()} - * @param boolean $debug Complain if views are missing + * @param boolean $bypass If false, will not pass to a custom + * template handler. {@see set_template_handler()} + * @param boolean $debug Complain if views are missing + * * @return string HTML (etc) to display */ function elgg_view_annotation(ElggAnnotation $annotation, $bypass = true, $debug = false) { @@ -768,7 +801,7 @@ function elgg_view_annotation(ElggAnnotation $annotation, $bypass = true, $debug $view = $annotation->view; if (is_string($view)) { - return elgg_view($view,array('annotation' => $annotation), $bypass, $debug); + return elgg_view($view, array('annotation' => $annotation), $bypass, $debug); } $name = $annotation->name; @@ -781,9 +814,9 @@ function elgg_view_annotation(ElggAnnotation $annotation, $bypass = true, $debug } if (elgg_view_exists("annotation/{$name}")) { - return elgg_view("annotation/{$name}",array('annotation' => $annotation), $bypass, $debug); + return elgg_view("annotation/{$name}", array('annotation' => $annotation), $bypass, $debug); } else { - return elgg_view("annotation/default",array('annotation' => $annotation), $bypass, $debug); + return elgg_view("annotation/default", array('annotation' => $annotation), $bypass, $debug); } } @@ -800,17 +833,20 @@ function elgg_view_annotation(ElggAnnotation $annotation, $bypass = true, $debug * @see list_entities_from_relationships() * @see list_site_members() * - * @param array $entities List of entities - * @param int $count The total number of entities across all pages - * @param int $offset The current indexing offset - * @param int $limit The number of entities to display per page - * @param true|false $fullview Whether or not to display the full view (default: true) - * @param true|false $viewtypetoggle Whether or not to allow users to toggle to gallery view - * @param bool $pagination Whether pagination is offered. + * @param array $entities List of entities + * @param int $count The total number of entities across all pages + * @param int $offset The current indexing offset + * @param int $limit The number of entities to display per page + * @param bool $fullview Whether or not to display the full view (default: true) + * @param bool $viewtypetoggle Whether or not to allow users to toggle to gallery view + * @param bool $pagination Whether pagination is offered. + * * @return string The list of entities * @access private */ -function elgg_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = true, $pagination = true) { +function elgg_view_entity_list($entities, $count, $offset, $limit, $fullview = true, +$viewtypetoggle = true, $pagination = true) { + $count = (int) $count; $limit = (int) $limit; @@ -821,7 +857,7 @@ function elgg_view_entity_list($entities, $count, $offset, $limit, $fullview = t $context = get_context(); - $html = elgg_view('entities/entity_list',array( + $html = elgg_view('entities/entity_list', array( 'entities' => $entities, 'count' => $count, 'offset' => $offset, @@ -830,7 +866,7 @@ function elgg_view_entity_list($entities, $count, $offset, $limit, $fullview = t 'fullview' => $fullview, 'context' => $context, 'viewtypetoggle' => $viewtypetoggle, - 'viewtype' => get_input('search_viewtype','list'), + 'viewtype' => get_input('search_viewtype', 'list'), 'pagination' => $pagination )); @@ -842,9 +878,10 @@ function elgg_view_entity_list($entities, $count, $offset, $limit, $fullview = t * should be called by wrapper functions. * * @param array $annotations List of annotations - * @param int $count The total number of annotations across all pages - * @param int $offset The current indexing offset - * @param int $limit The number of annotations to display per page + * @param int $count The total number of annotations across all pages + * @param int $offset The current indexing offset + * @param int $limit The number of annotations to display per page + * * @return string The list of annotations * @access private */ @@ -855,7 +892,7 @@ function elgg_view_annotation_list($annotations, $count, $offset, $limit) { $html = ""; - $nav = elgg_view('navigation/pagination',array( + $nav = elgg_view('navigation/pagination', array( 'baseurl' => $_SERVER['REQUEST_URI'], 'offset' => $offset, 'count' => $count, @@ -867,7 +904,7 @@ function elgg_view_annotation_list($annotations, $count, $offset, $limit) { $html .= $nav; if (is_array($annotations) && sizeof($annotations) > 0) { - foreach($annotations as $annotation) { + foreach ($annotations as $annotation) { $html .= elgg_view_annotation($annotation, "", false); } } @@ -887,8 +924,9 @@ function elgg_view_annotation_list($annotations, $count, $offset, $limit) { * * This is called automatically by the framework from {@link elgg_view_entity()} * - * @param ElggEntity $entity - * @param bool $full + * @param ElggEntity $entity Entity + * @param bool $full Full view? + * * @return mixed string or false on failure * @todo Change the hook name. */ @@ -933,6 +971,7 @@ function elgg_view_entity_annotations(ElggEntity $entity, $full = true) { * argument names. * * @param string $layout The name of the views in canvas/layouts/. + * * @return string The layout * @todo Make this consistent with the rest of the view functions by passing * an array instead of "$areaN". @@ -946,9 +985,9 @@ function elgg_view_layout($layout) { } if (elgg_view_exists("canvas/layouts/{$layout}")) { - return elgg_view("canvas/layouts/{$layout}",$param_array); + return elgg_view("canvas/layouts/{$layout}", $param_array); } else { - return elgg_view("canvas/default",$param_array); + return elgg_view("canvas/default", $param_array); } } @@ -957,8 +996,9 @@ function elgg_view_layout($layout) { * * This is a shortcut for {@elgg_view page_elements/title}. * - * @param string $title The page title + * @param string $title The page title * @param string $submenu Should a submenu be displayed? (default false, use not recommended) + * * @return string The HTML (etc) */ function elgg_view_title($title, $submenu = false) { @@ -973,6 +1013,7 @@ function elgg_view_title($title, $submenu = false) { * @see elgg_get_friendly_time() * * @param int $time A UNIX epoch timestamp + * * @return string The friendly time HTML * @since 1.7.2 */ @@ -988,24 +1029,26 @@ function elgg_view_friendly_time($time) { * for the comments, $entity_type hook. The handler is responsible * for formatting the comments and add comment form. * - * @param ElggEntity $entity - * @param bool $add_comment Include a form to add comments + * @param ElggEntity $entity The entity to view comments of + * @param bool $add_comment Include a form to add comments + * * @return string|false The HTML (etc) for the comments, or false on failure * @link http://docs.elgg.org/Entities/Comments * @link http://docs.elgg.org/Annotations/Comments */ -function elgg_view_comments($entity, $add_comment = true){ +function elgg_view_comments($entity, $add_comment = true) { if (!($entity instanceof ElggEntity)) { return false; } - if ($comments = trigger_plugin_hook('comments', $entity->getType(), array('entity' => $entity), false)) { + $comments = trigger_plugin_hook('comments', $entity->getType(), array('entity' => $entity), false); + if ($comemnts) { return $comments; } else { $comments = list_annotations($entity->getGUID(), 'generic_comment'); //display the new comment form if required - if($add_comment){ + if ($add_comment) { $comments .= elgg_view('comments/forms/edit', array('entity' => $entity)); } @@ -1019,10 +1062,11 @@ function elgg_view_comments($entity, $add_comment = true){ * * @param string $icon The icon for the listing * @param string $info Any information that needs to be displayed. + * * @return string The HTML (etc) representing the listing */ function elgg_view_listing($icon, $info) { - return elgg_view('entities/entity_listing',array('icon' => $icon, 'info' => $info)); + return elgg_view('entities/entity_listing', array('icon' => $icon, 'info' => $info)); } /** @@ -1040,9 +1084,10 @@ function elgg_view_listing($icon, $info) { * * @warning This is experimental. * - * @see elgg_view() * @param string $function_name The name of the function to pass to. + * * @return bool + * @see elgg_view() * @link http://docs.elgg.org/Views/TemplateHandlers */ function set_template_handler($function_name) { @@ -1068,10 +1113,13 @@ function set_template_handler($function_name) { * @internal View extensions are stored in * $CONFIG->views->extensions[$view][$priority] = $view_extension * - * @param string $view The view to extend. + * @param string $view The view to extend. * @param string $view_extension This view is added to $view - * @param int $priority The priority, from 0 to 1000, to add at (lowest numbers displayed first) - * @param string $viewtype Not used + * @param int $priority The priority, from 0 to 1000, + * to add at (lowest numbers displayed first) + * @param string $viewtype Not used + * + * @return void * @since 1.7.0 * @link http://docs.elgg.org/Views/Ejxtend * @example views/extend.php @@ -1091,7 +1139,7 @@ function elgg_extend_view($view, $view_extension, $priority = 501, $viewtype = ' $CONFIG->views->extensions[$view][500] = "{$view}"; } - while(isset($CONFIG->views->extensions[$view][$priority])) { + while (isset($CONFIG->views->extensions[$view][$priority])) { $priority++; } @@ -1102,8 +1150,9 @@ function elgg_extend_view($view, $view_extension, $priority = 501, $viewtype = ' /** * Unextends a view. * - * @param string $view The view that was extended. + * @param string $view The view that was extended. * @param string $view_extension This view that was added to $view + * * @return bool * @since 1.7.2 */ @@ -1133,11 +1182,17 @@ function elgg_unextend_view($view, $view_extension) { } /** + * Extend a view + * * @deprecated 1.7. Use elgg_extend_view(). - * @param $view - * @param $view_name - * @param $priority - * @param $viewtype + * + * @param string $view The view to extend. + * @param string $view_name This view is added to $view + * @param int $priority The priority, from 0 to 1000, + * to add at (lowest numbers displayed first) + * @param string $viewtype Not used + * + * @return void */ function extend_view($view, $view_name, $priority = 501, $viewtype = '') { elgg_deprecated_notice('extend_view() was deprecated by elgg_extend_view()!', 1.7); @@ -1154,8 +1209,11 @@ function extend_view($view, $view_name, $priority = 501, $viewtype = '') { * * @tip This is useful to optionally register views in a plugin. * - * @param string $view The name of the view + * @param string $view The name of the view * @param string $location The base location path + * @param string $viewtype The view type + * + * @return void */ function set_view_location($view, $location, $viewtype = '') { global $CONFIG; @@ -1186,10 +1244,12 @@ function set_view_location($view, $location, $viewtype = '') { * Plugin authors would only need to call this if optionally including * an entire views structure. * - * @param string $view_base Optional The base of the view name without the view type. - * @param string $folder Required The folder to begin looking in + * @param string $view_base Optional The base of the view name without the view type. + * @param string $folder Required The folder to begin looking in * @param string $base_location_path The base views directory to use with set_view_location - * @param string $viewtype The type of view we're looking at (default, rss, etc) + * @param string $viewtype The type of view we're looking at (default, rss, etc) + * + * @return void * @since 1.7.0 * @see set_view_location() * @todo This seems overly complicated. @@ -1201,7 +1261,7 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) if ($handle = opendir($folder)) { while ($view = readdir($handle)) { - if (!in_array($view, array('.','..','.svn','CVS')) && !is_dir($folder . "/" . $view)) { + if (!in_array($view, array('.', '..', '.svn', 'CVS')) && !is_dir($folder . "/" . $view)) { // this includes png files because some icons are stored within view directories. // See commit [1705] if ((substr_count($view, ".php") > 0) || (substr_count($view, ".png") > 0)) { @@ -1211,7 +1271,8 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) $view_base_new = ""; } - set_view_location($view_base_new . str_replace('.php', '', $view), $base_location_path, $viewtype); + set_view_location($view_base_new . str_replace('.php', '', $view), + $base_location_path, $viewtype); } } else if (!in_array($view, array('.', '..', '.svn', 'CVS')) && is_dir($folder . "/" . $view)) { if (!empty($view_base)) { @@ -1219,7 +1280,8 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) } else { $view_base_new = ""; } - autoregister_views($view_base_new . $view, $folder . "/" . $view, $base_location_path, $viewtype); + autoregister_views($view_base_new . $view, $folder . "/" . $view, + $base_location_path, $viewtype); } } return TRUE; @@ -1235,10 +1297,12 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) * can be HTML for a browser, RSS for a feed reader, or * Javascript, PHP and a number of other formats. * - * @param string $title - * @param string $body + * @param string $title Title + * @param string $body Body * @param string $page_shell Optional page shell to use. - * @param array $vars Optional vars array to pass to the page shell. Automatically adds title, body, and sysmessages + * @param array $vars Optional vars array to pass to the page + * shell. Automatically adds title, body, and sysmessages + * * @return NULL */ function page_draw($title, $body, $page_shell = 'page_shells/default', $vars = array()) { @@ -1267,7 +1331,7 @@ function page_draw($title, $body, $page_shell = 'page_shells/default', $vars = a $split_output = str_split($output, 1024); - foreach($split_output as $chunk) { + foreach ($split_output as $chunk) { echo $chunk; } } @@ -1275,7 +1339,8 @@ function page_draw($title, $body, $page_shell = 'page_shells/default', $vars = a /** * Checks if $view_type is valid on this installation. * - * @param string $view_type + * @param string $view_type View type + * * @return bool * @since 1.7.2 */ @@ -1294,6 +1359,7 @@ function elgg_is_valid_view_type($view_type) { * Initialize viewtypes on system boot event * This ensures simplecache is cleared during upgrades. See #2252 * + * @return void * @access private * @elgg_event_handler boot system */ diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php index b87344c29..c849596d4 100644 --- a/engine/lib/widgets.php +++ b/engine/lib/widgets.php @@ -3,14 +3,16 @@ * Elgg widgets library. * Contains code for handling widgets. * - * @package Elgg - * @subpackage Core + * @package Elgg.Core + * @subpackage Widgets */ /** * Register a particular context for use with widgets. * * @param string $context The context we wish to enable context for + * + * @return void */ function use_widgets($context) { global $CONFIG; @@ -31,14 +33,16 @@ function use_widgets($context) { /** * Determines whether or not the current context is using widgets * - * @return true|false Depending on widget status + * @return bool Depending on widget status */ function using_widgets() { global $CONFIG; $context = get_context(); if (isset($CONFIG->widgets->contexts) && is_array($CONFIG->widgets->contexts)) { - if (in_array($context, $CONFIG->widgets->contexts)) return true; + if (in_array($context, $CONFIG->widgets->contexts)) { + return true; + } } return false; @@ -49,9 +53,10 @@ function using_widgets() { * and also provides a sensible ordering for all widgets in that column * * @param ElggObject $widget The widget entity - * @param int $order The order within the column - * @param int $column The column (1, 2 or 3) - * @return true|false Depending on success + * @param int $order The order within the column + * @param int $column The column (1, 2 or 3) + * + * @return bool Depending on success */ function save_widget_location(ElggObject $widget, $order, $column) { if ($widget instanceof ElggObject) { @@ -74,8 +79,8 @@ function save_widget_location(ElggObject $widget, $order, $column) { 'column' => $column, ); - if ($entities = get_entities_from_metadata_multi($params,'object','widget')) { - foreach($entities as $entity) { + if ($entities = get_entities_from_metadata_multi($params, 'object', 'widget')) { + foreach ($entities as $entity) { $entityorder = $entity->order; if ($entityorder < $order) { $ordertmp[$entityorder] = $entity; @@ -90,7 +95,7 @@ function save_widget_location(ElggObject $widget, $order, $column) { ksort($ordertmp); $orderticker = 10; - foreach($ordertmp as $orderval => $entity) { + foreach ($ordertmp as $orderval => $entity) { $entity->order = $orderticker; $orderticker += 10; } @@ -108,9 +113,10 @@ function save_widget_location(ElggObject $widget, $order, $column) { /** * Get widgets for a particular context and column, in order of display * - * @param int $user_guid The owner user GUID - * @param string $context The context (profile, dashboard etc) - * @param int $column The column (1 or 2) + * @param int $user_guid The owner user GUID + * @param string $context The context (profile, dashboard etc) + * @param int $column The column (1 or 2) + * * @return array|false An array of widget ElggObjects, or false */ function get_widgets($user_guid, $context, $column) { @@ -118,12 +124,14 @@ function get_widgets($user_guid, $context, $column) { 'column' => $column, 'context' => $context ); - $widgets = get_entities_from_private_setting_multi($params, "object", "widget", $user_guid, "", 10000); + $widgets = get_entities_from_private_setting_multi($params, "object", + "widget", $user_guid, "", 10000); + if ($widgets) { $widgetorder = array(); - foreach($widgets as $widget) { + foreach ($widgets as $widget) { $order = $widget->order; - while(isset($widgetorder[$order])) { + while (isset($widgetorder[$order])) { $order++; } $widgetorder[$order] = $widget; @@ -141,6 +149,7 @@ function get_widgets($user_guid, $context, $column) { * Displays a particular widget * * @param ElggObject $widget The widget to display + * * @return string The HTML for the widget, including JavaScript wrapper */ function display_widget(ElggObject $widget) { @@ -150,13 +159,14 @@ function display_widget(ElggObject $widget) { /** * Add a new widget instance * - * @param int $entity_guid GUID of entity that owns this widget - * @param string $handler The handler for this widget - * @param string $context The page context for this widget - * @param int $order The order to display this widget in - * @param int $column The column to display this widget in (1, 2 or 3) - * @param int $access_id If not specified, it is set to the default access level - * @return true|false Depending on success + * @param int $entity_guid GUID of entity that owns this widget + * @param string $handler The handler for this widget + * @param string $context The page context for this widget + * @param int $order The order to display this widget in + * @param int $column The column to display this widget in (1, 2 or 3) + * @param int $access_id If not specified, it is set to the default access level + * + * @return bool Depending on success */ function add_widget($entity_guid, $handler, $context, $order = 0, $column = 1, $access_id = null) { if (empty($entity_guid) || empty($context) || empty($handler) || !widget_type_exists($handler)) { @@ -192,15 +202,21 @@ function add_widget($entity_guid, $handler, $context, $order = 0, $column = 1, $ /** * Define a new widget type * - * @param string $handler The identifier for the widget handler - * @param string $name The name of the widget type + * @param string $handler The identifier for the widget handler + * @param string $name The name of the widget type * @param string $description A description for the widget type - * @param string $context A comma-separated list of contexts where this widget is allowed (default: 'all') - * @param true|false $multiple Whether or not multiple instances of this widget are allowed on a single dashboard (default: false) - * @param string $position A comma-separated list of positions on the page (side or main) where this widget is allowed (default: "side,main") - * @return true|false Depending on success + * @param string $context A comma-separated list of contexts where this + * widget is allowed (default: 'all') + * @param bool $multiple Whether or not multiple instances of this widget + * are allowed on a single dashboard (default: false) + * @param string $positions A comma-separated list of positions on the page + * (side or main) where this widget is allowed (default: "side,main") + * + * @return bool Depending on success */ -function add_widget_type($handler, $name, $description, $context = "all", $multiple = false, $positions = "side,main") { +function add_widget_type($handler, $name, $description, $context = "all", +$multiple = false, $positions = "side,main") { + if (!empty($handler) && !empty($name)) { global $CONFIG; @@ -215,9 +231,9 @@ function add_widget_type($handler, $name, $description, $context = "all", $multi $handlerobj = new stdClass; $handlerobj->name = $name; $handlerobj->description = $description; - $handlerobj->context = explode(",",$context); + $handlerobj->context = explode(",", $context); $handlerobj->multiple = $multiple; - $handlerobj->positions = explode(",",$positions); + $handlerobj->positions = explode(",", $positions); $CONFIG->widgets->handlers[$handler] = $handlerobj; @@ -231,6 +247,8 @@ function add_widget_type($handler, $name, $description, $context = "all", $multi * Remove a widget type * * @param string $handler The identifier for the widget handler + * + * @return void * @since 1.7.1 */ function remove_widget_type($handler) { @@ -253,7 +271,8 @@ function remove_widget_type($handler) { * Determines whether or not widgets with the specified handler have been defined * * @param string $handler The widget handler identifying string - * @return true|false Whether or not those widgets exist + * + * @return bool Whether or not those widgets exist */ function widget_type_exists($handler) { global $CONFIG; @@ -277,29 +296,32 @@ function get_widget_types() { global $CONFIG; if (!empty($CONFIG->widgets) - && !empty($CONFIG->widgets->handlers) - && is_array($CONFIG->widgets->handlers)) { + && !empty($CONFIG->widgets->handlers) + && is_array($CONFIG->widgets->handlers)) { - $context = get_context(); + $context = get_context(); - foreach($CONFIG->widgets->handlers as $key => $handler) { - if (!in_array('all',$handler->context) && - !in_array($context,$handler->context)) { - unset($CONFIG->widgets->handlers[$key]); - } + foreach ($CONFIG->widgets->handlers as $key => $handler) { + if (!in_array('all', $handler->context) && + !in_array($context, $handler->context)) { + unset($CONFIG->widgets->handlers[$key]); } - - return $CONFIG->widgets->handlers; } + return $CONFIG->widgets->handlers; + } + return array(); } /** - * Saves a widget's settings (by passing an array of (name => value) pairs to save_{$handler}_widget) + * Saves a widget's settings (by passing an array of + * (name => value) pairs to save_{$handler}_widget) * - * @param int $widget_guid The GUID of the widget we're saving to - * @param array $params An array of name => value parameters + * @param int $widget_guid The GUID of the widget we're saving to + * @param array $params An array of name => value parameters + * + * @return bool */ function save_widget_info($widget_guid, $params) { if ($widget = get_entity($widget_guid)) { @@ -320,10 +342,10 @@ function save_widget_info($widget_guid, $params) { // Save the params to the widget if (is_array($params) && sizeof($params) > 0) { - foreach($params as $name => $value) { + foreach ($params as $name => $value) { if (!empty($name) && !in_array($name, array( - 'guid','owner_guid','site_guid' + 'guid', 'owner_guid', 'site_guid' ))) { if (is_array($value)) { // @todo Handle arrays securely @@ -347,18 +369,29 @@ function save_widget_info($widget_guid, $params) { return false; } +/** + * Reorders the widgets from a widget panel + * + * @param string $panelstring1 String of guids of ElggWidget objects separated by :: + * @param string $panelstring2 String of guids of ElggWidget objects separated by :: + * @param string $panelstring3 String of guids of ElggWidget objects separated by :: + * @param string $context Profile or dashboard + * @param int $owner Owner guid + * + * @return void + */ function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, $context, $owner) { $return = true; - $mainwidgets = explode('::',$panelstring1); - $sidewidgets = explode('::',$panelstring2); - $rightwidgets = explode('::',$panelstring3); + $mainwidgets = explode('::', $panelstring1); + $sidewidgets = explode('::', $panelstring2); + $rightwidgets = explode('::', $panelstring3); $handlers = array(); $guids = array(); if (is_array($mainwidgets) && sizeof($mainwidgets) > 0) { - foreach($mainwidgets as $widget) { + foreach ($mainwidgets as $widget) { $guid = (int) $widget; @@ -370,7 +403,7 @@ function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, } } if (is_array($sidewidgets) && sizeof($sidewidgets) > 0) { - foreach($sidewidgets as $widget) { + foreach ($sidewidgets as $widget) { $guid = (int) $widget; @@ -383,7 +416,7 @@ function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, } } if (is_array($rightwidgets) && sizeof($rightwidgets) > 0) { - foreach($rightwidgets as $widget) { + foreach ($rightwidgets as $widget) { $guid = (int) $widget; @@ -397,19 +430,21 @@ function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, } // Reorder existing widgets or delete ones that have vanished - foreach (array(1,2,3) as $column) { - if ($dbwidgets = get_widgets($owner,$context,$column)) { + foreach (array(1, 2, 3) as $column) { + if ($dbwidgets = get_widgets($owner, $context, $column)) { + + foreach ($dbwidgets as $dbwidget) { + if (in_array($dbwidget->getGUID(), $guids[1]) + || in_array($dbwidget->getGUID(), $guids[2]) || in_array($dbwidget->getGUID(), $guids[3])) { - foreach($dbwidgets as $dbwidget) { - if (in_array($dbwidget->getGUID(),$guids[1]) || in_array($dbwidget->getGUID(),$guids[2]) || in_array($dbwidget->getGUID(),$guids[3])) { - if (in_array($dbwidget->getGUID(),$guids[1])) { - $pos = array_search($dbwidget->getGUID(),$guids[1]); + if (in_array($dbwidget->getGUID(), $guids[1])) { + $pos = array_search($dbwidget->getGUID(), $guids[1]); $col = 1; - } else if (in_array($dbwidget->getGUID(),$guids[2])) { - $pos = array_search($dbwidget->getGUID(),$guids[2]); + } else if (in_array($dbwidget->getGUID(), $guids[2])) { + $pos = array_search($dbwidget->getGUID(), $guids[2]); $col = 2; } else { - $pos = array_search($dbwidget->getGUID(),$guids[3]); + $pos = array_search($dbwidget->getGUID(), $guids[3]); $col = 3; } $pos = ($pos + 1) * 10; @@ -429,11 +464,11 @@ function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, } // Add new ones if (sizeof($guids[$column]) > 0) { - foreach($guids[$column] as $key => $guid) { + foreach ($guids[$column] as $key => $guid) { if ($guid == 0) { $pos = ($key + 1) * 10; $handler = $handlers[$column][$key]; - if (!add_widget($owner,$handler,$context,$pos,$column)) { + if (!add_widget($owner, $handler, $context, $pos, $column)) { $return = false; } } @@ -445,8 +480,9 @@ function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, } /** - * Run some things once. + * Regsiter entity of object, widget as ElggWidget objects * + * @return void */ function widget_run_once() { // Register a class @@ -456,6 +492,7 @@ function widget_run_once() { /** * Function to initialise widgets functionality on Elgg init * + * @return void */ function widgets_init() { register_action('widgets/reorder'); @@ -467,7 +504,7 @@ function widgets_init() { } // Register event -register_elgg_event_handler('init','system','widgets_init'); +register_elgg_event_handler('init', 'system', 'widgets_init'); // Use widgets on the dashboard use_widgets('dashboard');
\ No newline at end of file diff --git a/engine/lib/xml-rpc.php b/engine/lib/xml-rpc.php index cf08dd8e4..70eb627d8 100644 --- a/engine/lib/xml-rpc.php +++ b/engine/lib/xml-rpc.php @@ -1,174 +1,197 @@ <?php - /** - * Elgg XML-RPC library. - * Contains functions and classes to handle XML-RPC services, currently only server only. - * - * @package Elgg - * @subpackage Core - */ - - // Helper functions /////////////////////////////////////////////////////////////////////// - - /** - * parse XMLRPCCall parameters - * - * Convert an XMLRPCCall result array into native data types - * - * @param array $parameters - * @return array - */ - function xmlrpc_parse_params($parameters) - { - $result = array(); - - foreach ($parameters as $parameter) - { - $result[] = xmlrpc_scalar_value($parameter); - } - - return $result; +/** + * Elgg XML-RPC library. + * Contains functions and classes to handle XML-RPC services, currently only server only. + * + * @package Elgg.Core + * @subpackage XMLRPC + */ + +/** + * parse XMLRPCCall parameters + * + * Convert an XMLRPCCall result array into native data types + * + * @param array $parameters An array of params + * + * @return array + */ +function xmlrpc_parse_params($parameters) { + $result = array(); + + foreach ($parameters as $parameter) { + $result[] = xmlrpc_scalar_value($parameter); } - /** - * Extract the scalar value of an XMLObject type result array - * - * @param XMLObject $object - * @return mixed - */ - function xmlrpc_scalar_value($object) - { - if ($object->name == 'param') - { - $object = $object->children[0]->children[0]; - } - - switch ($object->name) - { - case 'string': - return $object->content; - case 'array': - foreach ($object->children[0]->children as $child) - { - $value[] = xmlrpc_scalar_value($child); - } - return $value; - case 'struct': - foreach ($object->children as $child) - { - if (isset($child->children[1]->children[0])) - $value[$child->children[0]->content] = xmlrpc_scalar_value($child->children[1]->children[0]); - else - $value[$child->children[0]->content] = $child->children[1]->content; - } - return $value; - case 'boolean': - return (boolean) $object->content; - case 'i4': - case 'int': - return (int) $object->content; - case 'double': - return (double) $object->content; - case 'dateTime.iso8601': - return (int) strtotime($object->content); - case 'base64': - return base64_decode($object->content); - case 'value': - return xmlrpc_scalar_value($object->children[0]); - default: - // @todo unsupported, throw an error - return false; - } + return $result; +} + +/** + * Extract the scalar value of an XMLObject type result array + * + * @param XMLObject $object And object + * + * @return mixed + */ +function xmlrpc_scalar_value($object) { + if ($object->name == 'param') { + $object = $object->children[0]->children[0]; } - - // Functions for adding handlers ////////////////////////////////////////////////////////// - - /** XML-RPC Handlers */ - $XML_RPC_HANDLERS = array(); - - /** - * Register a method handler for a given XML-RPC method. - * - * @param string $method Method parameter. - * @param string $handler The handler function. This function accepts once XMLRPCCall object and must return a XMLRPCResponse object. - * @return bool - */ - function register_xmlrpc_handler($method, $handler) - { - global $XML_RPC_HANDLERS; - - $XML_RPC_HANDLERS[$method] = $handler; + + switch ($object->name) { + case 'string': + return $object->content; + + case 'array': + foreach ($object->children[0]->children as $child) { + $value[] = xmlrpc_scalar_value($child); + } + return $value; + + case 'struct': + foreach ($object->children as $child) { + if (isset($child->children[1]->children[0])) { + $value[$child->children[0]->content] = xmlrpc_scalar_value($child->children[1]->children[0]); + } else { + $value[$child->children[0]->content] = $child->children[1]->content; + } + } + return $value; + + case 'boolean': + return (boolean) $object->content; + + case 'i4': + case 'int': + return (int) $object->content; + + case 'double': + return (double) $object->content; + + case 'dateTime.iso8601': + return (int) strtotime($object->content); + + case 'base64': + return base64_decode($object->content); + + case 'value': + return xmlrpc_scalar_value($object->children[0]); + + default: + // @todo unsupported, throw an error + return false; } - - /** - * Trigger a method call and pass the relevant parameters to the funciton. - * - * @param XMLRPCCall $parameters The call and parameters. - * @return XMLRPCCall - */ - function trigger_xmlrpc_handler(XMLRPCCall $parameters) - { - global $XML_RPC_HANDLERS; - - // Go through and see if we have a handler - if (isset($XML_RPC_HANDLERS[$parameters->getMethodName()])) - { - $handler = $XML_RPC_HANDLERS[$parameters->getMethodName()]; - $result = $handler($parameters); - - if (!($result instanceof XMLRPCResponse)) - throw new InvalidParameterException(sprintf(elgg_echo('InvalidParameterException:UnexpectedReturnFormat'), $parameters->getMethodName())); - - // Result in right format, return it. - return $result; +} + +// Functions for adding handlers ////////////////////////////////////////////////////////// + +/** XML-RPC Handlers */ +$XML_RPC_HANDLERS = array(); + +/** + * Register a method handler for a given XML-RPC method. + * + * @param string $method Method parameter. + * @param string $handler The handler function. This function accepts + * one XMLRPCCall object and must return a XMLRPCResponse object. + * + * @return bool + */ +function register_xmlrpc_handler($method, $handler) { + global $XML_RPC_HANDLERS; + + $XML_RPC_HANDLERS[$method] = $handler; +} + +/** + * Trigger a method call and pass the relevant parameters to the funciton. + * + * @param XMLRPCCall $parameters The call and parameters. + * + * @return XMLRPCCall + */ +function trigger_xmlrpc_handler(XMLRPCCall $parameters) { + global $XML_RPC_HANDLERS; + + // Go through and see if we have a handler + if (isset($XML_RPC_HANDLERS[$parameters->getMethodName()])) { + $handler = $XML_RPC_HANDLERS[$parameters->getMethodName()]; + $result = $handler($parameters); + + if (!($result instanceof XMLRPCResponse)) { + $msg = sprintf(elgg_echo('InvalidParameterException:UnexpectedReturnFormat'), + $parameters->getMethodName()); + throw new InvalidParameterException($msg); } - - // if no handler then throw exception - throw new NotImplementedException(sprintf(elgg_echo('NotImplementedException:XMLRPCMethodNotImplemented'), $parameters->getMethodName())); + + // Result in right format, return it. + return $result; } - - // Error handler functions //////////////////////////////////////////////////////////////// - - /** - * PHP Error handler function. - * This function acts as a wrapper to catch and report PHP error messages. - * - * @see http://uk3.php.net/set-error-handler - * @param unknown_type $errno - * @param unknown_type $errmsg - * @param unknown_type $filename - * @param unknown_type $linenum - * @param unknown_type $vars - */ - function __php_xmlrpc_error_handler($errno, $errmsg, $filename, $linenum, $vars) - { - $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file " . $filename . " (line " . $linenum . ")"; - - switch ($errno) { - case E_USER_ERROR: - error_log("ERROR: " . $error); - - // Since this is a fatal error, we want to stop any further execution but do so gracefully. - throw new Exception("ERROR: " . $error); - break; - - case E_WARNING : - case E_USER_WARNING : - error_log("WARNING: " . $error); - break; - - default: - error_log("DEBUG: " . $error); - } + + // if no handler then throw exception + $msg = sprintf(elgg_echo('NotImplementedException:XMLRPCMethodNotImplemented'), + $parameters->getMethodName()); + throw new NotImplementedException($msg); +} + +/** + * PHP Error handler function. + * This function acts as a wrapper to catch and report PHP error messages. + * + * @see http://uk3.php.net/set-error-handler + * + * @param int $errno Error number + * @param string $errmsg Human readable message + * @param string $filename Filename + * @param int $linenum Line number + * @param array $vars Vars + * + * @return void + */ +function _php_xmlrpc_error_handler($errno, $errmsg, $filename, $linenum, $vars) { + $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file " + . $filename . " (line " . $linenum . ")"; + + switch ($errno) { + case E_USER_ERROR: + error_log("ERROR: " . $error); + + // Since this is a fatal error, we want to stop any further execution but do so gracefully. + throw new Exception("ERROR: " . $error); + break; + + case E_WARNING : + case E_USER_WARNING : + error_log("WARNING: " . $error); + break; + + default: + error_log("DEBUG: " . $error); } - - /** - * PHP Exception handler for XMLRPC. - * @param Exception $exception - */ - function __php_xmlrpc_exception_handler($exception) { - - error_log("*** FATAL EXCEPTION (XML-RPC) *** : " . $exception); - - page_draw($exception->getMessage(), elgg_view("xml-rpc/output", array('result' => new XMLRPCErrorResponse($exception->getMessage(), $exception->getCode()==0 ? -32400 : $exception->getCode())))); +} + +/** + * PHP Exception handler for XMLRPC. + * + * @param Exception $exception The exception + * + * @return void + */ +function _php_xmlrpc_exception_handler($exception) { + + error_log("*** FATAL EXCEPTION (XML-RPC) *** : " . $exception); + + $code = $exception->getCode(); + + if ($code == 0) { + $code = -32400; } -?> + + $result = new XMLRPCErrorResponse($exception->getMessage(), $code); + + $vars = array('result' => $result); + + $content = elgg_view("xml-rpc/output", $vars); + + page_draw($exception->getMessage(), $content); +} diff --git a/engine/lib/xml.php b/engine/lib/xml.php index bc52815f2..0d0d83da0 100644 --- a/engine/lib/xml.php +++ b/engine/lib/xml.php @@ -1,142 +1,147 @@ <?php - /** - * Elgg XML library. - * Contains functions for generating and parsing XML. - * - * @package Elgg - * @subpackage Core - */ - - /** - * 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 - * get the object variables using get_object_vars (which will only return public variables!) - * @param $data object The object to serialise. - * @param $n int Level, only used for recursion. - * @return string The serialised XML output. - */ - function serialise_object_to_xml($data, $name = "", $n = 0) - { - $classname = ($name=="" ? get_class($data) : $name); - - $vars = method_exists($data, "export") ? get_object_vars($data->export()) : get_object_vars($data); - - $output = ""; - - if (($n==0) || ( is_object($data) && !($data instanceof stdClass))) { - $output = "<$classname>"; - } - - foreach ($vars as $key => $value) { - $output .= "<$key type=\"".gettype($value)."\">"; - - if (is_object($value)) { - $output .= serialise_object_to_xml($value, $key, $n+1); - } else if (is_array($value)) { - $output .= serialise_array_to_xml($value, $n+1); - } else if (gettype($value) == "boolean") { - $output .= $value ? "true" : "false"; - } else { - $output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8'); - } - - $output .= "</$key>\n"; - } - - if (($n==0) || ( is_object($data) && !($data instanceof stdClass))) { - $output .= "</$classname>\n"; - } - - return $output; +/** + * Elgg XML library. + * Contains functions for generating and parsing XML. + * + * @package Elgg.Core + * @subpackage XML + */ + +/** + * 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 get the object variables using get_object_vars (which + * will only return public variables!) + * + * @param mixed $data The object to serialise. + * @param string $name The name? + * @param int $n Level, only used for recursion. + * + * @return string The serialised XML output. + */ +function serialise_object_to_xml($data, $name = "", $n = 0) { + $classname = ($name == "" ? get_class($data) : $name); + + $vars = method_exists($data, "export") ? get_object_vars($data->export()) : get_object_vars($data); + + $output = ""; + + if (($n == 0) || ( is_object($data) && !($data instanceof stdClass))) { + $output = "<$classname>"; } - /** - * Serialise an array. - * - * @param array $data - * @param int $n Used for recursion - * @return string - */ - function serialise_array_to_xml(array $data, $n = 0) - { - $output = ""; - - if ($n==0) { - $output = "<array>\n"; + foreach ($vars as $key => $value) { + $output .= "<$key type=\"" . gettype($value) . "\">"; + + if (is_object($value)) { + $output .= serialise_object_to_xml($value, $key, $n + 1); + } else if (is_array($value)) { + $output .= serialise_array_to_xml($value, $n + 1); + } else if (gettype($value) == "boolean") { + $output .= $value ? "true" : "false"; + } else { + $output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8'); } - - foreach ($data as $key => $value) { - $item = "array_item"; - - if (is_numeric($key)) { - $output .= "<$item name=\"$key\" type=\"".gettype($value)."\">"; - } else { - $item = $key; - $output .= "<$item type=\"".gettype($value)."\">"; - } - - if (is_object($value)) { - $output .= serialise_object_to_xml($value, "", $n+1); - } else if (is_array($value)) { - $output .= serialise_array_to_xml($value, $n+1); - } else if (gettype($value) == "boolean") { - $output .= $value ? "true" : "false"; - } else { - $output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8'); - } - - $output .= "</$item>\n"; + + $output .= "</$key>\n"; + } + + if (($n == 0) || (is_object($data) && !($data instanceof stdClass))) { + $output .= "</$classname>\n"; + } + + return $output; +} + +/** + * Serialise an array. + * + * @param array $data The data to serialize + * @param int $n Used for recursion + * + * @return string + */ +function serialise_array_to_xml(array $data, $n = 0) { + $output = ""; + + if ($n == 0) { + $output = "<array>\n"; + } + + foreach ($data as $key => $value) { + $item = "array_item"; + + if (is_numeric($key)) { + $output .= "<$item name=\"$key\" type=\"" . gettype($value) . "\">"; + } else { + $item = $key; + $output .= "<$item type=\"" . gettype($value) . "\">"; } - - if ($n==0) { - $output .= "</array>\n"; + + if (is_object($value)) { + $output .= serialise_object_to_xml($value, "", $n + 1); + } else if (is_array($value)) { + $output .= serialise_array_to_xml($value, $n + 1); + } else if (gettype($value) == "boolean") { + $output .= $value ? "true" : "false"; + } else { + $output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8'); } - - return $output; + + $output .= "</$item>\n"; } - - /** - * Parse an XML file into an object. - * Based on code from http://de.php.net/manual/en/function.xml-parse-into-struct.php by - * efredricksen at gmail dot com - * - * @param string $xml The XML. - */ - function xml_to_object($xml) - { - $parser = xml_parser_create(); - - // Parse $xml into a structure - xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); - xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); - xml_parse_into_struct($parser, $xml, $tags); - - xml_parser_free($parser); - - $elements = array(); - $stack = array(); - - foreach ($tags as $tag) { - $index = count($elements); - - if ($tag['type'] == "complete" || $tag['type'] == "open") { - $elements[$index] = new XmlElement; - $elements[$index]->name = $tag['tag']; - $elements[$index]->attributes = $tag['attributes']; - $elements[$index]->content = $tag['value']; - - if ($tag['type'] == "open") { - $elements[$index]->children = array(); - $stack[count($stack)] = &$elements; - $elements = &$elements[$index]->children; - } - } - - if ($tag['type'] == "close") { - $elements = &$stack[count($stack) - 1]; - unset($stack[count($stack) - 1]); + + if ($n == 0) { + $output .= "</array>\n"; + } + + return $output; +} + +/** + * Parse an XML file into an object. + * Based on code from http://de.php.net/manual/en/function.xml-parse-into-struct.php by + * efredricksen at gmail dot com + * + * @param string $xml The XML + * + * @return object + */ +function xml_to_object($xml) { + $parser = xml_parser_create(); + + // Parse $xml into a structure + xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); + xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); + xml_parse_into_struct($parser, $xml, $tags); + + xml_parser_free($parser); + + $elements = array(); + $stack = array(); + + foreach ($tags as $tag) { + $index = count($elements); + + if ($tag['type'] == "complete" || $tag['type'] == "open") { + $elements[$index] = new XmlElement; + $elements[$index]->name = $tag['tag']; + $elements[$index]->attributes = $tag['attributes']; + $elements[$index]->content = $tag['value']; + + if ($tag['type'] == "open") { + $elements[$index]->children = array(); + $stack[count($stack)] = &$elements; + $elements = &$elements[$index]->children; } } - - return $elements[0]; + + if ($tag['type'] == "close") { + $elements = &$stack[count($stack) - 1]; + unset($stack[count($stack) - 1]); + } } + + return $elements[0]; +} |