Добрый день всем читателям блога.
После долго перерыва в работе блога, я снова возвращаюсь к написанию статей, и надеюсь, теперь уже буду радовать вас новой информацией намного чаще. Хоть я это обещаю уже не в первый раз
.
И так сегодня мы поговорим опять о logic hooks (логических хуках) в SugarCRM. Если вы еще случайно не знакомы с тем, что это такое, для начала рекомендую ознакомиться с этой статьей: Расширение логики модулей или Logic Hooks
Как я понял из практики, многие достаточно быстро понимают, что это такое, и как им пользоваться. Но все время путаются в таких вопросах как: где надо создавать файл, как этот файл называть, где его и как подключать? Вот и новый наш стажер столкнулся с такими же трудностями. Чтобы помочь ему, а заодно и вам, я взял старенький модуль editLogicHooks от Marnus van Niekerk, модифицировал его для работы с SugarCRM 6, немного переписал код для корректной работы c php 5.3 (всякие eregi сейчас зло), добавил ссылку на описание хуков, ну и конечно русифицировал. При этом все авторство остается за Маркусом, мне чужого добра не надо )).
Хотя если честно модуль довольно простой и самому можно написать такой, а может и еще лучше, за пару часов.
Собственно сейчас я расскажу, что он из себя представляет, разберем конкретный пример, и если вас заинтересует, ссылка на закачку модуля размещена в конце статьи.
После инсталляции модуля через админку. В административном меню вы увидите новый пункт: Logic Hooks.Создание и редактирование Logic Hooks.
В этом модуле нам доступно создание новых хуков и редактирование ранее созданных хуков.
Для создания нового хука выбираем NEW, далее тип хука (для тех кто не знает или забыл, рядом ссылка в помощь с описанием). Так же выбираем модуль для которого будет работать данный хук и вводим имя (обязательно на английском языке, так как это имя будет участвовать при сохранении файла, и все русские символы будут заменены на _, и вы потом не разберетесь где какой хук).
Отрывается новая страница, и вы можете редактировать код данного хука.
Код пишется между комментариями // Здесь начинается твой код для хука и // Здесь заканчивается твой код для хука.
Для выбора ранее созданного хуку выбираем данный хук и нажимаем далее.
Разберем как всегда жизненный пример: необходимо в случае удаления контакта оповещать ответственное лицо за этот контакт, о произошедшем удалении и сообщать о том, кто такой нехороший его удалил.
Переходим в наш модуль редактирования хуков, выбираем тип before_delete, модуль контакты, и имя, например, BeforeDelete.
Наш код, который мы добавляем:
global $current_user;
if ($event != 'before_delete') return;
// Insert your custom logic between these comments
$user = new User();
$user->retrieve($bean->assigned_user_id);
if (!empty($user->email1))
{
$this->sendSugarPHPMail(array($user->full_name => $user->email1),
'Удален контакт',
'Был удален контакт. Полное имя контакта: ' . $bean->full_name . '<br>' .
'Контакт был удален: ' . $current_user->full_name );
}
// Insert your custom logic between these comments
Внимание, в данном коде для отправки сообщения я использую вызов метода sendSugarPHPMail. Это собственная функция, которую я добавил в данный класс. Вы можете воспользоваться ею, либо же написать свою. Полный код получившегося класса, со всеми функциями:
<?php
class BeforeDelete_class
{
function BeforeDelete_method(&$bean, $event, $arguments=null)
{
global $current_user;
if ($event != 'before_delete') return;
// Insert your custom logic between these comments
$user = new User();
$user->retrieve($bean->assigned_user_id);
if (!empty($user->email1))
{
$this->sendSugarPHPMail(array($user->full_name => $user->email1),
'Удален контакт',
'Был удален контакт. Полное имя контакта: ' . $bean->full_name . '<br>' .
'Контакт был удален: ' . $current_user->full_name );
}
// Insert your custom logic between these comments
}
function sendSugarPHPMail($tos, $subject, $body)
{
require_once('include/SugarPHPMailer.php');
require_once('modules/Administration/Administration.php');
$mail = new SugarPHPMailer();
$admin = new Administration();
$admin->retrieveSettings();
if ($admin->settings['mail_sendtype'] == "SMTP") {
$mail->Host = $admin->settings['mail_smtpserver'];
$mail->Port = $admin->settings['mail_smtpport'];
if ($admin->settings['mail_smtpauth_req']) {
$mail->SMTPAuth = TRUE;
$mail->Username = $admin->settings['mail_smtpuser'];
$mail->Password = $admin->settings['mail_smtppass'];
}
$mail->Mailer = "smtp";
$mail->SMTPKeepAlive = true;
}else{
$mail->mailer = 'sendmail';
}
$mail->IsSMTP(); // send via SMTP
if ($admin->settings['mail_smtpssl'] == '2') $mail->SMTPSecure = "tls";
elseif ($admin->settings['mail_smtpssl'] == '1') $mail->SMTPSecure = "ssl";
$mail->CharSet='UTF-8';
$mail->From = $admin->settings['notify_fromaddress'];
$mail->FromName = $admin->settings['notify_fromname'];
$mail->ContentType = "text/html"; //"text/plain"
$mail->IsHTML(true);
$mail->Subject = $subject;
$mail->Body = $body;
foreach ($tos as $name => $address){
$mail->AddAddress("{$address}", "{$name}");
}
if (!$mail->send()) {
$GLOBALS['log']->info("sendSugarPHPMail - Mailer error: " . $mail->ErrorInfo);
return false;
}else{
return true;
}
}
}
?>
Один из минусов модуля заключается в том, что нельзя удалить созданный хук, через администрирование. Удалять необходимо вручную из папки custom/modules /папка_модуля/название_вашего_хука.php и плюс удалить его подключение из файла logic_hooks.php в этой же папке.
Если вас заинтересовал данный модуль для SugarCRM, скачать его можно по данной ссылке: editLogicHooks-1.0.6.zip (202) или же со страницы загрузок.
P.S. Если вдруг данный модуль будет вас интересовать, могу прикрутить визуальный php редактор (а то в обычной textarea редактировать код неудобно) + сделать удаление хуков из админки. Вашу заинтересованность я узнаю из количества скачек модуля и комментариев к данной теме ![]()
P.P.S Добавил редактор с подсветкой php кода editarea. Модуль по ссылке обновлен. Теперь редактор выглядит следующим образом:
Высказать своё мнение о статье Вы можете в комментариях, если Вас интересуют какие либо вопросы или дополнения, то обсуждение по данной теме доступно на нашем форуме.






Рубрики:
Теги:
Модуль не совместим с 6.2.0 версией Шуги.
Вы читали комментарии в данной ветке, как его ставить на SugarCRM 6.2?
Надо изменить файл manifest.php, в 6.2 версии в плане хуков ничего не изменилось, поэтому модуль должен работать корректно.
Спасибо, помогло =)