/** * Handler for folder move. Checks for updating permissions, initializes * the move and the content topic itself. Handles also the sent form. * * @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_move($handler_id, array $args, array &$data) { $this->_object = midcom::get('dbfactory')->get_object_by_guid($args[0]); if (!is_a($this->_object, 'midcom_db_topic') && !is_a($this->_object, 'midcom_db_article')) { throw new midcom_error_notfound("Moving only topics and articles is supported."); } $this->_object->require_do('midgard:update'); if (isset($_POST['move_to'])) { $this->_move_object((int) $_POST['move_to']); return new midcom_response_relocate(midcom::get('permalinks')->create_permalink($this->_object->guid)); } $object_label = midcom_helper_reflector::get($this->_object)->get_object_label($this->_object); if (is_a($this->_object, 'midcom_db_topic')) { // This is a topic $this->_object->require_do('midcom.admin.folder:topic_management'); $this->_node_toolbar->hide_item("__ais/folder/move/{$this->_object->guid}/"); $data['current_folder'] = new midcom_db_topic($this->_object->up); } else { // This is a regular object, bind to view $this->bind_view_to_object($this->_object); $this->add_breadcrumb(midcom::get('permalinks')->create_permalink($this->_object->guid), $object_label); $this->_view_toolbar->hide_item("__ais/folder/move/{$this->_object->guid}/"); $data['current_folder'] = new midcom_db_topic($this->_object->topic); } $this->add_breadcrumb("__ais/folder/move/{$this->_object->guid}/", $this->_l10n->get('move')); $data['title'] = sprintf(midcom::get('i18n')->get_string('move %s', 'midcom.admin.folder'), $object_label); midcom::get('head')->set_pagetitle($data['title']); // Ensure we get the correct styles midcom::get('style')->prepend_component_styledir('midcom.admin.folder'); $this->add_stylesheet(MIDCOM_STATIC_URL . '/midcom.admin.folder/folder.css'); }
private function _update_score($identifier, $score) { // Use the DB Factory to resolve the class and to get the object try { $object = midcom::get('dbfactory')->get_object_by_guid($identifier); } catch (midcom_error $e) { // This is probably a pseudo leaf, store the score to the current node $this->_topic->set_parameter('midcom.helper.nav.score', $identifier, $score); return true; // This will skip the rest of the handling } // Get the original approval status and update metadata reference $metadata = midcom_helper_metadata::retrieve($object); if (!is_object($metadata)) { throw new midcom_error("Could not fetch metadata for object {$object->guid}"); } // Make sure this is reference to correct direction (from our point of view) $metadata->__object =& $object; // Get the approval status if metadata object is available $approval_status = false; if ($metadata->is_approved()) { $approval_status = true; } $object->metadata->score = $score; //$metadata->set() calls update *AND* updates the metadata cache correctly, thus we use that in stead of raw update if (!$metadata->set('score', $object->metadata->score)) { // Show an error message on an update failure $reflector =& midcom_helper_reflector::get($object); $title = $reflector->get_class_label() . ' ' . $reflector->get_object_label($object); midcom::get('uimessages')->add($this->_l10n->get('midcom.admin.folder'), sprintf($this->_l10n->get('failed to update %s due to: %s'), $title, midcom_connection::get_error_string()), 'error'); return false; } // Approve if possible if ($approval_status && $object->can_do('midcom:approve')) { if (!isset($metadata)) { $metadata = midcom_helper_metadata::retrieve($object); } $metadata->approve(); } return true; }
<?php /** * @package midcom.helper.reflector * @author The Midgard Project, http://www.midgard-project.org * @copyright The Midgard Project, http://www.midgard-project.org * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License */ if (!isset($_GET['guid']) || empty($_GET['guid'])) { throw new midcom_error_notfound('Specify $guid via GET for info'); } $object = midcom::get('dbfactory')->get_object_by_guid($_GET['guid']); $reflector =& midcom_helper_reflector::get($object); echo "Got " . $reflector->get_class_label() . ' "' . $reflector->get_object_label($object) . "\", dump<pre>\n"; var_dump($object); echo "</pre>\n"; if (midcom_helper_reflector_tree::has_children($object)) { echo "Object has children<br/>\n"; echo "Child counts <pre>\n"; $counts = midcom_helper_reflector_tree::count_child_objects($object); print_r($counts); echo "</pre>\n"; echo "Child objects dump<pre>\n"; $children = midcom_helper_reflector_tree::get_child_objects($object); var_dump($children); echo "</pre>\n"; }
/** * Populate the object breadcrumb * * @param mixed $object MgdSchema object for which the toolbar will be created * @param String $handler_id Initialized handler id * @param array $data Local request data */ private static function _set_object_breadcrumb($object, $handler_id, &$data) { $tmp = array(); $breadcrumb = array(); $label = $data['object_reflector']->get_object_label($object); $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('view', $object->guid), MIDCOM_NAV_NAME => $label); $parent = $object->get_parent(); if (is_a($object, 'midcom_db_parameter') && is_object($parent) && $parent->guid) { // Add "parameters" list to breadcrumb if we're in a param $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('parameters', $parent->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('parameters', 'midcom')); } $i = 0; while (is_object($parent) && $parent->guid && $i < 10) { $i++; $parent_reflector = midcom_helper_reflector::get($parent); $parent_label = $parent_reflector->get_object_label($parent); $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('view', $parent->guid), MIDCOM_NAV_NAME => $parent_label); $parent = $parent->get_parent(); } $breadcrumb = array_reverse($breadcrumb); switch ($handler_id) { case '____mfa-asgard-object_edit': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('edit', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('edit', 'midcom')); break; case '____mfa-asgard-object_copy': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('copy', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('copy', 'midcom')); break; case '____mfa-asgard-object_copy_tree': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('copy/tree', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('copy', 'midcom')); break; case '____mfa-asgard-components_configuration_edit_folder': $breadcrumb[] = array(MIDCOM_NAV_URL => "__mfa/asgard/components/configuration/edit/{$object->component}/{$object->guid}/", MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('component configuration', 'midcom')); break; case '____mfa-asgard-object_metadata': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('metadata', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('metadata', 'midcom')); break; case '____mfa-asgard-object_attachments': case '____mfa-asgard-object_attachments_edit': case '____mfa-asgard-object_attachments_delete': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('attachments', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('attachments', 'midgard.admin.asgard')); if ($handler_id == '____mfa-asgard-object_attachments_edit') { $breadcrumb[] = array(MIDCOM_NAV_URL => "__mfa/asgard/object/attachments/{$object->guid}/edit/", MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('edit', 'midcom')); } if ($handler_id == '____mfa-asgard-object_attachments_delete') { $breadcrumb[] = array(MIDCOM_NAV_URL => "__mfa/asgard/object/attachments/{$object->guid}/delete/", MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('delete', 'midcom')); } break; case '____mfa-asgard-object_parameters': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('parameters', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('parameters', 'midcom')); break; case '____mfa-asgard-object_permissions': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('permissions', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('privileges', 'midcom')); break; case '____mfa-asgard-object_create': if ($data['new_type_arg'] == 'midgard_parameter') { // Add "parameters" list to breadcrumb if we're creating a param $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('parameters', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('parameters', 'midcom')); } $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('create' . $data['new_type_arg'], $object->guid), MIDCOM_NAV_NAME => sprintf(midcom::get('i18n')->get_string('create %s', 'midcom'), midgard_admin_asgard_plugin::get_type_label($data['new_type_arg']))); break; case '____mfa-asgard-object_delete': $breadcrumb[] = array(MIDCOM_NAV_URL => self::_generate_url('delete', $object->guid), MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('delete', 'midcom')); break; case '____mfa-asgard_midcom.helper.replicator-object': $breadcrumb[] = array(MIDCOM_NAV_URL => "__mfa/asgard_midcom.helper.replicator/object/{$object->guid}/", MIDCOM_NAV_NAME => midcom::get('i18n')->get_string('replication information', 'midcom.helper.replicator')); break; case '____mfa-asgard-object_rcs_diff': $tmp[] = array(MIDCOM_NAV_URL => "__mfa/asgard/object/rcs/preview/{$object->guid}/{$data['args'][1]}/{$data['args'][2]}", MIDCOM_NAV_NAME => sprintf($data['l10n']->get('differences between %s and %s'), $data['args'][1], $data['args'][2])); case '____mfa-asgard-object_rcs_preview': if (isset($data['args'][2])) { $current = $data['args'][2]; } else { $current = $data['args'][1]; } $tmp[] = array(MIDCOM_NAV_URL => "__mfa/asgard/object/rcs/preview/{$object->guid}/{$current}/", MIDCOM_NAV_NAME => sprintf($data['l10n']->get('version %s'), $current)); case '____mfa-asgard-object_rcs_history': $tmp[] = array(MIDCOM_NAV_URL => "__mfa/asgard/object/rcs/{$object->guid}/", MIDCOM_NAV_NAME => $data['l10n']->get('show history')); $tmp = array_reverse($tmp); $breadcrumb = array_merge($breadcrumb, $tmp); break; } midcom_core_context::get()->set_custom_key('midcom.helper.nav.breadcrumb', $breadcrumb); }
/** * Helper to update the breadcrumb */ private function _update_breadcrumb() { $ref = midcom_helper_reflector::get($this->_linked_object); $object_label = $ref->get_object_label($this->_linked_object); $this->add_breadcrumb(midcom::get('permalinks')->create_permalink($this->_linked_object->guid), $object_label); $this->add_breadcrumb('', $this->_l10n->get('billing data') . " : " . $object_label); }
private function _add_linked_field($key) { $linked_type = $this->_reflector->get_link_name($key); $linked_type_reflector = midcom_helper_reflector::get($linked_type); $field_type = $this->_reflector->get_midgard_type($key); if ($key == 'up') { $field_label = sprintf($this->_l10n->get('under %s'), midgard_admin_asgard_plugin::get_type_label($linked_type)); } else { $type_label = midgard_admin_asgard_plugin::get_type_label($linked_type); if (substr($type_label, 0, strlen($key)) == $key) { // Handle abbreviations like "lang" for "language" $field_label = $type_label; } else { if ($key == $type_label) { $field_label = $key; } else { $ref = midcom_helper_reflector::get($this->_object); $component_l10n = $ref->get_component_l10n(); $field_label = sprintf($this->_l10n->get('%s (%s)'), $component_l10n->get($key), $type_label); } } } // Get the chooser widgets switch ($field_type) { case MGD_TYPE_UINT: case MGD_TYPE_STRING: case MGD_TYPE_GUID: $class = midcom::get('dbclassloader')->get_midcom_class_name_for_mgdschema_object($linked_type); if (!$class) { break; } $component = midcom::get('dbclassloader')->get_component_for_class($linked_type); $this->_schemadb['object']->append_field($key, array('title' => $field_label, 'storage' => $key, 'type' => 'select', 'type_config' => array('require_corresponding_option' => false, 'options' => array(), 'allow_other' => true, 'allow_multiple' => false), 'widget' => 'chooser', 'widget_config' => array('class' => $class, 'component' => $component, 'titlefield' => $linked_type_reflector->get_label_property(), 'id_field' => $this->_reflector->get_link_target($key), 'searchfields' => $linked_type_reflector->get_search_properties(), 'result_headers' => $this->_get_result_headers($linked_type_reflector), 'orders' => array(), 'creation_mode_enabled' => true, 'creation_handler' => midcom_connection::get_url('self') . "__mfa/asgard/object/create/chooser/{$linked_type}/", 'creation_default_key' => $linked_type_reflector->get_label_property(), 'generate_path_for' => midcom_helper_reflector::get_name_property($this->_object)))); break; } }
/** * Trash 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_trash_type($handler_id, array $args, array &$data) { midcom::get('auth')->require_admin_user(); midcom::get('cache')->content->no_cache(); $this->type = $args[0]; $data['view_title'] = midgard_admin_asgard_plugin::get_type_label($this->type); midcom::get('head')->set_pagetitle($data['view_title']); $dummy = new $this->type(); $data['midcom_dba_classname'] = midcom::get('dbclassloader')->get_midcom_class_name_for_mgdschema_object($dummy); $data['type'] = $this->type; $data['reflector'] = midcom_helper_reflector::get($data['type']); $data['label_property'] = $data['reflector']->get_label_property(); if (isset($_POST['undelete']) && !isset($_POST['purge']) && is_array($_POST['undelete'])) { $this->_undelete(); return new midcom_response_relocate("__mfa/asgard/trash/{$this->type}/"); } if (isset($_POST['purge']) && is_array($_POST['undelete'])) { $this->_purge(); return new midcom_response_relocate("__mfa/asgard/trash/{$this->type}/"); } $qb = new org_openpsa_qbpager_direct($data['type'], "{$data['type']}_trash"); $qb->include_deleted(); $qb->add_constraint('metadata.deleted', '=', true); $qb->add_order('metadata.revised', 'DESC'); $data['qb'] =& $qb; $data['trash'] = $qb->execute_unchecked(); // Set the breadcrumb data $this->add_breadcrumb('__mfa/asgard/', $this->_l10n->get('midgard.admin.asgard')); $this->add_breadcrumb("__mfa/asgard/{$this->type}/", $data['view_title']); $this->add_breadcrumb("__mfa/asgard/trash/{$this->type}/", sprintf($this->_l10n->get('%s trash'), midgard_admin_asgard_plugin::get_type_label($data['type']))); }
/** * Helper function to prepare the breadcrumb */ private function _prepare_breadcrumb() { $ref = midcom_helper_reflector::get($this->_current_object); $object_label = $ref->get_object_label($this->_current_object); $this->add_breadcrumb(midcom::get('permalinks')->create_permalink($this->_current_object->guid), $object_label); $this->add_breadcrumb(midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX) . '__mfa/org.openpsa.relatedto/render/' . $this->_current_object->guid . '/both/', $this->_l10n->get('view related information')); $this->add_breadcrumb("", $this->_l10n->get('journal entry') . " : " . $object_label); }
private function _find_linking_property($new_type) { // Figure out the linking property $new_type_reflector = midcom_helper_reflector::get($new_type); $link_properties = $new_type_reflector->get_link_properties(); $type_to_link_to = midcom_helper_reflector::class_rewrite(get_class($this->_object)); foreach ($link_properties as $new_type_property => $link) { $linked_type = midcom_helper_reflector::class_rewrite($link['class']); if (midcom_helper_reflector::is_same_class($linked_type, $type_to_link_to) || $link['type'] == MGD_TYPE_GUID && is_null($link['class'])) { $parent_property = $link['target']; return array($new_type_property, $parent_property); } } return false; }
/** * Get path components for object * * @param midgard_object $object, the object to get path for * @param GUID $stop_at in case we wish to stop resolving at certain object give guid here * @return array path components */ public static function resolve_path_parts(&$object, $stop_at = null) { static $cache = array(); $cache_key = $object->guid . $stop_at; if (isset($cache[$cache_key])) { return $cache[$cache_key]; } $ret = array(); $object_reflector =& midcom_helper_reflector::get($object); $part = array('object' => $object, 'label' => $object_reflector->get_object_label($object)); $ret[] = $part; unset($part, $object_reflector); $parent = self::get_parent($object); while (is_object($parent)) { $parent_reflector =& midcom_helper_reflector::get($parent); $part = array('object' => $parent, 'label' => $parent_reflector->get_object_label($parent)); $ret[] = $part; unset($part, $parent_reflector); $parent = self::get_parent($parent); } unset($parent); $ret = array_reverse($ret); $cache[$cache_key] = $ret; unset($ret); return $cache[$cache_key]; }
/** * This function constructs the message */ private function _construct_message() { // Construct the message $message = array(); // Resolve parent title $parent_object = midcom::get('dbfactory')->get_object_by_guid($this->objectguid); $ref = midcom_helper_reflector::get($parent_object); $parent_title = $ref->get_object_label($parent_object); // Resolve commenting user $auth = midcom::get('auth'); if ($auth->user) { $user_string = "{$auth->user->name} ({$auth->user->username})"; } else { $user_string = "{$this->author} (" . midcom::get('i18n')->get_string('anonymous', 'midcom') . ")"; } $message['title'] = sprintf(midcom::get('i18n')->get_string('page %s has been commented by %s', 'net.nehmer.comments'), $parent_title, $user_string); $message['content'] = "{$this->title}\n"; $message['content'] .= "{$this->content}\n\n"; $message['content'] .= midcom::get('i18n')->get_string('link to page', 'net.nemein.wiki') . ":\n"; $message['content'] .= midcom::get('permalinks')->create_permalink($this->objectguid); $message['abstract'] = $message['title']; return $message; }
/** * Static helper */ public static function resolve_object_title($object) { $object_reflector = midcom_helper_reflector::get($object); return $object_reflector->get_object_label($object); }
private function _list_leaf_children($object, $skip = array()) { if ($children = self::_get_child_objects($object)) { if ($skip) { foreach ($children as $class => $objects) { if (in_array($class, $skip)) { unset($children[$class]); } } } } if ($children) { echo " <ul>\n"; foreach ($children as $class => $objects) { foreach ($objects as $object) { $title = midcom_helper_reflector::get($class)->get_object_label($object); echo " <li class=\"leaf_child {$class}\" style=\"display: none;\">{$title}\n"; self::_list_leaf_children($object); echo " </li>\n"; } } echo " </ul>\n"; } }
/** * Handler for folder metadata. Checks for updating permissions, initializes * the metadata and the content topic itself. Handles also the sent form. * * @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_metadata($handler_id, array $args, array &$data) { $this->_object = midcom::get('dbfactory')->get_object_by_guid($args[0]); // FIXME: We should modify the schema according to whether or not scheduling is used $this->_object->require_do('midgard:update'); if (is_a($this->_object, 'midcom_db_topic')) { // This is a topic $this->_object->require_do('midcom.admin.folder:topic_management'); } else { // This is a regular object, bind to view $this->bind_view_to_object($this->_object); } $this->_metadata = midcom_helper_metadata::retrieve($this->_object); if (!$this->_metadata) { throw new midcom_error("Failed to retrieve Metadata for " . get_class($this->_object) . " {$this->_object->guid}."); } // Load the DM2 controller instance $this->_load_datamanager(); switch ($this->_controller->process_form()) { case 'save': midcom::get('cache')->invalidate($this->_object->guid); case 'cancel': return new midcom_response_relocate(midcom::get('permalinks')->create_permalink($this->_object->guid)); } $object_label = midcom_helper_reflector::get($this->_object)->get_object_label($this->_object); if (is_a($this->_object, 'midcom_db_topic')) { $this->_node_toolbar->hide_item("__ais/folder/metadata/{$this->_object->guid}/"); } else { $this->add_breadcrumb(midcom::get('permalinks')->create_permalink($this->_object->guid), $object_label); $this->_view_toolbar->hide_item("__ais/folder/metadata/{$this->_object->guid}/"); } $this->add_breadcrumb("__ais/folder/metadata/{$this->_object->guid}/", $this->_l10n->get('edit metadata')); $data['title'] = sprintf(midcom::get('i18n')->get_string('edit metadata of %s', 'midcom.admin.folder'), $object_label); midcom::get('head')->set_pagetitle($data['title']); // Set the help object in the toolbar $help_toolbar = midcom::get('toolbars')->get_help_toolbar(); $help_toolbar->add_help_item('edit_metadata', 'midcom.admin.folder', null, null, 1); // Ensure we get the correct styles midcom::get('style')->prepend_component_styledir('midcom.admin.folder'); }
/** * Default line rendering, used if a specific renderer cannot be found * * Tries to find certain properties likely to hold semi-useful information about * the object, failing that outputs class and guid. * * @param array &$link The necessary link information * @param object &other_obj The link target */ private function _render_line_default(&$link, &$other_obj) { $class = get_class($other_obj); $object_url = midcom::get('permalinks')->create_permalink($other_obj->guid); $ref = midcom_helper_reflector::get($other_obj); $class_label = $ref->get_class_label(); $object_label = $ref->get_object_label($other_obj); if ($object_url) { $object_label = '<a href="' . $object_url . '" target="' . $class . $this->_object->guid . '">' . $object_label . '</a>'; } echo " <li class=\"unknown {$class}\" id=\"org_openpsa_relatedto_line_{$link['guid']}\">\n"; echo ' <span class="icon">' . $this->_request_data['icon'] . "</span>\n"; echo ' <span class="title">' . $object_label . "</span>\n"; echo ' <ul class="metadata">'; echo ' <li>' . $class_label . "</li>\n"; echo " </ul>\n"; self::render_line_controls($link, $other_obj); echo "</li>\n"; }
/** * Method for updating title for current object and handler, should be implemented in the * component handler for better performance. * * @param mixed $handler_id The ID of the handler. */ public function _update_title($handler_id) { $ref = midcom_helper_reflector::get($this->_dba_class); $view_title = $this->_topic->extra . ': '; switch ($this->_mode) { case 'create': $view_title = sprintf($this->_l10n_midcom->get('create %s'), $ref->get_class_label()); break; case 'read': $object_title = $ref->get_object_label($this->_object); $view_title .= $object_title; break; case 'update': $object_title = $ref->get_object_label($this->_object); $view_title .= sprintf($this->_l10n_midcom->get('edit %s'), $object_title); break; case 'delete': $object_title = $ref->get_object_label($this->_object); $view_title .= sprintf($this->_l10n_midcom->get('delete %s'), $object_title); break; } midcom::get('head')->set_pagetitle($view_title); }