* * 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 * . */ 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 .= "

".ucfirst($category)."

"; $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 .= "

".elgg_echo('crud:categories:other')."

"; $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; } }