]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #1334. Added dropdown to change the parent of a page.
authorSem <sembrestels@riseup.net>
Fri, 13 Jul 2012 05:42:36 +0000 (07:42 +0200)
committerSem <sembrestels@riseup.net>
Fri, 13 Jul 2012 05:42:36 +0000 (07:42 +0200)
mod/pages/actions/pages/edit.php
mod/pages/languages/en.php
mod/pages/lib/pages.php
mod/pages/start.php
mod/pages/views/default/forms/pages/edit.php
mod/pages/views/default/input/parent.php [new file with mode: 0644]

index a32e4a4ba4847cf5c00d9f69e34d2db32ec4bea8..e6387c1a4e65f9efb0f88d21ec5bea70ec24e5dc 100644 (file)
@@ -59,6 +59,9 @@ if (sizeof($input) > 0) {
                if (($name == 'access_id' || $name == 'write_access_id') && !$can_change_access) {
                        continue;
                }
+               if ($name == 'parent_guid') {
+                       continue;
+               }
 
                $page->$name = $value;
        }
index eb9d22708c3f1eb80ab115fb4f9f966c48ec4e76..930676b3ebd2e8efb4c4c79949f7c70af0de23dc 100644 (file)
@@ -61,6 +61,7 @@ View and comment on the new page:
        'pages:title' => 'Page title',
        'pages:description' => 'Page text',
        'pages:tags' => 'Tags',
+       'pages:parent_guid' => 'Parent page',
        'pages:access_id' => 'Read access',
        'pages:write_access_id' => 'Write access',
 
@@ -110,4 +111,4 @@ View and comment on the new page:
        'pages:backtoparent' => "Back to '%s'",
 );
 
-add_translation("en", $english);
\ No newline at end of file
+add_translation("en", $english);
index 9a9ba12e92283154c73efb515639face22fb3dca..afe42b68f4200a3b324791aa44eda70cc2a3badf 100644 (file)
@@ -65,11 +65,11 @@ function pages_prepare_parent_breadcrumbs($page) {
 }
 
 /**
- * Register the navigation menu
+ * Produce the navigation tree
  * 
  * @param ElggEntity $container Container entity for the pages
  */
-function pages_register_navigation_tree($container) {
+function pages_get_navigation_tree($container) {
        if (!$container) {
                return;
        }
@@ -84,13 +84,18 @@ function pages_register_navigation_tree($container) {
        if (!$top_pages) {
                return;
        }
+       
+       $tree = array();
+       $depths = array();
 
        foreach ($top_pages as $page) {
-               elgg_register_menu_item('pages_nav', array(
-                       'name' => $page->getGUID(),
-                       'text' => $page->title,
-                       'href' => $page->getURL(),
-               ));
+               $tree[] = array(
+                       'guid' => $page->getGUID(),
+                       'title' => $page->title,
+                       'url' => $page->getURL(),
+                       'depth' => 0,
+               );
+               $depths[$page->guid] = 0;
 
                $stack = array();
                array_push($stack, $page);
@@ -106,15 +111,37 @@ function pages_register_navigation_tree($container) {
 
                        if ($children) {
                                foreach ($children as $child) {
-                                       elgg_register_menu_item('pages_nav', array(
-                                               'name' => $child->getGUID(),
-                                               'text' => $child->title,
-                                               'href' => $child->getURL(),
-                                               'parent_name' => $parent->getGUID(),
-                                       ));
+                                       $tree[] = array(
+                                               'guid' => $child->getGUID(),
+                                               'title' => $child->title,
+                                               'url' => $child->getURL(),
+                                               'parent_guid' => $parent->getGUID(),
+                                               'depth' => $depths[$parent->guid] + 1,
+                                       );
+                                       $depths[$child->guid] = $depths[$parent->guid] + 1;
                                        array_push($stack, $child);
                                }
                        }
                }
        }
+       return $tree;
+}
+
+/**
+ * Register the navigation menu
+ * 
+ * @param ElggEntity $container Container entity for the pages
+ */
+function pages_register_navigation_tree($container) {
+       $pages = pages_get_navigation_tree($container);
+       if ($pages) {
+               foreach ($pages as $page) {
+                       elgg_register_menu_item('pages_nav', array(
+                               'name' => $page['guid'],
+                               'text' => $page['title'],
+                               'href' => $page['url'],
+                               'parent_name' => $page['parent_guid'],
+                       ));
+               }
+       }
 }
index 6b0ad38b0f6ffef9a2b94c5d8885d91a5e92305c..6d974f122a74a98c56bc0e3d5cf4354908c6293c 100644 (file)
@@ -63,6 +63,7 @@ function pages_init() {
                'title' => 'text',
                'description' => 'longtext',
                'tags' => 'tags',
+               'parent_guid' => 'parent',
                'access_id' => 'access',
                'write_access_id' => 'write_access',
        ));
index 9469f5eb9cc87f794fdb3b25e10dfd4346199fd1..119b9ba2377e2d9e6a0570b0f4eb45e6d46dcc80 100644 (file)
@@ -18,6 +18,9 @@ foreach ($variables as $name => $type) {
        if (($type == 'access' || $type == 'write_access') && !$can_change_access) {
                continue;
        }
+       if ($name == 'parent_guid' && empty($vars['parent_guid'])) {
+               continue;
+       }
 ?>
 <div>
        <label><?php echo elgg_echo("pages:$name") ?></label>
@@ -29,6 +32,7 @@ foreach ($variables as $name => $type) {
                echo elgg_view("input/$type", array(
                        'name' => $name,
                        'value' => $vars[$name],
+                       'entity' => ($name == 'parent_guid') ? $vars['entity'] : null,
                ));
        ?>
 </div>
@@ -52,12 +56,6 @@ echo elgg_view('input/hidden', array(
        'name' => 'container_guid',
        'value' => $vars['container_guid'],
 ));
-if ($vars['parent_guid']) {
-       echo elgg_view('input/hidden', array(
-               'name' => 'parent_guid',
-               'value' => $vars['parent_guid'],
-       ));
-}
 
 echo elgg_view('input/submit', array('value' => elgg_echo('save')));
 
diff --git a/mod/pages/views/default/input/parent.php b/mod/pages/views/default/input/parent.php
new file mode 100644 (file)
index 0000000..f354129
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Parent picker
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['options_values']
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['entity'] Optional. The child entity (uses container_guid)
+ */
+
+elgg_load_library('elgg:pages');
+
+if (empty($vars['entity'])) {
+       $container = elgg_get_page_owner_entity();
+} else {
+       $container = $vars['entity']->getContainerEntity();
+}
+
+$pages = pages_get_navigation_tree($container);
+$options = array();
+
+foreach ($pages as $page) {
+       $spacing = "";
+       for ($i = 0; $i < $page['depth']; $i++) {
+               $spacing .= "--";
+       }
+       $options[$page['guid']] = "$spacing " . $page['title'];
+}
+
+$defaults = array(
+       'class' => 'elgg-input-parent-picker',
+       'options_values' => $options,
+);
+
+$vars = array_merge($defaults, $vars);
+
+echo elgg_view('input/dropdown', $vars);