public function read_style($style, $path) { $style_path = "{$path}{$style->name}"; if (!file_exists($style_path)) { mkdir($style_path); } $filenames = array(); $foldernames = array(); $element_qb = midcom_db_element::new_query_builder(); $element_qb->add_constraint('style', '=', $style->id); $elements = $element_qb->execute(); foreach ($elements as $element) { file_put_contents("{$style_path}/{$element->name}.php", $element->value); $filenames[] = "{$element->name}.php"; } $style_qb = midcom_db_style::new_query_builder(); $style_qb->add_constraint('up', '=', $style->id); $styles = $style_qb->execute(); foreach ($styles as $style) { $this->read_style($style, "{$style_path}/"); $foldernames[] = $style->name; } if ($this->delete_missing) { // Then delete files and folders that are in DB but not in the importing folder $this->delete_missing_folders($foldernames, $style_path); $this->delete_missing_files($filenames, $style_path); } }
/** * Static method for listing available style templates */ public static function list_styles($up = 0, $prefix = '/', $spacer = '') { static $style_array = array(); $style_array[''] = midcom::get('i18n')->get_string('default', 'midcom.admin.folder'); // Give an option for creating a new layout template $style_array['__create'] = midcom::get('i18n')->get_string('new layout template', 'midcom.admin.folder'); if ($GLOBALS['midcom_config']['styleengine_relative_paths'] && $up == 0) { // Relative paths in use, start seeking from under the style used for the Midgard host $up = midcom_connection::get('style'); } $qb = midcom_db_style::new_query_builder(); $qb->add_constraint('up', '=', $up); $styles = $qb->execute(); foreach ($styles as $style) { $style_string = "{$prefix}{$style->name}"; // Hide common unwanted material with heuristics if (preg_match('/(asgard|empty)/i', $style_string)) { continue; } $style_array[$style_string] = "{$spacer}{$style->name}"; self::list_styles($style->id, $style_string . '/', $spacer . ' '); } return $style_array; }
/** * Adds the topic management commands to the specified toolbar. * * Repeated calls to the same toolbar are intercepted accordingly. * * @param midcom_helper_toolbar &$toolbar A reference to the toolbar to use. * @param int $context_id The context to use (the topic is drawn from there). This defaults * to the currently active context. */ function add_topic_management_commands(&$toolbar, $context_id = null) { if (array_key_exists('midcom_services_toolbars_bound_to_topic', $toolbar->customdata)) { // We already processed this toolbar, skipping further adds. return; } else { $toolbar->customdata['midcom_services_toolbars_bound_to_topic'] = true; } $topic = midcom_core_context::get($context_id)->get_key(MIDCOM_CONTEXT_CONTENTTOPIC); // Bullet-proof if (!$topic || !$topic->guid) { return false; } $topics = midcom_core_context::get()->get_key(MIDCOM_CONTEXT_URLTOPICS); $urltopic = end($topics); if (!$urltopic) { $urltopic = $topic; } if ($topic->can_do('midgard:update') && $topic->can_do('midcom.admin.folder:topic_management')) { $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/edit/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('edit folder', 'midcom.admin.folder'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/edit.png', MIDCOM_TOOLBAR_ACCESSKEY => 'g')); $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/metadata/{$urltopic->guid}/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('edit folder metadata', 'midcom.admin.folder'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/metadata.png')); } if ($urltopic->can_do('midgard:update') && $urltopic->can_do('midcom.admin.folder:topic_management')) { // Allow to move other than root folder if ($urltopic->guid !== $GLOBALS['midcom_config']['midcom_root_topic_guid']) { $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/move/{$urltopic->guid}/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('move', 'midcom.admin.folder'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/save-as.png')); } } if ($topic->can_do('midgard:update') && $topic->can_do('midcom.admin.folder:topic_management')) { $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/order/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('order navigation', 'midcom.admin.folder'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/topic-score.png', MIDCOM_TOOLBAR_ACCESSKEY => 'o')); $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => midcom_connection::get_url('self') . "__mfa/asgard/object/open/{$topic->guid}/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('manage object', 'midgard.admin.asgard'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/properties.png', MIDCOM_TOOLBAR_ENABLED => midcom::get('auth')->can_user_do('midgard.admin.asgard:access', null, 'midgard_admin_asgard_plugin', 'midgard.admin.asgard') && midcom::get('auth')->can_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin'))); } if ($GLOBALS['midcom_config']['metadata_approval'] && $topic->can_do('midcom:approve')) { $metadata = midcom_helper_metadata::retrieve($topic); if ($metadata->is_approved()) { $icon = 'stock-icons/16x16/page-approved.png'; if (!$GLOBALS['midcom_config']['show_hidden_objects'] && !$metadata->is_visible()) { // Take scheduling into account $icon = 'stock-icons/16x16/page-approved-notpublished.png'; } $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/unapprove/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('unapprove topic', 'midcom'), MIDCOM_TOOLBAR_HELPTEXT => midcom::get('i18n')->get_string('approved', 'midcom'), MIDCOM_TOOLBAR_ICON => $icon, MIDCOM_TOOLBAR_POST => true, MIDCOM_TOOLBAR_POST_HIDDENARGS => array('guid' => $topic->guid, 'return_to' => $_SERVER['REQUEST_URI']))); } else { $icon = 'stock-icons/16x16/page-notapproved.png'; if (!$GLOBALS['midcom_config']['show_hidden_objects'] && !$metadata->is_visible()) { // Take scheduling into account $icon = 'stock-icons/16x16/page-notapproved-notpublished.png'; } $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/approve/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('approve topic', 'midcom'), MIDCOM_TOOLBAR_HELPTEXT => midcom::get('i18n')->get_string('unapproved', 'midcom'), MIDCOM_TOOLBAR_ICON => $icon, MIDCOM_TOOLBAR_POST => true, MIDCOM_TOOLBAR_POST_HIDDENARGS => array('guid' => $topic->guid, 'return_to' => $_SERVER['REQUEST_URI']))); } } if ($topic->can_do('midcom.admin.folder:template_management') && midcom::get('auth')->can_user_do('midgard.admin.asgard:manage_objects', null, 'midgard_admin_asgard_plugin')) { $enabled = false; $styleeditor_url = ''; if ($topic->style != '') { $style_id = midcom::get('style')->get_style_id_from_path($topic->style); if ($style_id) { try { $style = midcom_db_style::get_cached($style_id); $styleeditor_url = midcom_connection::get_url('self') . "__mfa/asgard/object/view/{$style->guid}/"; $enabled = true; } catch (midcom_error $e) { $e->log(); } } } $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => $styleeditor_url, MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('edit layout template', 'midgard.admin.asgard'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/text-x-generic-template.png', MIDCOM_TOOLBAR_ACCESSKEY => 't', MIDCOM_TOOLBAR_ENABLED => $enabled)); } if ($topic->can_do('midgard:create') && $topic->can_do('midcom.admin.folder:topic_management')) { $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/create/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('create subfolder', 'midcom.admin.folder'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/new-dir.png', MIDCOM_TOOLBAR_ACCESSKEY => 'f')); if ($GLOBALS['midcom_config']['symlinks'] && $topic->can_do('midcom.admin.folder:symlinks')) { $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/createlink/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('create folder link', 'midcom.admin.folder'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/new-dir.png', MIDCOM_TOOLBAR_ACCESSKEY => 'f')); } } if ($urltopic->guid !== $GLOBALS['midcom_config']['midcom_root_topic_guid'] && $urltopic->can_do('midgard:delete') && $urltopic->can_do('midcom.admin.folder:topic_management')) { $toolbar->add_item(array(MIDCOM_TOOLBAR_URL => "__ais/folder/delete/", MIDCOM_TOOLBAR_LABEL => midcom::get('i18n')->get_string('delete folder', 'midcom.admin.folder'), MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/trash.png')); } }
/** * Create a new style for the topic * * @param string $style_name Name of the style * @return string Style path */ private function _create_style($style_name) { if (isset($GLOBALS['midcom_style_inherited'])) { $up = midcom::get('style')->get_style_id_from_path($GLOBALS['midcom_style_inherited']); debug_add("Style inherited from {$GLOBALS['midcom_style_inherited']}"); } else { $up = midcom_connection::get('style'); debug_add("No inherited style found, placing the new style under host style ID: " . midcom_connection::get('style')); } $style = new midcom_db_style(); $style->name = $style_name; $style->up = $up; if (!$style->create()) { debug_print_r('Failed to create a new style due to ' . midcom_connection::get_error_string(), $style, MIDCOM_LOG_WARN); midcom::get('uimessages')->add('edit folder', sprintf(midcom::get('i18n')->get_string('failed to create a new style template: %s', 'midcom.admin.folder'), midcom_connection::get_error_string()), 'error'); return ''; } debug_print_r('New style created', $style); return midcom::get('style')->get_style_path_from_id($style->id); }
private function delete_missing_folders($foldernames, $style_id) { if (!$this->delete_missing) { return; } $qb = midcom_db_style::new_query_builder(); $qb->add_constraint('up', '=', $style_id); if (!empty($foldernames)) { $qb->add_constraint('name', 'NOT IN', $foldernames); } $folders = $qb->execute(); foreach ($folders as $folder) { $folder->delete(); } }