Массовая рассылка писем

Здравствуйте.
Думал как расшевелить участников на сайте, чтобы они по чаще заходили и просматривали новости.
Тут мне пришла идея рассылать новости сайта, а еще эффективнее лучшие новости. Начал искать решение и наткнулся на бесплатный плагин «Mailing (большие рассылки)» + Плагин «LsDigest (дайджест лучших топиков)»
Установил Mailing и тут вылезла ошибка при запуске крона:

Warning: require_once(/var/www/zaicev/data/www/site.org/common/config/loader.php) [function.require-once]: failed to open stream: No such file or directory in /var/www/zaicev/data/www/site.org/common/plugins/mailing/include/cron/send-mail.php on line 20

Fatal error: require_once() [function.require]: Failed opening required '/var/www/zaicev/data/www/site.org/common/config/loader.php' (include_path='.:/usr/share/php:/usr/share/pear:/var/www/zaicev/data/www/site.org/common') in /var/www/zaicev/data/www/site.org/common/plugins/mailing/include/cron/send-mail.php on line 20

Может кто-то уже адаптировал это плагин под altocms 1.х ?

Похожие статьи

  • Нужен плагин почтовая рассылка по зарегистрированным пользователям
    Необходимо адаптировать под alto 1.1.28 2 плагина «Mailing (большие рассылки)» + Плагин «LsDigest (дайджест лучших топиков)» (https://altocms.ru/708.html), а лучше на их основе создать новый самостоятельный плагин...
  • Рассылка
    Подскажите пожалуйста, как сделать массовую рассылку некоторых сообщений, к примеру, об изменениях на сайте или другой важной информации на емайлы пользователей? У меня версия 1.0.10.2
  • E-mail рассылки
    Здравствуйте, подскажите есть ли модуль email рассылок по зарегистрированной в системе базе email адресов? Например как в opencart, если кто сталкивался с ним. P.S.: Mailing плагин встречал, там какие то заморочки с...
  • Еще один баг в админке
    Здравствуйте! в версии 0.9.6 обнаружил еще один баг в админке: при попытке послать всем пользователям письмо (админка-->все пользователи-->написать письмо-->общее сообщение) получаю вот такую штуку:...

110 комментариев

0
Вот, вот… Сам горюю по этому поводу. На новой версии Альто не хочет работать, а так не хватает возможности рассылать.
0
Подозреваю, что просто нет доступа у PHP к этим директориям: '.:/usr/share/php:/usr/share/pear:/var/www/zaicev/data/www/site.org/common'
По-идее, вам нужно зайти в конфиг виртуального хоста, и в секцию
php_admin_value open_basedir
добавить эти директории, к которым пытается получить доступ ваш скрипт.

Такая ошибка часто возникала еще на ранних версиях LS. Приходилось заходить и руками править конф. файл хостов.
0
Как правильно внести несколько директорий в эту секуцию — смотрите в поиске. Так же, после не забудьте перезагрузить апач.
0
Кажется понял, вот этого файла точно нет: loader.php
Warning: require_once(/var/www/zaicev/data/www/site.org/common/config/loader.php
Есть догадки, что это за файл?
0
в версии 0.9.7.1 этот файл одним из первых подгружался. Наверное, в версии 1.0 от него либо избавились либо перенесли в другое место. Тут нужна тогда просто ручная адаптация плагина этого вашего. Какую-то бОльшую информацию я вам дать не смогу, ибо нужно самому разбираться в конкретно вашей проблеме.
+1
В самом начале крон-файла идут такие строки:
$sDirRoot = dirname(realpath((dirname(__FILE__)) . "/../../../"));
set_include_path(get_include_path() . PATH_SEPARATOR . $sDirRoot);
chdir($sDirRoot);

require_once($sDirRoot . "/config/loader.php");
require_once($sDirRoot . "/engine/classes/Cron.class.php");
Их надо заменить на такие:
defined('ALTO_DIR') || define('ALTO_DIR', dirname(realpath((dirname(__FILE__)) . "/../../../")));
set_include_path(get_include_path() . PATH_SEPARATOR . ALTO_DIR);
chdir(ALTO_DIR);

require_once(ALTO_DIR . '/engine/loader.php');
require_once(ALTO_DIR . '/engine/classes/abstract/Cron.class.php');
Должно помочь
0
К сожалению при запуске ругается
Exited with return code = 255
0
А крон-файл, который в самом движке идет, он работает? Я про common/include/cron/notify.php (только освежить его надо с гитхаба)
0
Нет, еще и лицензию приплел на кошелек зачем то при запуске
E_CORE_ERROR [16] The license file /var/www/iqtrader/data/www/iqtraders.ru/common/plugins/purse/license.txt for /var/www/iqtrader/data/www/iqtraders.ru/common/plugins/purse/classes/hooks/HookDonate.class.php is not valid for this server.
See details in error.log Exited with return code = 255
0
При запуске инициализируются все плагины. Я так понимаю, плагин кошелек у вас куплен на один домен, а экспериментируете на другом. Поэтому плагин кошелек ругается, и вполне возможно, что из-за этого и не проходит выполнение крона. Отключите его на тестовом домене
0
Это был какой то глюк, плагин куплен на этот домен.
Сейчас при запуске так и выдает 255 ошибку.
Путь к скрипту
/usr/bin/php -q /var/www/iqtrader/data/www/iqtraders.ru/common/include/cron/notify.php
0
у меня идентичная проблема, не могу запустить кроном файлы notify.php, send-mail.php
0
Надо нам значит упрашивать Вадима наладить это дело
+2
Извиняюсь что вмешиваюсь. Взял текущую версию альто с гит. Поставил плагин Mailing. Поменял первые строки на
defined('ALTO_DIR') || define('ALTO_DIR', dirname(realpath((dirname(__FILE__)) . "/../../../../")));
set_include_path(get_include_path() . PATH_SEPARATOR . ALTO_DIR);
chdir(ALTO_DIR);

require_once(ALTO_DIR . '/engine/loader.php');
require_once(ALTO_DIR . '/engine/classes/abstract/Cron.class.php');
у меня получилось на одну больше "../" чем у Вадима. Собственно все работает. И при запуске скрипта из браузера и через командную строку и через крон.

В кроне это выглядит как (время конечно свое поставьте)
* *    * * *   root    /usr/bin/php5 /www/site.ru/common/plugins/mailing/include/cron/send-mail.php
0
Что значит «вмешиваюсь»? Это не вмешательство, а помощь! За что тебе огромное спасибо!
0
Помощь, это когда совет помогает. Но я в этом не уверен.
Мне не удалось добиться появления 255 ошибки о которой все пишут.
0
Нее, нифига. Выползает ошибка 255
Я правильно понимаю, что следует только изменить код в файле по пути www/site.ru/common/plugins/mailing/include/cron/send-mail.php и все?
0
Ага, мне этого хватило
0
Для начала надо убедиться, что сам по себе скрипт рабочий, и без ошибок отрабатывает при вызове через браузер. Но перед этим отключить запреты в .htaccess, если они есть (а после тестов не забыть их включить).

Если все ОК, то убедиться, что PHP-скрипт может отрабатываться из крона — и командная строка задана верно, и прав хватает. Для этого создать простой php-файл с одной сторокой:
<?php echo 'hello';
положить этот файл в ту же папку, где лежит send-mail.php, поставить на него те же права и владельца, и прописать его в кроне или через SSH запустить. Если ошибка повторится, то проблема не в плагине и не в движке, а в настройках сайта/сервера/правах и т.д.
+1
я уже смотрел у Pring . Из командной строки скрипт выполняется успешно. Вроде в крон задание добавляется под тем же пользователем. Хочу узнать где люди находят 255 ошибку =)
0
Да, действительно рассылка работает если создавать ее из под меню сайта, про при попытке запуска скрипка из под ISPManager выдает злосчастную ошибку. Поэтому не удается проверить работает ли плагин LsDigest из за невозможности принудительно запустить скрипт в ISPmanager
0
Значит, что имеем: из командной строки скрипт запускается без проблем, а если задавать запуск через крон из ISPManager, то возникает ошибка (а где она, кстати, видна эта ошибка? в каких-то логах?).

Мой совет: пусть Klaus вам даст точную командную строку, которой он запускал скрипт, и обращайтесь уже в саппорт хостера, мол, так и так, вот такой командной строкой все работает, а вот так я задаю в ISPManager — и не работает. Что, мол, за фигня?
0
А мне кажется там еще лучше.
Ошибка появляется при запуске задания из isp manager ( т.е. сам крон работает, а вот принудительное выполнение задания ни в какую).

Я не понимаю. При этом сам скрипт запускается, даже при принудительном запуске, а вот на строке появляется эта 255 ошибка
$app = new SendMailingNotifies($sLockFilePath);

Может там другой php запускается, где не работает правильно ioncube, не знаю
0
т.е. сам крон работает, а вот принудительное выполнение задания ни в какую
Крон работает? Если в таблице крона прописать запуск скрипта, то он работает без ошибок? Ну тогда и фиг с ним, с принудительным запуском, он же только для тестов. Главное, чтоб через крон работало все
0
через крон работает, я делал вывод его работы в файл, все отрабатывает. Проблема только с принудительным запуском
0
Хостер говорит что из за этой фигни
PHP Fatal error:
The license file /var/www/site/data/www/site.ru/common/plugins/purse/license.txt
for /var/www/site/data/www/site.ru/common/plugins/purse/classes/hooks/HookDonate.class.php
is not valid for this server.
in Unknown on line 0

Хотя плагин я приобретал для этого домена.
П\с этот кошелек уже в печенках сидит и у меня и у Вадима наверное))
Отредактирован:
0
Я скажу что аналогичный плагин не намного лучше, но там хотя бы с лицензией заморочек нет.
0
Вообщем действительно проблема была из за Кошелька, отключил все заработало
0
Видимо, при запуске из панели плагин не получает информации о домене, а потому и возмущается, что лицензия невалидная
0
Удивительно, что на 9-ой версии Альто таких проблем не было
0
Проделал как описано в топике, на версии 1.0.7 при активации плагина mailing вылетает такая ошибка:
SQL Error: Can't create table 'sovunion.#sql-d34_225ee7' (errno: 121) at /....site.ru/engine/classes/modules/database/Database.class.php line 291 — Array ( [code] => 1005 [message] => Can't create table 'sovunion.#sql-d34_225ee7' (errno: 121) [query] => ALTER TABLE `prefix_mailing` ADD CONSTRAINT `prefix_mailing_ibfk_1` FOREIGN KEY (`send_by_user_id`) REFERENCES `prefix_user` (`user_id`) [context] => /.....site.ru/engine/classes/modules/database/Database.class.php line 291 )

В файле create-mailing-digest.php в папке cron плагина проделал также по аналогии 5 строк.
При активации плагина Lsdigest выдает внутри админки красным
Ошибка:
ACTION.ADMIN.PLUGINS_ACTIVATION_REQUIRES_ERROR

У кого нибудь получилось настроить эти два плагина под Alto 1.0.7?
+1
Если не ошибаюсь была похожая проблема. Помог как всегда Klaus ) Вот его цитата
Потому что при установке эти ключи уже создавались. При правильном отключении плагина, они должны были удалиться. При повторной активации ключи бы создались бы заново. А так выглядит будто вы плагин выключили каким-то способом минуя удаление таблиц из базы, вот система и ругается что не может опять создать теже ключи.
Можете активировать плагин просто прописав его название в plugins.dat либо в папке плагина очистить файл activate.sql активировать плагин и вернуть файл в исходное состояние
0
Спасибо огромное, видать когда без модификации строк пытался активировать плагин таблицы и прописались в базу. Удалил их а также дополнительные столбцы в таблице user и активировалось нормально. Lsdigest тоже после этого активировался нормально. Осталось вспомнить как теперь настроить все:)
0
Вручную запустил задания, все отработало. Осталась маленькая загвоздка, захожу админом в сообщения — список рассылок нормально отображается, а вот нажимаю на «Рассылка сообщений» — выводится сообщение об ошибке:
Exception: Unable to load template file 'window_load_img.tpl' in '/.....site.ru/common/plugins/mailing/templates/skin/default/actions/ActionMailing/main.tpl'

Всем папкам внутри папки plugins рекурсивно заданы права 777. Подскажите пожалуйста светлые головы в чем может быть проблема?
+3
В указанном файле поменяйте
{include file='window_load_img.tpl' sToLoad=$sImgToLoad}

на
{include_once file='modals/modal.upload_img.tpl' sToLoad=$sImgToLoad}
+3
Николай спасибо огромное! Ты чудесный спаситель!
0
Так до конца не получилось настроить. Теперь такая хрень, в админке нажимаю ссылку «Рассылка сообщений» вылазит такой редактор редакторЭто если визуальный редактор. Если включить markitup — то просто поле ввода текста, а панель с кнопками отсутствует. Кто нибудь настраивал ребята?
+1
Я пробовал. Но — не для 1.0.7, а для 1.0.8 (если что).
Файл main.tpl в акшене скина. Во-первых, находим и добавляем ему class
class="form-control js-editor-wysiwyg js-editor-markitup"

Собственно, чтобы получилось так:
<textarea name="talk_text" id="talk_text" rows="12" class="form-control js-editor-wysiwyg js-editor-markitup">{$_aRequest.talk_text}</textarea>

Да и весь код от
{if $oConfig->GetValue('view.tinymce')}
...

до
...{/if}

— примерно от 6-той по 33-ю строки можно заменить на это
{include file='commons/common.editor.tpl' sImgToLoad='wall-text' sSettingsTinymce='ls.settings.getTinymceComment()' sSettingsMarkitup='ls.settings.getMarkitupComment()'}

Тогда подключение modals/modal.upload_img.tpl не потребуется…

Далее
<input type="hidden" name="security_ls_key" value="{$LIVESTREET_SECURITY_KEY}" />

заменить на
<input type="hidden" name="security_ls_key" value="{$ALTO_SECURITY_KEY}" />

Всё это (вместе с содержимым) можно вырезать
{if $oConfig->GetValue('view.tinymce')}... тут толпа кнопок ...{/if}

— строки примерно от 46-той по 71-ю.
______________
Чё-то меня понесло… В общем, добавьте класс в textarea :)
0
Проделал как описано… нулевой результат:( Кнопок нет ни в markitup ни в визуальном. Удалял и между
{if $oConfig->GetValue('view.tinymce')}....{/if}

и включительно с
{if $oConfig->GetValue('view.tinymce')}....{/if}

textarea отсюда скопировал, заменил то что было, <input type аналогично… Почему то не сработало.
+1
Приеду домой (часа через два-три) — попробуем разобраться.
Я допиливал плагин в комплексе и последовательно… По этому мог просто не обратить внимания на взаимосвязи отдельных шаблонов. Кстати, у меня тоже походу будет вопрос… (не хватило тяму).
+1
Юрий, прошу прощения, но так наверное будет проще: mailing.git
+1
Спасибо огромное, заработало! Единственно, я почему то не обнаружил в Ваших файлах вот этот, plugins/mailing/include/cron/send-mail.php
Поэтому я оставил свои файлы, а сверху «накатил» Ваши. Теперь редакторы выводятся в любом режиме. Спасибо огромное.
+1
Ой, точно! Проглючил :)
(добавил файл)
0
Каков сейчас статус этого репозитория, можно брать, плагин рабочий?
0
Статус тот же. Я уже не помню допиливал ли я его у себя, но у нас работает замечательно. Ставьте, пробуйте. Если что, пишите, попробуем разобраться.
0
Понял, спасибо. Может его в каталог?
0
Может его в каталог?
Это не ко мне. Понятия не имею, как эти вещи решаются.
Думаю, на этот вопрос может дать однозначный ответ только сам автор плагина.
0
Насколько я понимаю так уже делалось например с плагином баннероид altocms.ru/addons/item/82/. Плагин бесплатный, лицензия GPL. Это означает что вы можете его исправить и распространять под той же лицензией (и конечно бесплатно). Вопрос скорее организационный чем какой-то принципиальный, зато его решение поможет многим.
Отредактирован:
0
Поставил. Активировал. Скопировал файлы шаблона из папки experience в папку brand, ничего не менял, в разделе личных сообщений появилась вкладка «рассылка», отображается вроде сносно, редактор подцепился, галочки есть. Пока сам функционал не проверял.

Однако после сброса кэша на главной странице вместо виджетов «прямой эфир», «блоги», «теги» выводится сообщение об ошибке

(Возьму более полное из лога, на странице более короткое)

[LOG:1427309365.583-551303358E743][2015-03-25 21:49:25][PID:12982][ERROR][[
E_ERROR [1] Call to a member function getBlog() on a non-object (/var/www/example.com/engine/libs/Smarty/libs/sysplugins/smarty_internal_templatebase.php(157): eval()'d code on line 44)
— call stack — Func::_callStackError() in /var/www/example.com/engine/include/Func.php on line 147
Func::_errorLog() in /var/www/example.com/engine/include/Func.php on line 274
Func::_errorHandler() in /var/www/example.com/engine/include/Func.php on line 69
Func::done()
— end — ]][END:1427309365.583-551303358E743]

[LOG:1427309373.721-5513033DAFF5E][2015-03-25 21:49:33][PID:2373][ERROR][[
E_ERROR [1] Call to a member function getBlog() on a non-object (/var/www/example.com/_tmp/templates/brand-light/compiled/light^6edba5d50b3356b0d4b878f9ce6a117ea7b77cb5.file.widget.stream_comment.tpl.php on line 44)
— call stack — Func::_callStackError() in /var/www/example.com/engine/include/Func.php on line 147
Func::_errorLog() in /var/www/example.com/engine/include/Func.php on line 274
Func::_errorHandler() in /var/www/example.com/engine/include/Func.php on line 69
Func::done()
— end — ]][END:1427309373.721-5513033DAFF5E]

А вот что находится по указанной строчке (/var/www/example.com/_tmp/templates/brand-light/compiled/light^6edba5d50b3356b0d4b878f9ce6a117ea7b77cb5.file.widget.stream_comment.tpl.php on line 44)

<?php $_smarty_tpl->tpl_vars['oBlog'] = new Smarty_variable($_smarty_tpl->tpl_vars['oTopic']->value->getBlog(), null, 0);?>
0
Это врядли плагин, скорее это последствия ошибки при удалении пользователя что вы отписал на github. Может удаленный пользователь был автором топика, или он был последним прокоментировавшим что-то и должен был быть в прямом эфире.
0
Хммм… а как узнать?
0
Все, удалил связанные комментарии. Вопрос снимается.
Отредактирован:
0
Активировал плагин, появились две дополнительные ссылке в разделе сообщения, но при переходе по любой из них меня перенаправляет на страницу входа в почту хостера. Подскажите пожалуйста где и что нужно поправить?
0
Видел данный плагин на трех сайтах альто. Такой проблемы не встречал ни разу
0
Ну разве что адрес посты вашего хостера совпадает с адресом типа: ваш_сайт.ru/mailing
0
Проверил, совпадает. При отключенном плагине все равно идет редирект на почту. Проверил и на другом домене с другой CMS припаркованном тут же, то же самое. И куда теперь копать, где настройки нужно менять?
0
Думается написать в тех.поддержку с просьбой убрать этот редирект будет проще (или может где в панели управления хостингом можно это отключить). Иначе придется много ссылок править
0
Написал хостеру, обещали помочь. Спасибо всем за помощь
0
Вопрос к тем кто пользовался, настраивал плагин Ls Digest. Вижу в языковом файле есть возможность отписаться. Но вот как она работает? В письме ссылки вроде на отписку не вставляются.
Отредактирован:
0
Помнится там была проблема в том что отсутствовал метод getUserNoDigestHash
Я решил его созданием файла User.entity.class.php в плагине mailing со следующим кодом
<?php
class PluginMailing_ModuleUser_EntityUser extends PluginMailing_Inherit_ModuleUser_EntityUser {

 
	public function getUserNoDigestHash() { 
		return md5(Config::Get('module.security.hash').$this->getMail());
	}
	
}

?>
0
Это нужно еще одним плагином переопределить, или прям там создать?
И как тогда будет выглядеть вывод url для отписывания в шаблон?
0
можно создать прям там, только не забудьте подключить entity в PluginMailing.class.php
и нужно еще раскомментировать 170 строку (без неё чуда не получится) github.com/orthograf/mailing/blob/master/classes/modules/mailing/Mailing.class.php
0
Спасибо, а зачем нужен
generate-unsub-hash.php?

Не могу понять никак…
0
В теории, его нужно ставить в cron и он будет генерить хэши пользователям. Хотя при этом всеравно нигде не описан метод getUserNoDigestHash и черт его занет как он получит хэши.

Тут же все дело в безопасности, вы же не хотите чтобы кто-то отписал вас без вашего ведома.
0
Так вопросов сразу куча))

1. Т.е. я правильно понимаю, что по задумке создателей плагина, эти хеши генерятся отдельно скриптом и куда-то кладутся в БД, в специальное поле таблицы users, или как? Не пойму смысл этого отдельного скрипта.

2. С вашим решением хэши будут генериться сразу при создании рассылки? Каждый раз перезаписываться при создании рассылки?

3. Этот механизм отписки затрагивает все рассылки или только Digest? просто в БД поле называется user_no_digest_hash.

4. И еще вопрос в итоге как получить url отписки — он сам сгенерится и добавится?
0
1. По задумке хэши генерятся, произвольно

2. мои скриптом хэш будет генерироватсья при обращении (код выше, хэш генерируется на основе почты пользователя и соли)

3. механизм относится только к Digest

4. url отписки генерируется в 170 строке что я писал выше
0
2. мои скриптом хэш будет генерироватсья при обращении (код выше, хэш генерируется на основе почты пользователя и соли)

Ну а обращение в какой момент. Кого к кому обращение? При создании рассылки дергается метод, создается хэш и кладется в поле user_no_digest_hash БД?

Если это только для дайджеста, то зачем каждый раз генерить заново? Значит это должно только при создании дайджетста происходить, или я что-то не понимаю.
0
При обращении к методу. Никто не будет ничего писать в таблицу, я не понимаю зачем вообще писать в таблицу пользователю хэш для отписки от рассылок дайджеста. Если можно этот хэш получать просто оперируя данными пользователя.

Ну хотите делайте как предусмотрено плагином, генерируйте по какому-то расписанию, или как оно там должно быть. Я этот механизм не понял
0
Так я не говорю как должно быть я пытаюсь разобраться. Ок, понял что с вашим решением хэш не сохраняется, я этого не понял.

А как сделать вот это
не забудьте подключить entity в PluginMailing.class.php
0
Ну вы же уже опытный человек должны быть =)
В Inherits нужно добавить
public $aInherits = array(
        ......
		'entity' => array(
            'ModuleUser_EntityUser' => '_ModuleUser_EntityUser',
        )
    );
+1
я так и подумал но решил спросить))
0
Эммм…

Class 'PluginSitemap_Inherit_ModuleUser_EntityUser' not found in /var/www/example.com/common/plugins/sitemap/classes/modules/user/entity/User.entity.class.php

o_O
0
О как, круто. Кстати тоже бывает подобное. При активации плагинов и решается перестановкой плагинов местами в plugin.dat. А вот почему так происходит нам лучше всего наверно сможет объяснить Вадим.
0
Что-то не так. Перестановка не помогает, начинает ругаться на другой плагин.

Вот что я сделал

В /mailing/classes/modules/mailing/entity/User.entity.class.php

<?php
class PluginMailing_ModuleUser_EntityUser extends PluginMailing_Inherit_ModuleUser_EntityUser {


        public function getUserNoDigestHash() {
                return md5(Config::Get('module.security.hash').$this->getMail());
        }

}

?>


В PluginMailing.class.php

public $aInherits = array(
        'mapper' => array(
            'ModuleTalk_MapperTalk' => '_ModuleTalk_MapperTalk',
            'ModuleUser_MapperUser' => '_ModuleUser_MapperUser'
            ),
        'module' => array(
            'ModuleUser' => '_ModuleUser',

        ),

        'entity' => array(
            'ModuleUser_EntityUser' => '_ModuleUser_EntityUser',
        )

    );
Отредактирован:
0
На мой взгляд все правильно, единственное можно попробовать написать
'entity' => array(
            'ModuleUser_EntityUser'
        )
0
PluginMailing_ModuleUser_EntityUser — ???

PluginMailing_ModuleMailing_EntityUser — не?

Несоответствие папки и класса
Отредактирован:
0
*facepalm*
/mailing/classes/modules/mailing/entity/User.entity.class.php
Ну почему в каталоге mailing? Каталог user нужен вам.

Чтобы решалось перестановкой встречал раза два-три. Каждый раз думал что это из-за разного способа указания в Inherits
0
Я уже нашел что директория не та, и попробовал переместить. В сообщении об ошибке теперь правильный файл, но почему

Class 'PluginMailing_Inherit_ModuleUser_EntityUser' not found in

?
0
Я не знаю, специально у себя на тестовом сайте активировал, вообще никаких ошибок. А подобной ошибки не встречал.
0
Я ниже отдельно еще раз все выписал… Хотябы куда копать?
0
попробовал и файл перместить в
/mailing/classes/modules/user/entity

Перестановкой добился такого сообщения

PHP Fatal error: Class 'PluginMailing_Inherit_ModuleUser_EntityUser' not found in /var/www/example.com/common/plugins/mailing/classes/modules/user/entity/User.entity.class.php on line 2

потом переместил обратно в исходную папку
/mailing/classes/modules/mailing/entity/User.entity.class.php

и попробовал заменить

class PluginMailing_ModuleMailing_EntityUser extends PluginMailing_Inherit_ModuleMailing_EntityUser

получил снова

PHP Fatal error: Class 'PluginBr_Inherit_ModuleUser_EntityUser' not found in /var/www/example.com/common/plugins/br/classes/modules/user/entity/User.entity.class.php on line 12
0
Не, не объясню. Не скажу, что я ни разу подобную ошибку не встречал, но каждый раз оказывалось, что баг у меня в голове — либо папку неверно назвал, либо класс. Но вот чтоб все было верно и лечилось бы изменением порядка подключения плагинов — вот с таким не сталкивался.

Чтоб с этим разобраться, мне нужно у себя ситуацию воспроизвести. Напр., однозначно определено, что если поставить плагины А, Б, В, то такая ошибка вылезает. Меняем порядок — Б, А, В — ошибка пропадает. И мне передаются эти самые плагины. И я воспроизвожу у себя баг. И решаю проблему.
0
Удивительно но последняя проблема действительно решилась перестановкой, сейчас все плагины активированы и ошибка просто исчезла.
0
Ничего не могу сказать, пока не воспроизведу эту ошибку у себя. Именно у себя, а не увижу удаленно, т.к. если она будет воспроизведена, то нужно будет дебаггером в IDE пройтись, чтоб обнаружить причину. Удаленно я это сделать не смогу.
0
Еще раз последняя проблема

Файл

/mailing/classes/modules/user/entity/User.entity.class.php:

<?php


class PluginMailing_ModuleUser_EntityUser extends PluginMailing_Inherit_ModuleUser_EntityUser {

        public function getUserNoDigestHash() {
                return md5(Config::Get('module.security.hash').$this->getMail());
        }

}

?>


PluginMailing.class.php:

public $aInherits = array(
        'mapper' => array(
            'ModuleTalk_MapperTalk' => '_ModuleTalk_MapperTalk',
            'ModuleUser_MapperUser' => '_ModuleUser_MapperUser'
            ),
        'module' => array(
            'ModuleUser' => '_ModuleUser',

        ),

        'entity' => array(
            'ModuleUser_EntityUser' => '_ModuleUser_EntityUser',
        )

    );


Ошибка:

PHP Fatal error: Class 'PluginMailing_Inherit_ModuleUser_EntityUser' not found in /var/www/example.com/common/plugins/mailing/classes/modules/user/entity/User.entity.class.php on line 4
Отредактирован:
0
Специально скопипастил ваш код себе и ошибок он не вызывает. Может вы оставили старый файл User.entity.class.php в каталоге модуля mailing.

Дело не в этом коде, может вы еще чего правили?
0
Похоже конфликтует с плагином br…
А есть другой путь этот метод добавить?
0
У вас бесплатный плагин br?
Если да, то там нет ни модуля user ни entity user. Поэтому не понимаю как они могут конфликтовать в принципе.

А что у вас за файл plugins/br/classes/modules/user/entity/User.entity.class.php? У меня такого в плагине br нет
0
Нет у меня кастомный br под проект. Есть такой файл в поставке, ага.
0
ну тогда я не знаю что вам делать. Добавьте этот метод в кастомный плагин какой-нибудь, в существующий файл User.entity.class.php. Гадать дальше я не вижу смысла.
0
Переименовать? Положить в существующий класс? Неужели нет других путей?
0
Кого вы переименовать хотите? Файлы, как и классы имеют строгий порядок имен.
Положить в существующий класс, класс PluginMailing_Inherit_ModuleUser_EntityUser ну просто обязан существовать, не понимаю как его может не быть. Хотя если читать ваш лог сверху вниз то проблема начинается с
Class 'PluginBr_ModuleUser_EntityUser' not found
Вот и надо идти с самого начала и понять чем они друг другу мешают.

Другой путь есть, написать три строчки кода функции getUserNoDigestHash в любой кастомный плагин в котором существует файл User.entity.class.php
0
А как создатели плагина предполагали имплементировать этот метод? Таким же путем?
0
Ну откуда же я могу это знать?
0
Сейчас обнаружил что если удалить sitemap и br отставить тоже работает. Т.е. или br или sitemap нужно удалить.
0
И обнаружил другой момент — ссылки приходит без хэша все равно (с отключенным sitemap плагином)

example.com//mailing/unsubscribe?email=&hash=
0
О как altocms.ru/708.html#comment19567

Однако хэш не работает все равно… ((
0
Ну у вас и email не работает, который мы даже не трогали
-1
И что это значит? У вас работает?
0
Раз сообщение уходит значит $oUserTo->getMail() работает.

$oUserTo = $this->User_GetUserById($oMail->getUserId());
$sText = htmlspecialchars_decode($oMail->getMailingText(), ENT_QUOTES);
$this->Lang_SetLang($oUserTo->getUserLang());
//$sText .= $this->Lang_Get('plugin.mailing.unsub_notice', array('email' => $oUserTo->getMail(), 'hash' => $oUserTo->getUserNoDigestHash()));
$this->Mail_SetAdress($oUserTo->getMail(), $oUserTo->getLogin());
$this->Mail_SetSubject($oMail->getMailingTitle());
$this->Mail_SetBody($sText);
$this->Mail_setHTML();

в чем может быть проблема?
0
закомментируйте
$this->Lang_SetLang($oUserTo->getUserLang());
0
т.е. должно получиться
$oUserTo = $this->User_GetUserById($oMail->getUserId());
$sText = htmlspecialchars_decode($oMail->getMailingText(), ENT_QUOTES);
//$this->Lang_SetLang($oUserTo->getUserLang());
$sText .= $this->Lang_Get('plugin.mailing.unsub_notice', array('email' => $oUserTo->getMail(), 'hash' => $oUserTo->getUserNoDigestHash()));
$this->Mail_SetAdress($oUserTo->getMail(), $oUserTo->getLogin());
$this->Mail_SetSubject($oMail->getMailingTitle());
$this->Mail_SetBody($sText);
$this->Mail_setHTML();
0
Сработало! Может нужно задать язык в конфиге где-то?
0
Вот что в логах

[LOG:1427368896.686-5513EBC0A7854][2015-03-26 14:21:36][PID:12982][ERROR][[
E_WARNING [2] Class 'PluginBr_ModuleUser_EntityUser' not found (/var/www/example.com/engine/classes/core/Loader.class.php on line 337)
— call stack — class_alias() in /var/www/example.com/engine/classes/core/Loader.class.php on line 337
Loader::Autoload()
spl_autoload_call() in /var/www/example.com/common/plugins/mailing/classes/modules/user/entity/User.entity.class.php on line 4
include_once() in /var/www/example.com/engine/include/functions/File.php on line 932
AltoFunc_File::IncludeFile()
call_user_func_array() in /var/www/example.com/engine/include/Func.php on line 656
Func::IncludeFile() in /var/www/example.com/engine/classes/core/Loader.class.php on line 310
Loader::_includeFile() in /var/www/example.com/engine/classes/core/Loader.class.php on line 343
Loader::Autoload()
spl_autoload_call()
class_alias() in /var/www/example.com/engine/classes/core/Loader.class.php on line 337
Loader::Autoload()
spl_autoload_call() in /var/www/example.com/common/plugins/br/classes/modules/user/entity/User.entity.class.php on line 12
include_once() in /var/www/example.com/engine/include/functions/File.php on line 932
AltoFunc_File::IncludeFile()
call_user_func_array() in /var/www/example.com/engine/include/Func.php on line 656
Func::IncludeFile() in /var/www/example.com/engine/classes/core/Loader.class.php on line 310
Loader::_includeFile() in /var/www/example.com/engine/classes/core/Loader.class.php on line 343
Loader::Autoload()
spl_autoload_call()
unserialize() in /var/www/example.com/engine/libs/DklabCache/Cache/Backend/TagEmuWrapper.php on line 185
Dklab_Cache_Backend_TagEmuWrapper->_loadOrTestMulti() in /var/www/example.com/engine/libs/DklabCache/Cache/Backend/TagEmuWrapper.php on line 34
Dklab_Cache_Backend_TagEmuWrapper->load() in /var/www/example.com/engine/classes/modules/cache/Cache.class.php on line 322
ModuleCache->_backendLoad() in /var/www/example.com/engine/classes/modules/cache/Cache.class.php on line 543
ModuleCache->MultiGet() in /var/www/example.com/engine/classes/modules/cache/Cache.class.php on line 515
ModuleCache->Get()
call_user_func_array() in /var/www/example.com/engine/classes/core/Engine.class.php on line 636
Engine->_CallModule() in /var/www/example.com/engine/classes/abstract/LsObject.class.php on line 44
LsObject->__call() in /var/www/example.com/common/classes/modules/user/User.class.php on line 260
PluginInvites_ModuleUser->Cache_Get() in /var/www/example.com/common/classes/modules/user/User.class.php on line 260
ModuleUser->GetUsersByArrayId() in /var/www/example.com/common/classes/modules/user/User.class.php on line 173
ModuleUser->GetUsersAdditionalData() in /var/www/example.com/common/classes/modules/user/User.class.php on line 584
ModuleUser->GetUserById() in /var/www/example.com/common/classes/modules/user/User.class.php on line 525
ModuleUser->GetUserBySessionKey() in /var/www/example.com/common/classes/modules/user/User.class.php on line 654
ModuleUser->AutoLogin() in /var/www/example.com/common/classes/modules/user/User.class.php on line 98
ModuleUser->Init() in /var/www/example.com/engine/classes/core/Engine.class.php on line 377
Engine->InitModule() in /var/www/example.com/engine/classes/core/Engine.class.php on line 457
Engine->LoadModule() in /var/www/example.com/engine/classes/core/Engine.class.php on line 699
Engine->GetModule() in /var/www/example.com/engine/classes/core/Engine.class.php on line 612
Engine->_CallModule() in /var/www/example.com/engine/classes/core/Engine.class.php on line 773
Engine->__call()
Engine->User_GetUserCurrent()
call_user_func_array() in /var/www/example.com/engine/classes/core/Engine.class.php on line 1298
E::__callStatic() in /var/www/example.com/engine/classes/core/Engine.class.php on line 1307
E::User_GetUserCurrent() in /var/www/example.com/engine/classes/core/Engine.class.php on line 1307
E::User() in /var/www/example.com/engine/classes/core/Engine.class.php on line 1345
E::UserId() in /var/www/example.com/common/classes/hooks/HookStatisticsPerformance.class.php on line 38
HookStatisticsPerformance->RegisterHook() in /var/www/example.com/engine/classes/core/Engine.class.php on line 517
Engine->InitHooks() in /var/www/example.com/engine/classes/core/Engine.class.php on line 285
Engine->Init() in /var/www/example.com/engine/classes/core/Router.class.php on line 172
Router->Exec() in /var/www/example.com/index.php on line 23
— end — ]][END:1427368896.686-5513EBC0A7854]

[LOG:1427368896.687-5513EBC0A7C36][2015-03-26 14:21:36][PID:12982][ERROR][[
E_ERROR [1] Class 'PluginMailing_Inherit_ModuleUser_EntityUser' not found (/var/www/example.com/common/plugins/mailing/classes/modules/user/entity/User.entity.class.php on line 4)
— call stack — Func::_callStackError() in /var/www/example.com/engine/include/Func.php on line 147
Func::_errorLog() in /var/www/example.com/engine/include/Func.php on line 274
Func::_errorHandler() in /var/www/example.com/engine/include/Func.php on line 69
Func::done()
— end ---
+1
Klaus, большое спасибо за помощь, по итогам тестов все вроде работает. Единственное я эту строчку наверно все-таки уберу, ибо нефиг)))

Не понятно еще почему такой косяк с языком, ну да ладно…

Кстати такой же вопрос к вам — не хотите опубликовать портированную версию с правками?
Отредактирован:
0
Так у меня нет портированной версии. Я в этом плагине как раз делал эту строку для одного проекта, а сам плагин там работал в режиме совместимости. К тому же чтобы выкладывать нужно общаться с автором. Потом это дело поддерживать раз уж взялся.

У меня есть пример, плагин СЕОпак, я им ни разу не пользовался. Поэтому решил заниматься только теми плагинами, что пригодятся в моих проектах. Есть хотя бы мотивация.
0
Я имею в виду версию которая нормально работает с плагином совместимости, можно за основу взять репозиторий от orthograf выше. Просто несколько правок, и вуаля. Лицензия GPL позволяет проделать данную манипуляцию, автор должен был быть в курсе когда публиковал да и вряд ли он будет против если его бесплатным плагином будут пользоваться больше людей.
Отредактирован:
0
А язык, ну это что-то ЛСовское или от какого-то плагина того же автора. А может у нас он просто по другому определяется. Не думаю что у вас мультиязычный сайт.
+1
В общем обнаружил пару магических нюансов в работе этого плагина.
1. Основная проблема с тем, что не генерился хэш была связана на самом деле с этой строчкой altocms.ru/708.html#comment19572
2. При этом несмотря на то что метод getUserNoDigestHash() не определен, код
$sText .= $this->Lang_Get('plugin.mailing.unsub_notice', array('email' => $oUserTo->getMail(), 'hash' => $oUserTo->getUserNoDigestHash()));


— отрабатывает и хэш возвращается в ссылку. Каким образом это происходит — я без понятния, но факт. Возможно гуру ООП в рамках php могут этот момент прояснить.

3. Насчет скрипта для генерации хэшей, теперь я понял для чего он нужен — тупо для того чтобы сгенерить хэши для тех пользователей, которые зарегились до активации плагина. После активации при регистрации хэш заполняется в БД автоматически.
Отредактирован:
0
Друзья, прочитал всю ветку, есть ли решение готовое без танцев для версии 1.1.28?
Необходимо делать рассылку писем пользователями раз в неделю с темами из вкладки https://site.ru/index/top/?period=7
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.