+1.13
135 читателей, 229 топиков

Костыль для защиты документа в зависимости от группы пользователя

В версиях до 1.2.1-d9.1.0 почему-то не хотели работать права пользователей. Для решения этой проблемы можно обновиться до последней версии, либо присобачить нижеследующее решение.

Лечение:

В файле manager/includes/secure_web_documents.inc.php комментим строчку 26:
$modx->db->update('privateweb = 1', $modx->getFullTableName("site_content"), "id IN (".implode(", ",$ids).")");


Выполняем запрос к mySql:
Update `modx_site_contnet` set privateweb=0

Обратите внимание, что префикс может быть иным

Далее создаем плагин на OnWebPageInit, вставляем:
$e = $modx->event;

if ($e->name == 'OnWebPageInit') {
	if ($_SESSION['mgrInternalKey']) return;
	$currentID = $modx->documentIdentifier;
	$modx->db->query('Update '.$modx->getFullTableName('site_content').' set privateweb=0 where id='.$currentID); 
	
	$errorPage = $modx->getConfig('unauthorized_page');
	$errorPage = $modx->makeUrl($errorPage);
	$sql = 'Select GROUP_CONCAT(`document_group`) from '.$modx->getFullTableName('document_groups').' where `document`='.$currentID;
	//echo $sql;
	//exit();
	$dg = $modx->db->getValue($sql);
	if (!$dg) return;
	if (!$_SESSION['webInternalKey']) $modx->sendRedirect($errorPage);
	
	$wg = $modx->db->getValue('Select GROUP_CONCAT(`webgroup`) from '.$modx->getFullTableName('webgroup_access').' where `documentgroup` in ('.$dg.')');
	
	$access = $modx->db->getValue('Select count(*) from '.$modx->getFullTableName('web_groups').' where `webgroup` in ('.$wg.') and `webuser`='.$_SESSION['webInternalKey']);
	if (!$access) $modx->sendRedirect($errorPage);
	
}

Должно заработать. Проверял на сайте с 1.2-d8.1.4

DocInfo && published

Столкнулся с необходимостью с помощью сниппета доставать поля из неопубликованных ресурсов, но как оказалось DocInfo не имеет входящего параметра published и по умолчанию достает поля только из опубликованных ресурсов. Так как сниппет построен на основе методов getPageInfo, getTemplateVarOutput, getTemplateVar которые принимают входящим параметром published — немного доработал код сниппета DocInfo чтобы можно было указывать опубликован ли ресурс, пример:
[[DocInfo? &docid=`10` &field=`tvname` &published=`0`]]
код:
<?php
/**
 * DocInfo
 *
 * @category  parser
 * @version   0.4
 * @license     GNU General Public License (GPL), http://www.gnu.org/copyleft/gpl.html
 * @param string $field Значение какого поля необходимо достать
 * @param int $docid ID документа
 * @param int $tv является ли поле TV параметром (0 - нет || 1 - да)
 * @param int $published является ли ресурс опубликованным (0 - нет || 1 - да || all - оба варианта) добавлено GTX59
 * @param int $render Преобразовывать ли значение TV параметра в соответствии с его визуальным компонентом
 * @return string Значение поля документа или его TV параметра
 * @author akool, Agel_Nash <Agel_Nash@xaker.ru>
 *
 * @TODO getTemplateVarOutput не применяет визуальный компонент к TV параметрам у которых значение совпадает со значением по умолчанию
 * 
 * @example
*       [[DocInfo? &docid=`15` &field=`pagetitle`]]
*       [[DocInfo? &docid=`10` &field=`tvname`]]
*       [[DocInfo? &docid=`3` &field=`tvname` &render=`1`]]
*/
if(!defined('MODX_BASE_PATH')){die('What are you doing? Get out of here!');}
$default_field = array('type','contentType','pagetitle','longtitle','description','alias','link_attributes','published','pub_date','unpub_date','parent','isfolder','introtext','content','richtext','template','menuindex','searchable','cacheable','createdon','createdby','editedon','editedby','deleted','deletedon','deletedby','publishedon','publishedby','menutitle','donthit','haskeywords','hasmetatags','privateweb','privatemgr','content_dispo','hidemenu','alias_visible');
$docid = (isset($docid) && (int)$docid>0) ? (int)$docid : $modx->documentIdentifier;
$field = (isset($field)) ? $field : 'pagetitle';
$render = (isset($render)) ? $render : 0;
$published = (isset($published) && in_array($published, array(0,1,'all'))) ? $published : 1;
$output = '';
if (in_array($field, $default_field)) {
    $doc = $modx->getPageInfo($docid, $published, $field);
    $output = $doc[$field];
}else{
    if(isset($render) && 1==$render){
        $tv = $modx->getTemplateVarOutput($field, $docid, $published);
        $output = $tv[$field];
    }else{
        $tv = $modx->getTemplateVar($field,'*',$docid, $published);
        $output = ($tv['value']!='') ? $tv['value'] : $tv['defaultText'];
    }
}
return $output;

Генерация ключевиков по содержимому. (snippet)

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

Автор сниппета — liberpro . Сниппет имеет возможность обработки tv, но за донат :)

оригинал топика

[!keyw? &id=`2` &fields=`longtitle,alias` &min=`5` &limit=`10`!]



Читать дальше →

Скрываем дочерние документы в дереве ресурсов. Плагин TreeAction.

Знакомая многим настройка для скрытия дочерних ресурсов в дереве у определённых документов пропала после выхода одного из обновлений системы. А похоже, что этот функционал востребован. И дело даже не в скорости работы админки, а просто в удобстве отображения большого списка документов.

Как раз дошли руки до этой задачи, и получился плагин использующий стандартные (хоть скрытые и неиспользуемые) функции системы.

Читать дальше →

catalogfill запуск по cron крон

Добрый день!

Кто-нибудь настраивал catalogfill для импорта по крону? Подскажите как сделать? Делал пару лет назад сам делал, но забыл, сейчас вспомнить и разобраться не получается(.
Спасибо!

FormLister 1.5: новые капчи

Писать про изменения и новые баги улучшения я не буду, потому как это не очень интересно — можно глянуть здесь. Главное, что добавлена поддержка Twig, чтобы облегчить работу со сложными формами и переделана работа с капчами, про капчи и напишу.

Читать дальше →

MODX.Evolution.updateNotify - Обновление Evo в пару кликов


Обновил плагин добавив в него функционал обновления.

Как работает:
Сравнивает текущую версию и версию на GitHub, если появилась новая версия показывает в админке информер. По клику обновить до версии # скачивается свежая версия, из которой удаляются файлы:
/assets/cache/siteManager.php, .htaccess, robots.txt
что б не затереть изменения которые в них могли внести.
И после чего запускается Install (оттуда автоматически удаляются все шаблоны, тв и чанки), так же что б не было сюрпризов.

— так же работает если изменили папку Manager на другую.
p.s. в Планах сделать мультиязычную версию.

Скачать можно тут: extras.evolution-cms.com/packages/core/modxupdatenotifer.html
Или установить через Extras

Думаю после тестирования будет отправлен в плагины по умолчанию.

Telegram bot&MODX

0. Кому и зачем это нужно


Вообще никому. И незачем.

Но если вдруг кому-то придет в голову подключить какой-то магазин, написанный на Evo, к мессенжеру Telegram, то я скажу — это вполне возможно.

Речь сейчас не идет о чат-помощнике на сайте. Подобных решений в сети достаточно. Мне довелось немного попробовать как работает полноценный бот с базовой установкой MODX Evo. Ожидаемо все
Читать дальше →

modxAccount - личный кабинет веб пользователя

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

Долго разбирался с параметрами аналогичных сниппетов для регистрации, все они в чём то, да не устраивали, чтобы расширить возможности кабинета, приходилось читать простыни кода и запоминать всю логику. Но намучавшись, решил, что своё решение будет намного быстрее сделать, нежели переделать чужое.

Dmi3yy порекомендовал обратить внимание на класс modUsers от Agel_Nash. Из этого класса и позаимствовал некоторые методы, для упрощения работы.

Что может modxAccount.
Регистрация пользователя, с использованием всех доступных полей юзера, плюс, можно создавать свои настройки юзера в таблице web_user_settings, добавление аватарки, капча.
Восстановление пароля.
Личный кабинет.
Форма входа.

Читать дальше →