/** * Insert a new Forum into Database * * @param array $data Array with keys according to database layout, which holds the data of the forum * @param array $permissions Array with Permission entries (structure: array( 'canview' => array( 'usergroupid' => 1 ) )) (an example) * @param array $default_permissions Array which defines, if default permissions shall be used (structure: array( usergroupid => 0 / 1 ) * Can be left empty, then this function will take care of it * @return $data with more values, like fid and parentlist */ function createForum($data, $permissions = array(), $default_permissions = array()) { require_once MYBB_ADMIN_DIR . 'inc/functions.php'; if (!isset($data['name'])) { $this->_errorAndDie('A new forum needs to have a name and a type'); } $data['type'] = 'f'; // Let's leave the parentlist creation to the script and let's not trust the dev :) if ($data['parentlist'] != '') { $data['parentlist'] = ''; } // If there is no defined Parent ID, parent ID will be set to 0 if (!isset($data['pid']) || $data['pid'] < 0) { $data['pid'] = 0; } else { $data['pid'] = intval($data['pid']); } if (!empty($permissions)) { if (!isset($permissions['canview']) || empty($permissions['canview']) || (!isset($permissions['canpostthreads']) || empty($permissions['canpostthreads'])) || (!isset($permissions['canpostreplys']) || empty($permissions['canpostreplys'])) || (!isset($permissions['canpostpolls']) || empty($permissions['canpostpolls'])) || (!isset($permissions['canpostattachments']) || empty($permissions['canpostattachments']))) { $this->_errorAndDie('The $permissions Parameter does not have the correct format. It requires following keys: <i>canview, canpostthreads, canpostreplys, canpostpolls and canpostattachments</i>'); } /** * If no default permissions are given, we will initiate them, default: yes * Since there is the possibility of additional usergroups, we will get the usergroups from the permissions array! * The structure of the inherit array is: keys = groupid * If the value of an inherit array item is 1, this means that the default_permissions shall be used */ if (empty($default_permissions)) { foreach ($permissions['canview'] as $gid) { $default_permissions[$gid] = 1; } } } $data['fid'] = $this->db->insert_query("forums", $data); $data['parentlist'] = make_parent_list($data['fid']); $this->db->update_query("forums", array("parentlist" => $data['parentlist']), 'fid=\'' . $data['fid'] . '\''); $this->cache->update_forums(); if (!empty($permissions)) { $inherit = $default_permissions; /** * $permissions['canview'][1] = 1 OR $permissions['canview'][1] = 0 * --> $permissions[$name][$gid] = yes / no */ $canview = $permissions['canview']; $canpostthreads = $permissions['canpostthreads']; $canpostpolls = $permissions['canpostpolls']; $canpostattachments = $permissions['canpostattachments']; $canpostreplies = $permissions['canpostreplys']; save_quick_perms($data['fid']); } return $data; }
} } foreach (array('canview', 'canpostthreads', 'canpostreplys', 'canpostpolls') as $name) { if ($permission[$name]) { $permissions[$name][$gid] = 1; } else { $permissions[$name][$gid] = 0; } } } $canview = $permissions['canview']; $canpostthreads = $permissions['canpostthreads']; $canpostpolls = $permissions['canpostpolls']; $canpostattachments = $permissions['canpostattachments']; $canpostreplies = $permissions['canpostreplys']; save_quick_perms($fid); $plugins->run_hooks("admin_forum_management_start_permissions_commit"); $cache->update_forums(); // Log admin action log_admin_action('quickpermissions', $fid, $forum['name']); flash_message($lang->success_forum_permissions_updated, 'success'); admin_redirect("index.php?module=forum-management&fid={$fid}#tab_permissions"); } elseif ($mybb->input['add'] == "moderators") { $forum = get_forum($fid); if (!$forum) { flash_message($lang->error_invalid_forum, 'error'); admin_redirect("index.php?module=forum-management&fid={$fid}#tab_moderators"); } if (!empty($mybb->input['usergroup'])) { $isgroup = 1; $gid = $mybb->get_input('usergroup', MyBB::INPUT_INT);
/** * Generic creation of a forum. * In MyBB a category is a special forum. Categories and forums only differ in the type: c for category and f for forum */ private function createCategoryOrForum($data, $permissions = array(), $default_permissions = array()) { require_once MYBB_ADMIN_DIR . 'inc/functions.php'; if (!trim($data['name'])) { $errors[] = $lang->error_missing_title; } $pid = (int) $data['pid']; $type = $data['type'] == 'c' ? 'c' : 'f'; if (!$errors) { if ($pid < 0) { $pid = 0; } $defaults = array('description' => '', 'linkto' => '', 'disporder' => '', 'active' => 1, 'open' => 1, 'allowhtml' => 0, 'allowmycode' => 1, 'allowsmilies' => 1, 'allowimgcode' => 1, 'allowvideocode' => 1, 'allowpicons' => 1, 'allowtratings' => 1, 'usepostcounts' => 1, 'usethreadcounts' => 1, 'requireprefix' => 0, 'password' => '', 'showinjump' => 1, 'style' => 0, 'overridestyle' => 0, 'rulestype' => 0, 'rulestitle' => '', 'rules' => '', 'defaultdatecut' => 0, 'defaultsortby' => '', 'defaultsortorder' => ''); $data = array_merge($defaults, $data); $insert_array = array("name" => $this->dbEscape($data['name']), "description" => $this->dbEscape($data['description']), "linkto" => $this->dbEscape($data['linkto']), "type" => $this->dbEscape($type), "pid" => $pid, "parentlist" => '', "disporder" => (int) $data['disporder'], "active" => (int) $data['active'], "open" => (int) $data['open'], "allowhtml" => (int) $data['allowhtml'], "allowmycode" => (int) $data['allowmycode'], "allowsmilies" => (int) $data['allowsmilies'], "allowimgcode" => (int) $data['allowimgcode'], "allowvideocode" => (int) $data['allowvideocode'], "allowpicons" => (int) $data['allowpicons'], "allowtratings" => (int) $data['allowtratings'], "usepostcounts" => (int) $data['usepostcounts'], "usethreadcounts" => (int) $data['usethreadcounts'], "requireprefix" => (int) $data['requireprefix'], "password" => $this->dbEscape($data['password']), "showinjump" => (int) $data['showinjump'], "style" => (int) $data['style'], "overridestyle" => (int) $data['overridestyle'], "rulestype" => (int) $data['rulestype'], "rulestitle" => $this->dbEscape($data['rulestitle']), "rules" => $this->dbEscape($data['rules']), "defaultdatecut" => (int) $data['defaultdatecut'], "defaultsortby" => $this->dbEscape($data['defaultsortby']), "defaultsortorder" => $this->dbEscape($data['defaultsortorder'])); $fid = $this->db->insert_query("forums", $insert_array); $parentlist = make_parent_list($fid); $this->db->update_query("forums", array("parentlist" => $parentlist), "fid='{$fid}'"); $insert_array['fid'] = $fid; $insert_array['parentlist'] = $parentlist; $inherit = $data['default_permissions']; foreach ($data as $id => $permission) { if (strpos($id, 'fields_') === false) { continue; } list(, $gid) = explode('fields_', $id); foreach (array('canview', 'canpostthreads', 'canpostreplys', 'canpostpolls') as $name) { if (in_array($name, $permission) || $permission[$name]) { $permissions[$name][$gid] = 1; } else { $permissions[$name][$gid] = 0; } } } $canview = $permissions['canview']; $canpostthreads = $permissions['canpostthreads']; $canpostpolls = $permissions['canpostpolls']; $canpostattachments = $permissions['canpostattachments']; $canpostreplies = $permissions['canpostreplys']; save_quick_perms($fid); $this->plugins->run_hooks("admin_forum_management_add_commit"); $this->cache->update_forums(); // Log admin action log_admin_action($fid, $insert_array['name']); return $insert_array; } }