[Php-blog-plugin-cvs] additional_plugins/serendipity_event_categorytemplates serendipity_event_cat
A reliable, secure & extensible PHP blog | Not mainstream since 2002
Brought to you by:
garvinhicking,
jhermanns
From: Jude A. <slo...@us...> - 2008-01-22 23:09:30
|
Update of /cvsroot/php-blog/additional_plugins/serendipity_event_categorytemplates In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10598 Modified Files: serendipity_event_categorytemplates.php Log Message: Handle absence of sequence widget gracefully: category precedence defaults to alphabetical order. Some minor renaming of variables, other code cleanup. Index: serendipity_event_categorytemplates.php =================================================================== RCS file: /cvsroot/php-blog/additional_plugins/serendipity_event_categorytemplates/serendipity_event_categorytemplates.php,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- serendipity_event_categorytemplates.php 19 Jan 2008 03:54:36 -0000 1.22 +++ serendipity_event_categorytemplates.php 22 Jan 2008 23:08:48 -0000 1.23 @@ -29,7 +29,7 @@ $propbag->add('description', PLUGIN_CATEGORYTEMPLATES_DESC); $propbag->add('stackable', false); $propbag->add('author', 'Garvin Hicking, Judebert'); - $propbag->add('version', '0.25'); + $propbag->add('version', '0.26'); $propbag->add('requirements', array( 'serendipity' => '0.9', 'php' => '4.1.0' @@ -78,16 +78,26 @@ $propbag->add('type', 'sequence'); $propbag->add('name', PLUGIN_CATEGORYTEMPLATES_CATPRECEDENCE); $propbag->add('description', PLUGIN_CATEGORYTEMPLATES_CATPRECEDENCE_DESC); - $ccats = $this->getCustomizedCats(); + $tcats = $this->getTemplatizedCats(); $values = array(); - if (is_array($ccats)) { - foreach($ccats AS $cat) { + if (is_array($tcats)) { + foreach($tcats AS $cat) { $values[$cat['categoryid']] = array('display' => $cat['category_name']); } } else { $values = array(PLUGIN_CATEGORYTEMPLATES_NO_CUSTOMIZED_CATEGORIES); } $propbag->add('values', $values); + + // People who already had custom categories, but don't have + // the sequence widget, will not save this value. So entries + // won't ever use custom templates. To duplicate the original + // without-sequence-widget behavior, we'll have to do some + // magic when the 'cat_precedence' is retrieved. + + // If you want to set a default here: + // Note that get_config() will cause HTTP error 500 the first + // time the plugin is installed, unless we provide a default } return true; } @@ -96,7 +106,7 @@ * Retrieves a list of IDs of all categories that have some customization enabled. * @return array A list of category IDs, or false if no categories are customized. */ - function getCustomizedCats() { + function getTemplatizedCats() { global $serendipity; // Find all the categories that have custom templates $query = "SELECT @@ -106,7 +116,8 @@ FROM {$serendipity['dbPrefix']}category AS c INNER JOIN {$serendipity['dbPrefix']}categorytemplates AS t ON t.categoryid = c.categoryid - WHERE t.template != ''"; + WHERE t.template != '' + ORDER BY c.category_name ASC"; //$query = "SELECT categoryid FROM {$serendipity['dbPrefix']}categorytemplates WHERE template != ''" $dbcids = serendipity_db_query($query); if (!is_array($dbcids)) { @@ -177,23 +188,37 @@ // If entry view, determine the best category ID for custom templating if ($serendipity['GET']['id']) { // Find all the category IDs that have custom templates - $cidstr = $this->get_config('cat_precedence'); - if ($cidstr) { - $cids = explode(',', $cidstr); - - // Get all the categories' IDs belonging to this entry - $entrycats = serendipity_fetchEntryCategories($serendipity['GET']['id']); - $entrycids = array(); - foreach ($entrycats AS $catdata) { - $entrycids[] = $catdata['categoryid']; + $cidstr = $this->get_config('cat_precedence', false); + if ($cidstr === false) { + // No precedence set: default to old, alphabetical precedence. + $tcats = $this->getTemplatizedCats(); + $cids = array(); + if (is_array($tcats)) { + foreach($tcats AS $cat) { + $cids[] = $cat['categoryid']; + } + } + } else { + if ($cidstr) { + $cids = explode(',', $cidstr); + } else { + // Possibly it's set, but no categories, therefore empty + $cids = array(); } + } - // Return the first customized template in the entry's categories - // Could try array_intersect(), but will it keep order? - foreach ($cids AS $idx => $candidate) { - if (in_array($candidate, $entrycids)) { - return $candidate; - } + // Get all the categories' IDs belonging to this entry + $entrycats = serendipity_fetchEntryCategories($serendipity['GET']['id']); + $entrycids = array(); + foreach ($entrycats AS $catdata) { + $entrycids[] = $catdata['categoryid']; + } + + // Return the first customized template in the entry's categories + // Could try array_intersect(), but will it keep order? + foreach ($cids AS $idx => $candidate) { + if (in_array($candidate, $entrycids)) { + return $candidate; } }// End if we know of any customized categories }// End if entry @@ -523,8 +548,10 @@ // $eventData is the category ID. This just deletes. $this->setProps($eventData, null, true); // Remove it from the list of template categories, too. - $cidstr = $this->get_config('cat_precedence'); - if (!empty($cidstr)) { + $cidstr = $this->get_config('cat_precedence', false); + // No need to modify config if no config set, or if no + // templates are templatized + if ($cidstr) { $cids = explode(',', $cidstr); // Why doesn't PHP have an array_remove(item)? if (in_array($eventData, $cids)) { @@ -553,7 +580,7 @@ // (even when invalid; no checking) $set_tpl = $text_tpl; } - // If it hasn't changed, drop template can override + // If it hasn't changed, drop-down template can override else if ($drop_tpl != $orig_tpl) { $set_tpl = $drop_tpl; } @@ -570,9 +597,18 @@ // Update list of template categories, too. // // Get the list of customized category IDs, in precedence order - $cidstr = $this->get_config('cat_precedence'); - if (!empty($cidstr)) { - $cids = explode(',', $cidstr); + $cidstr = $this->get_config('cat_precedence', false); + // Only save the new precedence if we can actually + // manually change templatized categories precedence + if ($cidstr !== false) { + if ($cidstr) { + // If $cidstr is empty, this returns an array + // with an empty string + $cids = explode(',', $cidstr); + } else { + // For instance, set but empty + $cids = array(); + } // If it had a custom template just added, append it // to the list (user can change precedence later) if (!in_array($eventData, $cids) && !empty($set_tpl)) { |