123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- <?php
- /**
- * CRUD -- Define a RESTful resource entity
- *
- * @package Lorea
- * @subpackage CRUD
- *
- * Copyright 2012-2013 Lorea Faeries <federation@lorea.org>
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/>.
- */
- class CrudObject extends ElggObject {
- /*
- * Get the crud template for current entity
- */
- function getCrudTemplate() {
- return crud_get_handler($this->getSubType());
- }
- /*
- * Returns the parent entity
- */
- function getParentEntity() {
- if ($this->parent_guid)
- return get_entity($this->parent_guid);
- }
- /*
- * Get the title for current entity
- */
- function getTitle($full_view=false) {
- $template = $this->getCrudTemplate();
- $title = $this->title;
- if (empty($title)) {
- $title = $template->getDefaultValue('title', '');
- }
- if ($template->title_extend && !$full_view) {
- $varname = $template->title_extend;
- $value = date(elgg_echo('crud:date_format'), $this->$varname);
- if ($title)
- $title .= ", $value";
- else
- $title = $value;
- }
- return $title;
- }
- /*
- * Get the title formatted with a link to current entity
- */
- function getTitleLink($full_view=false) {
- $title = $this->getTitle($full_view);
- $title_link = elgg_view('output/url', array(
- 'href' => $this->getURL(),
- 'text' => $title,
- ));
- return $title_link;
- }
- /**
- * List children for given entity
- *
- * @param entity $entity Entity to operate on
- */
- function listChildren() {
- $crud = $this->getCrudTemplate();
- if ($crud->children_categories) {
- return $this->listChildrenCategories();
- }
- else {
- return $this->listChildrenRaw();
- }
- }
- /**
- * List children for given entity
- *
- * @param entity $entity Entity to operate on
- */
- function listChildrenRaw() {
- $crud = $this->getCrudTemplate();
- $child_subtype = $crud->children_type;
- $child_options = array('full_view' => FALSE,
- 'types' => 'object',
- 'subtypes' => $child_subtype,
- 'limit' => 10,
- 'list_class' => 'list-'.$child_subtype,
- 'metadata_name_value_pairs' => array(
- array('name' => 'parent_guid',
- 'value' => $this->guid)
- ),
- );
- $children = elgg_list_entities_from_metadata($child_options);
- return $children;
- }
- /**
- * List children for given entity per category
- *
- * @param entity $entity Entity to operate on
- */
- function listChildrenCategories() {
- global $CONFIG;
- $crud = $this->getCrudTemplate();
- $category_property = $crud->children_categories;
- $categories = $this->$category_property;
- if (empty($categories)) {
- return $this->listChildrenRaw();
- }
- $child_subtype = $crud->children_type;
- foreach($categories as $category) {
- $children .= "<h4>".ucfirst($category)."</h4>";
- $child_options = array('full_view' => FALSE,
- 'types' => 'object',
- 'subtypes' => $child_subtype,
- 'limit' => 10,
- 'list_class' => 'list-'.$child_subtype,
- 'metadata_name_value_pairs' => array(
- array('name' => 'parent_guid',
- 'value' => $this->guid),
- array('name' => $category_property,
- 'value' => $category)
- ),
- );
- $children .= elgg_list_entities_from_metadata($child_options);
- }
- $children .= "<h4>".elgg_echo('crud:categories:other')."</h4>";
- $child_options = array('full_view' => FALSE,
- 'types' => 'object',
- 'subtypes' => $child_subtype,
- 'limit' => 10,
- 'list_class' => 'list-'.$child_subtype,
- 'metadata_name_value_pairs' => array(
- array('name' => 'parent_guid',
- 'value' => $this->guid))
- );
- $name_metastring_id = get_metastring_id($category_property);
- $value_metastring_ids = array();
- foreach($categories as $category) {
- $value_metastring_ids[] = get_metastring_id($category);
- }
- if (empty($value_metastring_ids)) {
- return "";
- }
- $value_metastring_id = implode(",", $value_metastring_ids);
- $child_options['wheres'][] = "NOT EXISTS (
- SELECT 1 FROM {$CONFIG->dbprefix}metadata md
- WHERE md.entity_guid = e.guid
- AND md.name_id = $name_metastring_id
- AND md.value_id IN ($value_metastring_id))";
- $children .= elgg_list_entities_from_metadata($child_options);
- return $children;
- }
- /**
- * Return an icon for the entity
- */
- function getCrudIcon($size='tiny') {
- $crud = $this->getCrudTemplate();
- // Override icon completely for now
- if ($crud->icon_var) {
- $var_name = $crud->icon_var;
- $status = $this->$var_name;
- if(empty($status)) {
- $status = 'new';
- }
- $icon = "mod/$crud->module/graphics/$crud->crud_type-icons/$status.png";
- }
- else {
- $icon = NULL;
- }
- return $icon;
- }
- /**
- * Get children for given entity
- */
- function getChildren($count=FALSE) {
- $limit = 10;
- if ($count)
- $limit = 0;
- $crud = $this->getCrudTemplate();
- $child_subtype = $crud->children_type;
- $child_options = array('full_view' => FALSE,
- 'types' => 'object',
- 'subtypes' => $child_subtype,
- 'limit' => $limit,
- 'count' => $count,
- 'metadata_name_value_pairs' => array(
- array('name' => 'parent_guid',
- 'value' => $this->guid)
- )
- );
- $children = elgg_get_entities_from_metadata($child_options);
- return $children;
- }
- /**
- * Get the only embedded child for an entity.
- *
- * note: if there are more than one children, then nothing will be
- * returned.
- */
- function getEmbeddedChild() {
- $embedded_children = $this->getChildren();
- if (!empty($embedded_children)) {
- if (count($embedded_children) == 1)
- $embedded_child = $embedded_children[0];
- }
- return $embedded_child;
- }
- }
|