Добрый день всем читателям блога.
После долго перерыва в работе блога, я снова возвращаюсь к написанию статей, и надеюсь, теперь уже буду радовать вас новой информацией намного чаще. Хоть я это обещаю уже не в первый раз .
И так сегодня мы поговорим опять о 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 версии в плане хуков ничего не изменилось, поэтому модуль должен работать корректно.
Спасибо, помогло =)