1: <?php
2: /*****************************************************************************************
3: * X2Engine Open Source Edition is a customer relationship management program developed by
4: * X2Engine, Inc. Copyright (C) 2011-2016 X2Engine Inc.
5: *
6: * This program is free software; you can redistribute it and/or modify it under
7: * the terms of the GNU Affero General Public License version 3 as published by the
8: * Free Software Foundation with the addition of the following permission added
9: * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10: * IN WHICH THE COPYRIGHT IS OWNED BY X2ENGINE, X2ENGINE DISCLAIMS THE WARRANTY
11: * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12: *
13: * This program is distributed in the hope that it will be useful, but WITHOUT
14: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15: * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
16: * details.
17: *
18: * You should have received a copy of the GNU Affero General Public License along with
19: * this program; if not, see http://www.gnu.org/licenses or write to the Free
20: * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21: * 02110-1301 USA.
22: *
23: * You can contact X2Engine, Inc. P.O. Box 66752, Scotts Valley,
24: * California 95067, USA. or at email address contact@x2engine.com.
25: *
26: * The interactive user interfaces in modified source and object code versions
27: * of this program must display Appropriate Legal Notices, as required under
28: * Section 5 of the GNU Affero General Public License version 3.
29: *
30: * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31: * these Appropriate Legal Notices must retain the display of the "Powered by
32: * X2Engine" logo. If the display of the logo is not reasonably feasible for
33: * technical reasons, the Appropriate Legal Notices must display the words
34: * "Powered by X2Engine".
35: *****************************************************************************************/
36:
37: Yii::import('application.models.X2Model');
38: Yii::import('application.modules.user.models.*');
39:
40: /**
41: * This is the model class for table "x2_services".
42: *
43: * @package application.modules.services.models
44: */
45: class Services extends X2Model {
46:
47: public $account;
48:
49: /**
50: * Returns the static model of the specified AR class.
51: * @return Services the static model class
52: */
53: public static function model($className=__CLASS__) {
54: return parent::model($className);
55: }
56:
57: /**
58: * @return string the associated database table name
59: */
60: public function tableName() {
61: return 'x2_services';
62: }
63:
64: public function behaviors() {
65: return array_merge(parent::behaviors(),array(
66: 'X2LinkableBehavior'=>array(
67: 'class'=>'X2LinkableBehavior',
68: 'module'=>'services',
69: // 'icon'=>'accounts_icon.png',
70: ),
71: 'ERememberFiltersBehavior' => array(
72: 'class'=>'application.components.ERememberFiltersBehavior',
73: 'defaults'=>array(),
74: 'defaultStickOnClear'=>false
75: )
76: ));
77: }
78:
79: public function rules () {
80: $parentRules = parent::rules ();
81: /*$parentRules[]= array (
82: 'firstName,lastName', 'required', 'on' => 'webForm');*/
83: return $parentRules;
84: }
85:
86: public function afterFind(){
87: if($this->name != $this->id) {
88: $this->name = $this->id;
89: $this->update(array('name'));
90: }
91: return parent::afterFind();
92: }
93:
94: /**
95: *
96: * @return boolean whether or not to save
97: */
98: public function afterSave() {
99: $model = $this->getOwner();
100:
101: $oldAttributes = $model->getOldAttributes();
102:
103: if($model->escalatedTo != '' && (!isset($oldAttributes['escalatedTo']) || $model->escalatedTo != $oldAttributes['escalatedTo'])) {
104: $event=new Events;
105: $event->type='case_escalated';
106: $event->user=$this->updatedBy;
107: $event->associationType='Services';
108: $event->associationId=$model->id;
109: if($event->save()){
110: $notif = new Notification;
111: $notif->user = $model->escalatedTo;
112: $notif->createDate = time();
113: $notif->type = 'escalateCase';
114: $notif->modelType = 'Services';
115: $notif->modelId = $model->id;
116: $notif->save();
117: }
118: }
119:
120: parent::afterSave();
121: }
122:
123: public function search() {
124: $criteria=new CDbCriteria;
125: return $this->searchBase($criteria);
126: }
127:
128: /**
129: * Like search but filters by status based on the user's profile
130: *
131: */
132: public function searchWithStatusFilter($pageSize=null, $uniqueId=null) {
133: $criteria=new CDbCriteria;
134: foreach($this->getFields(true) as $fieldName => $field) {
135:
136: if($fieldName == 'status') { // if status exists
137: // filter statuses based on user's profile
138: $hideStatus = CJSON::decode(Yii::app()->params->profile->hideCasesWithStatus); // get a list of statuses the user wants to hide
139: if(!$hideStatus) {
140: $hideStatus = array();
141: }
142: foreach($hideStatus as $hide) {
143: $criteria->compare('t.status', '<>'.$hide);
144: }
145: }
146: }
147: $criteria->together = true;
148: return $this->searchBase($criteria, $pageSize);
149: }
150:
151:
152:
153: }
154: