<?php /** * Elgg tidypics library of common functions * */ /** * Get images for display on front page * * @param int number of images * @param int (optional) guid of owner * @return string of html for display * * To use with the custom index plugin, use something like this: if (is_plugin_enabled('tidypics')) { ?> <!-- display latest photos --> <div class="index_box"> <h2><a href="<?php echo $vars['url']; ?>pg/photos/world/"><?php echo elgg_echo("tidypics:mostrecent"); ?></a></h2> <div class="contentWrapper"> <?php echo tp_get_latest_photos(5); ?> </div> </div> <?php } ?> * Good luck */ function tp_get_latest_photos($num_images, $owner_guid = 0) { $prev_context = set_context('front'); $image_html = tp_list_entities('object', 'image', $owner_guid, $num_images, false, false, false); set_context($prev_context); return $image_html; } /** * Get image directory path * * Each album gets a subdirectory based on its container id * * @return string path to image directory */ function tp_get_img_dir() { $file = new ElggFile(); return $file->getFilenameOnFilestore() . 'image/'; } /********************************************************************* * the functions below replace broken core functions or add functions * that could/should exist in the core */ /** * */ function tp_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) { global $CONFIG; if ($subtype === false || $subtype === null || $subtype === 0) return false; if ($order_by == "") $order_by = "time_created desc"; $order_by = sanitise_string($order_by); $limit = (int)$limit; $offset = (int)$offset; $site_guid = (int) $site_guid; $timelower = (int) $timelower; $timeupper = (int) $timeupper; if ($site_guid == 0) $site_guid = $CONFIG->site_guid; $where = array(); if (is_array($subtype)) { $tempwhere = ""; if (sizeof($subtype)) foreach($subtype as $typekey => $subtypearray) { foreach($subtypearray as $subtypeval) { $typekey = sanitise_string($typekey); if (!empty($subtypeval)) { if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval)) return false; } else { // @todo: Setting subtype to 0 when $subtype = '' returns entities with // no subtype. This is different to the non-array behavior // but may be required in some cases. $subtypeval = 0; } if (!empty($tempwhere)) $tempwhere .= " or "; $tempwhere .= "(type = '{$typekey}' and subtype = {$subtypeval})"; } } if (!empty($tempwhere)) $where[] = "({$tempwhere})"; } else { $type = sanitise_string($type); if ($subtype !== "" AND !$subtype = get_subtype_id($type, $subtype)) return false; if ($type != "") $where[] = "type='$type'"; if ($subtype!=="") $where[] = "subtype=$subtype"; } if ($owner_guid != "") { 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 ($site_guid > 0) $where[] = "site_guid = {$site_guid}"; if (!is_null($container_guid)) { if (is_array($container_guid)) { foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val; $where[] = "container_guid in (" . implode(",",$container_guid) . ")"; } else { $container_guid = (int) $container_guid; $where[] = "container_guid = {$container_guid}"; } } if ($timelower) $where[] = "time_created >= {$timelower}"; if ($timeupper) $where[] = "time_created <= {$timeupper}"; if (!$count) { $query = "SELECT * from {$CONFIG->dbprefix}entities where "; } else { $query = "SELECT count(guid) as total from {$CONFIG->dbprefix}entities where "; } foreach ($where as $w) $query .= " $w and "; $query .= get_access_sql_suffix(); // Add access controls if (!$count) { $query .= " order by $order_by"; if ($limit) $query .= " limit $offset, $limit"; // Add order and limit $dt = get_data($query, "entity_row_to_elggstar"); return $dt; } else { $total = get_data_row($query); return $total->total; } } function tp_list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $pagination = true) { $offset = (int) get_input('offset'); $count = tp_get_entities($type, $subtype, $owner_guid, "", $limit, $offset, true); $entities = tp_get_entities($type, $subtype, $owner_guid, "", $limit, $offset); return tp_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination); } function tp_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = false, $pagination = true) { $context = get_context(); $html = elgg_view('tidypics/gallery',array( 'entities' => $entities, 'count' => $count, 'offset' => $offset, 'limit' => $limit, 'baseurl' => $_SERVER['REQUEST_URI'], 'fullview' => $fullview, 'context' => $context, 'viewtypetoggle' => $viewtypetoggle, 'viewtype' => get_input('search_viewtype','list'), 'pagination' => $pagination )); return $html; } function tp_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); $entity_type = sanitise_string($entity_type); $entity_subtype = get_subtype_id($entity_type, $entity_subtype); $name = get_metastring_id($name); $limit = (int) $limit; $offset = (int) $offset; $owner_guid = (int) $owner_guid; if (!empty($mdname) && !empty($mdvalue)) { $meta_n = get_metastring_id($mdname); $meta_v = get_metastring_id($mdvalue); } if (empty($name)) return 0; $where = array(); if ($entity_type!="") $where[] = "e.type='$entity_type'"; if ($owner_guid > 0) $where[] = "e.owner_guid = $owner_guid"; if ($entity_subtype) $where[] = "e.subtype=$entity_subtype"; if ($name!="") $where[] = "a.name_id='$name'"; if (!empty($mdname) && !empty($mdvalue)) { if ($mdname!="") $where[] = "m.name_id='$meta_n'"; if ($mdvalue!="") $where[] = "m.value_id='$meta_v'"; } if ($sum != "count") $where[] = "a.value_type='integer'"; // Limit on integer types if (!$count) { $query = "SELECT distinct e.*, $sum(ms.string) as sum "; } 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 "; if (!empty($mdname) && !empty($mdvalue)) { $query .= " JOIN {$CONFIG->dbprefix}metadata m on m.entity_guid = e.guid "; } $query .= " WHERE "; foreach ($where as $w) $query .= " $w and "; $query .= get_access_sql_suffix("a"); // now add access $query .= ' and ' . get_access_sql_suffix("e"); // now add access if (!$count) $query .= ' group by e.guid'; if (!$count) { $query .= ' order by sum ' . $orderdir; $query .= ' limit ' . $offset . ' , ' . $limit; return get_data($query, "entity_row_to_elggstar"); } else { if ($row = get_data_row($query)) { return $row->num; } } return false; } /** * Is page owner a group - convenience function * * @return true/false */ function tp_is_group_page() { if ($group = page_owner_entity()) { if ($group instanceof ElggGroup) return true; } return false; } /** * Is the request from a known browser * * @return true/false */ function tp_is_person() { $known = array('msie', 'mozilla', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko'); $agent = strtolower($_SERVER['HTTP_USER_AGENT']); foreach ($known as $browser) { if (strpos($agent, $browser) !== false) { return true; } } return false; } ?>