создание секции tickets через процессоры

Интересует создание секции tickets через процессоры.
Нашел статью о процессорах в MODX — хочу применить на практике.

Пробую следующее
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

// Массив, который мы передадим в процессор, там его ловить в $scriptProperties
$processorProps = array(
);
// Массив опций для метода runProcessor
$otherProps = array(
    // Здесь указываем где лежат наши процессоры
    'processors_path' => $modx->getOption('core_path') . 'components/tickets/processors/'
);
// Запускаем
$response = $modx->runProcessor('mgr/section/create.class', $processorProps, $otherProps);
// Если ошибка
if ($response->isError()) {
    $modx->log(modX::LOG_LEVEL_ERROR, 'my error:' .$response->getMessage());
}
// И возвращаем ответ от процессора
return $response->response;
ну и в итоге мне показывает большую и жирную фигу…
Fatal error: Cannot redeclare class TicketsSectionCreateProcessor in /var/www/reg33/www/core/components/tickets/processors/mgr/section/create.class.php on line 0
Cannot redeclare class — гугл подсказал что сие есть — не могу переопределить класс
Я немного в тупике. Пните меня прошу!)
Володя
13 апреля 2014, 09:09
modx.pro
3
1 797
0
Поблагодарить автора Отправить деньги

Комментарии: 10

Василий Наумкин
13 апреля 2014, 13:15
+1
Нужно обращаться к родному процессору MODX с указанием class_key — он сам вызовет нужный процессор для этого класса и всё сделает.
$processorProps = array(
	'class_key' => 'TicketsSection',
	'template' => 15,
	'alias' => 'myTicket',
	'parent' => 0,
);
$otherProps = array();

$response = $modx->runProcessor('resource/create', $processorProps, $otherProps);
if ($response->isError()) {
    $modx->log(modX::LOG_LEVEL_ERROR, 'my error:' .$response->getMessage());
}

Это особенность всех CRC, в том числе и ресурсов Tickets и miniShop2.
    Володя
    13 апреля 2014, 14:56
    0
    c админки все нормал, код отрабатывает.
    Но если с фронта то не хватает прав — permission_denied
    Пробую следующее:
    создал mycreate.class.php
    <?php
    // Подгружаем класс системного процессора, отвечающего за создание ресурсов
    require_once MODX_CORE_PATH.'components/tickets/processors/mgr/section/create.class.php';
    
    // Создаем свой новый класс, расширяющий TicketsSectionCreate
    class myTicketsSectionCreateProcessor  extends TicketsSectionCreateProcessor{
        public $permission = 'new_document'; 
        public $contextKey = 'web';
    }
    return 'myTicketsSectionCreateProcessor';
    вызов так
    // Массив, который мы передадим в процессор, там его ловить в $scriptProperties
    $processorProps = array(
    	'class_key' => 'TicketsSection',
    	'template' => 15,
    	'alias' => 'myTicket',
    	'parent' => 0,
            'context_key' => 'web',
    	
    );
    // Массив опций для метода runProcessor
    $otherProps = array(
        // Здесь указываем где лежат наши процессоры
        'processors_path' => $modx->getOption('core_path') . 'components/tickets/processors/mgr/my/'
    );
    
    $response = $modx->runProcessor('mycreate', $processorProps, $otherProps);
    if ($response->isError()) {
        $modx->log(modX::LOG_LEVEL_ERROR, 'my error:' .$response->getMessage());
    }
    return $response->response;
    что не так делаю? или как можно обойти проверку прав для создания секции с фронта?
      Володя
      13 апреля 2014, 15:06
      0
      наверно я туплю… нужно скорее всего дать группе пользователей право на создание ресурса да?
      или это неправильно?
        Володя
        13 апреля 2014, 15:42
        0
        дал группе юзеров право на создание ресурса — заработало…
        Как правильнее? Иметь группу пользователей с таким правом или иметь группу пользователей без права на создание, и как то обойти проверку прав на создание ресурса?
          Иван Брежнев
          13 апреля 2014, 16:47
          0
          Можно попробовать наследовать modResourceCreateProcessor и либо переопределить переменную $permissions, вот так:
          public $permission = '';
          либо переопределить метод checkPermissions, чтобы он всегда возвращал true
          public function checkPermissions() {
              return true;
          }
        Кирилл Киселев
        20 марта 2017, 20:53
        0
        Меня тоже интересует этот вопрос. Есть решение?
      Иван Брежнев
      13 апреля 2014, 15:11
      0
      Василий, классно придумал с блоком «Здесь упомянуты»
        Василий Наумкин
        13 апреля 2014, 23:22
        0
        Это не я придумал, а Виталий Дощенко — директор Simple Dream =)
        Получилось прикольно, да.

        Если кто-то еще проявит интерес — могу выложить исходный код и открыть интерфейс магазина для запросов.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      10