Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Разработка расширений / TYPO3 extension development (http://forum.typo3.ru/forumdisplay.php?f=38)
-   -   be_users/groups управление без actions как? (http://forum.typo3.ru/showthread.php?t=6522)

(:) 15.07.2008 09:27

be_users/groups управление без actions как?
 
всем доброго дня!
Имеем свой модуль в котором юзер может создать группы страниц.
Требуется для каждой новой группы страниц создавать группу в be_groups и затем иметь возможность добавлять в неё новых пользователей в be_users.

С идеологией варианта sys_action знаком. Но нам нужна встроенная в модуль функция совмещенная с созданием страниц. Экшн предлагает делать через свой интерфейс, в этом неудобство.

Может есть уже готовые решения для примера посмотреть. Или мысли как сделать?

заранее спасибо
Евгений

Sergey M Nikitin 18.07.2008 22:15

Пишите свой мой совет
 
У меня была задача написание визарда:
Автоматическое создание 2х уровней страниц, для каждой страницы создавалась группа fe-пользователей + дефолтовое создание структуры chc-форума. В БЕ это предельно просто, даже SQL запросы не надо писать.
PHP код:

$data['pages']['NEW_LIGA'] = array(
    
"title" => t3lib_div::_GP('liganame'),
    
"hidden" => 0,
    
"pid" => "12",
);

$data['pages']['NEW_ligaData'] = array(
        
"title" => 'data',
        
"hidden" => 0,
        
"pid" => "NEW_LIGA",
        
"doktype" => 254
);


$storagePidReMap = array();

foreach (
t3lib_div::_GP('workshopTitle') as $w){
    
$data['pages']['NEW_workshop'.$i] = array(
        
"title" => $w,
        
"hidden" => 0,
        
"pid" => "NEW_LIGA"
    
);
    
    
$data['pages']['NEW_workshopData'.$i] = array(
        
"title" => 'data',
        
"hidden" => 0,
        
"pid" => 'NEW_workshop'.$i,
        
"doktype" => 254
    
);
    
    
$data['fe_groups']['NEW_fegroup'.$i] = array(
        
"title" => $w,
        
"hidden" => 0,
        
"pid" => 'NEW_workshopData'.$i
    
);
    
    
$storagePidReMap['NEW_workshop'.$i] = 'NEW_workshopData'.$i;
    
    
$i++;
}


$category 0;
foreach (
t3lib_div::_GP('forum') as $f){
    if(
$f['category'] != ""){
        
$i++;
        
$data['tx_chcforum_category']['NEWcategory_'.$i] = array(
            
"cat_title" => $f['category'],
            
"hidden" => 0,
            
"pid" => "NEW_ligaData"
        
);
    }
    if(
$f['conference'] != ""){
        
$i++;
        
$data['tx_chcforum_conference']['NEWconference_'.$i] = array(
            
"conference_name" => $f['conference'],
            
"hidden" => 0,
            
"cat_id" => 'NEWcategory_'.($i-1),
            
"pid" => "NEW_ligaData"
        
);
    }
}

$tce t3lib_div::makeInstance('t3lib_TCEmain');
$tce->stripslashes_values 0;
$tce->start($data,array());
$tce->process_datamap();
unset(
$data);

$data['pages'][$tce->substNEWwithIDs['NEW_LIGA']] = array(
    
"storage_pid" => $tce->substNEWwithIDs['NEW_ligaData']
);

foreach (
$storagePidReMap as $k => $v){
    
$data['pages'][$tce->substNEWwithIDs[$k]] = array(
        
"storage_pid" => $tce->substNEWwithIDs[$v]
    );
}

$tce2 t3lib_div::makeInstance('t3lib_TCEmain');
$tce2->stripslashes_values 0;
$tce2->start($data,array());
$tce2->process_datamap(); 

Вот кусок кода, который вобщем-то все и делал.

см. http://typo3.org/documentation/docum....1.0/view/3/3/

(:) 29.07.2008 17:00

привет, спасибо,

есть два момента.

код добавления новой группы в be_groups нормально работает, если БЕ пользователь имеет админские права. Также, в вашем примере группы добавляются не на корневую страницу с ИД=0.

В нашей задаче требуется как раз добавлять на страницу с ИД=0, плюс пользователь не обладает админскими правами.

Sergey M Nikitin 29.07.2008 20:01

Може так ?
 
Код:

$data['pages']['NEW_ligaData'] = array(
        "title" => 'data',
        "hidden" => 0,
        "pid" => 0",
        "doktype" => 254
);


Sergey M Nikitin 29.07.2008 20:15

Сорри пропустил что он не имеет админские права
 
Можете использовать Formidable (formidable.typo3.ug) в качестве формогенератора в БЕ, единственное, читайте внимательно рассылку там есть определенные ограничение для БЕ, так как библиотека создавалась для FE. Вот к примеру как правильно надо инициализировать Formidable в БЕ

Код:

$this->oForm = t3lib_div::makeInstance("tx_ameosformidable");
$this->oForm->init(
        $this,        // reference to the current plugin object
        "EXT:prme_feusersinbe/res/users.xml" // soft-path to xml file
);
$this->content .= $this->oForm->render();
tx_ameosformidable::backendHeaders(&$this);


(:) 31.07.2008 11:49

Привет,

В коде через ТСЕмейн создаем записи в таблицах be_groups и be_users.
Если у пользователя Админские права код работает нормально.
В случае неАдмина возникают проблемы с доступом.

Система проверки прав тайпы проверяет следюущее:
1) не позволяет добавлять записи на нулевую страницу никому кроме админа.
2) При добавлениии записей не все поля принимают заданные значения.

И вобщем-то это понятно, поскольку так работает система прав.

Вопрос же в том, как сказать ТСЕМейн что мы даем неАдмину права выполнять админские действия?

Расширение Actions по сути делает именно это.

Заглянув в исходники sys_action класс class.tx_sysaction.php находим подтверждение этому.

PHP код:

...
$tce t3lib_div::makeInstance("t3lib_TCEmain");
$tce->stripslashes_values=0;
$tce->start($data,Array(),$this->BE_USER);

/****************/
$tce->admin=1;
/***************/

$tce->process_datamap();
... 

вот именно этот код
PHP код:

$tce->admin=1

позволяет задать в ТСЕМейн права админа для любой операции даже если пользователь не обладает админскими правами.

надеюсь это поможет,
привет


Часовой пояс GMT +4, время: 23:45.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot