/** * Object editing view * * @param mixed $handler_id The ID of the handler. * @param Array $args The argument list. * @param Array &$data The local request data. * @return boolean Indicating success. */ public function _handler_edit($handler_id, array $args, array &$data) { $this->_object = midcom::get('dbfactory')->get_object_by_guid($args[0]); $this->_object->require_do('midgard:update'); $this->_object->require_do('midgard:parameters'); midcom::get('auth')->require_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin'); // List all parameters for display $qb = midcom_db_parameter::new_query_builder(); $qb->add_constraint('parentguid', '=', $this->_object->guid); $qb->add_order('domain'); $qb->add_order('name'); $data['parameters'] = $qb->execute(); $this->_prepare_request_data(); midgard_admin_asgard_plugin::bind_to_object($this->_object, $handler_id, $data); }
/** * Get row by its ID * * @param String $row Row identifier * @return mixed Array containing columns and values as key => value pairs or false on failure */ public function get_row($row) { $column = array(); // Create an empty column placeholder foreach ($this->columns as $column => $title) { $columns[$column] = ''; } switch ($this->storage_mode) { case 'serialized': static $serialized_data_cached = array(); if (isset($serialized_data_cached[$this->name])) { $serialized_data = $serialized_data_cached[$this->name]; } else { $serialized_data = null; } if (is_null($serialized_data)) { $data = unserialize($this->value); if (!$data) { return false; } $serialized_data = $data; } if (!isset($serialized_data[$row])) { // Special handling for determined rows if (isset($this->rows[$row])) { return $column; } return false; } $serialized_data_cached[$this->name] = $serialized_data; return $serialized_data[$row]; case 'parameter': // Initialize the returned column $column = array(); $mc = midcom_db_parameter::new_collector('parentguid', $this->storage->object->guid); $mc->add_value_property('name'); $mc->add_value_property('value'); // Some (hopefully older) Midgards still include deleted parameters oddly enough $mc->add_constraint('metadata.deleted', '=', 0); $mc->add_constraint('domain', '=', $this->parameter_domain); $mc->add_constraint('name', 'LIKE', "{$this->name}{$this->storage_mode_parameter_limiter}{$row}{$this->storage_mode_parameter_limiter}%"); $mc->execute(); $keys = $mc->list_keys(); if (count($keys) === 0) { return false; } // Length of the limiter $length = strlen("{$this->name}{$this->storage_mode_parameter_limiter}{$row}{$this->storage_mode_parameter_limiter}"); foreach ($keys as $guid => $array) { $name = $mc->get_subkey($guid, 'name'); $value = $mc->get_subkey($guid, 'value'); if (!$name || !$value) { continue; } $key = substr($name, 0, $length); // Not available in the column set, skipping if (!isset($column[$key])) { continue; } $column[$key] = $value; } } }
/** * List all child elements, nodes and leaves alike, of the node with ID * $parent_node_id. For every child element, an array of ID and type (node/leaf) * is given as * * - MIDCOM_NAV_ID => 0, * - MIDCOM_NAV_TYPE => 'node' * * If there are no child elements at all the method will return an empty array, * in case of an error false. NOTE: This method should be quite slow, there's * room for improvement... :-) * * @param int $parent_node_id The ID of the parent node. * @return Array A list of found elements, or false on failure. */ function list_child_elements($parent_node_id) { // Fetch nodes and leaves $parent_node = $this->get_node($parent_node_id); if (!$parent_node) { return false; } $guid = $parent_node[MIDCOM_NAV_GUID]; if ($GLOBALS['midcom_config']['symlinks']) { $guid = $parent_node[MIDCOM_NAV_OBJECT]->guid; } $navorder = (int) midcom_db_parameter::get_by_objectguid($guid, 'midcom.helper.nav', 'navorder'); switch ($navorder) { case MIDCOM_NAVORDER_DEFAULT: $navorder = 'topicsfirst'; break; case MIDCOM_NAVORDER_TOPICSFIRST: $navorder = 'topicsfirst'; break; case MIDCOM_NAVORDER_ARTICLESFIRST: $navorder = 'articlesfirst'; break; case MIDCOM_NAVORDER_SCORE: $navorder = 'score'; break; default: $navorder = 'topicsfirst'; break; } $nav_object = midcom_helper_nav_itemlist::factory($navorder, $this, $parent_node_id); $result = $nav_object->get_sorted_list(); return $result; }