Пример #1
0
 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);
     }
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * 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'));
     }
 }
Пример #4
0
 /**
  * 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);
 }
Пример #5
0
 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();
     }
 }