From 3317e6ef494e53e6bf5515d37fae471e6ac8598e Mon Sep 17 00:00:00 2001
From: Garvin Hicking <mail@garv.in>
Date: Thu, 22 Mar 2007 11:43:59 +0000
Subject: [PATCH] Add new category property to hide blog postings made into
 sub-categories from the frontend view, per category. Thanks to netmorix from
 the forums!

---
 docs/NEWS                                        |  4 ++++
 include/functions.inc.php                        |  9 ++++++---
 include/functions_config.inc.php                 |  2 +-
 include/functions_entries.inc.php                | 15 +++++++++++----
 serendipity_config.inc.php                       |  9 ++++++++-
 sql/db.sql                                       |  3 ++-
 sql/db_update_1.2-alpha2_1.1-alpha3_mysql.sql    |  1 +
 sql/db_update_1.2-alpha2_1.1-alpha3_postgres.sql |  1 +
 sql/db_update_1.2-alpha2_1.1-alpha3_sqlite.sql   |  7 +++++--
 9 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/docs/NEWS b/docs/NEWS
index e80a3729..f42d116e 100644
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,10 @@
 Version 1.2 ()
 ------------------------------------------------------------------------
 
+    * Add new category property to hide blog postings made into sub-
+      categories from the frontend view, per category. Thanks to
+      netmorix from the forums! (garvinhicking)
+
     * Move possible hazardous personal configuration options ("Rights:
       Publishing entries", "Forbid creating entries", "Access level";
       "Group memberships") to the user management section.
diff --git a/include/functions.inc.php b/include/functions.inc.php
index 99d72521..7829cb64 100644
--- a/include/functions.inc.php
+++ b/include/functions.inc.php
@@ -1035,9 +1035,11 @@ function serendipity_addCategory($name, $desc, $authorid, $icon, $parentid) {
  * @param   int     The new category owner
  * @param   string  The new category icon
  * @param   int     The new category parent ID
+ * @param   int     The new category sort order
+ * @param   int     The new category subcat hiding
  * @return null
  */
-function serendipity_updateCategory($cid, $name, $desc, $authorid, $icon, $parentid) {
+function serendipity_updateCategory($cid, $name, $desc, $authorid, $icon, $parentid, $sort_order = 0, $hide_sub = 0) {
     global $serendipity;
 
     $query = "UPDATE {$serendipity['dbPrefix']}category
@@ -1045,7 +1047,9 @@ function serendipity_updateCategory($cid, $name, $desc, $authorid, $icon, $paren
                         category_description = '". serendipity_db_escape_string($desc) ."',
                         authorid = ". (int)$authorid .",
                         category_icon = '". serendipity_db_escape_string($icon) ."',
-                        parentid = ". (int)$parentid ."
+                        parentid = ". (int)$parentid .",
+                        sort_order = ". (int)$sort_order . ",
+                        hide_sub = ". (int)$hide_sub . "
                     WHERE categoryid = ". (int)$cid ."
                         $admin_category";
     serendipity_db_query($query);
@@ -1059,7 +1063,6 @@ function serendipity_updateCategory($cid, $name, $desc, $authorid, $icon, $paren
     );
 
     serendipity_updatePermalink($data, 'category');
-
 }
 
 /**
diff --git a/include/functions_config.inc.php b/include/functions_config.inc.php
index 5b3cb541..575c3e56 100644
--- a/include/functions_config.inc.php
+++ b/include/functions_config.inc.php
@@ -733,7 +733,7 @@ function serendipity_iframe_create($mode, &$entry) {
 
     $_SESSION['save_entry']      = $entry;
     $_SESSION['save_entry_POST'] = $serendipity['POST'];
-
+    
     $attr = '';
     switch($mode) {
         case 'save':
diff --git a/include/functions_entries.inc.php b/include/functions_entries.inc.php
index 53ca9a87..2c0a4175 100644
--- a/include/functions_entries.inc.php
+++ b/include/functions_entries.inc.php
@@ -41,12 +41,17 @@ function serendipity_deleteCategory($category_range, $admin_category) {
 function serendipity_fetchCategoryRange($categoryid) {
     global $serendipity;
 
-    $res =& serendipity_db_query("SELECT category_left, category_right FROM {$serendipity['dbPrefix']}category WHERE categoryid='". (int)$categoryid ."'");
+    $res =& serendipity_db_query("SELECT category_left, category_right, hide_sub FROM {$serendipity['dbPrefix']}category WHERE categoryid='". (int)$categoryid ."'");
     if (!is_array($res) || !isset($res[0]['category_left']) || !isset($res[0]['category_right'])) {
         $res = array(array('category_left' => 0, 'category_right' => 0));
     }
 
-    return array('category_left' => $res[0]['category_left'], 'category_right' => $res[0]['category_right']);
+    if ($res[0]['hide_sub'] == 1) {
+        // Set ranges only to own category. Patch by netmorix
+        return array('category_left' => $res[0]['category_left'], 'category_right' => $res[0]['category_left']);
+    } else {
+        return array('category_left' => $res[0]['category_left'], 'category_right' => $res[0]['category_right']);
+    }
 }
 
 /**
@@ -98,7 +103,8 @@ function serendipity_fetchCategoryInfo($categoryid, $categoryname = '') {
                          c.category_name,
                          c.category_description,
                          c.category_icon,
-                         c.parentid
+                         c.parentid,
+                         c.hide_sub
                     FROM {$serendipity['dbPrefix']}category AS c
                    WHERE category_name = '" . serendipity_db_escape_string($categoryname) . "'";
 
@@ -111,7 +117,8 @@ function serendipity_fetchCategoryInfo($categoryid, $categoryname = '') {
                          c.category_name,
                          c.category_description,
                          c.category_icon,
-                         c.parentid
+                         c.parentid,
+                         c.hide_sub
                     FROM {$serendipity['dbPrefix']}category AS c
                    WHERE categoryid = " . (int)$categoryid;
 
diff --git a/serendipity_config.inc.php b/serendipity_config.inc.php
index 0ecf000a..339c2443 100644
--- a/serendipity_config.inc.php
+++ b/serendipity_config.inc.php
@@ -25,9 +25,12 @@ if (!defined('IN_serendipity')) {
 }
 
 include(S9Y_INCLUDE_PATH . 'include/compat.inc.php');
+if (defined('USE_MEMSNAP')) {
+    memSnap('Framework init');
+}
 
 // The version string
-$serendipity['version']         = '1.2-alpha2';
+$serendipity['version']         = '1.2-alpha3';
 
 // Setting this to 'false' will enable debugging output. All alpa/beta/cvs snapshot versions will emit debug information by default. To increase the debug level (to enable Smarty debugging), set this flag to 'debug'.
 $serendipity['production']      = (preg_match('@\-(alpha|beta|cvs)@', $serendipity['version']) ? false : true);
@@ -250,6 +253,10 @@ if (!serendipity_db_connect()) {
  *   Load Configuration options from the database
  */
 
+if (defined('USE_MEMSNAP')) {
+    memSnap('Framework init');
+}
+
 serendipity_load_configuration();
 $serendipity['lang'] = serendipity_getSessionLanguage();
 
diff --git a/sql/db.sql b/sql/db.sql
index 219e4663..0c5bfd6d 100644
--- a/sql/db.sql
+++ b/sql/db.sql
@@ -218,7 +218,8 @@ CREATE TABLE {PREFIX}category (
   category_left int(11) default '0',
   category_right int(11) default '0',
   parentid int(11) DEFAULT '0' NOT NULL,
-  sort_order int(11)
+  sort_order int(11),
+  hide_sub int(1)
 ) {UTF_8};
 
 CREATE INDEX categorya_idx ON {PREFIX}category (authorid);
diff --git a/sql/db_update_1.2-alpha2_1.1-alpha3_mysql.sql b/sql/db_update_1.2-alpha2_1.1-alpha3_mysql.sql
index bee1af4e..22748828 100644
--- a/sql/db_update_1.2-alpha2_1.1-alpha3_mysql.sql
+++ b/sql/db_update_1.2-alpha2_1.1-alpha3_mysql.sql
@@ -1,2 +1,3 @@
 ALTER TABLE {PREFIX}category ADD COLUMN sort_order int(11);
+ALTER TABLE {PREFIX}category ADD COLUMN hide_sub int(1);
 CREATE INDEX categoryso_idx ON {PREFIX}category (sort_order);
diff --git a/sql/db_update_1.2-alpha2_1.1-alpha3_postgres.sql b/sql/db_update_1.2-alpha2_1.1-alpha3_postgres.sql
index 4a1fc9ab..7511d9ae 100644
--- a/sql/db_update_1.2-alpha2_1.1-alpha3_postgres.sql
+++ b/sql/db_update_1.2-alpha2_1.1-alpha3_postgres.sql
@@ -1,3 +1,4 @@
 ALTER TABLE {PREFIX}category ADD COLUMN sort_order int(11);
+ALTER TABLE {PREFIX}category ADD COLUMN hide_sub int(1);
 CREATE INDEX categoryso_idx ON {PREFIX}category (sort_order);
 
diff --git a/sql/db_update_1.2-alpha2_1.1-alpha3_sqlite.sql b/sql/db_update_1.2-alpha2_1.1-alpha3_sqlite.sql
index 0dcb9356..330c2d75 100644
--- a/sql/db_update_1.2-alpha2_1.1-alpha3_sqlite.sql
+++ b/sql/db_update_1.2-alpha2_1.1-alpha3_sqlite.sql
@@ -7,7 +7,8 @@ CREATE TABLE {PREFIX}tempcategory (
   category_left int(11) default '0',
   category_right int(11) default '0',
   parentid int(11) DEFAULT '0' NOT NULL,
-  sort_order int(11)
+  sort_order int(11),
+  hide_sub int(1)
 ) {UTF_8};
 
 INSERT INTO {PREFIX}tempcategory (categoryid, category_name, category_icon, category_description, authorid, category_left, category_right, parentid) SELECT categoryid, category_name, category_icon, category_description, authorid, category_left, category_right, parentid FROM {PREFIX}category;
@@ -22,7 +23,8 @@ CREATE TABLE {PREFIX}category (
   category_left int(11) default '0',
   category_right int(11) default '0',
   parentid int(11) DEFAULT '0' NOT NULL,
-  sort_order int(11)
+  sort_order int(11),
+  hide_sub int(1)
 ) {UTF_8};
 
 CREATE INDEX categorya_idx ON {PREFIX}category (authorid);
@@ -34,3 +36,4 @@ CREATE INDEX categoryso_idx ON {PREFIX}category (sort_order);
 INSERT INTO {PREFIX}category (categoryid, category_name, category_icon, category_description, authorid, category_left, category_right, parentid) SELECT categoryid, category_name, category_icon, category_description, authorid, category_left, category_right, parentid FROM {PREFIX}tempcategory;
 DROP TABLE {PREFIX}tempcategory;
 
+UPDATE {PREFIX}category SET hide_sub = 
\ No newline at end of file