Esempio n. 1
0
 /**
  * Create a Joomla menu for the main
  * navigation tab and publish it in the Kunena module position kunena_menu.
  * In addition it checks if there is a link to Kunena in any of the menus
  * and if not, adds a forum link in the mainmenu.
  */
 function createMenu()
 {
     $menu = array('name' => JText::_('COM_KUNENA_MENU_ITEM_FORUM'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_FORUM_ALIAS'), 'forum'), 'link' => 'index.php?option=com_kunena&view=home', 'access' => 0, 'params' => array('catids' => 0));
     $submenu = array('index' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_INDEX'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_INDEX_ALIAS'), 'index'), 'link' => 'index.php?option=com_kunena&view=category&layout=list', 'access' => 0, 'default' => 'categories', 'params' => array()), 'recent' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_RECENT'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_RECENT_ALIAS'), 'recent'), 'link' => 'index.php?option=com_kunena&view=topics&mode=replies', 'access' => 0, 'default' => 'recent', 'params' => array('topics_catselection' => 1, 'topics_categories' => 0, 'topics_time' => 720)), 'newtopic' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_NEWTOPIC'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_NEWTOPIC_ALIAS'), 'newtopic'), 'link' => 'index.php?option=com_kunena&view=topic&layout=create', 'access' => 1, 'params' => array()), 'noreplies' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_NOREPLIES'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_NOREPLIES_ALIAS'), 'noreplies'), 'link' => 'index.php?option=com_kunena&view=topics&mode=noreplies', 'access' => 1, 'params' => array('topics_catselection' => 1, 'topics_categories' => 0, 'topics_time' => -1)), 'mylatest' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_MYLATEST'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_MYLATEST_ALIAS'), 'mylatest'), 'link' => 'index.php?option=com_kunena&view=topics&layout=user&mode=default', 'access' => 1, 'default' => 'my', 'params' => array('topics_catselection' => 1, 'topics_categories' => 0, 'topics_time' => -1)), 'profile' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_PROFILE'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_PROFILE_ALIAS'), 'profile'), 'link' => 'index.php?option=com_kunena&view=user', 'access' => 1, 'params' => array('integration' => 1)), 'help' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_HELP'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_HELP_ALIAS'), 'help'), 'link' => 'index.php?option=com_kunena&view=misc', 'access' => 2, 'params' => array('body' => JText::_('COM_KUNENA_MENU_HELP_BODY'), 'body_format' => 'bbcode')), 'search' => array('name' => JText::_('COM_KUNENA_MENU_ITEM_SEARCH'), 'alias' => KunenaRoute::stringURLSafe(JText::_('COM_KUNENA_MENU_SEARCH_ALIAS'), 'search'), 'link' => 'index.php?option=com_kunena&view=search', 'access' => 0, 'params' => array()));
     $lang = JFactory::getLanguage();
     $debug = $lang->setDebug(false);
     if (version_compare(JVERSION, '1.6', '>')) {
         // Joomla 1.6+
         $this->createMenuJ25($menu, $submenu);
     } else {
         // Joomla 1.5
         $this->createMenuJ15($menu, $submenu);
     }
     KunenaMenuHelper::cleanCache();
     $lang->setDebug($debug);
 }
Esempio n. 2
0
/**
 * Build SEF URL
 *
 * All SEF URLs are formatted like this:
 *
 * http://site.com/menuitem/1-category-name/10-subject/[view]/[layout]/[param1]-value1/[param2]-value2?param3=value3&param4=value4
 *
 * - If catid exists, category will always be in the first segment
 * - If there is no catid, second segment for message will not be used (param-value: id-10)
 * - [view] and [layout] are the only parameters without value
 * - all other segments (task, id, userid, page, sel) are using param-value format
 *
 * NOTE! Only major variables are using SEF segments
 *
 * @param $query
 * @return array Segments
 */
function KunenaBuildRoute(&$query)
{
    $segments = array();
    // If Kunena Forum isn't installed or SEF is not enabled, do nothing
    if (!class_exists('KunenaForum') || !KunenaForum::isCompatible('3.0') || !KunenaForum::installed() || !KunenaRoute::$config->sef) {
        return $segments;
    }
    KUNENA_PROFILER ? KunenaProfiler::instance()->start('function ' . __FUNCTION__ . '()') : null;
    // Get menu item
    $menuitem = null;
    if (isset($query['Itemid'])) {
        static $menuitems = array();
        $Itemid = $query['Itemid'] = (int) $query['Itemid'];
        if (!isset($menuitems[$Itemid])) {
            $menuitems[$Itemid] = JFactory::getApplication()->getMenu()->getItem($Itemid);
            if (!$menuitems[$Itemid]) {
                // Itemid doesn't exist or is invalid
                unset($query['Itemid']);
            }
        }
        $menuitem = $menuitems[$Itemid];
    }
    // Safety check: we need view in order to create SEF URLs
    if (!isset($menuitem->query['view']) && empty($query['view'])) {
        KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function ' . __FUNCTION__ . '()') : null;
        return $segments;
    }
    // Get view for later use (query wins menu item)
    $view = isset($query['view']) ? (string) preg_replace('/[^a-z]/', '', $query['view']) : $menuitem->query['view'];
    // Get default values for URI variables
    if (isset(KunenaRoute::$views[$view])) {
        $defaults = KunenaRoute::$views[$view];
    }
    // Check all URI variables and remove those which aren't needed
    foreach ($query as $var => $value) {
        if (isset($defaults[$var]) && !isset($menuitem->query[$var]) && $value == $defaults[$var]) {
            // Remove URI variable which has default value
            unset($query[$var]);
        } elseif (isset($menuitem->query[$var]) && $value == $menuitem->query[$var] && $var != 'Itemid' && $var != 'option') {
            // Remove URI variable which has the same value as menu item
            unset($query[$var]);
        }
    }
    // We may have catid also in the menu item (it will not be in URI)
    $numeric = !empty($menuitem->query['catid']);
    // Support URIs like: /forum/12-my_category
    if (!empty($query['catid']) && ($view == 'category' || $view == 'topic' || $view == 'home')) {
        // TODO: ensure that we have view=category/topic
        $catid = (int) $query['catid'];
        if ($catid) {
            $numeric = true;
            $alias = KunenaForumCategoryHelper::get($catid)->alias;
            // If category alias is empty, use category id; otherwise use alias
            $segments[] = empty($alias) ? $catid : $alias;
            // This segment fully defines category view so the variable is no longer needed
            if ($view == 'category') {
                unset($query['view']);
            }
        }
        unset($query['catid']);
    }
    // Support URIs like: /forum/12-category/123-topic
    if (!empty($query['id']) && $numeric) {
        $id = (int) $query['id'];
        if ($id) {
            $subject = KunenaRoute::stringURLSafe(KunenaForumTopicHelper::get($id)->subject);
            if (empty($subject)) {
                $segments[] = $id;
            } else {
                $segments[] = "{$id}-{$subject}";
            }
            // This segment fully defines topic view so the variable is no longer needed
            if ($view == 'topic') {
                unset($query['view']);
            }
        }
        unset($query['id']);
    } else {
        // No id available, do not use numeric variable for mesid
        $numeric = false;
    }
    // View gets added only when we do not use short URI for category/topic
    if (!empty($query['view'])) {
        // Use filtered value
        $segments[] = $view;
    }
    // Support URIs like: /forum/12-category/123-topic/reply
    if (!empty($query['layout'])) {
        // Use filtered value
        $segments[] = (string) preg_replace('/[^a-z]/', '', $query['layout']);
    }
    // Support URIs like: /forum/12-category/123-topic/reply/124
    if (isset($query['mesid']) && $numeric) {
        $segments[] = (int) $query['mesid'];
        unset($query['mesid']);
    }
    // Support URIs like: /forum/user/128-matias
    if (isset($query['userid']) && $view == 'user') {
        $segments[] = (int) $query['userid'] . '-' . KunenaRoute::stringURLSafe(KunenaUserHelper::get((int) $query['userid'])->getName());
        unset($query['userid']);
    }
    unset($query['view'], $query['layout']);
    // Rest of the known parameters are in var-value form
    foreach (KunenaRoute::$parsevars as $var => $dummy) {
        if (isset($query[$var])) {
            $segments[] = "{$var}-{$query[$var]}";
            unset($query[$var]);
        }
    }
    KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function ' . __FUNCTION__ . '()') : null;
    return $segments;
}
Esempio n. 3
0
function installSampleData()
{
    $lang = JFactory::getLanguage();
    $debug = $lang->setDebug(false);
    jimport('joomla.utilities.date');
    $db = JFactory::getDBO();
    $posttime = new JDate();
    $my = JFactory::getUser();
    $queries = array();
    $query = "INSERT INTO `#__kunena_aliases` (`alias`, `type`, `item`, `state`) VALUES\n\t('announcement', 'view', 'announcement', 1),\n\t('category', 'view', 'category', 1),\n\t('common', 'view', 'common', 1),\n\t('credits', 'view', 'credits', 1),\n\t('home', 'view', 'home', 1),\n\t('misc', 'view', 'misc', 1),\n\t('search', 'view', 'search', 1),\n\t('statistics', 'view', 'statistics', 1),\n\t('topic', 'view', 'topic', 1),\n\t('topics', 'view', 'topics', 1),\n\t('user', 'view', 'user', 1),\n\t('category/create', 'layout', 'category.create', 1),\n\t('create', 'layout', 'category.create', 0),\n\t('category/default', 'layout', 'category.default', 1),\n\t('default', 'layout', 'category.default', 0),\n\t('category/edit', 'layout', 'category.edit', 1),\n\t('edit', 'layout', 'category.edit', 0),\n\t('category/manage', 'layout', 'category.manage', 1),\n\t('manage', 'layout', 'category.manage', 0),\n\t('category/moderate', 'layout', 'category.moderate', 1),\n\t('moderate', 'layout', 'category.moderate', 0),\n\t('category/user', 'layout', 'category.user', 1);";
    $queries[] = array('kunena_aliases', $query);
    $query = "INSERT INTO `#__kunena_ranks`\n\t(`rank_id`, `rank_title`, `rank_min`, `rank_special`, `rank_image`) VALUES\n\t(1, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK1'))}, 0, 0, 'rank1.gif'),\n\t(2, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK2'))}, 20, 0, 'rank2.gif'),\n\t(3, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK3'))}, 40, 0, 'rank3.gif'),\n\t(4, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK4'))}, 80, 0, 'rank4.gif'),\n\t(5, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK5'))}, 160, 0, 'rank5.gif'),\n\t(6, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK6'))}, 320, 0, 'rank6.gif'),\n\t(7, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK_ADMIN'))}, 0, 1, 'rankadmin.gif'),\n\t(8, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK_MODERATOR'))}, 0, 1, 'rankmod.gif'),\n\t(9, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK_SPAMMER'))}, 0, 1, 'rankspammer.gif'),\n\t(10, {$db->quote(KText::_('COM_KUNENA_SAMPLEDATA_RANK_BANNED'))}, 0, 1, 'rankbanned.gif');";
    $queries[] = array('kunena_ranks', $query);
    $query = "INSERT INTO `#__kunena_smileys`\n\t(`id`,`code`,`location`,`greylocation`,`emoticonbar`) VALUES\n\t(1, 'B)', 'cool.png', 'cool-grey.png', 1),\n\t(2, '8)', 'cool.png', 'cool-grey.png', 0),\n\t(3, '8-)', 'cool.png', 'cool-grey.png', 0),\n\t(4, ':-(', 'sad.png', 'sad-grey.png', 0),\n\t(5, ':(', 'sad.png', 'sad-grey.png', 1),\n\t(6, ':sad:', 'sad.png', 'sad-grey.png', 0),\n\t(7, ':cry:', 'sad.png', 'sad-grey.png', 0),\n\t(8, ':)', 'smile.png', 'smile-grey.png', 1),\n\t(9, ':-)', 'smile.png', 'smile-grey.png', 0),\n\t(10, ':cheer:', 'cheerful.png', 'cheerful-grey.png', 1),\n\t(11, ';)', 'wink.png', 'wink-grey.png', 1),\n\t(12, ';-)', 'wink.png', 'wink-grey.png', 0),\n\t(13, ':wink:', 'wink.png', 'wink-grey.png', 0),\n\t(14, ';-)', 'wink.png', 'wink-grey.png', 0),\n\t(15, ':P', 'tongue.png', 'tongue-grey.png', 1),\n\t(16, ':p', 'tongue.png', 'tongue-grey.png', 0),\n\t(17, ':-p', 'tongue.png', 'tongue-grey.png', 0),\n\t(18, ':-P', 'tongue.png', 'tongue-grey.png', 0),\n\t(19, ':razz:', 'tongue.png', 'tongue-grey.png', 0),\n\t(20, ':angry:', 'angry.png', 'angry-grey.png', 1),\n\t(21, ':mad:', 'angry.png', 'angry-grey.png', 0),\n\t(22, ':unsure:', 'unsure.png', 'unsure-grey.png', 1),\n\t(23, ':o', 'shocked.png', 'shocked-grey.png', 0),\n\t(24, ':-o', 'shocked.png', 'shocked-grey.png', 0),\n\t(25, ':O', 'shocked.png', 'shocked-grey.png', 0),\n\t(26, ':-O', 'shocked.png', 'shocked-grey.png', 0),\n\t(27, ':eek:', 'shocked.png', 'shocked-grey.png', 0),\n\t(28, ':ohmy:', 'shocked.png', 'shocked-grey.png', 1),\n\t(29, ':huh:', 'wassat.png', 'wassat-grey.png', 1),\n\t(30, ':?', 'confused.png', 'confused-grey.png', 0),\n\t(31, ':-?', 'confused.png', 'confused-grey.png', 0),\n\t(32, ':???', 'confused.png', 'confused-grey.png', 0),\n\t(33, ':dry:', 'ermm.png', 'ermm-grey.png', 1),\n\t(34, ':ermm:', 'ermm.png', 'ermm-grey.png', 0),\n\t(35, ':lol:', 'grin.png', 'grin-grey.png', 1),\n\t(36, ':X', 'sick.png', 'sick-grey.png', 0),\n\t(37, ':x', 'sick.png', 'sick-grey.png', 0),\n\t(38, ':sick:', 'sick.png', 'sick-grey.png', 1),\n\t(39, ':silly:', 'silly.png', 'silly-grey.png', 1),\n\t(40, ':y32b4:', 'silly.png', 'silly-grey.png', 0),\n\t(41, ':blink:', 'blink.png', 'blink-grey.png', 1),\n\t(42, ':blush:', 'blush.png', 'blush-grey.png', 1),\n\t(43, ':oops:', 'blush.png', 'blush-grey.png', 1),\n\t(44, ':kiss:', 'kissing.png', 'kissing-grey.png', 1),\n\t(45, ':rolleyes:', 'blink.png', 'blink-grey.png', 0),\n\t(46, ':roll:', 'blink.png', 'blink-grey.png', 0),\n\t(47, ':woohoo:', 'w00t.png', 'w00t-grey.png', 1),\n\t(48, ':side:', 'sideways.png', 'sideways-grey.png', 1),\n\t(49, ':S', 'dizzy.png', 'dizzy-grey.png', 1),\n\t(50, ':s', 'dizzy.png', 'dizzy-grey.png', 0),\n\t(51, ':evil:', 'devil.png', 'devil-grey.png', 1),\n\t(52, ':twisted:', 'devil.png', 'devil-grey.png', 0),\n\t(53, ':whistle:', 'whistling.png', 'whistling-grey.png', 1),\n\t(54, ':pinch:', 'pinch.png', 'pinch-grey.png', 1),\n\t(55, ':D', 'laughing.png', 'laughing-grey.png', 0),\n\t(56, ':-D', 'laughing.png', 'laughing-grey.png', 0),\n\t(57, ':grin:', 'laughing.png', 'laughing-grey.png', 0),\n\t(58, ':laugh:', 'laughing.png', 'laughing-grey.png', 0),\n\t(59, ':|', 'neutral.png', 'neutral-grey.png', 0),\n\t(60, ':-|', 'neutral.png', 'neutral-grey.png', 0),\n\t(61, ':neutral:', 'neutral.png', 'neutral-grey.png', 0),\n\t(62, ':mrgreen:', 'mrgreen.png', 'mrgreen-grey.png', 0),\n\t(63, ':?:', 'question.png', 'question-grey.png', 0),\n\t(64, ':!:', 'exclamation.png', 'exclamation-grey.png', 0),\n\t(65, ':arrow:', 'arrow.png', 'arrow-grey.png', 0),\n\t(66, ':idea:', 'idea.png', 'idea-grey.png', 0)";
    $queries[] = array('kunena_smileys', $query);
    $section = KText::_('COM_KUNENA_SAMPLEDATA_SECTION_TITLE');
    $cat1 = KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY1_TITLE');
    $cat2 = KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY2_TITLE');
    $section_alias = KunenaRoute::stringURLSafe(KText::_('COM_KUNENA_SAMPLEDATA_SECTION_TITLE'), 'main-forum');
    $cat1_alias = KunenaRoute::stringURLSafe(KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY1_TITLE'), 'welcome-mat');
    $cat2_alias = KunenaRoute::stringURLSafe(KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY2_TITLE'), 'suggestion-box');
    $aliasquery = "INSERT INTO `#__kunena_aliases` (`alias`, `type`, `item`, `state`) VALUES\n\t\t({$db->quote($section_alias)}, 'catid', '1', 1),\n\t\t({$db->quote($cat1_alias)}, 'catid', '2', 1),\n\t\t({$db->quote($cat2_alias)}, 'catid', '3', 1);";
    $query = "INSERT INTO `#__kunena_categories`\n\t\t(`id`, `parent_id`, `name`, `alias`, `pub_access`, `ordering`, `published`, `description`, `headerdesc`, `numTopics`, `numPosts`, `allow_polls`, `last_topic_id`, `last_post_id`, `last_post_time`, `accesstype`) VALUES\n\t\t(1, 0, {$db->quote($section)}, {$db->quote($section_alias)}, 1, 1, 1, " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_SECTION_DESC')) . ", " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_SECTION_HEADER')) . ", 0, 0, 0, 0, 0, 0, 'joomla.group'),\n\t\t(2, 1, {$db->quote($cat1)}, {$db->quote($cat1_alias)}, 1, 1, 1, " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY1_DESC')) . ", " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY1_HEADER')) . ", 1 , 1, 0, 1, 1, {$posttime->toUnix()}, 'joomla.group'),\n\t\t(3, 1, {$db->quote($cat2)}, {$db->quote($cat2_alias)}, 1, 2, 1, " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY2_DESC')) . ", " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_CATEGORY2_HEADER')) . ", 0 , 0, 1, 0, 0, 0, 'joomla.group');";
    $queries[] = array('kunena_categories', $query);
    $query = "INSERT INTO `#__kunena_messages`\n\t(`id`, `parent`, `thread`, `catid`, `userid`, `name`, `subject`, `time`, `ip`) VALUES\n\t(1, 0, 1, 2, " . $db->quote($my->id) . ", 'Kunena', " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_POST_WELCOME_SUBJECT')) . ", " . $posttime->toUnix() . ", '127.0.0.1');";
    $queries[] = array('kunena_messages', $query);
    $query = "INSERT INTO `#__kunena_messages_text`\n\t(`mesid`, `message`) VALUES\n\t(1, " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_POST_WELCOME_TEXT_CONTENT')) . ");";
    $queries[] = array('kunena_messages_text', $query);
    $query = "INSERT INTO `#__kunena_topics`\n\t(`id`, `category_id`, `subject`, `posts`, `first_post_id`, `first_post_time`, `first_post_userid`, `first_post_message`, `first_post_guest_name`, `last_post_id`, `last_post_time`, `last_post_userid`, `last_post_message`, `last_post_guest_name`) VALUES\n\t(1, 2, " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_POST_WELCOME_SUBJECT')) . ", 1, 1, " . $posttime->toUnix() . ", " . $db->quote($my->id) . ", " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_POST_WELCOME_TEXT_CONTENT')) . ", 'Kunena', 1, " . $posttime->toUnix() . ", " . $db->quote($my->id) . ", " . $db->quote(KText::_('COM_KUNENA_SAMPLEDATA_POST_WELCOME_TEXT_CONTENT')) . ", 'Kunena');";
    $queries[] = array('kunena_topics', $query);
    $counter = 0;
    foreach ($queries as $query) {
        // Only insert sample/default data if table is empty
        $db->setQuery("SELECT * FROM " . $db->quoteName($db->getPrefix() . $query[0]), 0, 1);
        $filled = $db->loadObject();
        if (!$filled) {
            $db->setQuery($query[1]);
            $db->query();
            if ($db->getErrorNum()) {
                throw new KunenaInstallerException($db->getErrorMsg(), $db->getErrorNum());
            }
            if ($query[0] == 'kunena_categories') {
                $db->setQuery($aliasquery);
                $db->query();
                if ($db->getErrorNum()) {
                    throw new KunenaInstallerException($db->getErrorMsg(), $db->getErrorNum());
                }
            }
            $counter++;
        }
    }
    $lang->setDebug($debug);
    // Insert missing users
    $query = "INSERT INTO #__kunena_users (userid, showOnline) SELECT a.id AS userid, 1 AS showOnline FROM #__users AS a LEFT JOIN #__kunena_users AS b ON b.userid=a.id WHERE b.userid IS NULL";
    $db->setQuery($query);
    $db->query();
    if ($db->getErrorNum()) {
        throw new KunenaInstallerException($db->getErrorMsg(), $db->getErrorNum());
    }
    return $counter;
}
Esempio n. 4
0
 /**
  * @see KunenaDatabaseObject::check()
  */
 public function check()
 {
     $this->alias = trim($this->alias);
     if (empty($this->alias)) {
         $this->alias = $this->name;
     }
     if ($this->alias != $this->_alias) {
         $this->alias = KunenaRoute::stringURLSafe($this->alias);
         if ($this->checkAlias($this->alias) === false) {
             $this->setError(JText::sprintf('COM_KUNENA_LIB_FORUM_CATEGORY_ERROR_ALIAS_RESERVED', $this->alias));
             return false;
         }
     }
     return true;
 }
Esempio n. 5
0
 protected function createIndexerResult($message)
 {
     // Convert the item to a result object.
     $item = new FinderIndexerResult();
     $item->id = $message->id;
     $item->catid = $message->catid;
     // Set title context.
     $item->title = $message->subject;
     // Build the necessary url, route, path and alias information.
     $item->url = $this->getUrl($message->id, $this->extension, $this->layout);
     $item->route = $item->url . '&Itemid=' . KunenaRoute::getItemId($item->url);
     $item->path = FinderIndexerHelper::getContentPath($item->url);
     //route);
     $item->alias = KunenaRoute::stringURLSafe($message->subject);
     // Set body context.
     $item->body = KunenaHtmlParser::stripBBCode($message->message);
     $item->summary = $item->body;
     // Set other information.
     $item->published = intval($message->hold == 0);
     // TODO: add topic state
     //$item->state = intval($message->getCategory()->published == 1);
     $item->state = $item->published;
     $item->language = '*';
     // TODO: add access control
     $item->access = $this->getAccessLevel($item);
     // Set the item type.
     $item->type_id = $this->type_id;
     // Set the mime type.
     $item->mime = $this->mime;
     // Set the item layout.
     $item->layout = $this->layout;
     return $item;
 }
Esempio n. 6
0
	/**
	 * @param cbautoactionsActionTable $trigger
	 * @param UserTable $user
	 */
	public function execute( $trigger, $user )
	{
		global $_CB_database;

		if ( ! $this->installed() ) {
			if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
				var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NOT_INSTALLED', ':: Action [action] :: Kunena is not installed', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
			}

			return;
		}

		foreach ( $trigger->getParams()->subTree( 'kunena' ) as $row ) {
			/** @var ParamsInterface $row */
			$owner								=	$row->get( 'owner', null, GetterInterface::STRING );

			if ( ! $owner ) {
				$owner							=	(int) $user->get( 'id' );
			} else {
				$owner							=	(int) $trigger->getSubstituteString( $owner );
			}

			switch ( $row->get( 'mode', 'category', GetterInterface::STRING ) ) {
				case 'sync':
					if ( ! $user->get( 'id' ) ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_USER', ':: Action [action] :: Kunena skipped due to no user', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$kunenaUser					=	KunenaUserHelper::get( (int) $user->get( 'id' ) );

					$kunenaUser->set( 'name', $user->get( 'name' ) );
					$kunenaUser->set( 'username', $user->get( 'username' ) );
					$kunenaUser->set( 'email', $user->get( 'email' ) );

					foreach ( $row->subTree( 'fields' ) as $r ) {
						/** @var ParamsInterface $r */
						$field					=	$r->get( 'field', null, GetterInterface::STRING );

						if ( $field ) {
							$kunenaUser->set( $field, $trigger->getSubstituteString( $r->get( 'value', null, GetterInterface::RAW ), false, $r->get( 'translate', false, GetterInterface::BOOLEAN ) ) );
						}
					}

					$kunenaUser->save();
					break;
				case 'reply':
					if ( ! $owner ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_OWNER', ':: Action [action] :: Kunena skipped due to missing owner', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$message					=	$trigger->getSubstituteString( $row->get( 'message', null, GetterInterface::RAW ), false );

					if ( ! $message ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_MSG', ':: Action [action] :: Kunena skipped due to missing message', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$topicId					=	(int) $row->get( 'topic', 0, GetterInterface::INT );

					if ( ! $topicId ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_TOPIC', ':: Action [action] :: Kunena skipped due to missing topic', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$subject					=	$trigger->getSubstituteString( $row->get( 'subject', null, GetterInterface::STRING ) );

					$topic						=	KunenaForumMessageHelper::get( $topicId );

					$fields						=	array( 'message' => $message );

					if ( $subject ) {
						$fields['subject']		=	$subject;
					}

					$topic->newReply( $fields, $owner );
					break;
				case 'topic':
					if ( ! $owner ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_OWNER', ':: Action [action] :: Kunena skipped due to missing owner', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$subject					=	$trigger->getSubstituteString( $row->get( 'subject', null, GetterInterface::STRING ) );

					if ( ! $subject ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_SUBJ', ':: Action [action] :: Kunena skipped due to missing subject', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$message					=	$trigger->getSubstituteString( $row->get( 'message', null, GetterInterface::RAW ), false );

					if ( ! $message ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_MSG', ':: Action [action] :: Kunena skipped due to missing message', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$categoryId					=	(int) $row->get( 'category', 0, GetterInterface::INT );

					if ( ! $categoryId ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_CAT', ':: Action [action] :: Kunena skipped due to missing category', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$category					=	KunenaForumCategoryHelper::get( $categoryId );

					$fields						=	array(	'catid' => $categoryId,
															'subject' => $subject,
															'message' => $message
														);

					$category->newTopic( $fields, $owner );
					break;
				case 'category':
				default:
					$name						=	$trigger->getSubstituteString( $row->get( 'name', null, GetterInterface::STRING ) );

					if ( ! $name ) {
						if ( $trigger->getParams()->get( 'debug', false, GetterInterface::BOOLEAN ) ) {
							var_dump( CBTxt::T( 'AUTO_ACTION_KUNENA_NO_NAME', ':: Action [action] :: Kunena skipped due to missing name', array( '[action]' => (int) $trigger->get( 'id' ) ) ) );
						}

						continue;
					}

					$query						=	'SELECT ' . $_CB_database->NameQuote( 'id' )
												.	"\n FROM " . $_CB_database->NameQuote( '#__kunena_categories' )
												.	"\n WHERE " . $_CB_database->NameQuote( 'name' ) . " = " . $_CB_database->Quote( $name );
					$_CB_database->setQuery( $query );
					if ( ! $_CB_database->loadResult() ) {
						$category				=	KunenaForumCategoryHelper::get();

						$category->set( 'parent_id', (int) $row->get( 'parent', 0, GetterInterface::INT ) );
						$category->set( 'name', $name );
						$category->set( 'alias', KunenaRoute::stringURLSafe( $name ) );
						$category->set( 'accesstype', 'joomla.group' );
						$category->set( 'access', (int) $row->get( 'access', 1, GetterInterface::INT ) );
						$category->set( 'published', (int) $row->get( 'published', 1, GetterInterface::INT ) );
						$category->set( 'description', $trigger->getSubstituteString( $row->get( 'description', null, GetterInterface::STRING ) ) );

						if ( $category->save() && $owner ) {
							$category->addModerator( (int) $owner );
						}
					}
					break;
			}
		}
	}
 /**
  * Export sections and categories
  *
  * Returns list of category objects containing database fields
  * to #__kunena_categories.
  * All categories without parent are sections.
  *
  * NOTE: it's very important to keep category IDs (containing topics) the same!
  * If there are two tables for sections and categories, change IDs on sections..
  *
  * @param int $start Pagination start
  * @param int $limit Pagination limit
  * @return array
  */
 public function &exportCategories($start = 0, $limit = 0)
 {
     $query = "SELECT\n\t\t\tforum_id AS id,\n\t\t\tparent_id AS parent_id,\n\t\t\tforum_name AS name,\n\t\t\tforum_name AS alias,\n\t\t\t0 AS icon_id,\n\t\t\t(forum_status=1) AS locked,\n\t\t\t'joomla.level' AS accesstype,\n\t\t\t0 AS access,\n\t\t\t0 AS pub_access,\n\t\t\t1 AS pub_recurse,\n\t\t\t0 AS admin_access,\n\t\t\t1 AS admin_recurse,\n\t\t\tleft_id AS ordering,\n\t\t\t1 AS published,\n\t\t\tnull AS channels,\n\t\t\t0 AS checked_out,\n\t\t\t'0000-00-00 00:00:00' AS checked_out_time,\n\t\t\t0 AS review,\n\t\t\t0 AS allow_anonymous,\n\t\t\t0 AS post_anonymous,\n\t\t\t0 AS hits,\n\t\t\tforum_desc AS description,\n\t\t\tforum_rules AS headerdesc,\n\t\t\t'' AS class_sfx,\n\t\t\t1 AS allow_polls,\n\t\t\t'' AS topic_ordering,\n\t\t\tforum_posts AS numPosts,\n\t\t\tforum_topics_real AS numTopics,\n\t\t\t0 AS last_topic_id,\n\t\t\tforum_last_post_id AS last_post_id,\n\t\t\tforum_last_post_time AS last_post_time,\n\t\t\t(LENGTH(forum_desc_bitfield)>0) AS bbcode_desc,\n\t\t\t(LENGTH(forum_rules_bitfield)>0) AS bbcode_header,\n\t\t\t'' AS params\n\t\tFROM #__forums ORDER BY id";
     $result = $this->getExportData($query, $start, $limit, 'id');
     foreach ($result as &$row) {
         $this->parseText($row->name);
         // FIXME: joomla level in J2.5
         // FIXME: remove id
         $row->alias = KunenaRoute::stringURLSafe("{$row->id}-{$row->alias}");
         if ($row->bbcode_desc) {
             $this->parseBBCode($row->description);
         } else {
             $this->parseText($row->description);
         }
         if ($row->bbcode_header) {
             $this->parseBBCode($row->headerdesc);
         } else {
             $this->parseText($row->headerdesc);
         }
     }
     return $result;
 }
Esempio n. 8
0
	static public function saveForum( $parentForum, $row, $user, $plugin ) {
		if ( ! class_exists( 'KunenaForumCategoryHelper' ) ) {
			return;
		}

		if ( $parentForum ) {
			if ( method_exists( $row, 'getCategory' ) ) {
				$authorized		=	cbgjClass::getAuthorization( $row->getCategory(), $row, $user );
			} else {
				$authorized		=	cbgjClass::getAuthorization( $row, null, $user );
			}

			$params				=	$row->getParams();
			$forum				=	$params->get( 'forum_id', null );

			if ( ! $forum ) {
				$forum			=	cbgjForumsModel::setForum( $parentForum, $row, $user, $plugin );
			} else {
				$exists			=	KunenaForumCategoryHelper::get( (int) $forum );

				if ( ! $exists->name ) {
					$forum		=	cbgjForumsModel::setForum( $parentForum, $row, $user, $plugin );
				}
			}

			if ( $forum ) {
				$forumShow		=	(int) cbgjClass::getCleanParam( ( $plugin->params->get( 'forum_show_config', 1 ) || cbgjClass::hasAccess( 'usr_mod', $authorized ) ), 'forum_show', $params->get( 'forum_show', $plugin->params->get( 'forum_show', 1 ) ) );
				$category		=	KunenaForumCategoryHelper::get( (int) $forum );

				if ( method_exists( $row, 'getCategory' ) ) {
					$alias		=	null;

					if ( $row->get( 'parent' ) ) {
						$alias	.=	$row->get( 'parent' ) . ' ';
					}

					$alias		.=	$row->get( 'id' ) . ' ' . $row->getName();
				} else {
					$alias		=	$row->get( 'category' ) . ' ';

					if ( $row->get( 'parent' ) ) {
						$alias	.=	$row->get( 'parent' ) . ' ';
					}

					$alias		.=	$row->get( 'id' ) . ' ' . $row->getName();
				}

				$category->set( 'parent_id', (int) $parentForum );
				$category->set( 'name', str_replace( '&', '&', $row->getName() ) );
				$category->set( 'alias', KunenaRoute::stringURLSafe( $alias ) );
				$category->set( 'accesstype', 'communitybuilder' );
				$category->set( 'access', (int) $row->get( 'id' ) );
				$category->set( 'published', (int) ( ! $forumShow ? 0 : $row->get( 'published' ) ) );
				$category->set( 'description', $row->getDescription() );

				if ( ! $category->save() ) {
					trigger_error( CBTxt::P( '[element] - saveForum SQL Error: [error]', array( '[element]' => $plugin->element, '[error]' => $category->getError() ) ) );
				} else {
					$params->set( 'forum_id', (int) $category->id );
					$params->set( 'forum_show', (int) $forumShow );
					$params->set( 'forum_public', (int) cbgjClass::getCleanParam( ( $plugin->params->get( 'forum_public_config', 1 ) || cbgjClass::hasAccess( 'usr_mod', $authorized ) ), 'forum_public', $params->get( 'forum_public', $plugin->params->get( 'forum_public', 1 ) ) ) );

					if ( ! $row->storeParams( $params ) ) {
						trigger_error( CBTxt::P( '[element] - saveForum SQL Error: [error]', array( '[element]' => $plugin->element, '[error]' => $row->getError() ) ) );
					}

					$category->addModerator( (int) $row->user_id );
				}
			}
		}
	}