/phpmyfaq/admin/category.main.php
PHP | 429 lines | 345 code | 49 blank | 35 comment | 84 complexity | b58638564e1e2d11cfe5be62e5eadbc5 MD5 | raw file
Possible License(s): LGPL-2.1, LGPL-3.0, MPL-2.0-no-copyleft-exception
- <?php
- /**
- * List all categories in the admin section
- *
- * PHP Version 5.3
- *
- * This Source Code Form is subject to the terms of the Mozilla Public License,
- * v. 2.0. If a copy of the MPL was not distributed with this file, You can
- * obtain one at http://mozilla.org/MPL/2.0/.
- *
- * @category phpMyFAQ
- * @package Administration
- * @author Thorsten Rinne <thorsten@phpmyfaq.de>
- * @copyright 2003-2012 phpMyFAQ Team
- * @license http://www.mozilla.org/MPL/2.0/ Mozilla Public License Version 2.0
- * @link http://www.phpmyfaq.de
- * @since 2003-12-20
- */
- if (!defined('IS_VALID_PHPMYFAQ')) {
- header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']));
- exit();
- }
- ?>
- <header>
- <h2><?php print $PMF_LANG['ad_menu_categ_edit']; ?>
- </header>
- <?php
- $csrfToken = PMF_Filter::filterInput(INPUT_POST, 'csrf', FILTER_SANITIZE_STRING);
- if ('category' != $action && 'content' != $action &&
- (!isset($_SESSION['phpmyfaq_csrf_token']) || $_SESSION['phpmyfaq_csrf_token'] !== $csrfToken)) {
- $permission['editcateg'] = false;
- }
- if ($permission['editcateg']) {
- // Save a new category
- if ($action == 'savecategory') {
- $category = new PMF_Category($faqConfig, false);
- $category->setUser($currentAdminUser);
- $category->setGroups($currentAdminGroups);
- $parentId = PMF_Filter::filterInput(INPUT_POST, 'parent_id', FILTER_VALIDATE_INT);
- $categoryData = array(
- 'lang' => PMF_Filter::filterInput(INPUT_POST, 'lang', FILTER_SANITIZE_STRING),
- 'name' => PMF_Filter::filterInput(INPUT_POST, 'name', FILTER_SANITIZE_STRING),
- 'description' => PMF_Filter::filterInput(INPUT_POST, 'description', FILTER_SANITIZE_STRING),
- 'user_id' => PMF_Filter::filterInput(INPUT_POST, 'user_id', FILTER_VALIDATE_INT)
- );
- $permissions = array();
- if ('all' === PMF_Filter::filterInput(INPUT_POST, 'userpermission', FILTER_SANITIZE_STRING)) {
- $permissions += array(
- 'restricted_user' => array(
- -1
- )
- );
- } else {
- $permissions += array(
- 'restricted_user' => array(
- PMF_Filter::filterInput(INPUT_POST, 'restricted_users', FILTER_VALIDATE_INT)
- )
- );
- }
- if ('all' === PMF_Filter::filterInput(INPUT_POST, 'grouppermission', FILTER_SANITIZE_STRING)) {
- $permissions += array(
- 'restricted_groups' => array(
- -1
- )
- );
- } else {
- $permissions += PMF_Filter::filterInputArray(
- INPUT_POST,
- array(
- 'restricted_groups' => array(
- 'filter' => FILTER_VALIDATE_INT,
- 'flags' => FILTER_REQUIRE_ARRAY
- )
- )
- );
- }
- $categoryId = $category->addCategory($categoryData, $parentId);
- if ($categoryId) {
- $category->addPermission('user', array($categoryId), $permissions['restricted_user']);
- $category->addPermission('group', array($categoryId), $permissions['restricted_groups']);
-
- // All the other translations
- $languages = PMF_Filter::filterInput(INPUT_POST, 'used_translated_languages', FILTER_SANITIZE_STRING);
- if ($faqConfig->get('main.enableGoogleTranslation') === true && !empty($languages)) {
- $languages = explode(",", $languages);
- $category_lang = $categoryData['lang'];
- $user_id = $categoryData['user_id'];
- foreach ($languages as $translated_lang) {
- if ($translated_lang == $category_lang) {
- continue;
- }
- $translated_name = PMF_Filter::filterInput(INPUT_POST, 'name_translated_' . $translated_lang, FILTER_SANITIZE_STRING);
- $translated_description = PMF_Filter::filterInput(INPUT_POST, 'description_translated_' . $translated_lang, FILTER_SANITIZE_STRING);
- $categoryData = array_merge($categoryData, array(
- 'id' => $categoryId,
- 'lang' => $translated_lang,
- 'parent_id' => $parentId,
- 'name' => $translated_name,
- 'description' => $translated_description,
- 'user_id' => $user_id));
- if (!$category->checkLanguage($categoryId, $translated_lang)) {
- $category->addCategory($categoryData, $parentId, $categoryId);
- } else {
- $category->updateCategory($categoryData);
- }
- }
- }
- printf('<p class="alert alert-success">%s</p>', $PMF_LANG['ad_categ_added']);
- } else {
- printf('<p class="alert alert-error">%s</p>', $faqConfig->getDb()->error());
- }
- }
- // Updates an existing category
- if ($action == 'updatecategory') {
- $category = new PMF_Category($faqConfig, false);
- $category->setUser($currentAdminUser);
- $category->setGroups($currentAdminGroups);
- $parentId = PMF_Filter::filterInput(INPUT_POST, 'parent_id', FILTER_VALIDATE_INT);
- $categoryData = array(
- 'id' => PMF_Filter::filterInput(INPUT_POST, 'id', FILTER_VALIDATE_INT),
- 'lang' => PMF_Filter::filterInput(INPUT_POST, 'catlang', FILTER_SANITIZE_STRING),
- 'parent_id' => $parentId,
- 'name' => PMF_Filter::filterInput(INPUT_POST, 'name', FILTER_SANITIZE_STRING),
- 'description' => PMF_Filter::filterInput(INPUT_POST, 'description', FILTER_SANITIZE_STRING),
- 'user_id' => PMF_Filter::filterInput(INPUT_POST, 'user_id', FILTER_VALIDATE_INT));
- $permissions = array();
- if ('all' === PMF_Filter::filterInput(INPUT_POST, 'userpermission', FILTER_SANITIZE_STRING)) {
- $permissions += array(
- 'restricted_user' => array(
- -1
- )
- );
- } else {
- $permissions += array(
- 'restricted_user' => array(
- PMF_Filter::filterInput(INPUT_POST, 'restricted_users', FILTER_VALIDATE_INT)
- )
- );
- }
- if ('all' === PMF_Filter::filterInput(INPUT_POST, 'grouppermission', FILTER_SANITIZE_STRING)) {
- $permissions += array(
- 'restricted_groups' => array(
- -1
- )
- );
- } else {
- $permissions += PMF_Filter::filterInputArray(
- INPUT_POST,
- array(
- 'restricted_groups' => array(
- 'filter' => FILTER_VALIDATE_INT,
- 'flags' => FILTER_REQUIRE_ARRAY
- )
- )
- );
- }
- if (!$category->checkLanguage($categoryData['id'], $categoryData['lang'])) {
- if ($category->addCategory($categoryData, $parentId, $categoryData['id']) &&
- $category->addPermission('user', array($categoryData['id']), $permissions['restricted_user']) &&
- $category->addPermission('group', array($categoryData['id']), $permissions['restricted_groups'])) {
- printf('<p class="alert alert-success">%s</p>', $PMF_LANG['ad_categ_translated']);
- } else {
- printf('<p class="alert alert-error">%s</p>', $faqConfig->getDb()->error());
- }
- } else {
- if ($category->updateCategory($categoryData)) {
- $category->deletePermission('user', array($categoryData['id']));
- $category->deletePermission('group', array($categoryData['id']));
- $category->addPermission('user', array($categoryData['id']), $permissions['restricted_user']);
- $category->addPermission('group', array($categoryData['id']), $permissions['restricted_groups']);
- printf('<p class="alert alert-success">%s</p>', $PMF_LANG['ad_categ_updated']);
- } else {
- printf('<p class="alert alert-error">%s</p>', $faqConfig->getDb()->error());
- }
- }
-
- // All the other translations
- $languages = PMF_Filter::filterInput(INPUT_POST, 'used_translated_languages', FILTER_SANITIZE_STRING);
- if ($faqConfig->get('main.enableGoogleTranslation') === true && !empty($languages)) {
- $languages = explode(",", $languages);
- $category_lang = $categoryData['lang'];
- $categoryId = $categoryData['id'];
- $user_id = $categoryData['user_id'];
- foreach ($languages as $translated_lang) {
- if ($translated_lang == $category_lang) {
- continue;
- }
- $translated_name = PMF_Filter::filterInput(INPUT_POST, 'name_translated_' . $translated_lang, FILTER_SANITIZE_STRING);
- $translated_description = PMF_Filter::filterInput(INPUT_POST, 'description_translated_' . $translated_lang, FILTER_SANITIZE_STRING);
- $categoryData = array_merge($categoryData, array(
- 'id' => $categoryId,
- 'lang' => $translated_lang,
- 'parent_id' => $parentId,
- 'name' => $translated_name,
- 'description' => $translated_description,
- 'user_id' => $user_id));
- if (!$category->checkLanguage($categoryId, $translated_lang)) {
- $category->addCategory($categoryData, $parentId, $categoryId);
- } else {
- $category->updateCategory($categoryData);
- }
- }
- }
- }
- // Deletes an existing category
- if ($permission['delcateg'] && $action == 'removecategory') {
- $category = new PMF_Category($faqConfig, false);
- $category->setUser($currentAdminUser);
- $category->setGroups($currentAdminGroups);
- $id = PMF_Filter::filterInput(INPUT_POST, 'cat', FILTER_VALIDATE_INT);
- $lang = PMF_Filter::filterInput(INPUT_POST, 'lang', FILTER_SANITIZE_STRING);
- $deleteall = PMF_Filter::filterInput(INPUT_POST, 'deleteall', FILTER_SANITIZE_STRING);
- $delete_all = strtolower($deleteall) == 'yes' ? true : false;
- if ($category->deleteCategory($id, $lang, $delete_all) &&
- $category->deleteCategoryRelation($id, $lang, $delete_all) &&
- $category->deletePermission('user', array($id)) && $category->deletePermission('group', array($id))) {
- printf('<p class="alert alert-success">%s</p>', $PMF_LANG['ad_categ_deleted']);
- } else {
- printf('<p class="alert alert-error">%s</p>', $faqConfig->getDb()->error());
- }
- }
- // Moves a category
- if ($action == 'changecategory') {
- $category = new PMF_Category($faqConfig, false);
- $category->setUser($currentAdminUser);
- $category->setGroups($currentAdminGroups);
- $categoryId_1 = PMF_Filter::filterInput(INPUT_POST, 'cat', FILTER_VALIDATE_INT);
- $categoryId_2 = PMF_Filter::filterInput(INPUT_POST, 'change', FILTER_VALIDATE_INT);
- if ($category->swapCategories($categoryId_1, $categoryId_2)) {
- printf('<p class="alert alert-success">%s</p>', $PMF_LANG['ad_categ_updated']);
- } else {
- printf(
- '<p class="alert alert-error">%s<br />%s</p>',
- $PMF_LANG['ad_categ_paste_error'],
- $faqConfig->getDb()->error()
- );
- }
- }
- // Pastes a category
- if ($action == 'pastecategory') {
- $category = new PMF_Category($faqConfig, false);
- $category->setUser($currentAdminUser);
- $category->setGroups($currentAdminGroups);
- $categoryId = PMF_Filter::filterInput(INPUT_POST, 'cat', FILTER_VALIDATE_INT);
- $parentId = PMF_Filter::filterInput(INPUT_POST, 'after', FILTER_VALIDATE_INT);
- if ($category->updateParentCategory($categoryId, $parentId)) {
- printf('<p class="alert alert-success">%s</p>', $PMF_LANG['ad_categ_updated']);
- } else {
- printf(
- '<p class="alert alert-error">%s<br />%s</p>',
- $PMF_LANG['ad_categ_paste_error'],
- $faqConfig->getDb()->error()
- );
- }
- }
- ?>
- <p>
- <a class="btn btn-success" href="?action=addcategory">
- <i class="icon-plus icon-white"></i> <?php print $PMF_LANG['ad_kateg_add']; ?>
- </a>
- <a class="btn btn-info" href="?action=showcategory">
- <i class="icon-th icon-white"></i> <?php print $PMF_LANG['ad_categ_show'];?>
- </a>
- </p>
- <?php
- // Lists all categories
- $lang = PMF_Filter::filterInput(INPUT_POST, 'lang', FILTER_SANITIZE_STRING, $LANGCODE);
- // If we changed the category tree, unset the object
- if (isset($category)) {
- unset($category);
- }
- $category = new PMF_Category($faqConfig, false);
- $category->setUser($currentAdminUser);
- $category->setGroups($currentAdminGroups);
- $category->getMissingCategories();
- $category->buildTree();
- $open = $lastCatId = $openDiv = 0;
- print '<ul>';
- foreach ($category->catTree as $id => $cat) {
- $indent = '';
- for ($i = 0; $i < $cat['indent']; $i++) {
- $indent .= ' ';
- }
- // Category translated in this language?
- if ($cat['lang'] == $lang) {
- $categoryName = $cat['name'];
- } else {
- $categoryName = $cat['name'] . ' (' . $languageCodes[strtoupper($cat['lang'])] . ')';
- }
- $level = $cat['indent'];
- $leveldiff = $open - $level;
- if ($leveldiff > 1) {
- print '</li>';
- for ($i = $leveldiff; $i > 1; $i--) {
- print '</ul></div></li>';
- }
- }
- if ($level < $open) {
- if (($level - $open) == -1) {
- print '</li>';
- }
- print '</ul></li>';
- } elseif ($level == $open) {
- print '</li>';
- }
- if ($level > $open) {
- printf('<div id="div_%d" style="display: none;">', $lastCatId);
- print '<ul><li>';
- } else {
- print '<li>';
- }
- if (count($category->getChildren($cat['id'])) != 0) {
- // Show name and icon for expand the sub-categories
- printf(
- '<h4><a href="javascript:;" onclick="toggleFieldset(%d);">%s</a> </h4> ',
- $cat['id'],
- $categoryName
- );
- } else {
- // Show just the name
- printf("<h4>%s</h4> ", $categoryName);
- }
- if ($cat["lang"] == $lang) {
- // add sub category (if current language)
- printf('
- <a class="btn btn-info btn-mini" href="?action=addcategory&cat=%s&lang=%s"><span title="%s" class="icon-plus-sign icon-white"></span></a> ',
- $cat['id'],
- $cat['lang'],
- $PMF_LANG['ad_quick_category']
- );
- // rename (sub) category (if current language)
- printf('
- <a class="btn btn-info btn-mini" href="?action=editcategory&cat=%s"><span title="%s" class="icon-edit icon-white"></a> ',
- $cat['id'],
- $PMF_LANG['ad_kateg_rename']
- );
- }
- // translate category (always)
- printf(
- '<a class="btn btn-info btn-mini" href="?action=translatecategory&cat=%s"><span title="%s" class="icon-share icon-white"></a> ',
- $cat['id'],
- $PMF_LANG['ad_categ_translate']
- );
- // delete (sub) category (if current language)
- if (count($category->getChildren($cat['id'])) == 0 && $cat["lang"] == $lang) {
- printf(
- '<a class="btn btn-danger btn-mini" href="?action=deletecategory&cat=%s&catlang=%s"><span title="%s" class="icon-trash icon-white"></a> ',
- $cat['id'],
- $cat['lang'],
- $PMF_LANG['ad_categ_delete']
- );
- } else {
- echo '<a class="btn btn-inverse btn-mini" style="cursor: not-allowed;"><span class="icon-trash icon-white"></a> ';
- }
- if ($cat["lang"] == $lang) {
- // cut category (if current language)
- printf(
- '<a class="btn btn-warning btn-mini" href="?action=cutcategory&cat=%s"><span title="%s" class="icon-move icon-white"></a> ',
- $cat['id'],
- $PMF_LANG['ad_categ_cut']
- );
- if ($category->numParent($cat['parent_id']) > 1) {
- // move category (if current language) AND more than 1 category at the same level)
- printf(
- '<a class="btn btn-warning btn-mini" href="?action=movecategory&cat=%s&parent_id=%s"><span title="%s" class="icon-resize-vertical icon-white"></a> ',
- $cat['id'],
- $cat['parent_id'],
- $PMF_LANG['ad_categ_move']
- );
- }
- }
- $open = $level;
- $lastCatId = $cat['id'];
- }
- if ($open > 0) {
- print str_repeat("</li>\n\t</ul>\n\t", $open);
- }
- print "</li>\n</ul>";
-
- printf('<p class="alert alert-info">%s</p>', $PMF_LANG['ad_categ_remark']);
- } else {
- print $PMF_LANG['err_NotAuth'];
- }