· 5 years ago · Mar 05, 2020, 07:08 AM
1<?php
2/*********************************************************************************
3 * Orangescrum Community Edition is a web based Project Management software developed by
4 * Orangescrum. Copyright (C) 2013-2014
5 *
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU 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 SUGARCRM, SUGARCRM 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 General Public License for more
16 * details.
17 *
18 * You should have received a copy of the GNU 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 Orangescrum, 2059 Camden Ave. #118, San Jose, CA - 95124, US.
24 or at email address support@orangescrum.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 General Public License version 3.
29 *
30 * In accordance with Section 7(b) of the GNU General Public License version 3,
31 * these Appropriate Legal Notices must retain the display of the "Powered by
32 * Orangescrum" 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 Orangescrum".
35 ********************************************************************************/
36
37App::uses('AppController', 'Controller');
38
39class ProjectsController extends AppController {
40
41 public $name = 'Projects';
42 public $components = array('Format', 'Postcase', 'Tmzone', 'Sendgrid');
43
44 function beforeRender() {
45 if (SES_TYPE == 3) {
46 //$this->redirect(HTTP_ROOT."dashboard");
47 }
48 /* if($this->action === 'index') {
49 $this->set( 'scaffoldFields', array( 'name', 'short_name', 'isactive', 'dt_created' ) );
50 }
51 if($this->action === 'view') {
52 $this->set( 'scaffoldFields', array( 'name', 'short_name', 'isactive', 'dt_created','dt_updated' ) );
53 }
54 if($this->action === 'edit') {
55 $this->set( 'scaffoldFields', array( 'name', 'short_name') );
56 }
57 if($this->action === 'add') {
58 $this->set( 'scaffoldFields', array( 'name', 'short_name') );
59 } */
60 }
61
62 function ajax_check_project_exists() {
63 $this->layout = 'ajax';
64
65 $this->Project->recursive = -1;
66
67 //$name = $this->params->data['name'];
68 //$shortname = $this->params->data['shortname'];
69 $name = "Tổng đài ảo";
70 $shortname = "VOIP";
71 echo $name;
72 if (isset($this->params->data['uniqid'])) {
73 $uniqid = $this->params->data['uniqid'];
74 $conditions = array('Project.name' => urldecode($name), 'Project.company_id' => SES_COMP, 'Project.uniq_id !=' => $uniqid);
75 } else {
76 $conditions = array('Project.name' => urldecode($name), 'Project.company_id' => SES_COMP);
77 }
78
79 $chkName = $this->Project->find('first', array('conditions' => $conditions));
80
81 if (isset($chkName['Project']['id']) && $chkName['Project']['id']) {
82 echo "Project";
83 } else {
84 if (isset($this->params->data['uniqid'])) {
85 $uniqid = $this->params->data['uniqid'];
86 $conditions = array('Project.short_name' => urldecode($shortname), 'Project.company_id' => SES_COMP, 'Project.uniq_id !=' => $uniqid);
87 } else {
88 $conditions = array('Project.short_name' => urldecode($shortname), 'Project.company_id' => SES_COMP);
89 }
90 $chkShortName = $this->Project->find('first', array('conditions' => $conditions));
91 if (isset($chkShortName['Project']['id']) && $chkShortName['Project']['id']) {
92 echo "ShortName";
93 }
94 }
95 exit;
96 }
97
98 function ajax_edit_project() {
99 $this->layout = 'ajax';
100 $uniqid = NULL;
101 $uname = NULL;
102 $projArr = array();
103 $getTech = array();
104
105 if (isset($this->request->data['pid']) && $this->request->data['pid']) {
106 $uniqid = $this->request->data['pid'];
107 $this->loadModel("Project");
108 $this->Project->recursive = -1;
109 $projArr = $this->Project->find('first', array('conditions' => array('Project.uniq_id' => $uniqid, 'Project.company_id' => SES_COMP)));
110 if (count($projArr)) {
111 $this->loadModel("User");
112 $this->User->recursive = -1;
113 $getUser = $this->User->find("first", array('conditions' => array('User.isactive' => 1, 'User.id' => $projArr['Project']['user_id']), 'fields' => array('User.name')));
114 if (count($getUser)) {
115 $uname = $getUser['User']['name'];
116 }
117 }
118 }
119 $this->set('uniqid', $uniqid);
120 $this->set('uname', $uname);
121 $this->set('projArr', $projArr);
122
123 $getProjUsers = $this->Project->query("select User.name,ProjectUser.default_email,User.id,Project.id,ProjectUser.id from project_users as ProjectUser, users as User, projects as Project where User.id=ProjectUser.user_id and Project.uniq_id='" . $_GET['pid'] . "' and Project.id=ProjectUser.project_id and User.isactive='1'");
124 $this->set('getProjUsers', $getProjUsers);
125
126 $this->loadModel("Easycase");
127 $this->Easycase->recursive = -1;
128 $quickMem = $this->Easycase->getMemebers($uniqid, 'default');
129 $this->set('quickMem', $quickMem);
130 $prj = $this->Project->findByUniqId($uniqid);
131 $this->set('defaultAssign', $prj['Project']['default_assign']);
132 }
133
134 function settings($img = null) {
135
136 if (isset($this->params->data['Project'])) {
137 $this->loadModel("ProjectUser");
138 $postProject['Project'] = $this->params->data['Project'];
139 $postProject['Project']['name'] = trim($postProject['Project']['name']);
140 $postProject['Project']['short_name'] = trim($postProject['Project']['short_name']);
141
142 if ($postProject['Project']['validateprj'] == 1) {
143 $prjid = $postProject['Project']['id'];
144 $redirect = HTTP_ROOT . "projects/manage/";
145 $page_lmt = $postProject['Project']['pg'];
146 if (intval($page_lmt) > 1) {
147 $redirect .= "?page=" . $page_lmt;
148 }
149
150 $findName = $this->Project->query("SELECT id FROM projects WHERE name='" . addslashes($postProject['Project']['name']) . "' AND id!=" . $prjid . " AND company_id='" . SES_COMP . "'");
151 if (count($findName)) {
152 $this->Session->write("ERROR", "Project name '" . $postProject['Project']['name'] . "' already exists");
153 $this->redirect($redirect);
154 }
155
156 $findShrtName = $this->Project->query("SELECT id FROM projects WHERE short_name='" . addslashes($postProject['Project']['short_name']) . "' AND id!=" . $prjid . " AND company_id='" . SES_COMP . "'");
157 if (!empty($findShrtName)) {
158 $this->Session->write("ERROR", "Project short name '" . $postProject['Project']['short_name'] . "' already exists");
159 $this->redirect($redirect);
160 }
161
162 $postProject['Project']['dt_updated'] = GMT_DATETIME;
163 if ($this->Project->save($postProject)) {
164 $this->Session->write("SUCCESS", "'" . strip_tags($postProject['Project']['name']) . "' saved successfully");
165 $this->redirect($redirect);
166 }
167 } else {
168 //$this->redirect(HTTP_ROOT."projects/settings/?pid=".$postProject['Project']['uniq']);
169 }
170 }
171
172
173 /* $uniqid = NULL; $uname = NULL;
174 $projArr = array(); $getTech = array();
175 if(isset($_GET['pid']) && $_GET['pid']) {
176 $uniqid = $_GET['pid'];
177 $this->Project->recursive = -1;
178 //$uniqid = Sanitize::clean($uniqid, array('encode' => false));
179 $projArr = $this->Project->find('first', array('conditions' => array('Project.uniq_id'=>$uniqid,'Project.company_id'=>SES_COMP)));
180 if(count($projArr))
181 {
182 $User = ClassRegistry::init('User');
183 $User->recursive = -1;
184 $getUser = $User->find("first",array('conditions'=>array('User.isactive'=>1,'User.id'=>$projArr['Project']['user_id']),'fields'=>array('User.name')));
185 if(count($getUser)){
186 $uname = $getUser['User']['name'];
187 }
188
189 $Technology = ClassRegistry::init('Technology');
190 $getTech = $Technology->find("all",array('conditions'=>array('Technology.name'<>'')));
191 }else{
192 $this->redirect(HTTP_ROOT."projects/gridview/");
193 }
194 }
195 $this->set('getTech',$getTech);
196 $this->set('projArr',$projArr);
197 $this->set('uniqid',$uniqid);
198 $this->set('uname',$uname);
199 This multi section is commenting is due to:
200 implement in ajax_edit_project() in ajax.
201 */
202
203 /* $getProjUsers = $this->Project->query("select User.name,ProjectUser.default_email,User.id,Project.id,ProjectUser.id from project_users as ProjectUser, users as User, projects as Project where User.id=ProjectUser.user_id and Project.uniq_id='".$_GET['pid']."' and Project.id=ProjectUser.project_id and User.isactive='1'");
204 $this->set('getProjUsers',$getProjUsers);
205
206 $this->loadModel("Easycase");
207 $this->Easycase->recursive = -1;
208 $quickMem = $this->Easycase->getMemebers($_GET['pid'],'default');
209 $this->set('quickMem',$quickMem);
210 $prj = $this->Project->findByUniqId($uniqid);
211 $defaultAssign = $prj['Project']['default_assign'];
212 $this->set('defaultAssign',$defaultAssign); */
213 }
214
215 function manage($projtype = NULL) {
216
217 $page_limit = 17;
218 if ($projtype == 'inactive') {
219 $page_limit = 18;
220 }
221 $this->Project->recursive = -1;
222 $pjid = NULL;
223 if (isset($_GET['id']) && $_GET['id']) {
224 $pjid = $_GET['id'];
225 }
226 if (isset($_GET['proj_srch']) && $_GET['proj_srch']) {
227 $pjname = htmlentities(strip_tags($_GET['proj_srch']));
228 $this->set('prjsrch', 'project search');
229 }
230 if (isset($_GET['page']) && $_GET['page']) {
231 $page = $_GET['page'];
232 }
233 if (trim($pjid)) {
234 $project = "Project";
235 $getProj = $this->Project->find('first', array('conditions' => array('Project.id' => $pjid, 'Project.company_id' => SES_COMP), 'fields' => array('Project.name', 'Project.id')));
236 if (isset($getProj['Project']['name']) && $getProj['Project']['name']) {
237 $project = $getProj['Project']['name'];
238 }
239 if ($getProj['Project']['id']) {
240 if (isset($_GET['action']) && $_GET['action'] == "activate") {
241 $this->Project->query("UPDATE projects SET isactive='1' WHERE id=" . $getProj['Project']['id']);
242 $this->Session->write("SUCCESS", "'" . $project . "' activated successfully");
243 $this->redirect(HTTP_ROOT . "projects/manage/");
244 }
245 if (isset($_GET['action']) && $_GET['action'] == "delete") {
246 $this->Project->query("DELETE FROM projects WHERE id=" . $getProj['Project']['id']);
247
248 $ProjectUser = ClassRegistry::init('ProjectUser');
249 $ProjectUser->recursive = -1;
250 $ProjectUser->query("DELETE FROM project_users WHERE project_id=" . $getProj['Project']['id']);
251
252 $this->Session->write("SUCCESS", "'" . $project . "' deleted successfully");
253 $this->redirect(HTTP_ROOT . "projects/manage/");
254 }
255 if (isset($_GET['action']) && $_GET['action'] == "deactivate") {
256 $this->Project->query("UPDATE projects SET isactive='2' WHERE id=" . $getProj['Project']['id']);
257 $this->Session->write("SUCCESS", "'" . $project . "' deactivated successfully");
258 $this->redirect(HTTP_ROOT . "projects/manage/inactive");
259 }
260 } else {
261 $this->Session->write("ERROR", "Invalid or Wrong action!");
262 $this->redirect(HTTP_ROOT . "projects/manage");
263 }
264 }
265
266 $action = "";
267 $uniqid = "";
268 $query = "";
269 if (isset($_GET['uniqid']) && $_GET['uniqid']) {
270 $uniqid = $_GET['uniqid'];
271 }
272
273 if ($projtype == "inactive") {
274 $query = "AND Project.isactive='2'";
275 } else {
276 $query = "AND Project.isactive='1'";
277 }
278 if (isset($_GET['project']) && $_GET['project']) {
279 $query .= " AND Project.uniq_id='" . $_GET['project'] . "'";
280 }
281 $query .= " AND Project.company_id='" . SES_COMP . "'";
282 if (isset($_GET['action']) && $_GET['action']) {
283 $action = $_GET['action'];
284 }
285 $page = 1;
286 $pageprev = 1;
287 if (isset($_GET['page']) && $_GET['page']) {
288 $page = $_GET['page'];
289 }
290 $limit1 = $page * $page_limit - $page_limit;
291 $limit2 = $page_limit;
292
293 $prjselect = $this->Project->query("SELECT name FROM projects AS Project WHERE name!='' " . $query . " ORDER BY dt_created DESC");
294 $arrprj = array();
295 foreach ($prjselect as $pjall) {
296 if (isset($pjall['Project']['name']) && !empty($pjall['Project']['name'])) {
297 array_push($arrprj, substr(trim($pjall['Project']['name']), 0, 1));
298 }
299 }
300 if (isset($_GET['prj']) && $_GET['prj']) {
301 //$_GET['prj'] = Sanitize::clean($_GET['prj'], array('encode' => false));
302 $_GET['prj'] = chr($_GET['prj']);
303 $pj = $_GET['prj'] . "%";
304 $query .= " AND Project.name LIKE '" . addslashes($pj) . "'";
305 }
306
307 $all_assigned_proj = null;
308 $user_cnd = '';
309 if (SES_TYPE == 3) {
310 $all_assigned_proj = $this->Project->query('SELECT project_id FROM project_users WHERE user_id=' . $this->Auth->user('id') . ' AND company_id=' . SES_COMP);
311 if ($all_assigned_proj) {
312 $all_assigned_proj = Hash::extract($all_assigned_proj, '{n}.project_users.project_id');
313 $all_assigned_proj = array_unique($all_assigned_proj);
314 $query .= " AND (Project.user_id=" . $this->Auth->user('id') . " OR Project.id IN(" . implode(',', $all_assigned_proj) . "))";
315 $user_cnd = " AND (Project.user_id=" . $this->Auth->user('id') . " OR Project.id IN(" . implode(',', $all_assigned_proj) . "))";
316 } else {
317 $query .= " AND Project.user_id=" . $this->Auth->user('id');
318 $user_cnd = " AND Project.user_id=" . $this->Auth->user('id');
319 }
320 }
321
322 if (SES_TYPE == 3) {
323 //$query .= " AND Project.user_id=" . $this->Auth->user('id');
324 if ($pjname) {
325
326 $prjAllArr = $this->Project->query("SELECT SQL_CALC_FOUND_ROWS Project.id,uniq_id,name,Project.user_id,project_type,short_name,Project.isactive,dt_updated,(select count(easycases.id) as tot from easycases where easycases.project_id=Project.id and easycases.istype='1' and easycases.isactive='1') as totalcase,(select ROUND(SUM(easycases.hours), 1) as hours from easycases where easycases.project_id=Project.id and easycases.reply_type='0' and easycases.isactive='1') as totalhours,(select count(company_users.id) as tot from company_users, project_users where project_users.user_id = company_users.user_id and project_users.company_id = company_users.company_id and company_users.is_active = 1
327 and project_users.project_id = Project.id) as totusers,(SELECT SUM(case_files.file_size) AS file_size FROM case_files WHERE case_files.project_id=Project.id) AS storage_used FROM projects AS Project WHERE Project.name!='' " . $query . " and name LIKE '%" . addslashes($pjname) . "%' ORDER BY dt_created DESC LIMIT $limit1,$limit2 ");
328 } else {
329
330 $prjAllArr = $this->Project->query("SELECT SQL_CALC_FOUND_ROWS Project.id,uniq_id,name,Project.user_id,project_type,short_name,Project.isactive,dt_updated,(select count(easycases.id) as tot from easycases where easycases.project_id=Project.id and easycases.istype='1' and easycases.isactive='1') as totalcase,(select ROUND(SUM(easycases.hours), 1) as hours from easycases where easycases.project_id=Project.id and easycases.reply_type='0' and easycases.isactive='1') as totalhours,(select count(company_users.id) as tot from company_users, project_users where project_users.user_id = company_users.user_id and project_users.company_id = company_users.company_id and company_users.is_active = 1
331 and project_users.project_id = Project.id) as totusers,(SELECT SUM(case_files.file_size) AS file_size FROM case_files WHERE case_files.project_id=Project.id) AS storage_used FROM projects AS Project WHERE Project.name!='' " . $query . " ORDER BY dt_created DESC LIMIT $limit1,$limit2");
332 }
333 } else {
334 if ($pjname) {
335 $prjAllArr = $this->Project->query("SELECT SQL_CALC_FOUND_ROWS id,uniq_id,name,user_id,project_type,short_name,isactive,dt_updated,(select count(easycases.id) as tot from easycases where easycases.project_id=Project.id and easycases.istype='1' and easycases.isactive='1') as totalcase,(select ROUND(SUM(easycases.hours), 1) as hours from easycases where easycases.project_id=Project.id and easycases.reply_type='0' and easycases.isactive='1') as totalhours,(select count(company_users.id) as tot from company_users, project_users where project_users.user_id = company_users.user_id and project_users.company_id = company_users.company_id and company_users.is_active = 1
336 and project_users.project_id = Project.id) as totusers,(SELECT SUM(case_files.file_size) AS file_size FROM case_files WHERE case_files.project_id=Project.id) AS storage_used FROM projects AS Project WHERE name!='' " . $query . " and name LIKE '%" . addslashes($pjname) . "%' ORDER BY dt_created DESC LIMIT $limit1,$limit2 ");
337 } else {
338 $prjAllArr = $this->Project->query("SELECT SQL_CALC_FOUND_ROWS id,uniq_id,name,user_id,project_type,short_name,isactive,dt_updated,(select count(easycases.id) as tot from easycases where easycases.project_id=Project.id and easycases.istype='1' and easycases.isactive='1') as totalcase,(select ROUND(SUM(easycases.hours), 1) as hours from easycases where easycases.project_id=Project.id and easycases.reply_type='0' and easycases.isactive='1') as totalhours,(select count(company_users.id) as tot from company_users, project_users where project_users.user_id = company_users.user_id and project_users.company_id = company_users.company_id and company_users.is_active = 1
339 and project_users.project_id = Project.id) as totusers,(SELECT SUM(case_files.file_size) AS file_size FROM case_files WHERE case_files.project_id=Project.id) AS storage_used FROM projects AS Project WHERE name!='' " . $query . " ORDER BY dt_created DESC LIMIT $limit1,$limit2");
340 }
341 }
342
343
344
345 $tot = $this->Project->query("SELECT FOUND_ROWS() as total");
346 $CaseCount = $tot[0][0]['total'];
347 $active_project_cnt = 0;
348 $inactive_project_cnt = 0;
349 if (SES_TYPE == 3) {
350 $grpcount = $this->Project->query('SELECT count(Project.id) as prjcnt, Project.isactive FROM projects AS Project WHERE Project.user_id=' . $this->Auth->user('id') . ' AND Project.company_id=' . SES_COMP . ' GROUP BY Project.isactive');
351 } else {
352 $grpcount = $this->Project->query('SELECT count(Project.id) as prjcnt, Project.isactive FROM projects AS Project WHERE Project.company_id=' . SES_COMP . ' GROUP BY Project.isactive');
353 }
354 if ($grpcount) {
355 foreach ($grpcount AS $key => $val) {
356 if ($val['Project']['isactive'] == 1) {
357 $active_project_cnt = $val['0']['prjcnt'];
358 } elseif ($val['Project']['isactive'] == 2) {
359 $inactive_project_cnt = $val['0']['prjcnt'];
360 }
361 }
362 }
363 $this->set('inactive_project_cnt', $inactive_project_cnt);
364 $this->set('active_project_cnt', $active_project_cnt);
365
366 $this->set('caseCount', $tot[0][0]['total']);
367
368 $this->set(compact('data'));
369 $this->set('total_records', $prjAllArr);
370 $this->set('proj_srch', $pjname);
371 $this->set('page_limit', $page_limit);
372 $this->set('page', $page);
373 $this->set('pageprev', $pageprev);
374 $count_grid = count($prjAllArr);
375 $this->set('count_grid', $count_grid);
376 $this->set('prjAllArr', $prjAllArr);
377 $this->set('projtype', $projtype);
378 $this->set('action', $action);
379 $this->set('uniqid', $uniqid);
380 $this->set('arrprj', $arrprj);
381 $this->set('page_limit', $page_limit);
382 $this->set('casePage', $page);
383 }
384
385 function add_project() {
386 $Company = ClassRegistry::init('Company');
387 $comp = $Company->find('first', array('fields' => array('Company.name')));
388 $userscls = ClassRegistry::init('User');
389 $companyusercls = ClassRegistry::init('CompanyUser');
390 $postProject['Project'] = $this->params->data['Project'];
391
392 if (isset($this->data['Project']['members_list']) && $this->data['Project']['members_list']) {
393
394 $emaillist = trim(trim($this->data['Project']['members_list']), ',');
395 if (strstr(trim($emaillist), ',')) {
396 $emailid = explode(',', $emaillist);
397 } else {
398 $emailid = explode(',', $emaillist);
399 }
400 $emailarr = array();
401 foreach ($emailid AS $ind => $data) {
402
403 if (trim($data) != '') {
404
405 $emailarr[$ind] = trim($data);
406 $cond .= " (email LIKE '%" . trim($data) . "%') OR";
407 }
408 }
409
410
411 if ($emailarr != '') {
412 $emailarr = array_unique($emailarr);
413 $cond = substr($cond, 0, strlen($cond) - 2);
414 $userlist = $userscls->find('list', array('conditions' => array($cond), 'fields' => array('id', 'email')));
415
416 if ($userlist) {
417 $compuserlist = $companyusercls->find('list', array('conditions' => array('company_id' => SES_COMP, 'user_id' => array_keys($userlist), 'is_active' => 1), 'fields' => array('CompanyUser.id', 'CompanyUser.user_id')));
418 #echo "<pre>";print_r($compuserlist);print_r($userlist);exit;
419 if ($compuserlist) {
420 foreach ($compuserlist AS $k1 => $value) {
421 $postProject['Project']['members'][] = $value;
422 $removeduserlist[] = $userlist[$value];
423 //$index = array_search($userlist[$value],$emailarr);
424 //unset($emailarr[$index]);
425 }
426
427 foreach ($emailarr AS $key1 => $edata) {
428 if (in_array(trim($edata), $removeduserlist)) {
429 unset($emailarr[$key1]);
430 }
431 }
432 }
433 }
434 }
435 }
436
437 $memberslist = array();
438 if ($postProject['Project']['members']) {
439 $memberslist = array_unique($postProject['Project']['members']);
440 } elseif (!$GLOBALS['project_count']) {
441 $memberslist[] = SES_ID;
442 }
443 #echo "<pre>";print_r($memberslist);exit;
444 if ($this->params->data['Project'] && $postProject['Project']['validate'] == 1) {
445 $findName = $this->Project->find('first', array('conditions' => array('Project.name' => $postProject['Project']['name'], 'Project.company_id' => SES_ID), 'fields' => array('Project.id')));
446 if ($findName) {
447 $this->Session->write("ERROR", "Project name '" . $postProject['Project']['name'] . "' already exists");
448 $this->redirect(HTTP_ROOT . "projects/manage/");
449 }
450 $findShrtName = $this->Project->find('first', array('conditions' => array('Project.short_name' => $postProject['Project']['short_name'], 'Project.company_id' => SES_ID), 'fields' => array('Project.id')));
451 if ($findShrtName) {
452 $this->Session->write("ERROR", "Project short name '" . $postProject['Project']['short_name'] . "' already exists");
453 $this->redirect(HTTP_ROOT . "projects/manage/");
454 }
455
456 $postProject['Project']['uniq_id'] = trim($postProject['Project']['name']);
457 $postProject['Project']['short_name'] = trim($postProject['Project']['short_name']);
458
459 $prjUniqId = md5(uniqid());
460 $postProject['Project']['uniq_id'] = $prjUniqId;
461 $postProject['Project']['user_id'] = SES_ID;
462 $postProject['Project']['project_type'] = 1;
463 if (isset($postProject['Project']['default_assign']) && !empty($postProject['Project']['default_assign'])) {
464 $postProject['Project']['default_assign'] = $postProject['Project']['default_assign'];
465 } else {
466 $postProject['Project']['default_assign'] = SES_ID;
467 }
468 $postProject['Project']['isactive'] = 1;
469 $postProject['Project']['name'] = trim($postProject['Project']['name']);
470 $postProject['Project']['dt_created'] = GMT_DATETIME;
471 $postProject['Project']['company_id'] = SES_COMP;
472
473 if ($this->Project->save($postProject)) {
474 $prjid = $this->Project->getLastInsertID();
475
476 $User = ClassRegistry::init('User');
477 $User->recursive = -1;
478 //$adminArr = $User->find("all",array('conditions'=>array('User.isactive'=>1,'User.istype'=>1),'fields'=>array('User.id')));
479
480 $ProjectUser = ClassRegistry::init('ProjectUser');
481 $ProjectUser->recursive = -1;
482 $getLastId = $ProjectUser->query("SELECT MAX(id) as maxid FROM project_users");
483 $lastid = $getLastId[0][0]['maxid'] + 1;
484 if (!empty($memberslist)) {
485 foreach ($memberslist as $members) {
486 $ProjUsr['ProjectUser']['id'] = $lastid;
487 $ProjUsr['ProjectUser']['project_id'] = $prjid;
488 $ProjUsr['ProjectUser']['user_id'] = $members;
489 $ProjUsr['ProjectUser']['company_id'] = SES_COMP;
490 $ProjUsr['ProjectUser']['default_email'] = 1;
491 $ProjUsr['ProjectUser']['istype'] = 1;
492 $ProjUsr['ProjectUser']['dt_visited'] = GMT_DATETIME;
493 $ProjectUser->saveAll($ProjUsr);
494 $lastid = $lastid + 1;
495 if ($this->Auth->user('id') != $members) {
496 $this->generateMsgAndSendPjMail($prjid, $members, $comp);
497 }
498 }
499 }
500
501
502
503 if (isset($postProject['Project']['module_id']) && isset($prjid) && $postProject['Project']['module_id']) {
504 //Add relation when template is added
505 $post_temp['TemplateModuleCase']['template_module_id'] = $postProject['Project']['module_id'];
506 $post_temp['TemplateModuleCase']['user_id'] = SES_ID;
507 $post_temp['TemplateModuleCase']['company_id'] = SES_COMP;
508 $post_temp['TemplateModuleCase']['project_id'] = $prjid;
509 $s = ClassRegistry::init('TemplateModuleCase')->save($post_temp);
510
511 $this->loadModel("ProjectTemplateCase");
512 $pjtemp = $this->ProjectTemplateCase->find('all', array('conditions' => array('ProjectTemplateCase.template_id' => $postProject['Project']['module_id']), 'order' => 'ProjectTemplateCase.sort ASC'));
513 $Easycase = ClassRegistry::init('Easycase');
514 $Easycase->recursive = -1;
515 $CaseActivity = ClassRegistry::init('CaseActivity');
516 foreach ($pjtemp as $temp) {
517 $postCases['Easycase']['uniq_id'] = md5(uniqid());
518 $postCases['Easycase']['project_id'] = $prjid;
519 $postCases['Easycase']['user_id'] = SES_ID;
520 $postCases['Easycase']['type_id'] = 2;
521 $postCases['Easycase']['priority'] = 1;
522 $postCases['Easycase']['title'] = $temp['ProjectTemplateCase']['title'];
523 $postCases['Easycase']['message'] = $temp['ProjectTemplateCase']['description'];
524 $postCases['Easycase']['assign_to'] = SES_ID;
525 $postCases['Easycase']['due_date'] = "";
526 $postCases['Easycase']['istype'] = 1;
527 $postCases['Easycase']['format'] = 2;
528 $postCases['Easycase']['status'] = 1;
529 $postCases['Easycase']['legend'] = 1;
530 $postCases['Easycase']['isactive'] = 1;
531 $postCases['Easycase']['dt_created'] = GMT_DATETIME;
532 $postCases['Easycase']['actual_dt_created'] = GMT_DATETIME;
533 $caseNoArr = $Easycase->find('first', array('conditions' => array('Easycase.project_id' => $prjid), 'fields' => array('MAX(Easycase.case_no) as caseno')));
534 $caseNo = $caseNoArr[0]['caseno'] + 1;
535 $postCases['Easycase']['case_no'] = $caseNo;
536 if ($Easycase->saveAll($postCases)) {
537 $caseid = $Easycase->getLastInsertID();
538 $CaseActivity->recursive = -1;
539 $CaseAct['easycase_id'] = $caseid;
540 $CaseAct['user_id'] = SES_ID;
541 $CaseAct['project_id'] = $prjid;
542 $CaseAct['case_no'] = $caseNo;
543 $CaseAct['type'] = 1;
544 $CaseAct['dt_created'] = GMT_DATETIME;
545 $CaseActivity->saveAll($CaseAct);
546 }
547 }
548 }
549
550 if ($emailarr != '') {
551 $inviteduserlist = $this->invitenewuser($emailarr, $prjid, $this);
552 }
553 $this->Session->write("SUCCESS", "'" . strip_tags($postProject['Project']['name']) . "' created successfully");
554
555 setcookie('LAST_CREATED_PROJ', $prjid, time() + 3600, '/', DOMAIN_COOKIE, false, false);
556
557 $CompanyUser = ClassRegistry::init('CompanyUser');
558 $checkMem = $CompanyUser->find('all', array('conditions' => array('CompanyUser.company_id' => SES_COMP, 'CompanyUser.is_active' => 1)));
559 if (isset($checkMem['CompanyUser']['id']) && $checkMem['CompanyUser']['id']) {
560// $ProjectUser = ClassRegistry::init("ProjectUser");
561// $checkProjusr = $ProjectUser->find('first',array('conditions'=>array('ProjectUser.project_id'=>$prjid,'ProjectUser.user_id !='=>SES_ID)));
562//
563// if(isset($checkProjusr['ProjectUser']['id']) && $checkProjusr['ProjectUser']['id']) {
564// //setcookie('CREATE_CASE',1,time()+3600,'/',DOMAIN_COOKIE,false,false);
565// $this->redirect(HTTP_ROOT."dashboard");
566// }
567// else {
568 if (count($memberslist) < count($checkMem)) {
569 setcookie('LAST_PROJ', $prjid, time() + 3600, '/', DOMAIN_COOKIE, false, false);
570 }
571 setcookie('ASSIGN_USER', $prjid, time() + 3600, '/', DOMAIN_COOKIE, false, false);
572 setcookie('PROJ_NAME', trim($postProject['Project']['name']), time() + 3600, '/', DOMAIN_COOKIE, false, false);
573 $this->redirect(HTTP_ROOT . "projects/manage");
574 } else {
575 //setcookie('INVITE_USER',1,time()+3600,'/',DOMAIN_COOKIE,false,false);
576 //$this->redirect(HTTP_ROOT."dashboard");
577 if ($GLOBALS['project_count'] >= 1) {
578 if (count($memberslist) < count($checkMem)) {
579 setcookie('LAST_PROJ', $prjid, time() + 3600, '/', DOMAIN_COOKIE, false, false);
580 }
581 $this->redirect(HTTP_ROOT . "projects/manage");
582 } else {
583 $this->redirect(HTTP_ROOT . 'onbording');
584 }
585 }
586
587 //setcookie('NEW_PROJECT',$prjid,time()+3600,'/',DOMAIN_COOKIE,false,false);
588 }
589 } else {
590 $this->Session->write("ERROR", "Error creating project");
591 $this->redirect(HTTP_ROOT . "projects/manage/");
592 }
593 }
594
595 function check_proj_short_name() {
596 $this->layout = 'ajax';
597 ob_clean();
598 if (isset($this->params->data['shortname']) && trim($this->params->data['shortname'])) {
599 $count = $this->Project->find("count", array("conditions" => array('Project.short_name' => trim(strtoupper($this->params->data['shortname'])), 'Project.company_id' => SES_COMP), 'fields' => 'DISTINCT Project.id'));
600 $this->set('count', $count);
601 $this->set('shortname', trim(strtoupper($this->params->data['shortname'])));
602 }
603 }
604
605 function assign() {
606 if (isset($this->request->data['ProjectUser']['project_id'])) {
607
608
609
610
611
612 $projectid = $this->request->data['ProjectUser']['project_id'];
613
614 $lists1 = $this->request->data['ProjectUser']['mem_avl'] . ",";
615 $lis1 = explode(",", $lists1);
616
617
618
619 $lists2 = $this->request->data['ProjectUser']['mem_ext'];
620
621 $lis2 = explode(",", $lists2);
622
623
624 $lis1 = array_filter($lis1);
625 $lis2 = array_filter($lis2);
626
627
628
629
630 $ProjectUser = ClassRegistry::init('ProjectUser');
631 $ProjectUser->recursive = -1;
632 $getLastId = $ProjectUser->query("SELECT MAX(id) as maxid FROM project_users");
633 $lastid = $getLastId[0][0]['maxid'];
634
635 $query = "";
636 $Easycase = ClassRegistry::init('Easycase');
637 $Easycase->recursive = -1;
638 $getcaseIds = $Easycase->find("all", array('conditions', array('Easycase.project_id' => $projectid, 'Easycase.istype' => 1), 'fields' => array('Easycase.id')));
639
640 $CaseUserEmail = ClassRegistry::init('CaseUserEmail');
641 $CaseUserEmail->recursive = -1;
642 if (count($lis1)) {
643 foreach ($lis1 as $ids1) {
644 $checkAvlMem1 = $ProjectUser->find('count', array('conditions' => array('ProjectUser.user_id' => $ids1, 'ProjectUser.project_id' => $projectid), 'fields' => 'DISTINCT ProjectUser.id'));
645 if ($checkAvlMem1) {
646 $ProjectUser->query("DELETE FROM project_users WHERE user_id=" . $ids1 . " AND project_id=" . $projectid);
647
648 if (count($getcaseIds)) {
649 foreach ($getcaseIds as $getid) {
650 if ($getid['Easycase']['id']) {
651 $CaseUserEmail->query("UPDATE case_user_emails SET ismail='0' WHERE user_id=" . $ids1 . " AND easycase_id=" . $getid['Easycase']['id']);
652 }
653 }
654 }
655 }
656 }
657 }
658 if (count($lis2)) {
659 foreach ($lis2 as $ids2) {
660 $checkAvlMem2 = $ProjectUser->find('count', array('conditions' => array('ProjectUser.user_id' => $ids2, 'ProjectUser.project_id' => $projectid), 'fields' => 'DISTINCT id'));
661 if ($checkAvlMem2 == 0) {
662 $lastid++;
663 $ProjectUser->query("INSERT INTO project_users SET id='" . $lastid . "',user_id=" . $ids2 . ",project_id=" . $projectid . ",company_id='" . SES_COMP . "',dt_visited='" . GMT_DATETIME . "'");
664
665 if (count($getcaseIds)) {
666 foreach ($getcaseIds as $getid) {
667 if ($getid['Easycase']['id']) {
668 $CaseUserEmail->query("UPDATE case_user_emails SET ismail='1' WHERE user_id=" . $ids2 . " AND easycase_id=" . $getid['Easycase']['id']);
669 }
670 }
671 }
672 }
673 }
674 }
675
676 $prjid = $this->request->data['ProjectUser']['project_id'];
677 $getProj = $this->Project->find('first', array('conditions' => array('Project.isactive' => 1, 'Project.id' => $prjid), 'fields' => array('Project.uniq_id', 'Project.name')));
678
679 $this->Session->write("SUCCESS", "User(s) successfully assigned to '" . $getProj['Project']['name'] . "'");
680 $this->redirect(HTTP_ROOT . "projects/assign/?pid=" . $getProj['Project']['uniq_id']);
681 }
682
683 $pid = NULL;
684 $projId = NULL;
685 $memsAvlArr = array();
686 $custAvlArr = array();
687 $memsExtArr = array();
688 $custExtArr = array();
689 $this->Project->recursive = -1;
690 $projArr = $this->Project->find('all', array('conditions' => array('Project.isactive' => 1, 'Project.name !=' => '', 'Project.company_id' => SES_COMP), 'fields' => array('DISTINCT Project.uniq_id,Project.name')));
691
692 if (isset($_GET['pid']) && $_GET['pid']) {
693 $pid = $_GET['pid'];
694
695 $getProj = $this->Project->find('first', array('conditions' => array('Project.isactive' => 1, 'Project.uniq_id' => $pid, 'Project.company_id' => SES_COMP), 'fields' => array('Project.id')));
696 if (count($getProj['Project'])) {
697 $projId = $getProj['Project']['id'];
698
699 $ProjectUser = ClassRegistry::init('ProjectUser');
700 //$ProjectUser->unbindModel(array('belongsTo' => array('Project')));
701
702 if (SES_TYPE == 1) {
703 $memsAvlArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND User.isactive='1' AND User.name!='' AND NOT EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projId . ") ORDER BY User.istype ASC,User.name");
704
705 $memsExtArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser,project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND User.isactive='1' AND User.name!='' AND ProjectUser.project_id=" . $projId . " ORDER BY User.istype ASC,User.name");
706 } else {
707 $memsAvlArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.user_type!='1' AND User.isactive='1' AND User.name!='' AND NOT EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projId . ") ORDER BY User.istype ASC,User.name");
708
709
710
711 $memsExtArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser,project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND User.id = CompanyUser.user_id AND CompanyUser.user_type!='1' AND CompanyUser.company_id='" . SES_COMP . "' AND User.isactive='1' AND User.name!='' AND ProjectUser.project_id=" . $projId . " ORDER BY User.istype ASC,User.name");
712 }
713 }
714 }
715 $this->set('projArr', $projArr);
716 $this->set('memsAvlArr', $memsAvlArr);
717 //$this->set('custAvlArr',$custAvlArr);
718 $this->set('memsExtArr', $memsExtArr);
719 //$this->set('custExtArr',$custExtArr);
720 $this->set('pid', $pid);
721 $this->set('projId', $projId);
722 }
723
724 function gridview($projtype = NULL) {
725 $page_limit = 15;
726 $this->Project->recursive = -1;
727 $pjid = NULL;
728 if (isset($_GET['id']) && $_GET['id']) {
729 $pjid = $_GET['id'];
730 }
731 if (isset($_GET['proj_srch']) && $_GET['proj_srch']) {
732 $pjname = htmlentities(strip_tags($_GET['proj_srch']));
733 $this->set('prjsrch', 'project search');
734 }
735 if (isset($_GET['page']) && $_GET['page']) {
736 $page = $_GET['page'];
737 }
738 if (trim($pjid)) {
739 $project = "Project";
740 $getProj = $this->Project->find('first', array('conditions' => array('Project.id' => $pjid, 'Project.company_id' => SES_COMP), 'fields' => array('Project.name', 'Project.id')));
741 if (isset($getProj['Project']['name']) && $getProj['Project']['name']) {
742 $project = $getProj['Project']['name'];
743 }
744 if ($getProj['Project']['id']) {
745 if (isset($_GET['action']) && $_GET['action'] == "activate") {
746 $this->Project->query("UPDATE projects SET isactive='1' WHERE id=" . $getProj['Project']['id']);
747 $this->Session->write("SUCCESS", "'" . $project . "' activated successfully");
748 $redirect = HTTP_ROOT . "projects/manage/inactive/";
749 if (isset($_GET['pg']) && (intval($_GET['pg']) > 1)) {
750 $redirect = HTTP_ROOT . "projects/manage/inactive/?page=" . $_GET['pg'];
751 }
752 $this->redirect($redirect);
753 }
754 if (isset($_GET['action']) && $_GET['action'] == "delete") {
755 $this->Project->query("DELETE FROM projects WHERE id=" . $getProj['Project']['id']);
756
757 $ProjectUser = ClassRegistry::init('ProjectUser');
758 $ProjectUser->recursive = -1;
759 $ProjectUser->query("DELETE FROM project_users WHERE project_id=" . $getProj['Project']['id']);
760
761 $this->Session->write("SUCCESS", "'" . $project . "' deleted successfully");
762 $this->redirect(HTTP_ROOT . "projects/gridview/");
763 }
764 if (isset($_GET['action']) && $_GET['action'] == "deactivate") {
765 $redirect = HTTP_ROOT . "projects/manage/";
766 if (isset($_GET['pg']) && (intval($_GET['pg']) > 1)) {
767 $redirect = HTTP_ROOT . "projects/manage/?page=" . $_GET['pg'];
768 }
769 $this->Project->query("UPDATE projects SET isactive='2' WHERE id=" . $getProj['Project']['id']);
770 $this->Session->write("SUCCESS", "'" . $project . "' deactivated successfully");
771 $this->redirect($redirect);
772 }
773 } else {
774 $this->Session->write("ERROR", "Invalid or Wrong action!");
775 $this->redirect(HTTP_ROOT . "projects/gridview");
776 }
777 }
778
779 $action = "";
780 $uniqid = "";
781 $query = "";
782 if (isset($_GET['uniqid']) && $_GET['uniqid']) {
783 $uniqid = $_GET['uniqid'];
784 }
785 if ($projtype == "disabled") {
786 $query = "AND isactive='2'";
787 } else {
788 $query = "AND isactive='1'";
789 }
790 $query .= " AND company_id='" . SES_COMP . "'";
791 if (isset($_GET['action']) && $_GET['action']) {
792 $action = $_GET['action'];
793 }
794 $page = 1;
795 $pageprev = 1;
796 if (isset($_GET['page']) && $_GET['page']) {
797 $page = $_GET['page'];
798 }
799 $limit1 = $page * $page_limit - $page_limit;
800 $limit2 = $page_limit;
801
802 $prjselect = $this->Project->query("SELECT name FROM projects AS Project WHERE name!='' " . $query . " ORDER BY name");
803 $arrprj = array();
804 foreach ($prjselect as $pjall) {
805 if (isset($pjall['Project']['name']) && !empty($pjall['Project']['name'])) {
806 array_push($arrprj, substr(trim($pjall['Project']['name']), 0, 1));
807 }
808 }
809 if (isset($_GET['prj']) && $_GET['prj']) {
810 //$_GET['prj'] = Sanitize::clean($_GET['prj'], array('encode' => false));
811 $_GET['prj'] = chr($_GET['prj']);
812 $pj = $_GET['prj'] . "%";
813 $query .= " AND name LIKE '" . addslashes($pj) . "'";
814 }
815
816 if ($pjname) {
817 $prjAllArr = $this->Project->query("SELECT SQL_CALC_FOUND_ROWS id,uniq_id,name,user_id,project_type,short_name,isactive,(select count(easycases.id) as tot from easycases where easycases.project_id=Project.id and easycases.istype='1' and easycases.isactive='1') as totalcase,(select ROUND(SUM(easycases.hours), 1) as hours from easycases where easycases.project_id=Project.id and easycases.istype='2' and easycases.isactive='1') as totalhours,(select count(company_users.id) as tot from company_users, project_users where project_users.user_id = company_users.user_id and project_users.company_id = company_users.company_id and company_users.is_active = 1
818and project_users.project_id = Project.id) as totusers,(SELECT SUM(case_files.file_size) AS file_size FROM case_files WHERE case_files.project_id=Project.id) AS storage_used FROM projects AS Project WHERE name!='' " . $query . " and name LIKE '%" . addslashes($pjname) . "%' ORDER BY name LIMIT $limit1,$limit2 ");
819 } else {
820 $prjAllArr = $this->Project->query("SELECT SQL_CALC_FOUND_ROWS id,uniq_id,name,user_id,project_type,short_name,isactive,(select count(easycases.id) as tot from easycases where easycases.project_id=Project.id and easycases.istype='1' and easycases.isactive='1') as totalcase,(select ROUND(SUM(easycases.hours), 1) as hours from easycases where easycases.project_id=Project.id and easycases.istype='2' and easycases.isactive='1') as totalhours,(select count(company_users.id) as tot from company_users, project_users where project_users.user_id = company_users.user_id and project_users.company_id = company_users.company_id and company_users.is_active = 1
821and project_users.project_id = Project.id) as totusers,(SELECT SUM(case_files.file_size) AS file_size FROM case_files WHERE case_files.project_id=Project.id) AS storage_used FROM projects AS Project WHERE name!='' " . $query . " ORDER BY name LIMIT $limit1,$limit2");
822 }
823
824 $tot = $this->Project->query("SELECT FOUND_ROWS() as total");
825 $CaseCount = $tot[0][0]['total'];
826 $this->set('caseCount', $tot[0][0]['total']);
827
828 $this->set(compact('data'));
829 $this->set('total_records', $prjAllArr);
830 $this->set('proj_srch', $pjname);
831 $this->set('page_limit', $page_limit);
832 $this->set('page', $page);
833 $this->set('pageprev', $pageprev);
834 $count_grid = count($prjAllArr);
835 $this->set('count_grid', $count_grid);
836 $this->set('prjAllArr', $prjAllArr);
837 $this->set('projtype', $projtype);
838 $this->set('action', $action);
839 $this->set('uniqid', $uniqid);
840 $this->set('arrprj', $arrprj);
841 $this->set('page_limit', $page_limit);
842 $this->set('casePage', $page);
843 }
844
845 function groupupdatealerts() {
846
847 $this->loadModel('Project');
848 $this->loadModel('ProjectUser');
849 $project = $this->Project->getAllProjects();
850 //$projectsForUser = $this->ProjectUser->getAllProjectsForUsers();
851 $this->set('project', $project);
852 }
853
854 function projectMembers() {
855 $this->layout = 'ajax';
856
857 //Getting project id
858 $this->loadModel('Project');
859 $project = $this->Project->getProjectFields(array('Project.uniq_id' => $this->params->data['id']), array('id'));
860
861 //Getting project members of correspoding project
862 $this->loadModel('ProjectUser');
863 $projectuser = $this->ProjectUser->getProjectMembers($project['Project']['id']);
864
865 //To whom sent an email
866 $this->loadModel('DailyUpdate');
867 $selecteduser = $this->DailyUpdate->getDailyUpdateFields($project['Project']['id']);
868
869 $this->loadModel('TimezoneName');
870 $timezones = $this->TimezoneName->find('all');
871 $this->set('timezones', $timezones);
872
873 $this->set('projectuser', $projectuser);
874 $this->set('selecteduser', $selecteduser);
875 }
876
877 function dailyUpdate() {
878
879
880 //Getting project id
881 $this->loadModel('Project');
882 $project = $this->Project->getProjectFields(array('Project.uniq_id' => $this->data['Project']['uniq_id']), array('id'));
883
884 $usr = $this->data['Project']['user'];
885 $this->loadModel('User');
886
887 //Getting user ids
888 $uids = '';
889 foreach ($usr as $key => $value) {
890 $user = $this->User->getUserFields(array('User.uniq_id' => $value), array('id'));
891 $uids .= "," . $user['User']['id'];
892 }
893
894 //Making an array to insert or update
895 $data['company_id'] = SES_COMP;
896 $data['project_id'] = $project['Project']['id'];
897 $data['post_by'] = SES_ID;
898 $data['user_id'] = ltrim($uids, ",");
899 $data['timezone_id'] = $this->data['Project']['timezone_id'];
900 $data['notification_time'] = trim($this->data['Project']['hour']) . ":" . trim($this->data['Project']['minute']);
901 $data['days'] = $this->data['Project']['days'];
902
903 $this->loadModel('DailyUpdate');
904 //Check if insert or update
905 $this->loadModel('DailyUpdate');
906 $selecteduser = $this->DailyUpdate->getDailyUpdateFields($project['Project']['id']);
907 if (isset($selecteduser['DailyUpdate']) && !empty($selecteduser['DailyUpdate'])) {
908 $this->DailyUpdate->id = $selecteduser['DailyUpdate']['id'];
909 }
910
911 //Save or update records
912 if ($this->DailyUpdate->save($data)) {
913
914 $this->Session->write("SUCCESS", "Group update alert has been saved successfully.");
915 } else {
916
917 $this->Session->write("ERROR", "Failed to save of Group update alert.");
918 }
919
920 $this->redirect(HTTP_ROOT . "projects/groupupdatealerts");
921 }
922
923 function cancelDailyUpdate() {
924 if (intval($this->params['pass'][0])) {
925 $this->loadModel('DailyUpdate');
926 if ($this->DailyUpdate->delete($this->params['pass'][0])) {
927
928 $this->Session->write("SUCCESS", "Group update alert has been saved successfully.");
929 } else {
930
931 $this->Session->write("ERROR", "Failed to save of Group update alert.");
932 }
933 } else {
934
935 $this->Session->write("ERROR", "Failed to save of Group update alert.");
936 }
937
938 $this->redirect(HTTP_ROOT . "projects/groupupdatealerts");
939 }
940
941 function user_listing() {
942 $this->layout = 'ajax';
943 $projId = trim($this->params->data['project_id']);
944 if (isset($this->params->data['userid']) && $this->params->data['userid'] && isset($this->params->data['InvitedUser']) && trim($this->params->data['InvitedUser'])) {
945 $UserInvitation = ClassRegistry::init('UserInvitation');
946 $UserInvitation->unbindModel(array('belongsTo' => array('Project')));
947 $checkAvlInvMem = $UserInvitation->query("SELECT * FROM `user_invitations` WHERE find_in_set('" . $projId . "', `user_invitations`.project_id) > 0 AND `user_invitations`.is_active = '1' AND `user_invitations`.user_id = '" . $this->params->data['userid'] . "'");
948 if ($checkAvlInvMem && !empty($checkAvlInvMem[0]['user_invitations']['project_id'])) {
949 $pattern_array = array("/(,$projId,)/", "/(^$projId,)/", "/(,$projId$)/", "/(^$projId$)/");
950 $replace_array = array(",", "", "", "");
951 $mstr = preg_replace($pattern_array, $replace_array, $checkAvlInvMem[0]['user_invitations']['project_id']);
952 $UserInvitation->query("UPDATE user_invitations SET project_id = '" . $mstr . "' where id = '" . $checkAvlInvMem[0]['user_invitations']['id'] . "'");
953 }
954 echo "updated";
955 exit;
956 }
957 if (isset($this->params->data['userid']) && $this->params->data['userid']) {
958 $uid = $this->params->data['userid'];
959 $ProjectUser = ClassRegistry::init('ProjectUser');
960 $ProjectUser->unbindModel(array('belongsTo' => array('Project')));
961 $checkAvlMem3 = $ProjectUser->find('count', array('conditions' => array('ProjectUser.user_id' => $uid, 'ProjectUser.project_id' => $projId), 'fields' => 'DISTINCT ProjectUser.id'));
962 if ($checkAvlMem3) {
963 $ProjectUser->query("DELETE FROM project_users WHERE user_id=" . $uid . " AND project_id=" . $projId);
964 }
965 //Remove from Group update table , that user should not get mail when he is removed from a project.
966 $this->loadModel('DailyUpdate');
967 $DailyUpdate = $this->DailyUpdate->getDailyUpdateFields($projId, array('DailyUpdate.id', 'DailyUpdate.user_id'));
968 if (isset($DailyUpdate) && !empty($DailyUpdate)) {
969 $user_ids = explode(",", $DailyUpdate['DailyUpdate']['user_id']);
970 if (($index = array_search($uid, $user_ids)) !== false) {
971 unset($user_ids[$index]);
972 }
973 $du['user_id'] = implode(",", $user_ids);
974 $this->DailyUpdate->id = $DailyUpdate['DailyUpdate']['id'];
975 $this->DailyUpdate->save($du);
976 }
977 echo "removed";
978 exit;
979 }
980
981 $qry = '';
982 if (isset($this->params->data['name']) && trim($this->params->data['name'])) {
983 $name = trim($this->params->data['name']);
984 $qry = " AND User.name LIKE '%$name%'";
985 }
986
987 $ProjectUser = ClassRegistry::init('ProjectUser');
988 $ProjectUser->unbindModel(array('belongsTo' => array('Project')));
989 $memsArr = $ProjectUser->query("SELECT DISTINCT User.*,CompanyUser.*,ProjectUser.* FROM users AS User,company_users AS CompanyUser,project_users AS ProjectUser WHERE User.id=CompanyUser.user_id AND User.id=ProjectUser.user_id AND ProjectUser.project_id='" . $projId . "' AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active=1" . $qry . " ORDER BY User.name ASC");
990 $memsExtArr['Member'] = $memsArr;
991
992 $UserInvitation = ClassRegistry::init('UserInvitation');
993 $memsUserInvArr = $UserInvitation->query("SELECT * FROM users AS User,user_invitations AS UserInvitation,company_users AS CompanyUser WHERE User.id=CompanyUser.user_id AND User.id=UserInvitation.user_id AND UserInvitation.company_id='" . SES_COMP . "' AND find_in_set('" . $projId . "', UserInvitation.project_id) > 0 AND UserInvitation.is_active = '1' AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active=2" . $qry . " ORDER BY User.name ASC");
994 $memsExtArr['Invited'] = $memsUserInvArr;
995
996 $CompanyUser = ClassRegistry::init('CompanyUser');
997 $memsUserDisArr = $CompanyUser->query("SELECT DISTINCT User.*,CompanyUser.*,ProjectUser.* FROM users AS User,company_users AS CompanyUser,project_users AS ProjectUser WHERE User.id=CompanyUser.user_id AND User.id=ProjectUser.user_id AND ProjectUser.project_id='" . $projId . "' AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active=0" . $qry . " ORDER BY User.name ASC");
998 $memsExtArr['Disabled'] = $memsUserDisArr;
999
1000 $this->set('memsExtArr', $memsExtArr);
1001 $this->set('pjid', $projId);
1002 }
1003
1004 function add_user() {
1005 $this->layout = 'ajax';
1006 $projid = $this->params->data['pjid'];
1007 $pjname = urldecode($this->params->data['pjname']);
1008 $cntmng = $this->params->data['cntmng'];
1009 $query = "";
1010 if (isset($this->params->data['name']) && trim($this->params->data['name'])) {
1011 $srchstr = addslashes($this->params->data['name']);
1012 $query = "AND User.name LIKE '%$srchstr%'";
1013 }
1014
1015 $ProjectUser = ClassRegistry::init('ProjectUser');
1016
1017 $ProjectUser->unbindModel(array('belongsTo' => array('Project')));
1018
1019 if (SES_TYPE == 1) {
1020 $memsNotExstArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND NOT EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projid . ") ORDER BY User.name");
1021 $memsExstArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projid . ") ORDER BY User.name");
1022 } else {
1023 $memsNotExstArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND NOT EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projid . ") ORDER BY User.name");
1024 $memsExstArr = $ProjectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projid . ") ORDER BY User.name");
1025 }
1026 $this->set('pjname', $pjname);
1027 $this->set('projid', $projid);
1028 $this->set('memsNotExstArr', $memsNotExstArr);
1029 $this->set('memsExstArr', $memsExstArr);
1030 $this->set('cntmng', $cntmng);
1031 }
1032
1033 function fetch_user() {
1034 $this->layout = 'ajax';
1035 $projectId = $this->params->data['project_id'];
1036 $query = "";
1037
1038 $projectUser = ClassRegistry::init('ProjectUser');
1039
1040 $projectUser->unbindModel(['belongsTo' => ['Project']]);
1041
1042 if (SES_TYPE == 1) {
1043 $memsNotExstArr = $projectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND NOT EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projectId . ") ORDER BY User.name");
1044 $memsExstArr = $projectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projectId . ") ORDER BY User.name");
1045 } else {
1046 $memsNotExstArr = $projectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND NOT EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projectId . ") ORDER BY User.name");
1047 $memsExstArr = $projectUser->query("SELECT DISTINCT User.id,User.name,User.email,User.istype,User.short_name,CompanyUser.user_type FROM users AS User, company_users AS CompanyUser WHERE User.id = CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND User.isactive='1' AND User.name!='' " . $query . " AND EXISTS(SELECT ProjectUser.user_id FROM project_users AS ProjectUser WHERE ProjectUser.user_id=User.id AND ProjectUser.project_id=" . $projectId . ") ORDER BY User.name");
1048 }
1049
1050
1051
1052 $res['membersExist'] = $memsExstArr;
1053 $res['membersNotExist'] = $memsNotExstArr;
1054 echo json_encode($res);
1055 exit();
1056 }
1057
1058 function assign_userall() {
1059 $this->layout = 'ajax';
1060 $userid = $this->params->data['userid'];
1061 $pjid = $this->params->data['pjid'];
1062
1063 $Company = ClassRegistry::init('Company');
1064 $comp = $Company->find('first', array('fields' => array('Company.name')));
1065
1066 $ProjectUser = ClassRegistry::init('ProjectUser');
1067 $ProjectUser->recursive = -1;
1068
1069 $getLastId = $ProjectUser->query("SELECT MAX(id) as maxid FROM project_users");
1070 $lastid = $getLastId[0][0]['maxid'];
1071
1072 $Easycase = ClassRegistry::init('Easycase');
1073 $Easycase->recursive = -1;
1074
1075 $CaseUserEmail = ClassRegistry::init('CaseUserEmail');
1076 $CaseUserEmail->recursive = -1;
1077
1078 //$getcaseIds = $Easycase->find("all",array('conditions', array('Easycase.project_id' => $pjid, 'Easycase.istype' => 1), 'fields' => array('Easycase.id')));
1079 if (count($userid)) {
1080 foreach ($userid as $id) {
1081 $checkAvlMem2 = $ProjectUser->find('count', array('conditions' => array('ProjectUser.user_id' => $id, 'ProjectUser.project_id' => $pjid, 'ProjectUser.company_id' => SES_COMP), 'fields' => 'DISTINCT id'));
1082 if ($checkAvlMem2 == 0) {
1083 $lastid++;
1084 $ProjectUser->query("INSERT INTO project_users SET id='" . $lastid . "',user_id=" . $id . ",project_id=" . $pjid . ",company_id=" . SES_COMP . ",dt_visited='" . GMT_DATETIME . "'");
1085
1086 /* if(count($getcaseIds))
1087 {
1088 foreach($getcaseIds as $getid)
1089 {
1090 if($getid['Easycase']['id']) {
1091 $CaseUserEmail->query("UPDATE case_user_emails SET ismail='1' WHERE user_id=".$id." AND easycase_id=".$getid['Easycase']['id']);
1092 }
1093 }
1094 } */
1095 }
1096 }
1097 }
1098 if (count($userid)) {
1099 $Company = ClassRegistry::init('Company');
1100 $comp = $Company->find('first', array('fields' => array('Company.name')));
1101 foreach ($userid as $id) {
1102 $this->generateMsgAndSendPjMail($pjid, $id, $comp);
1103 }
1104 }
1105 echo "success";
1106 exit;
1107 }
1108
1109 function add_template() {
1110 //pr($this->request);exit;
1111 if (isset($this->request->data['ProjectTemplateCase']) && !empty($this->request->data['ProjectTemplateCase'])) {
1112 if (isset($this->request->data['submit_template']) && count($this->request->data['ProjectTemplateCase']['title'])) {
1113 $this->loadModel('ProjectTemplateCase');
1114 $arr = $this->request->data['ProjectTemplateCase']['title'];
1115 $count_arr = 0;
1116 foreach ($arr as $cs) {
1117 if (isset($cs) && !empty($cs)) {
1118 $temp_case['user_id'] = SES_ID;
1119 $temp_case['company_id'] = SES_COMP;
1120 $temp_case['template_id'] = $this->request->data['ProjectTemplateCase']['template_id'];
1121 $temp_case['title'] = $cs;
1122 $temp_case['description'] = $this->request->data['ProjectTemplateCase']['description'][$count_arr];
1123 $this->ProjectTemplateCase->saveAll($temp_case);
1124 }
1125 $count_arr++;
1126 }
1127 }
1128 $this->Session->write("SUCCESS", "Template tasks added successfully");
1129 $this->redirect(HTTP_ROOT . "projects/manage_template/");
1130 }
1131 $this->loadModel('ProjectTemplate');
1132 $prj = $this->ProjectTemplate->find('all', array('conditions' => array('ProjectTemplate.company_id' => SES_COMP, 'ProjectTemplate.is_active' => 1), 'fields' => array('ProjectTemplate.id', 'ProjectTemplate.module_name')));
1133 $this->set('template_mod', $prj);
1134 }
1135
1136 function manage_template() {
1137 if (isset($_GET['id']) && !empty($_GET['id'])) {
1138 $this->loadModel("ProjectTemplate");
1139 $this->ProjectTemplate->id = $_GET['id'];
1140 $this->ProjectTemplate->delete();
1141 ClassRegistry::init('ProjectTemplateCase')->query("Delete FROM project_template_cases WHERE template_id='" . $_GET['id'] . "'");
1142 $this->Session->write("SUCCESS", "Template Deleted successfully");
1143 $this->redirect(HTTP_ROOT . "projects/manage_template/");
1144 } else if (isset($this->request->query['act']) && $this->request->query['act']) {
1145 $v = urldecode(trim($this->request->query['act']));
1146 $this->loadModel("ProjectTemplate");
1147 $this->ProjectTemplate->id = $v;
1148 if ($this->ProjectTemplate->saveField("is_active", 1)) {
1149 $this->Session->write("SUCCESS", "Template activated successfully");
1150 $this->redirect(HTTP_ROOT . "projects/manage_template/");
1151 } else {
1152 $this->Session->write("ERROR", "Template can't be activated.Please try again.");
1153 $this->redirect(HTTP_ROOT . "projects/manage_template/");
1154 }
1155 } else if (isset($this->request->query['inact']) && $this->request->query['inact']) {
1156 $v = urldecode(trim($this->request->query['inact']));
1157 $this->loadModel("ProjectTemplate");
1158 $this->ProjectTemplate->id = $v;
1159 if ($this->ProjectTemplate->saveField("is_active", 0)) {
1160 $this->Session->write("SUCCESS", "Template deactivated successfully");
1161 $this->redirect(HTTP_ROOT . "projects/manage_template/");
1162 } else {
1163 $this->Session->write("ERROR", "Template can't be deactivated.Please try again.");
1164 $this->redirect(HTTP_ROOT . "projects/manage_template/");
1165 }
1166 }
1167 $proj_temp = ClassRegistry::init('ProjectTemplate')->find('all', array('conditions' => array('ProjectTemplate.company_id' => SES_COMP)));
1168 $proj_temp_active = ClassRegistry::init('ProjectTemplate')->find('all', array('conditions' => array('ProjectTemplate.company_id' => SES_COMP, 'ProjectTemplate.is_active' => 1)));
1169 $this->set('proj_temp', $proj_temp);
1170 $this->set('proj_temp_active', $proj_temp_active);
1171 }
1172
1173 function ajax_add_template_module() {
1174 //print_r($this->params->data['title']);exit;
1175 $this->layout = 'ajax';
1176 $title = $this->params->data['title'];
1177 if (isset($this->params->data['title']) && !empty($this->params->data['title'])) {
1178 $this->loadModel('ProjectTemplate');
1179 $prj = $this->ProjectTemplate->find('count', array('conditions' => array('ProjectTemplate.module_name' => $this->params->data['title'], 'ProjectTemplate.company_id' => SES_COMP)));
1180 if ($prj == 0) {
1181 $this->request->data['ProjectTemplate']['user_id'] = SES_ID;
1182 $this->request->data['ProjectTemplate']['company_id'] = SES_COMP;
1183 $this->request->data['ProjectTemplate']['module_name'] = $this->params->data['title'];
1184 $this->request->data['ProjectTemplate']['is_default'] = 1;
1185 $this->request->data['ProjectTemplate']['is_active'] = 1;
1186 if ($this->ProjectTemplate->save($this->request->data)) {
1187 $last_insert_id = $this->ProjectTemplate->getLastInsertId();
1188 echo $title . "-" . $last_insert_id;
1189 } else {
1190 echo "0";
1191 }
1192 } else {
1193 echo "0";
1194 }
1195 }
1196 exit;
1197 }
1198
1199 function ajax_add_template_cases() {
1200 $this->layout = 'ajax';
1201 ob_clean();
1202 if (isset($this->params->data['pj_id']) && isset($this->params->data['temp_mod_id'])) {
1203 $this->loadModel('TemplateModuleCase');
1204 $prj = $this->TemplateModuleCase->find('count', array('conditions' => array('TemplateModuleCase.company_id' => SES_COMP, 'TemplateModuleCase.project_id' => $this->params->data['pj_id'])));
1205 if ($prj == 0) {
1206 $this->request->data['TemplateModuleCase']['template_module_id'] = $this->params->data['temp_mod_id'];
1207 $this->request->data['TemplateModuleCase']['user_id'] = SES_ID;
1208 $this->request->data['TemplateModuleCase']['company_id'] = SES_COMP;
1209 $this->request->data['TemplateModuleCase']['project_id'] = $this->params->data['pj_id'];
1210 if ($this->TemplateModuleCase->save($this->request->data)) {
1211 $this->loadModel("ProjectTemplateCase");
1212 $pjtemp = $this->ProjectTemplateCase->find('all', array('conditions' => array('ProjectTemplateCase.template_id' => $this->params->data['temp_mod_id'], 'ProjectTemplateCase.company_id' => SES_COMP)));
1213 $Easycase = ClassRegistry::init('Easycase');
1214 $Easycase->recursive = -1;
1215 $CaseActivity = ClassRegistry::init('CaseActivity');
1216 foreach ($pjtemp as $temp) {
1217 $postCases['Easycase']['uniq_id'] = md5(uniqid());
1218 $postCases['Easycase']['project_id'] = $this->params->data['pj_id'];
1219 $postCases['Easycase']['user_id'] = SES_ID;
1220 $postCases['Easycase']['type_id'] = 2;
1221 $postCases['Easycase']['priority'] = 1;
1222 $postCases['Easycase']['title'] = $temp['ProjectTemplateCase']['title'];
1223 $postCases['Easycase']['message'] = $temp['ProjectTemplateCase']['description'];
1224 $postCases['Easycase']['assign_to'] = SES_ID;
1225 $postCases['Easycase']['due_date'] = "";
1226 $postCases['Easycase']['istype'] = 1;
1227 $postCases['Easycase']['format'] = 2;
1228 $postCases['Easycase']['status'] = 1;
1229 $postCases['Easycase']['legend'] = 1;
1230 $postCases['Easycase']['isactive'] = 1;
1231 $postCases['Easycase']['dt_created'] = GMT_DATETIME;
1232 $postCases['Easycase']['actual_dt_created'] = GMT_DATETIME;
1233 $caseNoArr = $Easycase->find('first', array('conditions' => array('Easycase.project_id' => $this->params->data['pj_id']), 'fields' => array('MAX(Easycase.case_no) as caseno')));
1234 $caseNo = $caseNoArr[0]['caseno'] + 1;
1235 $postCases['Easycase']['case_no'] = $caseNo;
1236 if ($Easycase->saveAll($postCases)) {
1237 $caseid = $Easycase->getLastInsertID();
1238 $CaseActivity->recursive = -1;
1239 $CaseAct['easycase_id'] = $caseid;
1240 $CaseAct['user_id'] = SES_ID;
1241 $CaseAct['project_id'] = $this->params->data['pj_id'];
1242 $CaseAct['case_no'] = $caseNo;
1243 $CaseAct['type'] = 1;
1244 $CaseAct['dt_created'] = GMT_DATETIME;
1245 $CaseActivity->saveAll($CaseAct);
1246 }
1247 }echo "1";
1248 exit;
1249 }
1250 } else {
1251 echo "0";
1252 exit;
1253 }
1254 }
1255 exit;
1256 }
1257
1258 function ajax_view_template_cases() {
1259 $this->layout = 'ajax';
1260 $this->loadModel("ProjectTemplateCase");
1261 //$pjtemp = $this->ProjectTemplate->find('all', array('conditions'=> array('ProjectTemplate.template_id'=>$this->params->data['temp_id'],'ProjectTemplate.company_id'=>SES_COMP)));
1262 $pjtemp = $this->ProjectTemplateCase->find('all', array('conditions' => array('ProjectTemplateCase.template_id' => $this->params->data['temp_id'], 'ProjectTemplateCase.company_id' => SES_COMP)));
1263 $this->set('temp_dtls_cases', $pjtemp);
1264 }
1265
1266 function ajax_refresh_template_module() {
1267 $this->layout = 'ajax';
1268 $this->loadModel('ProjectTemplate');
1269 $prj = $this->ProjectTemplate->find('all', array('conditions' => array('ProjectTemplate.company_id' => SES_COMP, 'ProjectTemplate.is_active' => 1), 'fields' => array('ProjectTemplate.id', 'ProjectTemplate.module_name')));
1270 $this->set('template_mod', $prj);
1271 $this->set('tmp_id', $this->params->data['tmp_id']);
1272 }
1273
1274 function ajax_view_temp_cases() {
1275 $this->layout = 'ajax';
1276 $pjtemp = ClassRegistry::init('ProjectTemplateCase')->find('all', array('conditions' => array('ProjectTemplateCase.template_id' => $this->params->data['template_id']), 'fields' => array('ProjectTemplateCase.title', 'ProjectTemplateCase.description', 'ProjectTemplateCase.created')));
1277 $this->loadModel('ProjectTemplate');
1278 $tmpmod = ClassRegistry::init('ProjectTemplate')->find('first', array('conditions' => array('ProjectTemplate.id' => $this->params->data['template_id']), 'fields' => array('ProjectTemplate.module_name')));
1279 $this->set('mod_name', $tmpmod['ProjectTemplate']['module_name']);
1280 $this->set('temp_dtls_cases', $pjtemp);
1281 }
1282
1283 function ajax_new_project() {
1284 $this->layout = 'ajax';
1285 //$this->loadModel('TemplateModule');
1286 //$modlist = ClassRegistry::init('ProjectTemplate')->find('all',array('conditions'=>array('ProjectTemplate.company_id'=>SES_COMP),'fields'=>array('ProjectTemplate.module_name','ProjectTemplate.id'), 'order'=>'ProjectTemplate.created DESC'));
1287 //$this->set("templates_modules",$modlist);
1288
1289 $this->loadModel('User');
1290 $userArr = $this->User->query("SELECT User.name,User.last_name,User.id,User.short_name,CompanyUser.user_type FROM users AS User,company_users AS CompanyUser WHERE User.id=CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active ='1' AND CompanyUser.user_type!='3' AND User.isactive='1' ORDER BY CompanyUser.user_type ASC");
1291 $this->set("userArr", $userArr);
1292 }
1293
1294 function ajax_json_members() {
1295 $this->layout = 'ajax';
1296 $search = $this->params->query['tag'];
1297
1298 $this->loadModel('User');
1299
1300 $userArr = $this->User->query("SELECT User.name,User.last_name,User.id,User.short_name,User.email FROM users AS User,company_users AS CompanyUser WHERE User.id=CompanyUser.user_id AND CompanyUser.company_id='" . SES_COMP . "' AND CompanyUser.is_active='1' AND CompanyUser.user_type='3' AND User.isactive='1' AND (User.name LIKE '%" . $search . "%' OR User.email LIKE '%" . $search . "%') ORDER BY User.name ASC");
1301
1302
1303 ob_clean();
1304 $items = array();
1305 foreach ($userArr as $urs) {
1306 //$unm = $urs['User']['name']." <".$urs['User']['email'].">";
1307 $unm = $urs['User']['name'] . '|' . $urs['User']['email'];
1308 $items[] = array("name" => $unm, "value" => $urs['User']['id']);
1309 }
1310 print json_encode($items);
1311 exit;
1312 }
1313
1314 function ajax_json_project() {
1315 $this->layout = 'ajax';
1316 $search = isset($this->params->query['q']) ? $this->params->query['q'] : $this->params->query['tag'];
1317 $this->loadModel('ProjectUser');
1318 //$proj_array = $this->ProjectUser->query("SELECT project_users.project_id FROM project_users WHERE project_users.user_id = '".SES_ID."' AND project_users.company_id = '".SES_COMP."'");
1319 $proj_array = $this->ProjectUser->query("SELECT project_users.project_id FROM project_users WHERE project_users.user_id = '" . SES_ID . "' AND project_users.project_id NOT IN(" . $this->params['pass'][0] . ")");
1320 $projcts = array();
1321 foreach ($proj_array as $k => $v) {
1322 foreach ($v as $k1 => $v1) {
1323 $projcts[] = $v1['project_id'];
1324 }
1325 }
1326 $this->Project->recursive = -1;
1327 $projname_array = $this->Project->find('all', array('conditions' => array('AND' => array('Project.id' => $projcts, 'Project.name LIKE "%' . $search . '%"')), 'fields' => array('Project.id', 'Project.name'), 'order' => 'Project.name asc'));
1328 ob_clean();
1329 $items = array();
1330
1331 foreach ($projname_array as $urs) {
1332 $items[] = array("id" => $urs['Project']['id'], "name" => $urs['Project']['name']);
1333 }
1334 print json_encode($items);
1335 exit;
1336 }
1337
1338 function ajax_template_case_listing() {
1339 $this->layout = 'ajax';
1340 //$all_cases=ClassRegistry::init('ProjectTemplateCase')->find('all',array('conditions'=>array('ProjectTemplateCase.template_id'=>$this->params->data['template_id'],'ProjectTemplateCase.company_id'=> SES_COMP)));
1341 if (isset($this->params->data['rem_template_id']) && $this->params->data['rem_template_id']) {
1342 $this->loadModel("ProjectTemplateCase");
1343 $this->ProjectTemplateCase->id = $this->params->data['rem_template_id'];
1344 $this->ProjectTemplateCase->delete();
1345 echo "removed";
1346 exit;
1347 }
1348 $all_cases = ClassRegistry::init('ProjectTemplateCase')->query("SELECT User.short_name,User.name,ProjectTemplateCase.* FROM users AS User,project_template_cases AS ProjectTemplateCase WHERE ProjectTemplateCase.template_id='" . $this->params->data['template_id'] . "' AND ProjectTemplateCase.company_id='" . SES_COMP . "' AND ProjectTemplateCase.user_id=User.id ;");
1349 $this->set("templates_cases", $all_cases);
1350 }
1351
1352 function ajax_template_edit() {
1353 $this->layout = 'ajax';
1354 ob_clean();
1355 if (isset($this->params->data['template_id']) && $this->params->data['template_id'] && isset($this->params->data['count']) && $this->params->data['count']) {
1356 $temp_id = $this->params->data['template_id'];
1357 $cnt = $this->params->data['count'];
1358 $ttl = urldecode($this->params->data['module_name']);
1359 $res = ClassRegistry::init('ProjectTemplate')->find('all', array('conditions' => array('module_name' => $ttl, 'company_id' => SES_COMP)));
1360 if (count($res) == 0) {
1361 $this->loadModel("ProjectTemplate");
1362 $this->ProjectTemplate->id = $temp_id;
1363 if ($this->ProjectTemplate->saveField("module_name", $ttl)) {
1364 echo "<a class='classhover' href='javascript:void(0);' title='Click here to view tasks' onclick='opencases($cnt);caseListing($cnt,$temp_id)'>$ttl</a>";
1365 exit;
1366 } else {
1367 echo "fail";
1368 exit;
1369 }
1370 } else {
1371 echo "exist";
1372 exit;
1373 }
1374 } else {
1375 echo "fail";
1376 exit;
1377 }
1378 }
1379
1380 function assign_template_project() {
1381 $this->loadModel("ProjectTemplate");
1382 $res = $this->ProjectTemplate->find('all', array('conditions' => array('ProjectTemplate.module_name !=' => '', 'ProjectTemplate.company_id' => SES_COMP, 'ProjectTemplate.is_active' => 1)));
1383 $this->set('temp_module', $res);
1384 $this->Project->recursive = -1;
1385 $project_details = $this->Project->find('all', array('conditions' => array('Project.company_id' => SES_COMP, 'Project.isactive' => 1), 'fields' => array('Project.name', 'Project.id')));
1386 $this->set('project_details', $project_details);
1387 }
1388
1389 function update_email_notification() {
1390 $this->layout = 'ajax';
1391 $proj_user_id = $this->params->data['projectuser_id'];
1392 $email_type = $this->params->data['type'];
1393 if ($proj_user_id && $email_type) {
1394 if ($email_type == 'off') {
1395 $this->loadModel('ProjectUser');
1396 $this->ProjectUser->query("UPDATE project_users SET default_email=0 where id='" . $proj_user_id . "'");
1397 } else {
1398 $this->loadModel('ProjectUser');
1399 $this->ProjectUser->query("UPDATE project_users SET default_email=1 where id='" . $proj_user_id . "'");
1400 }
1401 }
1402 echo "sucess";
1403 exit;
1404 }
1405
1406 function ajax_save_filter() {
1407 $this->layout = 'ajax';
1408 //For Case Status
1409 if (isset($this->params->data['caseStatus']) && $this->params->data['caseStatus']) {
1410 $case_status = $this->params->data['caseStatus'];
1411 } elseif ($_COOKIE['STATUS']) {
1412 $case_status = $_COOKIE['STATUS'];
1413 }
1414
1415 if ($case_status && $case_status != "all") {
1416 $case_status = strrev($case_status);
1417 if (strstr($case_status, "-")) {
1418 $expst = explode("-", $case_status);
1419 foreach ($expst as $st) {
1420 $status .= $this->Format->displayStatus($st) . ", ";
1421 }
1422 } else {
1423 $status = $this->Format->displayStatus($case_status) . ", ";
1424 }
1425 $arr['case_status'] = trim($status, ', ');
1426 //$val =1;
1427 } else {
1428 $arr['case_status'] = 'All';
1429 }
1430
1431 //For case types
1432 if (isset($this->params->data['caseType']) && $this->params->data['caseType']) {
1433 $case_types = $this->params->data['caseType'];
1434 } elseif ($_COOKIE['CS_TYPES']) {
1435 $case_types = $_COOKIE['CS_TYPES'];
1436 }
1437 $types = '';
1438 if ($case_types && $case_types != "all") {
1439 $case_types = strrev($case_types);
1440 if (strstr($case_types, "-")) {
1441 $expst3 = explode("-", $case_types);
1442 foreach ($expst3 as $st3) {
1443 $types .= $this->Format->caseBcTypes($st3) . ", ";
1444 }
1445 $types = trim($types, ', ');
1446 } else {
1447 $types = $this->Format->caseBcTypes($case_types);
1448 }
1449 $arr['case_types'] = $types;
1450 //$val =1;
1451 } else {
1452 $arr['case_types'] = 'All';
1453 }
1454 //For Priority
1455 if (isset($this->params->data['casePriority']) && $this->params->data['casePriority']) {
1456 $pri_fil = $this->params->data['casePriority'];
1457 } elseif ($_COOKIE['PRIORITY']) {
1458 $pri_fil = $_COOKIE['PRIORITY'];
1459 }
1460 if ($pri_fil && $pri_fil != "all") {
1461 if (strstr($pri_fil, "-")) {
1462 $expst2 = explode("-", $pri_fil);
1463 foreach ($expst2 as $st2) {
1464 $pri .= $st2 . ", ";
1465 }
1466 $pri = trim($pri, ', ');
1467 } else {
1468 $pri = $pri_fil;
1469 }
1470 $arr['pri'] = $pri;
1471 //$val =1;
1472 } else {
1473 $arr['pri'] = 'All';
1474 }
1475 //For Case Members
1476 if (isset($this->params->data['caseMemeber']) && $this->params->data['caseMemeber']) {
1477 $case_member = $this->params->data['caseMemeber'];
1478 } elseif ($_COOKIE['MEMBERS']) {
1479 $case_member = $_COOKIE['MEMBERS'];
1480 }
1481 if ($case_member && $case_member != "all") {
1482 if (strstr($case_member, "-")) {
1483 $expst4 = explode("-", $case_member);
1484 foreach ($expst4 as $st4) {
1485 $mems .= $this->Format->caseBcMems($st4) . ", ";
1486 }
1487 } else {
1488 $mems = $this->Format->caseBcMems($case_member) . ", ";
1489 }
1490 $arr['case_member'] = trim($mems, ', ');
1491 //$val =1;
1492 } else {
1493 $arr['case_member'] = 'All';
1494 }
1495
1496
1497 //For Case Date Status ....
1498 if (isset($this->params->data['caseDate']) && $this->params->data['caseDate']) {
1499 $date = $this->params->data['caseDate'];
1500 } else {
1501
1502 $date = $this->Cookie->read('DATE');
1503 }
1504 if (!empty($date)) {
1505 //$val = 1;
1506 if (trim($date) == 'one') {
1507 $arr['date'] = "Past hour";
1508 } else if (trim($date) == '24') {
1509 $arr['date'] = "Past 24Hour";
1510 } else if (trim($date) == 'week') {
1511 $arr['date'] = "Past Week";
1512 } else if (trim($date) == 'month') {
1513 $arr['date'] = "Past month";
1514 } else if (trim($date) == 'year') {
1515 $arr['date'] = "Past Year";
1516 } else if (strstr(trim($date), ":")) {
1517 $arr['date'] = str_replace(":", " - ", $date);
1518 }
1519 } else {
1520 $arr['date'] = "Any Time";
1521 }
1522 $this->set('memebers', $arr['case_member']);
1523 $this->set('priority', $arr['pri']);
1524 $this->set('type', $arr['case_types']);
1525 $this->set('status', $arr['case_status']);
1526 $this->set('date', $arr['date']);
1527
1528 $this->set('memebers_val', $case_member);
1529 $this->set('priority_val', $pri_fil);
1530 $this->set('type_val', $case_types);
1531 $this->set('status_val', $case_status);
1532 $this->set('date_val', $date);
1533 }
1534
1535 function ajax_customfilter_save() {
1536 $this->layout = 'ajax';
1537
1538 $caseStatus = $this->params->data['caseStatus'];
1539 $caseType = $this->params->data['caseType'];
1540 $caseDate = $this->params->data['caseDate'];
1541 $caseMemeber = $this->params->data['caseMemeber'];
1542 $casePriority = $this->params->data['casePriority'];
1543 $filterName = $this->params->data['filterName'];
1544 $projuniqid = $this->params->data['projuniqid'];
1545 $this->loadModel('CustomFilter');
1546 $this->CustomFilter->query("INSERT INTO custom_filters SET project_uniq_id='" . $projuniqid . "', company_id='" . SES_COMP . "', user_id='" . SES_ID . "', filter_name='" . $filterName . "',filter_date='" . $caseDate . "', filter_type_id='" . $caseType . "',filter_status='" . $caseStatus . "', filter_member_id='" . $caseMemeber . "', filter_priority='" . $casePriority . "', dt_created='" . GMT_DATETIME . "'");
1547
1548 echo "success";
1549 exit;
1550 }
1551
1552 function ajax_custom_filter_show() {
1553 $this->layout = 'ajax';
1554 $limit_1 = $this->params->data['limit1'];
1555 if (isset($limit_1)) {
1556 $limit1 = (int) $limit_1 + 3;
1557 $limit2 = 3;
1558 } else {
1559 $limit1 = 0;
1560 $limit2 = 3;
1561 }
1562 $this->loadModel('CustomFilter');
1563 $getcustomfilter = "SELECT SQL_CALC_FOUND_ROWS * FROM custom_filters AS CustomFilter WHERE CustomFilter.company_id = '" . SES_COMP . "' and CustomFilter.user_id = '" . SES_ID . "' ORDER BY CustomFilter.dt_created DESC LIMIT $limit1,$limit2";
1564 $getfilter = $this->CustomFilter->query($getcustomfilter);
1565 $tot = $this->CustomFilter->query("SELECT FOUND_ROWS() as total");
1566 //echo '<pre>';print_r($tot);
1567 $this->set('getfilter', $getfilter);
1568 $this->set('limit1', $limit1);
1569 $this->set('totalfilter', $tot[0][0]['total']);
1570 }
1571
1572 /**
1573 * @method public importexport(int proj_id) Dataimport Interface
1574 */
1575 function importexport($proj_id = '') {
1576 if (!$proj_id && (!isset($GLOBALS['getallproj'][0]['Project']['uniq_id']) && $GLOBALS['getallproj'][0]['Project']['uniq_id'])) {
1577 $this->redirect(HTTP_ROOT . 'projects/manage/');
1578 exit;
1579 } else {
1580 if (!$proj_id)
1581 $proj_id = $GLOBALS['getallproj'][0]['Project']['uniq_id'];
1582 $this->Project->recursive = -1;
1583 $proj_details = $this->Project->find('first', array('conditions' => array('uniq_id' => $proj_id, 'company_id' => SES_COMP)));
1584 if ($proj_details && (SES_TYPE <= 2)) {
1585 $this->set('upload_file', 1);
1586 $this->set('proj_id', $proj_details['Project']['id']);
1587 $this->set('proj_uid', $proj_id);
1588 $this->set('import_pjname', $proj_details['Project']['name']);
1589 } else {
1590 $this->redirect(HTTP_ROOT . 'projects/gridview/');
1591 exit;
1592 }
1593 }
1594 }
1595
1596 /**
1597 * @method public data_import Dataimport Interface
1598 */
1599 function csv_dataimport() {
1600 $project_id = $this->data['proj_id'];
1601 $project_uid = $this->data['proj_uid'];
1602 $task_type_arr = array('enhancement', 'enh', 'bug', 'research n do', 'rnd', 'quality assurance', 'qa', 'unit testing', 'unt', 'maintenance', 'mnt', 'others', 'oth', 'release', 'rel', 'update', 'upd', 'development', 'dev');
1603 $task_status_arr = array('new', 'close', 'wip', 'resolve', 'resolved', 'closed');
1604 $this->loadModel('User');
1605 $this->loadModel('ProjectUser');
1606 $task_assign_to_userid = $this->ProjectUser->find('list', array('conditions' => array('company_id' => SES_COMP, 'project_id' => $project_id), 'fields' => 'user_id'));
1607 $task_assign_to_users = $this->User->find('list', array('conditions' => array('id' => $task_assign_to_userid, 'isactive' => 1), 'fields' => 'email'));
1608
1609 //$fields_arr = array('milestone title','milestone description','start date','end date','title','description','due date','status','type','assigned to');
1610 $fields_arr = array('title', 'description', 'due date', 'status', 'type', 'assigned to');
1611
1612 if (isset($_FILES['import_csv'])) {
1613 //$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv','application/octet-stream');
1614 $ext = pathinfo($_FILES['import_csv']['name'], PATHINFO_EXTENSION);
1615 //if(in_array($_FILES['import_csv']['type'],$mimes)){
1616 if (strtolower($ext) == 'csv') {
1617 $csv_info = $_FILES['import_csv'];
1618 //Uploading the csv file to Our server
1619 $file_name = SES_ID . "_" . $project_id . "_" . $csv_info['name'];
1620 @copy($csv_info['tmp_name'], CSV_PATH . "task_milstone/" . $file_name);
1621
1622 $row = 1;
1623 // Counting total rows and Restricting from uploading a file having more then 1000 record
1624 $linecount = count(file(CSV_PATH . "task_milstone/" . $file_name));
1625 if ($linecount > 1001) {
1626 @unlink($csv_info['tmp_name'], CSV_PATH . "task_milstone/" . $file_name);
1627 $this->Session->write("ERROR", "Please split the file and upload again. Your file contain more than 1000 rows");
1628 $this->redirect(HTTP_ROOT . "projects/importexport/" . $project_uid);
1629 exit;
1630 }
1631 if ($csv_info['size'] > 2097152) {
1632 @unlink($csv_info['tmp_name'], CSV_PATH . "task_milstone/" . $file_name);
1633 $this->Session->write("ERROR", "Please upload a file with size less then 2MB");
1634 $this->redirect(HTTP_ROOT . "projects/importexport/" . $project_uid);
1635 exit;
1636 }
1637 //Parsing the csv file
1638 if (($handle = fopen(CSV_PATH . "task_milstone/" . $file_name, "r")) !== FALSE) {
1639 $i = 0;
1640 $j = 0;
1641 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
1642 if (!$i) {
1643 // Check for column count
1644 if (count($data) >= 1) {
1645 // Check for exact number of fields
1646 foreach ($data AS $key => $val) {
1647 if (!in_array(strtolower($val), $fields_arr)) {
1648 @unlink($csv_info['tmp_name'], CSV_PATH . "task_milstone/" . $file_name);
1649 $this->Session->write("ERROR", "Invalid CSV file, <a href='" . HTTP_ROOT . "projects/download_sample_csvfile' style='text-decoration:underline;color:#0000FF'>Download</a> and check with our sample file");
1650 $this->redirect(HTTP_ROOT . "projects/importexport/" . $project_uid);
1651 exit;
1652 }
1653 }
1654 $fileds = $data;
1655 //$header_arr = array_flip($data);
1656 foreach ($data AS $key => $val) {
1657 $header_arr[strtolower($val)] = $key;
1658 }
1659 } else {
1660 @unlink($csv_info['tmp_name'], CSV_PATH . "task_milstone/" . $file_name);
1661 $this->Session->write("ERROR", "Require atleast Task Title column to import the Tasks");
1662 $this->redirect(HTTP_ROOT . "projects/importexport/" . $project_uid);
1663 exit;
1664 }
1665 } else {
1666
1667 // Verifing data
1668 $value = $data;
1669// if($value[$header_arr['title']]){
1670// $mtitle = $value[$header_arr['milestone title']];
1671//// $milestone_arr[$value[$header_arr['milestone title']]]['title'] = $value[$header_arr['milestone title']];
1672//// $milestone_arr[$value[$header_arr['milestone title']]]['desc'] = $value[$header_arr['milestone description']];
1673//// $milestone_arr[$value[$header_arr['milestone title']]]['start_date'] = $value[$header_arr['start date']];
1674//// $milestone_arr[$value[$header_arr['milestone title']]]['end_date'] = $value[$header_arr['end date']];
1675//// unset($value[$header_arr['milestone title']]);
1676//// unset($value[$header_arr['milestone description']]);
1677//// unset($value[$header_arr['start date']]);
1678//// unset($value[$header_arr['end date']]);
1679// }else {
1680// $mtitle = 'default';
1681// }
1682 if (isset($value[$header_arr['title']]) && trim($value[$header_arr['title']])) {
1683 foreach ($value as $k => $v) {
1684 $task_ass[strtolower($fileds[$k])] = $v;
1685
1686 // Parsing each data for error in data
1687 if (strtolower($fileds[$k]) == 'type' && $v) {
1688 if (in_array(strtolower($v), $task_type_arr)) {
1689 $task_error[strtolower($fileds[$k])] = 0;
1690 } else {
1691 $task_error[strtolower($fileds[$k])] = 1;
1692 }
1693 } elseif (strtolower($fileds[$k]) == 'status' && $v) {
1694 if (in_array(strtolower($v), $task_status_arr)) {
1695 $task_error[strtolower($fileds[$k])] = 0;
1696 } else {
1697 $task_error[strtolower($fileds[$k])] = 1;
1698 }
1699 } elseif (strtolower($fileds[$k]) == 'due date' && $v) {
1700 if ($this->Format->isValidDateTime($v)) {
1701 $task_error[strtolower($fileds[$k])] = 0;
1702 } else {
1703 $task_error[strtolower($fileds[$k])] = 1;
1704 }
1705 } elseif (strtolower($fileds[$k]) == 'assigned to' && strtolower($v) != 'me' && $v) {
1706 if (in_array($v, $task_assign_to_users)) {
1707 $task_error[strtolower($fileds[$k])] = 0;
1708 } else {
1709 $task_error[strtolower($fileds[$k])] = 1;
1710 }
1711 } else {
1712 $task_error[strtolower($fileds[$k])] = 0;
1713 }
1714 }
1715 $task[] = $task_ass;
1716 $task_err[] = $task_error;
1717 }
1718 }
1719 $i++;
1720 }
1721 fclose($handle);
1722 }
1723 //pr($milestone_arr);echo "<hr/>";pr($task);echo "<hr/>";pr($task_err);exit;
1724 //$this->set('milestone_arr',$milestone_arr);
1725
1726 $this->Project->recursive = -1;
1727 $projectdata = $this->Project->findById($project_id);
1728
1729 $this->set('projectname', $projectdata['Project']['name']);
1730 $this->set('task', $task);
1731 $this->set('task_err', $task_err);
1732 $this->set('preview_data', 1);
1733 $this->set('fileds', $fileds);
1734 $this->set('porj_id', $project_id);
1735 $this->set('porj_uid', $project_uid);
1736 $this->set('csv_file_name', $csv_info['name']);
1737 $this->set('total_rows', $linecount);
1738 $this->render('importexport');
1739 } else {
1740 $this->Session->write("ERROR", "Please import a valid CSV file");
1741 $this->redirect(HTTP_ROOT . "projects/importexport/" . $project_uid);
1742 }
1743 } else {
1744 $this->Session->write("ERROR", "Please import a valid CSV file");
1745 $this->redirect(HTTP_ROOT . "projects/importexport/" . $project_uid);
1746 }
1747 }
1748
1749 /**
1750 * @method public confirm_import Dataimport Interface
1751 */
1752 function confirm_import() {
1753 $project_id = $this->data['project_id'];
1754 $this->loadModel('User');
1755 $this->loadModel('ProjectUser');
1756 $task_assign_to_userid = $this->ProjectUser->find('list', array('conditions' => array('company_id' => SES_COMP, 'project_id' => $project_id), 'fields' => 'user_id'));
1757 $task_assign_to_users = $this->User->find('list', array('conditions' => array('id' => $task_assign_to_userid, 'isactive' => 1), 'fields' => 'email'));
1758
1759 //$milestone_arr = unserialize($this->data['milestone_arr']);
1760 $task_arr = unserialize($this->data['task_arr']);
1761 $this->loadModel('Milestone');
1762 $this->loadModel('Easycase');
1763 //$this->loadModel('EasycaseMilestone');
1764 $EasycaseMilestone = ClassRegistry::init('EasycaseMilestone');
1765 $EasycaseMilestone->recursive = -1;
1766 //Get the Case no. for the existing projects
1767 $caseNoArr = $this->Easycase->find('first', array('conditions' => array('Easycase.project_id' => $project_id), 'fields' => array('MAX(Easycase.case_no) as caseno')));
1768 $caseNo = $caseNoArr[0]['caseno'] + 1;
1769 $hind = 0;
1770 /* foreach($milestone_arr as $key=>$val){
1771 $default =0;
1772 if($key !='default'){
1773 $mst_id = $this->Milestone->find('first',array('conditions'=>array('title'=>$key,'project_id'=>$project_id),array('fileds'=>array('id'))));
1774 if(!$mst_id){
1775 $milestone['title']= $key;
1776 $milestone['description']= (isset($val['desc']) && $val['desc']) ?$val['desc']:'';
1777 $start_date = (isset($val['start_date']) && $val['start_date'])?$val['start_date']:'';
1778 if($start_date){
1779 $start_date = $this->Format->isValidDateTime($start_date)?date('Y-m-d',strtotime($start_date)):'';
1780 }
1781 $milestone['start_date']= $start_date?$start_date:GMT_DATE;
1782 $end_date = (isset($val['end_date']) && $val['end_date'])?$val['end_date']:'';
1783 if($end_date){
1784 $end_date = $this->Format->isValidDateTime($end_date)?date('Y-m-d',strtotime($end_date)):'';
1785 }
1786 $milestone['end_date']= $end_date?$end_date:GMT_DATE;
1787 //$milestone['end_date']= $end_date;
1788 $milestone['project_id']= $project_id;
1789 $milestone['user_id']= SES_ID;
1790 $milestone['company_id']= SES_COMP;
1791 $milestone['uniq_id']= md5(uniqid());
1792 $this->Milestone->create();
1793 $this->Milestone->save($milestone);
1794 $milestone_last_insert_id =$this->Milestone->getLastInsertID();
1795 }else{
1796 $milestone_last_insert_id = $mst_id['Milestone']['id'];
1797 }
1798 }else{
1799 $default =1;
1800 } */
1801 // Preparing history data
1802 //$history[$hind]['milestone_title'] = $key;
1803 $history[$hind++]['total_task'] = count($task_arr);
1804 $total_valid_rows = $total_valid_rows ? ($total_valid_rows + count($task_arr)) : count($task_arr);
1805 foreach ($task_arr as $k => $v) {
1806 if (!trim($v['title']))
1807 continue;
1808 $easycase['title'] = $v['title'];
1809 $easycase['message'] = (isset($v['description']) && $v['description']) ? $v['description'] : '';
1810 $due_date = (isset($v['due date']) && $v['due date']) ? $v['due date'] : '';
1811 //$this->Format->isValidDateTime($due_date);
1812 if ($due_date) {
1813 $due_date = $this->Format->isValidDateTime($due_date) ? date('Y-m-d', strtotime($due_date)) : '';
1814 }
1815 $easycase['due_date'] = $due_date;
1816 if ($v['status'] && (strtoupper(trim($v['status'])) == 'WIP')) {
1817 $legend = 2;
1818 } elseif ($v['status'] && ((strtolower(trim($v['status'])) == 'close') || (strtoupper(trim($v['status'])) == 'CLOSED'))) {
1819 $legend = 3;
1820 } elseif ($v['status'] && (strtolower(trim($v['status'])) == 'resolve' || strtolower(trim($v['status'])) == 'resolved')) {
1821 $legend = 5;
1822 } else {
1823 $legend = 1;
1824 }
1825 $easycase['legend'] = $legend;
1826 $easycase['type_id'] = $this->get_type_id($v['type']);
1827 if (strtolower($v['assigned to']) != 'me' && $v['assigned to']) {
1828 if (array_search($v['assigned to'], $task_assign_to_users)) {
1829 $easycase['assign_to'] = array_search($v['assigned to'], $task_assign_to_users);
1830 } else {
1831 $easycase['assign_to'] = SES_ID;
1832 }
1833 } else {
1834 $easycase['assign_to'] = SES_ID;
1835 }
1836 $easycase['project_id'] = $project_id;
1837 $easycase['user_id'] = SES_ID;
1838 $easycase['priority'] = 1;
1839 $easycase['case_no'] = $caseNo++;
1840 $easycase['uniq_id'] = md5(uniqid());
1841 $easycase['actual_dt_created'] = GMT_DATETIME;
1842 $easycase['dt_created'] = GMT_DATETIME;
1843 $easycase['isactive'] = 1;
1844 $easycase['format'] = 2;
1845
1846 $this->Easycase->create();
1847 $sid = $this->Easycase->save($easycase);
1848 /* if(!$default){
1849 $EasycaseMiles['easycase_id'] = $this->Easycase->getLastInsertID();
1850 $EasycaseMiles['milestone_id'] = $milestone_last_insert_id;
1851 $EasycaseMiles['project_id']= $project_id;
1852 $EasycaseMiles['user_id'] = SES_ID;
1853 $EasycaseMiles['dt_created'] = GMT_DATETIME;
1854 $EasycaseMilestone->saveAll($EasycaseMiles);
1855 } */
1856 }
1857 //}
1858 $this->set('total_valid_rows', $total_valid_rows);
1859 $this->set('csv_file_name', $this->data['csv_file_name']);
1860 $this->set('total_rows', $this->data['total_rows']);
1861 $this->set('total_task', count($task_arr));
1862 $this->set('proj_name', $this->Format->getProjectName($project_id));
1863 $this->set('history', $history);
1864 $this->render('importexport');
1865
1866 //echo $project_id; pr($milestone_arr);echo "<hr/>";pr($task_arr);exit;
1867 }
1868
1869 function get_type_id($type) {
1870 $type = strtolower($type);
1871 if ($type == 'bug') {
1872 return 1;
1873 } elseif ($type == 'enhancement' || $type == 'enh') {
1874 return 3;
1875 } elseif ($type == 'research n do' || $type == 'rnd') {
1876 return 4;
1877 } elseif ($type == 'quality assurance' || $type == 'qa') {
1878 return 5;
1879 } elseif ($type == 'unit testing' || $type == 'unt') {
1880 return 6;
1881 } elseif ($type == 'maintenance' || $type == 'mnt') {
1882 return 7;
1883 } elseif ($type == 'others' || $type == 'oth') {
1884 return 8;
1885 } elseif ($type == 'release' || $type == 'rel') {
1886 return 9;
1887 } elseif ($type == 'update' || $type == 'upd') {
1888 return 10;
1889 } else {
1890 return 2;
1891 }
1892 }
1893
1894 /**
1895 * @method public download_sample_csv_file
1896 */
1897 function download_sample_csvfile() {
1898 //$myFile ='demo_sample_milestone_csv_file.csv';
1899 $myFile = 'Orangescrum_Import_Task_Sample.csv';
1900 header('HTTP/1.1 200 OK');
1901 header('Cache-Control: no-cache, must-revalidate');
1902 header("Pragma: no-cache");
1903 header("Expires: 0");
1904 header("Content-type: text/csv");
1905 header("Content-Disposition: attachment; filename=Orangescrum_Task_Sample.csv");
1906 readfile(CSV_PATH."task_milstone/". $myFile);
1907 exit;
1908 }
1909
1910function checkfile_existance(){
1911 $file_info = $_FILES['file-0'];
1912 $file_name = SES_ID."_".$this->data['porject_id']."_".$file_info['name'];
1913 //echo $file_name;exit;
1914 $directory = CSV_PATH."task_milstone";
1915 if ($handle = opendir($directory)) {
1916 while (false !== ($entry = readdir($handle))) {
1917 if ($entry != "." && $entry != "..") {
1918 if($file_name == $entry){
1919 $filesize = filesize($directory.'/'.$file_name);
1920 if($file_info['size'] == $filesize){
1921 $arr['msg'] = "Already a file with same name and same size of ". $filesize." bytes exists. Would you like to replace the exsiting file?";
1922 }else{
1923 $arr['msg'] = "Already file with same name and size of ".$filesize." bytes exists. Would you like to replace the existing file ?";
1924 }
1925 $err =1;
1926 $arr['success'] =0;
1927 $arr['error'] =1;
1928 }
1929 //echo "$entry<br/>";
1930 }
1931 }
1932 closedir($handle);
1933 if(!$err){
1934 $arr['success'] =1;
1935 $arr['msg'] = "";
1936 $arr['error'] =0;
1937 }
1938 echo json_encode($arr);
1939 exit;
1940 }
1941}
1942function learnmore(){
1943 $this->layout='';
1944}
1945function project_thumb_view(){
1946
1947}
1948/**
1949 *
1950 */
1951 function member_list(){
1952 $this->layout="ajax";
1953 $this->loadModel('User');
1954 $list = $this->User->get_email_list();
1955 if($list){
1956 foreach ($list as $key=>$val){
1957 if(trim($val['User']['email'])!='' && trim(strtolower($val['User']['email']))!='null'){
1958 $name ="";
1959 if($val['User']['name']){
1960 $name = stripcslashes($val['User']['name']);
1961 }
1962 if($val['User']['last_name']){
1963 $name .=" ".stripcslashes($val['User']['last_name']);
1964 }
1965 if($name){
1966 $email[$val['User']['id']] =$name." <".$val['User']['email'].">";
1967 }else{
1968 $email[$val['User']['id']]= $val['User']['email'];
1969 }
1970 }
1971}
1972 }
1973 //$arr['email'] = array_unique($email);
1974 echo json_encode(array_unique($email));
1975 exit;
1976 }
1977/**
1978 * @method Public onbording($paramName) Onboarding for create project
1979 * @return html
1980 */
1981 function onbording(){
1982 if(SES_TYPE>2){
1983 $this->redirect(HTTP_ROOT);
1984 exit;
1985 }
1986 if($GLOBALS['project_count']){
1987 $projectusercls = ClassRegistry::init('ProjectUser');
1988 $projectusercls->recursive=-1;
1989 $projectusers = $projectusercls->find('count',array('conditions'=>array('company_id'=>SES_COMP)));
1990
1991 $this->set('projectuser_count',$projectusers?$projectusers:0);
1992 $easycase_cls = ClassRegistry::init('Easycase');
1993 $proje_ids = array_keys($GLOBALS['active_proj_list']);
1994 $easycase_cls->recursive=-1;
1995 $task_count = $easycase_cls->find('count',array('conditions'=>array('project_id'=> $proje_ids)));
1996 $this->set('task_crted',$task_count?$task_count:0);
1997 }
1998 $company_usercls = ClassRegistry::init('CompanyUser');
1999 $totalusers = $company_usercls->find('count',array('conditions'=>array('company_id'=>SES_COMP,'is_active !='=>3)));
2000 $this->set('totalusers',$totalusers);
2001 setcookie('LOAD_TW_POP',1,time()+3600,'/',DOMAIN_COOKIE,false,false);
2002
2003 $id=$this->Auth->user('id');
2004 $this->loadModel('User');
2005 $rec=$this->User->findById($id);
2006 if(($rec['User']['dt_last_logout']=='' && $rec['User']['show_default_inner'])){
2007 $this->set('is_log_out',1);
2008 }
2009 }
2010
2011 public function hide_default_inner(){
2012 $this->loadModel('User');
2013 $this->User->id=SES_ID;
2014 $this->User->saveField('show_default_inner',0);
2015 echo 'success';
2016 exit;
2017 }
2018/**
2019 * @method Public deleteprojects($projuid) Deleting project with all associated data to that project
2020 * @return bool true/false
2021 */
2022 function deleteprojects($projuid='',$page = NULL){
2023 if(SES_TYPE>2){
2024 $grpcount = $this->Project->query('SELECT Project.id FROM projects AS Project WHERE Project.user_id='.$this->Auth->user('id').' AND Project.uniq_id="'.$projuid.'" AND Project.company_id='.SES_COMP.'');
2025 if(!$grpcount[0]['Project']['id']) {
2026 $this->redirect(HTTP_ROOT);
2027 exit;
2028 }
2029 }
2030 $redirect = HTTP_ROOT."projects/manage";
2031 if(isset($page) && (intval($page) > 1)) {
2032 $redirect.="?page=".$page;
2033 }
2034
2035 if(!$projuid){
2036 $this->redirect($redirect);
2037 exit;
2038 }else{
2039 $arr = $this->Project->deleteprojects($projuid);
2040 if(isset($arr['succ']) && $arr['succ']){
2041 $this->Session->write('SUCCESS',$arr['msg']);
2042 }elseif(isset($arr['error']) && $arr['error']){
2043 $this->Session->write('ERROR',$arr['msg']);
2044 }else{
2045 $this->Session->write('ERROR','Oops! Error occured in deletion of project');
2046 }
2047 $this->redirect($redirect);
2048 exit;
2049 }
2050 }
2051 function ajax_existuser_delete(){
2052 $this->layout = 'ajax';
2053 if (isset($this->params->data['userid']) && $this->params->data['userid']) {
2054 $uid = $this->params->data['userid'];
2055 $projId = trim($this->params->data['project_id']);
2056 $ProjectUser = ClassRegistry::init('ProjectUser');
2057 $ProjectUser->unbindModel(array('belongsTo' => array('Project')));
2058 $checkAvlMem3 = $ProjectUser->find('count', array('conditions' => array('ProjectUser.user_id' => $uid, 'ProjectUser.project_id' => $projId), 'fields' => 'DISTINCT ProjectUser.id'));
2059 if ($checkAvlMem3) {
2060 $ProjectUser->query("DELETE FROM project_users WHERE user_id=" . $uid . " AND project_id=" . $projId);
2061 }
2062 //Remove from Group update table , that user should not get mail when he is removed from a project.
2063 $this->loadModel('DailyUpdate');
2064 $DailyUpdate = $this->DailyUpdate->getDailyUpdateFields($projId, array('DailyUpdate.id', 'DailyUpdate.user_id'));
2065 if (isset($DailyUpdate) && !empty($DailyUpdate)) {
2066 $user_ids = explode(",", $DailyUpdate['DailyUpdate']['user_id']);
2067 if (($index = array_search($uid, $user_ids)) !== false) {
2068 unset($user_ids[$index]);
2069 }
2070 $du['user_id'] = implode(",", $user_ids);
2071 $this->DailyUpdate->id = $DailyUpdate['DailyUpdate']['id'];
2072 $this->DailyUpdate->save($du);
2073 }
2074 echo "success";
2075 exit;
2076 }
2077
2078 }
2079 function generateMsgAndSendPjMail($pjid, $id, $comp) {
2080 $User_id=$this->Auth->user('id');
2081 $this->loadModel('User');
2082 $rec=$this->User->findById($User_id);
2083 $from_name=$rec['User']['name'].' '.$rec['User']['last_name'];
2084
2085 App::import('helper', 'Casequery');
2086 $csQuery = new CasequeryHelper(new View(null));
2087
2088 App::import('helper', 'Format');
2089 $frmtHlpr = new FormatHelper(new View(null));
2090
2091 ##### get User Details
2092 $this->loadModel('User');
2093 $toUsrArr = $this->User->findById($id);
2094 $to_email = "";
2095 $to_name = "";
2096 if(count($toUsrArr)) {
2097 $to_email = $toUsrArr['User']['email'];
2098 $to_name = $frmtHlpr->formatText($toUsrArr['User']['name']);
2099 }
2100//
2101 ##### get Project Details
2102 $this->Project->recursive = -1;
2103 $prjArr = $this->Project->find('first', array('conditions' => array('Project.id' => $pjid),'fields' => array('Project.name','Project.short_name','Project.uniq_id')));
2104 $projName = "";
2105 $projUniqId = "";
2106 if(count($prjArr)) {
2107 $projName = $frmtHlpr->formatText($prjArr['Project']['name']);
2108 $projUniqId = $prjArr['Project']['uniq_id'];
2109 }
2110
2111 $subject = "You have been added to ".$projName." on Orangescrum";
2112
2113 $this->Email->delivery = EMAIL_DELIVERY;
2114 $this->Email->to = $to_email;
2115 $this->Email->subject = $subject;
2116 $this->Email->from = FROM_EMAIL_NOTIFY;
2117 $this->Email->template = 'project_add';
2118 $this->Email->sendAs = 'html';
2119 $this->set('to_name',$to_name);
2120 $this->set('from_name',$from_name);
2121 $this->set('projName',$projName);
2122 $this->set('projUniqId',$projUniqId);
2123 $this->set('multiple',0);
2124 $this->set('company_name',$comp['Company']['name']);
2125 if(defined("PHPMAILER") && PHPMAILER == 1){
2126 $this->Email->set_variables = $this->render('/Emails/html/project_add',false);
2127 App::import('Component', 'PhpMailer.PhpMailer');
2128 $this->PhpMailer = new PhpMailerComponent();
2129 return $this->PhpMailer->sendPhpMailerTemplate($this->Email);
2130 }else{
2131 return $this->Sendgrid->sendgridsmtp($this->Email);
2132 }
2133 }
2134 public function default_inner(){
2135 $this->layout='';
2136
2137}
2138
2139 /**
2140 * Showing and Managing task types by company owner
2141 *
2142 * @method task_type
2143 * @author Orangescrum
2144 * @return
2145 * @copyright (c) Aug/2014, Andolsoft Pvt Ltd.
2146 */
2147 function task_type() {
2148 $this->loadModel("Type");
2149 $task_types = $this->Type->getAllTypes();
2150
2151 $this->loadModel("TypeCompany");
2152 $sel_types = $this->TypeCompany->getSelTypes();
2153 $is_projects = 0;
2154 if (isset($sel_types) && !empty($sel_types) && isset($task_types) && !empty($task_types)) {
2155 foreach ($task_types as $key => $value) {
2156 //if (array_search($value['Type']['id'], $sel_types) || intval($value['Total']['cnt'])) {
2157 if (array_search($value['Type']['id'], $sel_types)) {
2158 $task_types[$key]['Type']['is_exist'] = 1;
2159 } else {
2160 $task_types[$key]['Type']['is_exist'] = 0;
2161 }
2162 }
2163 $is_projects = 1;
2164 }
2165
2166 $this->set(compact('task_types', 'sel_types', 'is_projects'));
2167 }
2168
2169 /**
2170 * Add new task types by company owner
2171 *
2172 * @method addNewTaskType
2173 * @author Orangescrum
2174 * @return
2175 * @copyright (c) Aug/2014, Andolsoft Pvt Ltd.
2176 */
2177 function addNewTaskType() {
2178 if (isset($this->data['Type']) && !empty($this->data['Type'])) {
2179
2180 $data = $this->data['Type'];
2181 $data['short_name'] = strtolower($data['short_name']);
2182 $data['company_id'] = SES_COMP;
2183 $data['seq_order'] = 0;
2184
2185 $this->loadModel("Type");
2186 if(isset($data['id']) && $data['id']){
2187 }else{
2188 $this->Type->id = '';
2189 }
2190 $this->Type->save($data);
2191 $id = $this->Type->getLastInsertID();
2192 if(isset($data['id']) && $data['id']){
2193 $this->Session->write("SUCCESS","Task type '".trim($data['name'])."' updated successfully.");
2194 }else{
2195 $this->loadModel("TypeCompany");
2196 //Check record exists or not while added 1st time. If not then added all default type with new one.
2197 $isRes = $this->TypeCompany->getTypes();
2198 $cnt = 0;
2199
2200 if (isset($isRes) && empty($isRes)) {
2201 //Getting default task type
2202 $types = $this->Type->getDefaultTypes();
2203 foreach ($types as $key => $values) {
2204 $data1[$key]['type_id'] = $values['Type']['id'];
2205 $data1[$key]['company_id'] = SES_COMP;
2206 $cnt++;
2207 }
2208 }
2209
2210 $data1[$cnt]['type_id'] = $id;
2211 $data1[$cnt]['company_id'] = SES_COMP;
2212 $this->TypeCompany->saveAll($data1);
2213 $this->Session->write("SUCCESS","Task type '".trim($data['name'])."' added successfully.");
2214 }
2215 } else {
2216 $this->Session->write("ERROR","Error in addition of task type.");
2217 }
2218 $this->redirect(HTTP_ROOT."task-type");
2219 }
2220
2221 /**
2222 * Save selected task types by company owner
2223 *
2224 * @method saveTaskType
2225 * @author Orangescrum
2226 * @return
2227 * @copyright (c) Aug/2014, Andolsoft Pvt Ltd.
2228 */
2229 function saveTaskType() {
2230 if (isset($this->data['Type']) && !empty($this->data['Type'])) {
2231 $this->loadModel("TypeCompany");
2232
2233 $this->TypeCompany->query("DELETE FROM type_companies WHERE company_id=" . SES_COMP);
2234 foreach ($this->data['Type'] as $key => $value) {
2235 $data['company_id'] = SES_COMP;
2236 $data['type_id'] = $value;
2237
2238 $this->TypeCompany->id = '';
2239 $this->TypeCompany->save($data);
2240 }
2241 $this->Session->write("SUCCESS","Task type saved successfully.");
2242 } else {
2243 $this->Session->write("ERROR","Error in saving of task type.");
2244 }
2245 $this->redirect(HTTP_ROOT."task-type");
2246 }
2247
2248 /**
2249 * Delete task types by company owner
2250 *
2251 * @method deleteTaskType
2252 * @author Orangescrum
2253 * @return boolean
2254 * @copyright (c) Aug/2014, Andolsoft Pvt Ltd.
2255 */
2256 function deleteTaskType() {
2257 $this->layout = 'ajax';
2258 $id = $this->params->data['id'];
2259 if (intval($id)) {
2260 $this->loadModel("Type");
2261 $this->Type->id = $id;
2262 $this->Type->delete();
2263
2264 $this->loadModel("TypeCompany");
2265 $this->TypeCompany->query("DELETE FROM type_companies WHERE type_id=" . $id . " AND company_id=" . SES_COMP);
2266
2267 echo 1;
2268 } else {
2269 echo 0;
2270 }
2271 exit;
2272 }
2273 function validateTaskType(){
2274 $jsonArr = array('status'=>'error');
2275 if($this->request['data']['name']){
2276 $this->loadModel("Type");
2277 $count_type = $this->Type->find('first',array('conditions' => array('OR'=>array('Type.short_name' => trim($this->request['data']['sort_name']),'Type.name' => trim($this->request['data']['name'])),'Type.id !=' => trim($this->request['data']['id'])),'fields' => array("Type.name","Type.short_name")));
2278 if(!$count_type){
2279 $jsonArr['status'] = 'success';
2280 }else{
2281 if(strtolower($count_type['Type']['short_name']) == strtolower(trim($this->request['data']['sort_name']))){
2282 $jsonArr['msg'] = 'sort_name';
2283 }
2284 if(strtolower($count_type['Type']['name']) == strtolower(trim($this->request['data']['name']))){
2285 $jsonArr['msg'] = 'name';
2286 }
2287 }
2288 }
2289 echo json_encode($jsonArr);
2290 exit;
2291 }
2292
2293 function invitenewuser($mail_arr = array(), $prj_id = 0, $obj) {
2294 App::import('Controller', 'Users');
2295 $userscontroller = new UsersController;
2296
2297 $usercls = ClassRegistry::init('User');
2298 $CompanyUser = ClassRegistry::init('CompanyUser');
2299 $UserInvitation = ClassRegistry::init('UserInvitation');
2300 $err = 0;
2301//$mail_arr=explode(",",trim($email_list));
2302 $ucounter = count($mail_arr);
2303 /* foreach($mail_arr AS $key=>$val){
2304 if(trim($val) != ""){
2305 $ucounter ++;
2306 }
2307 } */
2308 $total_new_users = $ucounter + $GLOBALS['usercount'];
2309 if (strtolower($GLOBALS['Userlimitation']['user_limit']) != 'unlimited' && ($total_new_users > $GLOBALS['Userlimitation']['user_limit'])) {
2310 $this->Session->write("ERROR", "Sorry! You are exceeding your user limit");
2311//$userscontroller->redirect(HTTP_ROOT);exit;
2312 header('Location:' . HTTP_ROOT);
2313 exit;
2314 }
2315//for($i=0;$i<count($mail_arr);$i++){
2316 foreach ($mail_arr as $key => $val) {
2317 if (trim($val) != "") {
2318 $val = trim($val);
2319 $findEmail = $usercls->find('first', array('conditions' => array('User.email' => $val), 'fields' => array('User.id')));
2320 if (@$findEmail['User']['id']) {
2321 $userid = $findEmail['User']['id'];
2322 $invitation_details = $UserInvitation->find('first', array('conditions' => array('user_id' => $findEmail['User']['id'], 'company_id' => SES_COMP), 'fields' => array('id', 'project_id')));
2323 } else {
2324 $userdata['User']['uniq_id'] = $this->Format->generateUniqNumber();
2325 $userdata['User']['isactive'] = 2;
2326 $userdata['User']['isemail'] = 1;
2327 $userdata['User']['dt_created'] = GMT_DATETIME;
2328 $userdata['User']['email'] = $val;
2329 $usercls->saveAll($userdata);
2330 $userid = $usercls->getLastInsertID();
2331 }
2332 if ($userid && $userid != SES_ID) {
2333 $cmpnyUsr = array();
2334 $is_sub_upgrade = 1;
2335// Checking for a deleted user when gets invited again.
2336 $compuser = $CompanyUser->find('first', array('conditions' => array('user_id' => $userid, 'company_id' => SES_COMP)));
2337 if ($compuser && $compuser['CompanyUser']['is_active'] == 0) {
2338 $this->Session->write("ERROR", "Sorry! You are not allowed to add a disabled user to a the project");
2339 continue;
2340 }
2341 $cmpnyUsr['CompanyUser']['is_active'] = 2;
2342 $cmpnyUsr['CompanyUser']['user_type'] = 3;
2343 if ($compuser) {
2344 $is_sub_upgrade = 0;
2345 $cmpnyUsr['CompanyUser']['user_type'] = $compuser['CompanyUser']['user_type'];
2346 $cmpnyUsr['CompanyUser']['is_active'] = $compuser['CompanyUser']['is_active'];
2347 if ($compuser['CompanyUser']['is_active'] == 3) {
2348// If that user deleted in the same billing month and invited again then that user will not paid
2349 if ($GLOBALS['Userlimitation']['btsubscription_id']) {
2350 if (strtotime($GLOBALS['Userlimitation']['next_billing_date']) > strtotime($compuser['CompanyUser']['billing_end_date'])) {
2351 $is_sub_upgrade = 1;
2352 }
2353 }
2354 $cmpnyUsr['CompanyUser']['user_type'] = 3;
2355 $cmpnyUsr['CompanyUser']['is_active'] = 2;
2356 }
2357 $cmpnyUsr['CompanyUser']['id'] = $compuser['CompanyUser']['id'];
2358 }
2359 $cmpnyUsr['CompanyUser']['user_id'] = $userid;
2360 $cmpnyUsr['CompanyUser']['company_id'] = SES_COMP;
2361 $cmpnyUsr['CompanyUser']['company_uniq_id'] = COMP_UID;
2362 $cmpnyUsr['CompanyUser']['created'] = GMT_DATETIME;
2363 if ($CompanyUser->saveAll($cmpnyUsr)) {
2364 $qstr = $this->Format->generateUniqNumber();
2365 if (@$findEmail['User']['id'] && @$invitation_details['UserInvitation']['id']) {
2366 $InviteUsr['UserInvitation']['id'] = $invitation_details['UserInvitation']['id'];
2367 $InviteUsr['UserInvitation']['project_id'] = $invitation_details['UserInvitation']['project_id'] ? $invitation_details['UserInvitation']['project_id'] . ',' . $prj_id : $prj_id;
2368 } else {
2369 $InviteUsr['UserInvitation']['project_id'] = $prj_id;
2370 }
2371 $InviteUsr['UserInvitation']['invitor_id'] = SES_ID;
2372 $InviteUsr['UserInvitation']['user_id'] = $userid;
2373 $InviteUsr['UserInvitation']['company_id'] = SES_COMP;
2374 $InviteUsr['UserInvitation']['qstr'] = $qstr;
2375 $InviteUsr['UserInvitation']['created'] = GMT_DATETIME;
2376 $InviteUsr['UserInvitation']['is_active'] = 1;
2377 $InviteUsr['UserInvitation']['user_type'] = 3;
2378 if ($UserInvitation->saveAll($InviteUsr)) {
2379
2380//Event log data and inserted into database in account creation--- Start
2381 $json_arr['email'] = $val;
2382 $json_arr['created'] = GMT_DATETIME;
2383 $this->Postcase->eventLog(SES_COMP, SES_ID, $json_arr, 25);
2384//End
2385//Subscription price update if its a paid user -start
2386 $comp_user_id = $CompanyUser->getLastInsertID();
2387
2388 if ($is_sub_upgrade) {
2389 //$userscontroller->update_bt_subscription($comp_user_id, SES_COMP, 1);
2390 }
2391//end
2392 $to = $val;
2393 $expEmail = explode("@", $val);
2394 $expName = $expEmail[0];
2395 $loggedin_users = $usercls->find('first', array('conditions' => array('User.id' => SES_ID, 'User.isactive' => 1), 'fields' => array('User.name', 'User.email', 'User.id')));
2396 $fromName = ucfirst($loggedin_users['User']['name']);
2397 $fromEmail = $loggedin_users['User']['email'];
2398 $ext_user = '';
2399//
2400 if (@$findEmail['User']['id']) {
2401 $subject = $fromName . " invited you to join " . CMP_SITE . " on Orangescrum";
2402 $ext_user = 1;
2403 } else {
2404 $subject = $fromName . " invited you to join Orangescrum";
2405 }
2406 $this->Email->delivery = EMAIL_DELIVERY;
2407 $this->Email->to = $to;
2408 $this->Email->subject = $subject;
2409 $this->Email->from = FROM_EMAIL;
2410 $this->Email->template = 'invite_user';
2411 $this->Email->sendAs = 'html';
2412 $obj->set('expName', ucfirst($expName));
2413 $obj->set('qstr', $qstr);
2414 $obj->set('existing_user', $ext_user);
2415
2416 $obj->set('company_name', CMP_SITE);
2417 $obj->set('fromEmail', $fromEmail);
2418 $obj->set('fromName', $fromName);
2419 try {
2420 if(defined("PHPMAILER") && PHPMAILER == 1){
2421 $this->Email->set_variables = $this->render('/Emails/html/invite_user',false);
2422 App::import('Component', 'PhpMailer.PhpMailer');
2423 $this->PhpMailer = new PhpMailerComponent();
2424 $this->PhpMailer->sendPhpMailerTemplate($this->Email);
2425 }else{
2426 $this->Sendgrid->sendgridsmtp($this->Email);
2427 }
2428 } Catch (Exception $e) {
2429
2430 }
2431 }
2432 }
2433 $rarr['success'][] = $userid;
2434 } else {
2435 $err = 1;
2436 $rarr['error'][] = 1;
2437 }
2438 }
2439 }
2440 return $rarr;
2441 }
2442}