Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Проблема с изменением опций в админке после добавления расширения

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Kreps
phpBB 1.0.0
Сообщения: 6
Стаж: 8 лет 4 месяца

Проблема с изменением опций в админке после добавления расширения

Сообщение Kreps »

Описание проблемы: Для интеграции своего сайта и форума я сделал "расширение" для авторизации пользователей через базу сайта. После переключения метода аутентификации на свой возникает странная проблема - не могу поменять 95% параметров в админке, в том числе и метод аутентификации.
Что странно - при попытке применить изменения система выдает что все ОК и все применилось, но настройки остаются прежними. После отключения "расширения" все приходит в норму... Поскольку "расширение" делал на основе чужих подобных расширений, то становится понятно что я что-то накосячил в коде... но вот где именно - в упор не вижу... собственно просьба в это самое узкое место ткнуть меня носом :D

Произведенные изменения, после которых начались неполадки: Активация собственного метода аторизации
Версия phpBB*: 3.1.6
Используемые шаблоны: prosilver
Используемые моды: собственный для авторизации
Версия PHP: 5.3.3
Используемая СУБД и её версия: PostgreSQL 8.4.8
Использовался ли поиск для решения проблемы: да
Если да, то какие запросы вы использовали: "phpbb3 cant change options in acp" и ему подобные
Каким браузером вы пользовались и есть ли проблема с другими браузерами: Опера 34, ИЕ 11, проблема наблюдалась везде
П.С. Моих изысканий хватило на то чтобы выяснить, что к моменту записи новых опций переменная, которая содержит эти самые "новые" опции, содержит старые значения

код расширения

Код: Выделить всё

<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

namespace time2060\login\auth\provider;

if (!defined('IN_PHPBB'))
{
    exit;
}


class time2060 extends \phpbb\auth\provider\base
{

    protected $passwords_manager;

    protected $phpbb_container;
    
    public function __construct(\phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\passwords\manager $passwords_manager, \phpbb\request\request $request, \phpbb\user $user, \Symfony\Component\DependencyInjection\ContainerInterface $phpbb_container, $phpbb_root_path, $php_ext)
    {
        $this->db = $db;
        $this->config = $config;
        $this->passwords_manager = $passwords_manager;
        $this->request = $request;
        $this->user = $user;
        $this->phpbb_container = $phpbb_container;
        $this->phpbb_root_path = $phpbb_root_path;
        $this->php_ext = $php_ext;
        
        // The use of this function has security issues, should be avoided for production use.
        $this->request->enable_super_globals();
        
    }


    public function init()
    {
        
        return false;
    }
    
      public function login($username, $password)
    {
        // Auth plugins get the password untrimmed.
        // For compatibility we trim() here.
        $password = trim($password);

        // do not allow empty password
        if (!$password)
        {
            return array(
                'status'    => LOGIN_ERROR_PASSWORD,
                'error_msg'    => 'NO_PASSWORD_SUPPLIED',
                'user_row'    => array('user_id' => ANONYMOUS),
            );
        }

        if (!$username)
        {
            return array(
                'status'    => LOGIN_ERROR_USERNAME,
                'error_msg'    => 'LOGIN_ERROR_USERNAME',
                'user_row'    => array('user_id' => ANONYMOUS),
            );
        }
        
        $time2060_link = pg_pconnect("host='********' dbname='*************' user='*******' password='*******'");
        if($time2060_link === false) die("Database game error");

        <= Здесь код который проверяет наличие пользователя во внешней базе и вохвращает ряд параметров учетной записи=>
        
        if(@pg_num_rows($result)==0) {
            pg_close($time2060_link);
            return array(
                'status'    => LOGIN_ERROR_PASSWORD,
                'error_msg'    => 'NO_PASSWORD_SUPPLIED',
                'user_row'    => array('user_id' => ANONYMOUS),
            );
            
        };
        
        $time2060_row = pg_fetch_row($result);
        
        pg_close($time2060_link);

        $username_clean = utf8_clean_string($username);
        
        $sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type
            FROM ' . USERS_TABLE . "
            WHERE username_clean = '" . $this->db->sql_escape($username_clean) . "'";
        $result = $this->db->sql_query($sql);
        $row = $this->db->sql_fetchrow($result);
        $this->db->sql_freeresult($result);

            if ($row)
                {
            
                    // User inactive...
                    if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE)
                    {
                        return array(
                            'status'        => LOGIN_ERROR_ACTIVE,
                            'error_msg'        => 'ACTIVE_ERROR',
                            'user_row'        => $row,
                        );
                    }

                    // Successful login... set user_login_attempts to zero...
                    return array(
                        'status'        => LOGIN_SUCCESS,
                        'error_msg'        => false,
                        'user_row'        => $row,
                    );
                }
                else
                {
                    // retrieve default group id
                    $sql = 'SELECT group_id
                        FROM ' . GROUPS_TABLE . "
                        WHERE group_name = '" . $this->db->sql_escape('REGISTERED') . "'
                            AND group_type = " . GROUP_SPECIAL;
                    $result = $this->db->sql_query($sql);
                    $row = $this->db->sql_fetchrow($result);
                    $this->db->sql_freeresult($result);

                    if (!$row)
                    {
                        trigger_error('NO_GROUP');
                    }

                    // generate user account data
                    $time2060_user_row = array(
                        'username'        => $username,
                        'user_password'    => $this->passwords_manager->hash($password),
                        'user_email'    => $time2060_row[5],
                        'group_id'        => (int) $row['group_id'],
                        'user_type'        => USER_NORMAL,
                        'user_ip'        => $this->user->ip,
                        'user_new'        => ($this->config['new_member_post_limit']) ? 1 : 0,
                    );

                    
                    // this is the user's first login so create an empty profile
                    return array(
                        'status'        => LOGIN_SUCCESS_CREATE_PROFILE,
                        'error_msg'        => false,
                        'user_row'        => $time2060_user_row,
                    );
                }
    }
}
Последний раз редактировалось Sheer 13.12.2015 20:40, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 10 лет
Благодарил (а): 41 раз
Поблагодарили: 831 раз

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение LavIgor »

Kreps, а сама авторизация новым способом работает?
Настройки пытаетесь поменять через неё?
Kreps
phpBB 1.0.0
Сообщения: 6
Стаж: 8 лет 4 месяца

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Kreps »

Сама авторизация прекрасно работает, новых пользователей тоже отлично заводит... и вообще, для рядового пользователя проблем никаких...

Все проблемы в админке... Я подозреваю, что авторизация в админку тоже проходит через новый способ авторизации... но вот в чем проблема не понятно... так как некоторые опции можно менять, например текст страницы обратной связи... но подавляющее большинство опций не меняется, хоть и показывает сообщение об успехе - похоже что в коде моего "расширения" чего-то нехватает... но вот чего - не пойму
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 10 лет
Благодарил (а): 41 раз
Поблагодарили: 831 раз

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение LavIgor »

Kreps, а в расширении есть другие файлы? Слушатель, например?
Перенесено из форума Поддержка phpBB 3.1.x в форум Для авторов (phpBB 3.1.x) 13.12.2015 20:41 модератором Sheer

Kreps
phpBB 1.0.0
Сообщения: 6
Стаж: 8 лет 4 месяца

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Kreps »

всего 4 файла
1. аутентификатор - код в первом посте
2. composer.json

Код: Выделить всё

{
	"name": "time2060/login",
	"type": "phpbb-extension",
	"description": "Time2060 Authentication plugin",
	"version": "0.0.1",
	"time": "2015-12-12",
	"license": "XXX",
	"require-dev": {
		"phpbb/epv": "dev-master"
	},
	"authors": [{
			"name": "NoNameOne",
			"email": "admin@time2060.ru",
			"role": "Admin"
	
		}],
	"require": {
        "php": ">=5.3.3"
    },	
	"extra": {
		"display-name": "Time2060 Auth Plugin",
		"soft-require": {
			"phpbb/phpbb": "3.1.*@dev"
		}
	}
}
3. ext.php - с кодом переключения метода аутентификации на db при отключении расширения

Код: Выделить всё

<?php

namespace time2060\login;

class ext extends \phpbb\extension\base
{
    // override disable step
    function disable_step($old_state)
    {
        $config = $this->container->get('config');
            
        if ($config['auth_method'] == 'time2060')
        {
            $config->set('auth_method', 'db');
        }
        
        return false;
    }
}
4. services.yml

Код: Выделить всё

services:
   auth.provider.time2060:
      class: time2060\login\auth\provider\time2060
      arguments:
          - @dbal.conn
          - @config
          - @passwords.manager
          - @request
          - @user
          - @service_container
          - %core.root_path%
          - %core.php_ext%
      tags:
          - { name: auth.provider }
Последний раз редактировалось Sheer 13.12.2015 22:14, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Sheer »

Kreps, для размещения фрагментов кода и облегчения чтения созданы специальные bb-коды

Код: Выделить всё

 и [code=php] с подсветкой синтаксиса php
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Kreps
phpBB 1.0.0
Сообщения: 6
Стаж: 8 лет 4 месяца

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Kreps »

Sheer, спасибо. Исправлюсь :)
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Sheer »

Kreps писал(а): После переключения метода аутентификации на свой
Э.... а может проще на вместо своего использовать один из предлагаемых phpBB?
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Kreps
phpBB 1.0.0
Сообщения: 6
Стаж: 8 лет 4 месяца

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Kreps »

Sheer писал(а): а может проще на вместо своего использовать один из предлагаемых phpBB?
У меня phpBB предлагает 4 "стандартных" способа - DB, LDAP, Apache и OAuth. На текущий момент ни один из них не позволяет (как мне кажется) связать пользователей сайта с форумом...
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Sheer »

Почему? Вот для 3.0 есть [FAQ RC] Интеграция входа на конференцию с сайтом
Может стоит копнуть в эту сторону?
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Kreps
phpBB 1.0.0
Сообщения: 6
Стаж: 8 лет 4 месяца

Re: Проблема с изменением опций в админке после добавления расширения

Сообщение Kreps »

В общем дело странное... Изыскания дали следующее:

1. встраивание своего кода в родной метод аутентификации DB (не как расширение) - все работает правильно, проблем нет никаких
2. Использование своего расширения на чистой установке с дефолтной базой - все так же работает нормально, но стоит подсунуть рабочую базу - снова проблемы

Отправлено спустя 1 час 13 минут :
Проблема решена.

Суть проблемы - лишние параметры и код.

Как было правильно (если кто-то решит прогуляться по моим граблям)

1. Конструктор класса для моих задач достаточен в таком виде

Код: Выделить всё

public function __construct(\phpbb\db\driver\driver_interface $db)
    {
        $this->db = $db;        
    }
2. соответственно конфиг тоже сокращен
в моем случае достаточно так:

Код: Выделить всё

   auth.provider.time2060:
      class: time2060\login\auth\provider\time2060
      arguments:
          - @dbal.conn
      tags:
          - { name: auth.provider }    
Спасибо всем кто потратил на меня время и прошу прощения за то что его отнимал...
Проблема решена, свой вариант решения выложил... думаю тему можно сдавать в архив :) :)

Вернуться в «Для разработчиков»