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

165 lines
6.3 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
/**
*
*/
class UserMailinLib extends TikiLib
{
/**
* locate_struct will find matching structure routing rules, given the email subject and body
*
* @param mixed $user Resolved Tiki user from email address
* @param mixed $subject Email subject
* @param mixed $body Email body
* @return mixed array - 'data', 'cant'
*
*/
public function locate_struct($user, $subject, &$body)
{
$result = [];
$routes = $this->list_user_mailin_struct($user);
foreach ($routes['data'] as $r) {
if ($r['username'] == $user) {
if ($r['is_active'] === 'y') {
if ($this->matchPattern($r['subj_pattern'], $subject, $r['body_pattern'], $body)) {
// Found a matching routing pattern for the user
$result[] = $r;
}
}
}
}
$retval = [];
$retval["data"] = $result;
$retval["cant"] = count($result);
return $retval;
}
/**
* matchPattern
* Either subj_pattern or body_pattern or both must be specified to find a match.
* If both are specified, both must match. If only one is specified, it must match. The empty pattern is ignored.
*
* @param mixed $subj_pattern Pattern to match in subject
* @param mixed $subject The email subject text
* @param mixed $body_pattern Pattern to match in the body
* @param mixed $body The email body
* @return mixed boolean
*
*/
private function matchPattern($subj_pattern, $subject, $body_pattern, &$body)
{
$rc1 = null;
$rc2 = null;
if (! empty($subj_pattern)) {
if (stripos($subject, $subj_pattern, 0) !== false) {
$rc1 = true;
} else {
$rc1 = false;
}
}
if (! empty($body_pattern)) {
if (stripos($body, $body_pattern, 0) !== false) {
$rc2 = true;
} else {
$rc2 = false;
}
}
if ($rc1 == null && $rc2 == null) {
return false;
}
$rc1 = $rc1 == null ? $rc2 : $rc1;
$rc2 = $rc2 == null ? $rc1 : $rc2;
return $rc1 && $rc2;
}
/**
* @param $offset
* @param $maxRecords
* @param $sort_mode
* @param $find
* @return array
*/
public function list_user_mailin_struct($user, $maxRecords = -1, $offset = 0)
{
$bindvars = [$user];
$query = "select u.email, mailin.*, p.pageName, s2.page_ref_id as page_struct_refid, s2.parent_id as page_struct_parentid, s.page_ref_id, s.parent_id , p2.pageName as structName
from `tiki_user_mailin_struct` mailin
left outer join `tiki_pages` p on p.`page_id` = mailin.`page_id`
left outer join `tiki_structures` s on s.`structure_id` = mailin.`structure_id` and s.`parent_id` = 0
left outer join `tiki_pages` p2 on p2.`page_id` = s.`page_id`
left outer join `tiki_structures` s2 on s2.`structure_id` = mailin.`structure_id` and s2.`page_id` = mailin.`page_id`
left outer join `users_users` u on u.login = mailin.username
where mailin.`username` = ?
order by p2.pageName, p.pageName";
$result = $this->query($query, $bindvars, $maxRecords, $offset);
$retval = [];
$retval["data"] = $result->result;
$retval["cant"] = $result->numrows;
return $retval;
}
public function list_all_user_mailin_struct($onlyActive = true, $maxRecords = -1, $offset = 0)
{
$sqlOnlyActive = '';
if ($onlyActive) {
$sqlOnlyActive = " and mailin.is_active = 'y' ";
}
$query = "select u.email, mailin.*, p.pageName, s2.page_ref_id as page_struct_refid, s2.parent_id as page_struct_parentid, s.page_ref_id, s.parent_id , p2.pageName as structName
from `tiki_user_mailin_struct` mailin
left outer join `tiki_pages` p on p.`page_id` = mailin.`page_id`
left outer join `tiki_structures` s on s.`structure_id` = mailin.`structure_id` and s.`parent_id` = 0
left outer join `tiki_pages` p2 on p2.`page_id` = s.`page_id`
left outer join `tiki_structures` s2 on s2.`structure_id` = mailin.`structure_id` and s2.`page_id` = mailin.`page_id`
left outer join `users_users` u on u.login = mailin.username
where 1 = 1
" . $sqlOnlyActive . "
order by mailin.username, p2.pageName, p.pageName
";
$bindvars = [];
$result = $this->query($query, $bindvars, $maxRecords, $offset);
$retval = [];
$retval["data"] = $result->result;
$retval["cant"] = $result->numrows;
return $retval;
}
public function add_user_mailin_struct($username, $subj_pattern, $body_pattern, $structure_id, $page_id, $is_active)
{
$bindvars = [$username, $subj_pattern, $body_pattern, (int)$structure_id, (int)$page_id, $is_active];
$query = "insert into `tiki_user_mailin_struct`(`username`,`subj_pattern`,`body_pattern`,`structure_id`,`page_id`,`is_active`) values(?,?,?,?,?,?)";
$result = $this->query($query, $bindvars);
}
public function update_user_mailin_struct($mailin_struct_id, $username, $subj_pattern, $body_pattern, $structure_id, $page_id, $is_active)
{
if ($mailin_struct_id) {
$bindvars = [$username, $subj_pattern, $body_pattern, (int)$structure_id, (int)$page_id, $is_active, (int)$mailin_struct_id];
$query = "update `tiki_user_mailin_struct` set `username`=?, `subj_pattern`=?, `body_pattern`=?, `structure_id`=?, `page_id`=?, `is_active`=? where `mailin_struct_id`=?";
$result = $this->query($query, $bindvars);
return true;
}
return false;
}
public function delete_user_mailin_struct($mailin_struct_id)
{
if ($mailin_struct_id) {
$bindvars = [(int)$mailin_struct_id];
$query = "delete from `tiki_user_mailin_struct` where `mailin_struct_id`=?";
$result = $this->query($query, $bindvars, -1, -1, false);
return true;
}
return false;
}
}