123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- <?php
- /**
- * CRUD -- Create, Read, Update, Delete: a RESTful plugin for Elgg.
- *
- * @package Lorea
- * @subpackage CRUD
- * @homepage http://lorea.org/plugin/crud
- * @copyright 2012-2013 Lorea Faeries <federation@lorea.org>
- * @license COPYING, http://www.gnu.org/licenses/agpl
- *
- * 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/>.
- */
- elgg_register_event_handler('init', 'system', 'crud_init');
- /**
- * Format and return the URL for crud object.
- *
- * @param ElggObject $entity Assembly object
- * @return string URL of crud object.
- */
- function crud_url_handler($entity) {
- if (!$entity->getOwnerEntity()) {
- // default to a standard view if no owner.
- return FALSE;
- }
- /*if (!$entity->testAssembly()) {
- return FALSE;
- }*/
- //$friendly_title = elgg_get_friendly_title($entity->title);
- return $entity->getSubtype()."/view/{$entity->guid}";
- }
- /**
- * CRUD page handler
- *
- * URLs take the form of
- * List crud objects in group: <crud_type>/owner/<guid>
- * View crud object: <crud_type>/view/<guid>
- * Add crud object: <crud_type>/add/<guid>
- * Edit crud object: <crud_type>/edit/<guid>
- *
- * @param array $page Array of url segments for routing
- * @return bool
- */
- function crud_page_handler($page) {
- elgg_load_library('elgg:crud');
- if (!isset($page[0])) {
- $page[0] = 'all';
- }
- $page_url = current_page_url();
- $site_url = elgg_get_site_url();
- $current_url = str_replace($site_url, "", $page_url);
- $crud_type = current(explode('/', $current_url));
- $crud_handler = crud_get_handler($crud_type);
- $crud_module = $crud_handler->module;
- elgg_push_breadcrumb(elgg_echo($crud_module), '');
- switch ($page[0]) {
- case 'owner':
- case 'group':
- crud_handle_list_page($crud_handler, $page[1]);
- break;
- case 'add':
- crud_handle_edit_page($crud_handler, 'add', $page[1]);
- break;
- case 'edit':
- crud_handle_edit_page($crud_handler, 'edit', $page[1]);
- break;
- case 'view':
- crud_handle_view_page($crud_handler, $page[1]);
- break;
- case 'edit_general':
- crud_handle_edit_page($crud_handler, 'edit_general', $page[1]);
- break;
- default:
- return false;
- }
- return true;
- }
- /**
- * Register a crud class
- */
- function crud_register_type($name, $variables, $class=NULL) {
- crud_register_subtype($name, $class);
- $object = crud_get_handler($name);
- $prev_variables = elgg_get_config($name);
- if (!empty($prev_variables)) {
- $variables = array_merge($prev_variables, $variables);
- }
- elgg_set_config($name, $variables);
- $object->variables = $variables;
- if (empty($prev_variables)) {
- // Register for search.
- elgg_register_entity_type('object', $name);
- // routing of urls
- elgg_register_page_handler($name, 'crud_page_handler');
- // override the default url to view a crud object
- elgg_register_entity_url_handler('object', $name, 'crud_url_handler');
- $action_path = elgg_get_plugins_path() . 'crud/actions/crud';
- elgg_register_action("$name/save", "$action_path/save.php");
- elgg_register_action("$name/delete", "$action_path/delete.php");
- // icon url override
- elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'crud_icon_url_override');
- }
- return $object;
- }
- /**
- * Override the default entity icon for crud entities
- *
- * @return string Relative URL
- */
- function crud_icon_url_override($hook, $type, $returnvalue, $params) {
- $entity = $params['entity'];
- if ($entity instanceof CrudObject) {
- $size = $params['size'];
- if (!$size)
- $icon = 'tiny';
- $icon = $entity->getCrudIcon($size);
- }
- return $icon;
- }
- /**
- * Get the crud handler for a given type
- */
- function crud_get_handler($name) {
- global $CONFIG;
- if (isset($CONFIG->crud->handlers[$name])) {
- return $CONFIG->crud->handlers[$name];
- }
- return $CONFIG->crud->handlers[$name] = new CrudTemplate($name);
- }
- /**
- * Owner block handler
- */
- function crud_owner_block_menu($hook, $type, $return, $params) {
- global $CONFIG;
-
- foreach($CONFIG->crud->handlers as $handler_name => $handler) {
- if (!$handler->owner_menu) {
- continue;
- }
-
- if ($handler->owner_menu != 'group' && elgg_instanceof($params['entity'], 'user')) {
- $url = "$handler_name/owner/{$params['entity']->username}";
- $item = new ElggMenuItem($handler_name, elgg_echo($handler_name), $url);
- $return[] = $item;
- } elseif ($handler->owner_menu != 'user') {
- if ($handler->module_check)
- $enable = "{$handler->module_check}_enable";
- else
- $enable = "{$handler->module}_enable";
- if ($params['entity']->$enable == "yes") {
- $owner_label = ($handler->owner_menu == 'group') ? 'owner' : 'group';
- $url = "$handler_name/$owner_label/{$params['entity']->guid}/all";
- $item = new ElggMenuItem($handler_name, elgg_echo("$handler_name:group"), $url);
- $return[] = $item;
- }
- }
- }
- return $return;
- }
- /**
- * Init crud plugin.
- */
- function crud_init() {
- global $CONFIG;
- $CONFIG->crud = new stdClass();
- $CONFIG->crud->handlers = array();
-
- elgg_register_library('elgg:crud', elgg_get_plugins_path() . 'crud/lib/crud.php');
- // add to the main css
- elgg_extend_view('css/elgg', 'crud/css');
- // register actions
- $action_path = elgg_get_plugins_path() . 'crud/actions/crud';
- elgg_register_action('crud/save', "$action_path/save.php");
- elgg_register_action('crud/delete', "$action_path/delete.php");
- elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'crud_owner_block_menu');
- }
- /**
- * Register a crud subtype class into elgg engine
- */
- function crud_register_subtype($name, $class_name=NULL) {
- if (empty($class_name))
- $class_name = "CrudObject";
- if (get_subtype_id('object', $name)) {
- if (get_subtype_class('object', $name) != $class_name) {
- update_subtype('object', $name, $class_name);
- }
- } else {
- add_subtype('object', $name, $class_name);
- }
- }
|