function midgard_admin_asgard_trash_type_show($object, $indent = 0, $prefix = '', $enable_undelete = true)
{
    static $persons = array();
    static $shown = array();
    static $url_prefix = '';
    if (!$url_prefix) {
        $url_prefix = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_ANCHORPREFIX);
    }
    if (isset($shown[$object->guid])) {
        return;
    }
    if (!isset($persons[$object->metadata->revisor])) {
        $persons[$object->metadata->revisor] = midcom::get('auth')->get_user($object->metadata->revisor);
    }
    $reflector = midcom_helper_reflector_tree::get($object);
    $icon = $reflector->get_object_icon($object);
    echo "{$prefix}<tr>\n";
    $disabled = '';
    if (!$enable_undelete) {
        $disabled = ' disabled="disabled"';
    }
    $object_label = $reflector->get_object_label($object);
    if (empty($object_label)) {
        $object_label = $object->guid;
    }
    echo "{$prefix}    <td class=\"checkbox\"><input type=\"checkbox\" name=\"undelete[]\"{$disabled} value=\"{$object->guid}\" id=\"guid_{$object->guid}\" /></td>\n";
    echo "{$prefix}    <td class=\"label\" style=\"padding-left: {$indent}px\"><label for=\"guid_{$object->guid}\">{$icon}" . $object_label . "</label></td>\n";
    echo "{$prefix}    <td class=\"nowrap\">" . strftime('%x %X', strtotime($object->metadata->revised)) . "</td>\n";
    if (isset($persons[$object->metadata->revisor]->guid)) {
        echo "{$prefix}    <td><a href=\"{$url_prefix}__mfa/asgard/object/view/{$persons[$object->metadata->revisor]->guid}/\">{$persons[$object->metadata->revisor]->name}</a></td>\n";
    } else {
        echo "{$prefix}    <td>&nbsp;</td>\n";
    }
    echo "{$prefix}    <td>" . midcom_helper_misc::filesize_to_string($object->metadata->size) . "</td>\n";
    echo "{$prefix}</tr>\n";
    $child_types = midcom_helper_reflector_tree::get_child_objects($object, true);
    if (is_array($child_types) && count($child_types) > 0) {
        $child_indent = $indent + 20;
        echo "{$prefix}<tbody class=\"children\">\n";
        foreach ($child_types as $type => $children) {
            if (count($children) < 10 || isset($_GET['show_children'][$object->guid][$type])) {
                foreach ($children as $child) {
                    midgard_admin_asgard_trash_type_show($child, $child_indent, "{$prefix}    ", false);
                }
            } else {
                echo "{$prefix}    <tr>\n";
                echo "{$prefix}        <td class=\"label\" style=\"padding-left: {$child_indent}px\" colspan=\"5\"><a href=\"?show_children[{$object->guid}][{$type}]=1\">" . sprintf(midcom::get('i18n')->get_string('show %s %s children', 'midgard.admin.asgard'), count($children), midgard_admin_asgard_plugin::get_type_label($type)) . "</a></td>\n";
                echo "{$prefix}    </tr>\n";
            }
        }
        echo "{$prefix}</tbody>\n";
    }
    $shown[$object->guid] = true;
}
</th>
        </tr>
    </thead>
    <tbody>
        <?php 
foreach ($data['types'] as $type => $items) {
    if ($items == 0) {
        continue;
    }
    ?>
            <tr>
                <td><a href="&(prefix);__mfa/asgard/trash/&(type);"><img src="<?php 
    echo MIDCOM_STATIC_URL;
    ?>
/stock-icons/16x16/trash-full.png" /> <?php 
    echo midgard_admin_asgard_plugin::get_type_label($type);
    ?>
</a></td>
                <td>&(items);</td>
            </tr>
            <?php 
}
?>
    </tbody>
</table>
<script type="text/javascript">
     // <![CDATA[
        jQuery('#deleted').tablesorter(
        {
            widgets: ['zebra'],
            sortList: [[0,0]]
Exemple #3
0
 /**
  * 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);
 }
Exemple #4
0
 private function _prepare_toolbar(&$data)
 {
     if (midcom::get('auth')->can_user_do('midgard:create', null, $this->type)) {
         $data['asgard_toolbar']->add_item(array(MIDCOM_TOOLBAR_URL => "__mfa/asgard/object/create/{$this->type}/", MIDCOM_TOOLBAR_LABEL => sprintf(midcom::get('i18n')->get_string('create %s', 'midcom'), midgard_admin_asgard_plugin::get_type_label($this->type)), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/' . midcom_helper_reflector_tree::get_create_icon($this->type)));
     }
     if (midcom::get('auth')->admin) {
         $qb = new midgard_query_builder($this->type);
         $qb->include_deleted();
         $qb->add_constraint('metadata.deleted', '=', true);
         $deleted = $qb->count();
         if ($deleted > 0) {
             $data['asgard_toolbar']->add_item(array(MIDCOM_TOOLBAR_URL => "__mfa/asgard/trash/{$this->type}/", MIDCOM_TOOLBAR_LABEL => sprintf(midcom::get('i18n')->get_string('%s deleted items', 'midgard.admin.asgard'), $deleted), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/trash-full.png'));
         } else {
             $data['asgard_toolbar']->add_item(array(MIDCOM_TOOLBAR_URL => "__mfa/asgard/trash/{$this->type}/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('trash is empty', 'midgard.admin.asgard'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/trash.png'));
         }
     }
     if ($data['component'] != 'midgard') {
         $data['asgard_toolbar']->add_item(array(MIDCOM_TOOLBAR_URL => "__mfa/asgard/components/{$data['component']}/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string($data['component'], $data['component']), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/component.png'));
     }
     $data['asgard_toolbar']->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/help/{$data['documentation_component']}/mgdschemas/#{$this->type}", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('type documentation', 'midgard.admin.asgard'), MIDCOM_TOOLBAR_OPTIONS => array('target' => '_blank'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_help-agent.png'));
 }
Exemple #5
0
 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;
     }
 }
Exemple #6
0
 /**
  * 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'])));
 }
Exemple #7
0
 /**
  * Object creating 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_create($handler_id, array $args, array &$data)
 {
     $this->_new_type = midcom::get('dbclassloader')->get_midcom_class_name_for_mgdschema_object($args[0]);
     if (!$this->_new_type) {
         throw new midcom_error_notfound('Failed to find type for the new object');
     }
     midcom::get('dbclassloader')->load_mgdschema_class_handler($this->_new_type);
     if (!class_exists($this->_new_type)) {
         throw new midcom_error_notfound("Component handling MgdSchema type '{$args[0]}' was not found.");
     }
     $data['new_type_arg'] = $args[0];
     midcom::get('auth')->require_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin');
     $data['defaults'] = array();
     if ($handler_id == '____mfa-asgard-object_create_toplevel' || $handler_id == '____mfa-asgard-object_create_chooser') {
         midcom::get('auth')->require_user_do('midgard:create', null, $this->_new_type);
         $data['view_title'] = sprintf($this->_l10n_midcom->get('create %s'), midgard_admin_asgard_plugin::get_type_label($data['new_type_arg']));
     } else {
         $this->_object = midcom::get('dbfactory')->get_object_by_guid($args[1]);
         $this->_object->require_do('midgard:create');
         midgard_admin_asgard_plugin::bind_to_object($this->_object, $handler_id, $data);
         // FIXME: Make a general case for all objects that are linked by guid to any other class
         if ($this->_new_type == 'midcom_db_parameter') {
             // Parameters are linked a bit differently
             $parent_property = 'guid';
             $data['defaults']['parentguid'] = $this->_object->{$parent_property};
         } else {
             // Set "defaults"
             $link_info = $this->_find_linking_property($this->_new_type);
             if (!is_array($link_info)) {
                 throw new midcom_error("Could not establish link between {$this->_new_type} and " . get_class($this->_object));
             }
             $parent_property = $link_info[1];
             $data['defaults'][$link_info[0]] = $this->_object->{$parent_property};
         }
     }
     $this->_load_schemadb($this->_new_type);
     if (isset($this->_schemadb['object']->fields['guid'])) {
         $this->_schemadb['object']->fields['guid']['hidden'] = true;
     }
     // Allow setting defaults from query string, useful for things like "create event for today" and chooser
     if (isset($_GET['defaults']) && is_array($_GET['defaults'])) {
         foreach ($_GET['defaults'] as $key => $value) {
             if (!isset($this->_schemadb['object']->fields[$key])) {
                 // No such field in schema
                 continue;
             }
             $data['defaults'][$key] = trim($value);
         }
     }
     $this->_controller = midcom_helper_datamanager2_controller::create('create');
     $this->_controller->schemadb =& $this->_schemadb;
     $this->_controller->schema = 'object';
     $this->_controller->callback_object =& $this;
     $this->_controller->defaults = $data['defaults'];
     if (!$this->_controller->initialize()) {
         throw new midcom_error("Failed to initialize a DM2 create controller.");
     }
     switch ($this->_controller->process_form()) {
         case 'edit':
             if ($this->_new_object) {
                 $this->_new_object = null;
             }
             break;
         case 'save':
             if (is_a($this->_new_object, 'midcom_db_style') || is_a($this->_new_object, 'midcom_db_element')) {
                 mgd_cache_invalidate();
             }
             // Reindex the object
             //$indexer = midcom::get('indexer');
             //net_nemein_wiki_viewer::index($this->_request_data['controller']->datamanager, $indexer, $this->_topic);
             // *** FALL-THROUGH ***
             $this->_new_object->set_parameter('midcom.helper.datamanager2', 'schema_name', 'default');
             if ($handler_id != '____mfa-asgard-object_create_chooser') {
                 $redirect_url = str_replace('//', '/', "__mfa/asgard/object/edit/{$this->_new_object->guid}/");
                 return new midcom_response_relocate($redirect_url);
             }
             break;
         case 'cancel':
             $data['cancelled'] = true;
             if ($this->_object) {
                 $objecturl = "object/{$this->_request_data['default_mode']}/{$this->_object->guid}/";
             } else {
                 $objecturl = $args[0];
             }
             if ($handler_id != '____mfa-asgard-object_create_chooser') {
                 return new midcom_response_relocate("__mfa/asgard/{$objecturl}/");
             }
     }
     $this->_prepare_request_data();
 }
Exemple #8
0
 /**
  * Populate the object toolbar
  *
  * @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
  */
 public function bind_to_object($object, $handler_id, $data)
 {
     // Show view toolbar button, if the user hasn't configured to use straight the edit mode
     if ($data['default_mode'] === 'view') {
         $this->add_item(array(MIDCOM_TOOLBAR_URL => $this->_generate_url('view', $object), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('view', 'midcom'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/view.png', MIDCOM_TOOLBAR_ACCESSKEY => 'v'));
     }
     if (!is_a($object, 'midcom_db_style') && !is_a($object, 'midcom_db_element') && !is_a($object, 'midcom_db_snippetdir') && !is_a($object, 'midcom_db_snippet') && !is_a($object, 'midcom_db_page') && !is_a($object, 'midcom_db_pageelement') && !is_a($object, 'midcom_db_parameter') && substr($object->__mgdschema_class_name__, 0, 23) != 'org_routamc_positioning' && substr($object->__mgdschema_class_name__, 0, 14) != 'net_nemein_tag') {
         $link = midcom::get('permalinks')->resolve_permalink($object->guid);
         if ($link) {
             $this->add_item(array(MIDCOM_TOOLBAR_URL => $link, MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('view on site', 'midgard.admin.asgard'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_internet.png'));
         }
     }
     if ($object->can_do('midgard:update')) {
         $this->add_item(array(MIDCOM_TOOLBAR_URL => $this->_generate_url('edit', $object), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('edit', 'midcom'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/edit.png', MIDCOM_TOOLBAR_ACCESSKEY => 'e'));
     }
     if ($object->can_do('midgard:create')) {
         if (midcom_helper_reflector_tree::get_child_objects($object)) {
             $this->add_item(array(MIDCOM_TOOLBAR_URL => $this->_generate_url('copy/tree', $object), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('copy', 'midcom'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/editcopy.png'));
         } else {
             $this->add_item(array(MIDCOM_TOOLBAR_URL => $this->_generate_url('copy', $object), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('copy', 'midcom'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/editcopy.png'));
         }
     }
     if ($object->can_do('midgard:update')) {
         $this->_add_toolbar_update_items($object);
     }
     if ($object->can_do('midgard:create')) {
         // Find out what types of children the object can have and show create buttons for them
         $child_types = $data['tree_reflector']->get_child_classes();
         if (!is_array($child_types)) {
             debug_add("\$data['tree_reflector']->get_child_classes() failed critically, recasting \$child_types as array", MIDCOM_LOG_WARN);
             $child_types = array();
         }
         foreach ($child_types as $type) {
             $display_button = true;
             if (is_a($object, 'midcom_db_topic')) {
                 // With topics we should check for component before populating create buttons as so many types can be children of topics
                 switch ($type) {
                     case 'midgard_topic':
                     case 'midgard_article':
                         // Articles and topics can always be created
                         break;
                     default:
                         $midcom_dba_classname = midcom::get('dbclassloader')->get_midcom_class_name_for_mgdschema_object($type);
                         if (!$midcom_dba_classname) {
                             $display_button = false;
                             break;
                         }
                         $component = midcom::get('dbclassloader')->get_component_for_class($type);
                         if ($component != $object->component) {
                             $display_button = false;
                         }
                         break;
                 }
             } elseif (is_a($object, 'midcom_db_article') && $object->topic) {
                 $topic = new midcom_db_topic($object->topic);
                 // With articles we should check for topic component before populating create buttons as so many types can be children of topics
                 switch ($type) {
                     case 'midgard_article':
                         // Articles can always be created
                         break;
                     default:
                         $component = midcom::get('dbclassloader')->get_component_for_class($type);
                         if ($component != $topic->component) {
                             $display_button = false;
                         }
                         break;
                 }
             }
             if (!$display_button) {
                 // Skip this type
                 continue;
             }
             $this->add_item(array(MIDCOM_TOOLBAR_URL => $this->_generate_url('create/' . $type, $object), MIDCOM_TOOLBAR_LABEL => sprintf(midcom::get('i18n')->get_string('create %s', 'midcom'), midgard_admin_asgard_plugin::get_type_label($type)), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/' . $data['tree_reflector']->get_create_icon($type)));
         }
     }
     if ($object->can_do('midgard:delete')) {
         $this->add_item(array(MIDCOM_TOOLBAR_URL => $this->_generate_url('delete', $object), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('delete', 'midcom'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/trash.png', MIDCOM_TOOLBAR_ACCESSKEY => 'd'));
     }
     if ($GLOBALS['midcom_config']['midcom_services_rcs_enable'] && $object->can_do('midgard:update') && $object->_use_rcs) {
         $this->add_item(array(MIDCOM_TOOLBAR_URL => $this->_generate_url('rcs', $object), MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('show history', 'midgard.admin.asgard'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/history.png', MIDCOM_TOOLBAR_ENABLED => substr($handler_id, 0, 25) === '____mfa-asgard-object_rcs' ? false : true, MIDCOM_TOOLBAR_ACCESSKEY => 'h'));
     }
     $this->_disable_active_item($handler_id, $object, $data);
 }