You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
8.2 KiB
Plaintext

<?php
class mailNotification extends WireData implements Module, ConfigurableModule {
protected $mailAddress, $notificationPublish, $notificationDelete, $notificationChange;
public static function getModuleInfo() {
return array(
'title' => __('Mail Notification'),
'version' => '003',
'author' => 'Kreativmonkey',
'summary' => __('Notification mail by saving or deleting Pages'),
'autoload' => true
);
}
public function ___install() {
}
public function setDefault() {
$this->mailAddress = '';
$this->notificationPublish = array();
$this->notificationDelete = array();
$this->notificationChange = array();
}
public function init() {
$this->setDefault();
if (isset($this->data['notificationPublish'])){
$this->notificationPublish = $this->data['notificationPublish'];
}
if (isset($this->data['notificatioDelete'])){
$this->notificationDelete = $this->data['notificationDelete'];
}
if (isset($this->data['notificationChange'])){
$this->notificationChange = $this->data['notificationChange'];
}
if (isset($this->data['mailAddress'])){
$this->mailAddress = $this->data['mailAddress'];
}
$this->addHook('Pages::saveReady', $this, "hookCheckNotification");
}
public function hookCheckNotification(HookEvent $event){
$page = $event->arguments[0];
$template = $page->template;
$templates = $this->notificationChange;
// if page have no id => return
if(!$page->id || !$page->title) return;
// Check if page is Deleted
if($page->isTrash()){
$this->notificationDelete($page);
$this->log->save('message', "Page deleted: $page->title");
return;
}
// Check if page is Changed
if($page->isChanged()){
if($page->isChanged("status") && !$page->is(PAGE::statusUnpublished)){
if(!in_array($template->name, $this->notificationPublish)) return;
$this->notificationPublish($page);
$this->log->save('message', "Page published: $paget->title");
return;
}
if(!in_array($template->name, $this->notificationChange)) return;
$this->notificationChange($page);
$this->log->save('message', "Page changed: $paget->title");
return;
}
}
public function notificationPublish(Page $page){
$template = $page->template;
// if this post wasn't made by an "user" don't continue
if($page->createdUser->hasRole('admin|manager')) return;
// only notify by published pages
if($page->is(Page::statusUnpublished)) return;
$subject = sprintf(__('Add new %s with title %s'), $template->name, $page->get('headline|title'));
$message = sprintf(__("New %s from User %s \n========================= \n\nYou can show the new %s under:\n%s"), $template->name, $page->createdUser->get('name|title'), $template->name, $page->httpUrl);
$this->sendMail($subject, $message);
// Message to User
$this->message(sprintf(__("Publish %s and send mail notification for new %s"), $page->title, $page->template->name));
}
public function notificationDelete(Page $page){
$template = $page->template;
$templates = $this->notificationDelete;
// Return if page has no id
if(!$page->id) return;
// Return if template has no notification
if(!in_array($template->name, $template)) return;
// if this post wasn't made by an "user" don't continue
if($page->createdUser->hasRole('admin|manager')) return;
$subject = sprintf(__('%s has deleted by %s'), $page->get('headline|title'), $user->get('title'));
$message = sprintf(__("%s deleted by %s \n========================= \n\nYou can find it in the bin and restore it."), $page->get('headline|title'), $user->get('name|title'));
$this->sendMail($subject, $message);
// Message to User
$this->message(sprintf(__("Delete %s and send mail notification to administrator"), $page->title));
}
public function notificationChange(Page $page){
$template = $page->template;
$templates = $this->notificationDelete;
$user = wire('user');
// Überprüfen ob die Seite geändert wurde
if(!$page->isChanged()) return;
// Return if page has no id
if(!$page->id) return;
// Return if template has no notification
if(!in_array($template->name, $this->notificationChange)) return;
// if this post wasn't made by an "user" don't continue
if($page->createdUser->hasRole('admin|manager')) return;
$subject = sprintf(__('%s has changed by %s'), $page->get('headline|title'), $user->get('name|title'));
$message = sprintf(__("%s has changed by %s \n========================= \n\nYou can look for the changes at:\n %s"), $page->get('headline|title'), $user->get('name|title'), $page->httpUrl);
$this->sendMail($subject, $message);
// Message to User
$this->message(sprintf(__("Change %s and send mail notification to admin for changed %s."), $page->title, $page->template->name));
}
public function sendMail($subject, $message){
// Do nothing if mailaddress is not set!
if(empty($this->mailAddress)){
$this->log->error(__("Can't send Notification, no mail address was set!"));
return;
}
$mail = wireMail();
$mail->to("{$this->mailAddress}")->from('notify@freifunk-myk.de');
$mail->subject("$subject");
$mail->body("$message");
$mail->send();
$this->log->message(sprintf(__("Send Mail: %s to %s"), $subject, $this->mailAddress));
}
/*public function hookModuleSave(){
}*/
static public function getModuleConfigInputfields(array $data) {
$modules = wire('modules');
$tmpTemplates = wire('templates');
foreach($tmpTemplates as $template) {
// exclude system fields
if($template->flags & Template::flagSystem) continue;
$templates[] = $template;
}
$inputfields = new InputfieldWrapper();
$mailAddressField = wire('modules')->get('InputfieldText');
$mailAddressField->name = 'mailAddress';
$mailAddressField->columnWidth = 80;
$mailAddressField->label = __('Mail Addresses');
$mailAddressField->required = 1;
if (isset($data['mailAddress']))
$mailAddressField->value = $data['mailAddress'];
$mailAddressField->description = __('Mailaddresses like mail@domain.tdl or a username ore user groupe. You can choose more than one address by comma separet.');
$inputfields->add($mailAddressField);
// Included fields
$field = $modules->get("InputfieldAsmSelect");
$field->name = "notificationPublish";
$field->label = __("Notification by Publish");
$field->description = __("Choose the templates which should be notifyication by publishing.");
foreach($templates as $template) $field->addOption($template->name);
if (isset($data['notificationPublish']))
$field->value = $data['notificationPublish'];
//$field->notes = __('Be careful with this field. If you remove an entry all of it\'s "seo_*" fields get deleted (including the data).');
$inputfields->add($field);
// Included fields
$field = $modules->get("InputfieldAsmSelect");
$field->name = "notificationChange";
$field->label = __("Notificaltion by Changes");
$field->description = __("Choose the templates which should get notification by changes.");
foreach($templates as $template) $field->addOption($template->name);
if (isset($data['notificationChange']))
$field->value = $data['notificationChange'];
$inputfields->add($field);
// Included fields
$field = $modules->get("InputfieldAsmSelect");
$field->name = "notificationDelete";
$field->label = __("Notification by Delete");
$field->description = __("Choose the templates which should get notification by deleting.");
foreach($templates as $template) $field->addOption($template->name);
if (isset($data['notificationDelete']))
$field->value = $data['notificationDelete'];
$inputfields->add($field);
return $inputfields;
}
}