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: /**
38: * X2FlowAction that creates an event
39: *
40: * @package application.components.x2flow.actions
41: */
42: class X2FlowCreateEvent extends X2FlowAction {
43:
44: public $title = 'Post to Activity Feed';
45: public $info = 'Creates an activity feed event.'; // You can write your own message, or X2Engine will automatically choose one based on what triggered this flow.';
46:
47: public function paramRules(){
48: // $eventTypes = array('auto'=>Yii::t('app','Auto')) + Dropdowns::getItems(113,'app');
49: $eventTypes = Dropdowns::getItems(113, 'studio');
50:
51: return array_merge (parent::paramRules (), array (
52: 'title' => Yii::t('studio', $this->title),
53: 'info' => Yii::t('studio', $this->info),
54: 'options' => array(
55: array(
56: 'name' => 'type',
57: 'label' => Yii::t('studio', 'Post Type'),
58: 'type' => 'dropdown',
59: 'options' => $eventTypes
60: ),
61: array(
62: 'name' => 'text',
63: 'label' => Yii::t('studio', 'Text'),
64: 'type' => 'text'
65: ),
66: array(
67: 'name' => 'visibility',
68: 'label' => Yii::t('studio', 'Visibility'),
69: 'type' => 'dropdown',
70: 'options' => array (
71: 1 => Yii::t('admin','Public'),
72: 0 => Yii::t('admin','Private'),
73: ),
74: 'defaultVal' => 1
75: ),
76: array(
77: 'name' => 'feed',
78: 'optional' => 1,
79: 'label' => 'User (optional)',
80: 'type' => 'dropdown',
81: 'options' => array(
82: '' => '----------',
83: 'auto' => 'Auto'
84: ) + X2Model::getAssignmentOptions(false, false)),
85: array(
86: 'name' => 'user',
87: 'optional' => 1,
88: 'label' => 'Author',
89: 'type' => 'dropdown',
90: 'options' => array(
91: 'admin' => 'admin',
92: 'auto' => Yii::t('studio', 'Auto'),
93: ) + array_diff_key (
94: X2Model::getAssignmentOptions(false, false),
95: array ('admin' => '')
96: ),
97: 'defaultVal' => 'admin',
98: ),
99: array(
100: 'name' => 'createNotif',
101: 'label' => Yii::t('studio', 'Create Notification?'),
102: 'type' => 'boolean',
103: 'defaultVal' => true
104: ),
105: )
106: ));
107: }
108:
109: public function execute(&$params){
110: $options = &$this->config['options'];
111:
112: $event = new Events;
113: $notif = new Notification;
114:
115: $user = $this->parseOption('feed', $params);
116: $author = $this->parseOption('user', $params);
117:
118: $type = $this->parseOption('type', $params);
119: $visibility = $this->parseOption('visibility', $params);
120:
121: // Unfinsihed automatic event type detection feature
122: // if($type === 'auto'){
123: // if(!isset($params['model']))
124: // return array (false, '');
125: // $notif->modelType = get_class($params['model']);
126: // $notif->modelId = $params['model']->id;
127: // $notif->type = $this->getNotifType();
128: //
129: // $event->associationType = get_class($params['model']);
130: // $event->associationId = $params['model']->id;
131: // $event->type = $this->getEventType();
132: // if($params['model']->hasAttribute('visibility'))
133: // $event->visibility = $params['model']->visibility;
134: // // $event->user = $this->parseOption('user',$params);
135: // } else{
136: $text = $this->parseOption('text', $params);
137:
138: $notif->type = 'custom';
139: $notif->text = $text;
140:
141: $event->type = 'feed';
142: $event->subtype = $type;
143: $event->text = $text;
144: $event->visibility = $visibility;
145:
146: if ($author == 'auto' && isset($params['model']) &&
147: $params['model']->hasAttribute('assignedTo') &&
148: !empty($params['model']->assignedTo)) {
149:
150: $event->user = $params['model']->assignedTo;
151: } else {
152: $event->user = $author;
153: }
154:
155: if (!empty ($user)) {
156: if ($user == 'auto' && isset($params['model']) &&
157: $params['model']->hasAttribute('assignedTo') &&
158: !empty($params['model']->assignedTo)) {
159:
160: $associatedUser = $params['model']->assignedTo;
161: } else {
162: $associatedUser = $user;
163: }
164: $associatedUser = User::model ()->findByAttributes (array (
165: 'username' => $associatedUser
166: ));
167: if ($associatedUser) {
168: $event->associationType = 'User';
169: $event->associationId = $associatedUser->id;
170: $notif->modelType = 'Profile';
171: $notif->modelId = $event->associationId;
172: $notif->type = 'social_post';
173: $notif->createdBy = $event->user;
174: $notif->user = $associatedUser->username;
175: }
176: }
177:
178: if(!$this->parseOption('createNotif', $params)) {
179: if (!$notif->save()) {
180: $errors = $notif->getErrors ();
181: return array(false, array_shift($errors));
182: }
183: }
184:
185: if ($event->save()) {
186: return array (true, "");
187: } else {
188: $errors = $event->getErrors ();
189: return array(false, array_shift($errors));
190: }
191:
192: }
193:
194: }
195: