acp_modules::update_module_data PHP Метод

update_module_data() публичный Метод

Update/Add module
public update_module_data ( &$module_data, boolean $run_inline = false )
$run_inline boolean if set to true errors will be returned and no logs being written
    function update_module_data(&$module_data, $run_inline = false)
    {
        global $db, $user, $phpbb_log;
        if (!isset($module_data['module_id'])) {
            // no module_id means we're creating a new category/module
            if ($module_data['parent_id']) {
                $sql = 'SELECT left_id, right_id
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_class = '" . $db->sql_escape($module_data['module_class']) . "'\n\t\t\t\t\t\tAND module_id = " . (int) $module_data['parent_id'];
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                if (!$row) {
                    if ($run_inline) {
                        return 'PARENT_NO_EXIST';
                    }
                    trigger_error($user->lang['PARENT_NO_EXIST'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
                }
                // Workaround
                $row['left_id'] = (int) $row['left_id'];
                $row['right_id'] = (int) $row['right_id'];
                $sql = 'UPDATE ' . MODULES_TABLE . "\n\t\t\t\t\tSET left_id = left_id + 2, right_id = right_id + 2\n\t\t\t\t\tWHERE module_class = '" . $db->sql_escape($module_data['module_class']) . "'\n\t\t\t\t\t\tAND left_id > {$row['right_id']}";
                $db->sql_query($sql);
                $sql = 'UPDATE ' . MODULES_TABLE . "\n\t\t\t\t\tSET right_id = right_id + 2\n\t\t\t\t\tWHERE module_class = '" . $db->sql_escape($module_data['module_class']) . "'\n\t\t\t\t\t\tAND {$row['left_id']} BETWEEN left_id AND right_id";
                $db->sql_query($sql);
                $module_data['left_id'] = (int) $row['right_id'];
                $module_data['right_id'] = (int) $row['right_id'] + 1;
            } else {
                $sql = 'SELECT MAX(right_id) AS right_id
					FROM ' . MODULES_TABLE . "\n\t\t\t\t\tWHERE module_class = '" . $db->sql_escape($module_data['module_class']) . "'";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                $module_data['left_id'] = (int) $row['right_id'] + 1;
                $module_data['right_id'] = (int) $row['right_id'] + 2;
            }
            $sql = 'INSERT INTO ' . MODULES_TABLE . ' ' . $db->sql_build_array('INSERT', $module_data);
            $db->sql_query($sql);
            $module_data['module_id'] = $db->sql_nextid();
            if (!$run_inline) {
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_MODULE_ADD', false, array($this->lang_name($module_data['module_langname'])));
            }
        } else {
            $row = $this->get_module_row($module_data['module_id']);
            if ($module_data['module_basename'] && !$row['module_basename']) {
                // we're turning a category into a module
                $branch = $this->get_module_branch($module_data['module_id'], 'children', 'descending', false);
                if (sizeof($branch)) {
                    return array($user->lang['NO_CATEGORY_TO_MODULE']);
                }
            }
            if ($row['parent_id'] != $module_data['parent_id']) {
                $this->move_module($module_data['module_id'], $module_data['parent_id']);
            }
            $update_ary = $module_data;
            unset($update_ary['module_id']);
            $sql = 'UPDATE ' . MODULES_TABLE . '
				SET ' . $db->sql_build_array('UPDATE', $update_ary) . "\n\t\t\t\tWHERE module_class = '" . $db->sql_escape($module_data['module_class']) . "'\n\t\t\t\t\tAND module_id = " . (int) $module_data['module_id'];
            $db->sql_query($sql);
            if (!$run_inline) {
                $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_MODULE_EDIT', false, array($this->lang_name($module_data['module_langname'])));
            }
        }
        return array();
    }

Usage Example

Пример #1
0
    public function setUp()
    {
        global $db;
        parent::setUp();
        $this->phpbb_extension_manager = $this->get_extension_manager();
        $this->phpbb_extension_manager->enable('foo/bar');
        $modules = new acp_modules();
        $db = $this->get_db();
        $sql = 'SELECT module_id
			FROM ' . MODULES_TABLE . "\n\t\t\tWHERE module_langname = 'acp'\n\t\t\t\tAND module_class = 'ACP_CAT_DOT_MODS'";
        $result = $db->sql_query($sql);
        $module_id = (int) $db->sql_fetchfield('module_id');
        $db->sql_freeresult($result);
        $parent_data = array('module_basename' => '', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => $module_id, 'module_class' => 'acp', 'module_langname' => 'ACP_FOOBAR_TITLE', 'module_mode' => '', 'module_auth' => '');
        $modules->update_module_data($parent_data, true);
        $module_data = array('module_basename' => 'foo\\bar\\acp\\main_module', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => $parent_data['module_id'], 'module_class' => 'acp', 'module_langname' => 'ACP_FOOBAR_TITLE', 'module_mode' => 'mode', 'module_auth' => '');
        $modules->update_module_data($module_data, true);
        $parent_data = array('module_basename' => '', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => 0, 'module_class' => 'ucp', 'module_langname' => 'UCP_FOOBAR_TITLE', 'module_mode' => '', 'module_auth' => '');
        $modules->update_module_data($parent_data, true);
        $module_data = array('module_basename' => 'foo\\bar\\ucp\\main_module', 'module_enabled' => 1, 'module_display' => 1, 'parent_id' => $parent_data['module_id'], 'module_class' => 'ucp', 'module_langname' => 'UCP_FOOBAR_TITLE', 'module_mode' => 'mode', 'module_auth' => '');
        $modules->update_module_data($module_data, true);
        $this->purge_cache();
    }
All Usage Examples Of acp_modules::update_module_data