preserveWhiteSpace = false; $domXML->formatOutput = true; $root = $domXML->createElement('datas'); //Filename $filename = $domXML->createElement('filename'); $filename->appendChild($domXML->createTextNode($lazaretFile->getOriginalName())); $root->appendChild($filename); //Reasons for quarantine $reasons = $domXML->createElement('reasons'); foreach ($lazaretFile->getChecks() as $check) { /* @var $check \Entities\LazaretCheck */ $reason = $domXML->createElement('checkClassName'); $reason->appendChild($domXML->createTextNode($check->getCheckClassname())); $reasons->appendChild($reason); } $root->appendChild($reasons); $domXML->appendChild($root); $datas = $domXML->saveXml(); //Sender if (null !== $user = $lazaretFile->getSession()->getUser($this->app)) { $sender = $domXML->createElement('sender'); $sender->appendChild($domXML->createTextNode($user->get_display_name())); $root->appendChild($sender); $this->notifyUser($user, $datas); } else { //No lazaretSession user, fil is uploaded via automated tasks etc .. $query = new User_Query($this->app); $users = $query ->on_base_ids(array($lazaretFile->getBaseId())) ->who_have_right(array('canaddrecord')) ->execute() ->get_results(); foreach ($users as $user) { $this->notifyUser($user, $datas); } } } return; } /** * Notifiy an user using the specified datas * * @param \User_Adapter $user * @param string $datas */ private function notifyUser(\User_Adapter $user, $datas) { $mailed = false; if ( ! ! (int) $this->get_prefs(__CLASS__, $user->get_id())) { $to = array('email' => $user->get_email(), 'name' => $user->get_display_name()); $from = array( 'email' => $this->app['phraseanet.registry']->get('GV_defaulmailsenderaddr'), 'name' => $this->app['phraseanet.registry']->get('GV_homeTitle') ); if (self::mail($to, $from, $datas)) { $mailed = true; } } $this->broker->notify($user->get_id(), __CLASS__, $datas, $mailed); } /** * * @param Array $datas * @param boolean $unread * @return Array */ public function datas($datas, $unread) { $sx = simplexml_load_string($datas); $reasons = array(); foreach ($sx->reasons as $reason) { $checkClassName = (string) $reason->checkClassName; if (class_exists($checkClassName)) { $reasons[] = $checkClassName::getMessage(); } } $filename = (string) $sx->filename; $text = sprintf(_('The document %s has been quarantined'), $filename); if ( ! ! count($reasons)) { $text .= ' ' . sprintf(_('for the following reasons : %s'), implode(', ', $reasons)); } $ret = array('text' => $text, 'class' => ''); return $ret; } /** * * @return string */ public function get_name() { return _('Quarantine notificaton'); } /** * * @return string */ public function get_description() { return _('be notified when a document is placed in quarantine'); } /** * @return boolean */ public function mail($to, $from, $datas) { $subject = _('A document has been quarantined'); $datas = $this->datas($datas, false); $body = $datas['text']; return \mail::send_mail($this->app, $subject, $body, $to, $from); } /** * * @return boolean */ public function is_available() { if (null !== $this->app['phraseanet.user']) { return $this->app['phraseanet.user']->ACL()->has_right('addrecord'); } return false; } }