benefits: Add uniqueness validation for email aliases.
[org.fsf.memberdashboard.git] / CRM / Memberdashboard / BAO / EmailAlias.php
CommitLineData
7f213439
DT
1<?php
2/**
3 * FSF Member Dashboard
4 * Copyright © 2014 Free Software Foundation, Inc.
5 *
6 * This file is a part of FSF Member Dashboard.
7 *
8 * FSF Member Dashboard is free software; you can copy, modify, and
9 * distribute it under the terms of the GNU Affero General Public
10 * License Version 3, 19 November 2007 and the CiviCRM Licensing
11 * Exception.
12 *
13 * FSF Member Dashboard is distributed in the hope that it will be
14 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with FSF Member Dashboard. If not, see
20 * <http://www.gnu.org/licenses/>.
21 */
22
23// Safe array reference with default value.
24function array_ref($array, $key, $default = NULL) {
25 return isset($array[$key]) ? $array[$key] : $default;
26}
27
28class CRM_Memberdashboard_BAO_EmailAlias {
29 public $id = NULL;
30 public $contactId = NULL;
31 public $localpart = '';
32 public $forward = '';
33
34 static function create($params) {
35 $alias = new CRM_Memberdashboard_BAO_EmailAlias($params);
36 $alias->save();
37 return $alias;
38 }
39
40 static function destroy($id) {
41 $dao = CRM_Core_DAO::executeQuery(
42 'DELETE FROM member_email_alias WHERE id=%1',
43 array( 1 => array($id, 'Integer') )
44 );
45
46 $dao->free();
47 }
48
49 static function find($ids) {
50 $dao = CRM_Core_DAO::executeQuery(
51 "SELECT * FROM member_email_alias WHERE id IN (" .
52 CRM_Core_DAO::escapeString(implode(',', $ids)) . ")"
53 );
54 $aliases = array();
55
56 while($dao->fetch()) {
57 $aliases[$dao->id] = new CRM_Memberdashboard_BAO_EmailAlias(
58 array(
59 'id' => $dao->id,
60 'contact_id' => $dao->contact_id,
61 'localpart' => $dao->localpart,
62 'forward' => $dao->forward
63 )
64 );
65 }
66
67 $dao->free();
68
69 return $aliases;
70 }
71
2a3d840b
DT
72 static function findByLocalpart($localpart) {
73 $dao = CRM_Core_DAO::executeQuery(
74 'SELECT * FROM member_email_alias WHERE localpart=%1',
75 array( 1 => array($localpart, 'String') )
76 );
77
78 if($dao->fetch()) {
79 $alias = new CRM_Memberdashboard_BAO_EmailAlias(
80 array(
81 'id' => $dao->id,
82 'contact_id' => $dao->contact_id,
83 'localpart' => $dao->localpart,
84 'forward' => $dao->forward
85 )
86 );
87 } else {
88 $alias = NULL;
89 }
90
91 $dao->free();
92
93 return $alias;
94 }
95
7f213439
DT
96 static function countForContact($contactId) {
97 $dao = CRM_Core_DAO::executeQuery(
98 'SELECT COUNT(*) AS count FROM member_email_alias WHERE contact_id=%1',
99 array( 1 => array($contactId, 'Integer') )
100 );
101
102 $dao->fetch();
103 $count = $dao->count;
104 $dao->free();
105
106 return $count;
107 }
108
109 static function allForContact($contactId) {
110 $dao = CRM_Core_DAO::executeQuery(
111 'SELECT * FROM member_email_alias WHERE contact_id=%1',
112 array( 1 => array($contactId, 'Integer') )
113 );
114 $aliases = array();
115
116 while($dao->fetch()) {
117 $aliases[] = new CRM_Memberdashboard_BAO_EmailAlias(
118 array(
119 'id' => $dao->id,
120 'contact_id' => $dao->contact_id,
121 'localpart' => $dao->localpart,
122 'forward' => $dao->forward
123 )
124 );
125 }
126
127 $dao->free();
128
129 return $aliases;
130 }
131
132 function __construct($params) {
133 $this->id = array_ref($params, 'id');
134 $this->contactId = array_ref($params, 'contact_id');
135 $this->localpart = array_ref($params, 'localpart');
136 $this->forward = array_ref($params, 'forward');
137 }
138
139 function insert() {
140 CRM_Core_DAO::executeQuery(
141 'INSERT INTO member_email_alias (contact_id, localpart, forward) VALUES (%1, %2, %3)',
142 array(1 => array($this->contactId, 'Integer'),
143 2 => array($this->localpart, 'String'),
144 3 => array($this->forward, 'String'))
145 );
146 }
147
148 function update() {
149 CRM_Core_DAO::executeQuery(
150 'UPDATE member_email_alias SET contact_id=%1, localpart=%2, forward=%3 WHERE id=%4',
151 array(1 => array($this->contactId, 'Integer'),
152 2 => array($this->localpart, 'String'),
153 3 => array($this->forward, 'String'),
154 4 => array($this->id, 'Integer'))
155 );
156 }
157
158 function save() {
159 if($this->id) {
160 $this->update();
161 } else {
162 $this->insert();
163 }
164 }
165}