Example #1
0
 public function saveAction()
 {
     /**
      * @var BackofficeAuthenticationService $auth
      */
     ini_set('max_execution_time', 0);
     $auth = $this->getServiceLocator()->get('library_backoffice_auth');
     $config = $this->getServiceLocator()->get('config');
     $asanaFeedbackConfig = $config['asana-api']['feedback'];
     $request = $this->getRequest();
     $result = ['status' => 'error', 'msg' => TextConstants::ERROR];
     if ($request->isPost() && $request->isXmlHttpRequest()) {
         $asana = new Asana(['apiKey' => $asanaFeedbackConfig['api_key']]);
         $prop = $request->getPost('prop');
         $identity = $auth->getIdentity();
         $followers = [];
         $notes = '';
         $taskTitle = '';
         $additionalParams = [];
         $selectedType = $request->getPost('selected-type');
         switch ($selectedType) {
             case Feedback::FEEDBACK_TYPE_SOFTWARE_FEEDBACK_VALUE:
                 $requestFeedbackType = $request->getPost('feedback-application-types');
                 $projectId = $asanaFeedbackConfig['project_id_development'];
                 if ($requestFeedbackType == Feedback::FEEDBACK_APPLICATION_TYPE_CALL_CENTER) {
                     $projectId = $asanaFeedbackConfig['project_id_hardware'];
                 }
                 $taskTitle = $request->getPost('feedback-title');
                 if (Feedback::FEEDBACK_APPLICATION_TYPE_MOBILE_APPLICATION == $request->getPost('feedback-application-types')) {
                     $mobileApplication = $request->getPost('mobile-application-sub-type');
                     $projectId = $asanaFeedbackConfig['project_id_hardware'];
                     $notes .= 'Mobile Application: ' . $mobileApplication . PHP_EOL;
                 } elseif (Feedback::FEEDBACK_APPLICATION_TYPE_GOOGLE_INFRASTRUCTURES == $request->getPost('feedback-application-types')) {
                     $projectId = $asanaFeedbackConfig['project_id_hardware'];
                     $notes .= 'Google Infrastructure: ' . $requestFeedbackType . PHP_EOL;
                 } elseif (Feedback::FEEDBACK_APPLICATION_TYPE_BACKOFFICE != $request->getPost('feedback-application-types')) {
                     $notes .= 'Application: ' . $requestFeedbackType . PHP_EOL;
                 }
                 $notes .= $request->getPost('feedback-description');
                 break;
             case Feedback::FEEDBACK_TYPE_ACCOUNT_MANAGEMENT_VALUE:
                 $projectId = $asanaFeedbackConfig['project_id_hardware'];
                 switch ($request->getPost('feedback-account-management-type')) {
                     case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_CREATE_ACCOUNT_VALUE:
                         $taskTitle = Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_CREATE_ACCOUNT_TEXT . ' - ' . $request->getPost('feedback-firstname') . ' ' . $request->getPost('feedback-lastname');
                         $notes .= 'Existing email address: ' . $request->getPost('feedback-existing-email-address') . PHP_EOL . 'Department: ' . $request->getPost('feedback-department') . PHP_EOL . 'Position and Title: ' . $request->getPost('feedback-position-and-title') . PHP_EOL . 'Location: ' . $request->getPost('feedback-location') . PHP_EOL . 'Personal information: ' . $request->getPost('feedback-personal-info', ' - ') . PHP_EOL;
                         $additionalParams['due_on'] = date("Y-m-d", strtotime($request->getPost('feedback-duedate')));
                         break;
                     case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_REMOVE_ACCOUNT_VALUE:
                         $taskTitle = Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_REMOVE_ACCOUNT_TEXT;
                         $notes .= 'Accounts that need to be removed: ' . $request->getPost('feedback-account') . PHP_EOL . 'Account username / email: ' . $request->getPost('feedback-account-username') . PHP_EOL . 'Email where Google Drive files should be transferred to: ' . $request->getPost('feedback-google-drive-transfer-email') . PHP_EOL;
                         $additionalParams['due_on'] = date("Y-m-d", strtotime($request->getPost('feedback-duedate')));
                         break;
                     case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_SUSPEND_ACCOUNT_VALUE:
                         $taskTitle = Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_SUSPEND_ACCOUNT_TEXT;
                         $notes .= 'Accounts that need to be suspended: ' . $request->getPost('feedback-account') . PHP_EOL . 'Account username / email: ' . $request->getPost('feedback-account-username') . PHP_EOL;
                         $additionalParams['due_on'] = date("Y-m-d", strtotime($request->getPost('feedback-duedate')));
                         break;
                     case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_UNSUSPEND_ACCOUNT_VALUE:
                         $taskTitle = Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_UNSUSPEND_ACCOUNT_TEXT;
                         $notes .= 'Accounts that need to be unsuspended: ' . $request->getPost('feedback-account') . PHP_EOL . 'Account username / email: ' . $request->getPost('feedback-account-username') . PHP_EOL;
                         $additionalParams['due_on'] = date("Y-m-d", strtotime($request->getPost('feedback-duedate')));
                         break;
                     case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_MAILING_LISTS_VALUE:
                         if (Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_ADD_USER_TO_MAILING_LISTS_VALUE == $request->getPost('feedback-mailing-list-action', Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_ADD_USER_TO_MAILING_LISTS_VALUE)) {
                             $taskTitle = Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_ADD_USER_TO_MAILING_LISTS_TEXT;
                         } else {
                             $taskTitle = Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_REMOVE_USER_FROM_MAILING_LISTS_TEXT;
                         }
                         $notes .= 'Account username / email: ' . $request->getPost('feedback-account-username') . PHP_EOL . 'Mailing List: ' . $request->getPost('feedback-mailing-list') . PHP_EOL;
                         break;
                     case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_CALL_CENTER_VALUE:
                         $taskTitle = 'Add Call Center Account // ' . $request->getPost('feedback-full-name');
                         $notes .= 'Department: ' . $request->getPost('feedback-department') . PHP_EOL . 'Account full name: ' . $request->getPost('feedback-full-name') . PHP_EOL . 'Reason: ' . $request->getPost('feedback-reason') . PHP_EOL;
                         break;
                 }
                 break;
             case Feedback::FEEDBACK_TYPE_TRAINING_REQUEST_VALUE:
                 $projectId = $asanaFeedbackConfig['project_id_development'];
                 $taskTitle = $request->getPost('feedback-title');
                 $notes .= $request->getPost('feedback-description');
                 break;
             case Feedback::FEEDBACK_TYPE_ELECTRONICS_REQUEST_VALUE:
                 $projectId = $asanaFeedbackConfig['project_id_hardware'];
                 $taskTitle = Feedback::FEEDBACK_TYPE_ELECTRONICS_REQUEST_TEXT;
                 $notes .= 'Location: ' . $request->getPost('feedback-location') . PHP_EOL . 'Reason: ' . $request->getPost('feedback-reason') . PHP_EOL;
                 break;
             case Feedback::FEEDBACK_TYPE_MARKETING_IDEA_VALUE:
                 $projectId = $asanaFeedbackConfig['project_id_marketing'];
                 $taskTitle = $request->getPost('feedback-title');
                 $notes .= $request->getPost('feedback-description');
                 break;
             case Feedback::FEEDBACK_TYPE_CONTENT_IDEA_VALUE:
                 $projectId = $asanaFeedbackConfig['project_id_content'];
                 $taskTitle = $request->getPost('feedback-title');
                 $notes .= $request->getPost('feedback-description');
                 break;
         }
         $notBOInfo = '';
         if (Feedback::FEEDBACK_APPLICATION_TYPE_BACKOFFICE == $request->getPost('feedback-application-types')) {
             $notBOInfo = "\nScreen Size: {$prop['screen_size']}\nURL: {$prop['url']}";
         }
         $notes .= PHP_EOL . "\n--------------------------------------------------------------\nSystem Parameters\n{$notBOInfo}\nUser: {$identity->firstname} {$identity->lastname} (#{$identity->id})\nEmail: {$identity->email}\nTimezone: {$identity->timezone}\n--------------------------------------------------------------";
         if ($identity->asana_id) {
             array_push($followers, $identity->asana_id);
         }
         $resultAsana = $asana->createTask(array_merge(['workspace' => $asanaFeedbackConfig['workspace_id'], 'name' => $taskTitle, 'notes' => $notes, 'projects' => [$projectId], 'followers' => $followers]), $additionalParams);
         if (!in_array($asana->responseCode, ['200', '201']) || is_null($resultAsana)) {
             $result['msg'] = "Error while trying to connect to Asana, response code: {$asana->responseCode}";
         } else {
             $resultJson = json_decode($resultAsana);
             $taskId = $resultJson->data->id;
             // attaching attachments to the task
             $targetPath = $this->getAttachmentsDirectory() . '/' . (int) $request->getPost('key');
             if (is_readable($targetPath)) {
                 $files = glob($targetPath . '/*');
                 if (count($files)) {
                     foreach ($files as $file) {
                         $asana->addAttachmentToTask($taskId, ['file' => $file]);
                         if (in_array($asana->responseCode, ['200', '201'])) {
                             unlink($file);
                         }
                     }
                 }
                 Helper::deleteDirectory($targetPath);
             }
             //doing post task create actions for specific types (subtasks, tags)
             switch ($selectedType) {
                 case Feedback::FEEDBACK_TYPE_SOFTWARE_FEEDBACK_VALUE:
                     if ((int) $request->getPost('feedback-is-bug') == 1) {
                         //add bug tag
                         $asana->addTagToTask($taskId, $asanaFeedbackConfig['bug_tag_id']);
                     }
                     break;
                 case Feedback::FEEDBACK_TYPE_ACCOUNT_MANAGEMENT_VALUE:
                     $logger = $this->getServiceLocator()->get('ActionLogger');
                     switch ($request->getPost('feedback-account-management-type')) {
                         case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_CREATE_ACCOUNT_VALUE:
                             //add subtasks
                             if ((int) $request->getPost('feedback-subscribe-google-groups') == 1) {
                                 $asana->createSubTask($taskId, ['name' => 'Subscribe to department mailing list']);
                             }
                             if (strlen($request->getPost('feedback-other-account')) > 1) {
                                 $feedbackOtherAccount = trim($request->getPost('feedback-other-account'));
                                 if (sizeof(explode(',', $feedbackOtherAccount)) > 1) {
                                     $separator = ' accounts';
                                 } else {
                                     $separator = ' account';
                                 }
                                 $asana->createSubTask($taskId, ['name' => 'Create ' . $feedbackOtherAccount . $separator]);
                             }
                             if ((int) $request->getPost('feedback-lastpass-account') == 1) {
                                 $asana->createSubTask($taskId, ['name' => 'Create LastPass account']);
                             }
                             if ((int) $request->getPost('feedback-bo-account') == 1) {
                                 $asana->createSubTask($taskId, ['name' => 'Create BO account']);
                             }
                             if ((int) $request->getPost('feedback-google-account') == 1) {
                                 $asana->createSubTask($taskId, ['name' => 'Create Google account']);
                             }
                             if ((int) $request->getPost('computer-setup') == 1) {
                                 $asana->createSubTask($taskId, ['name' => 'Setup computer']);
                             }
                             //log into backoffice
                             $msg = 'Requested to create an account for <b>' . $request->getPost('feedback-firstname') . ' ' . $request->getPost('feedback-lastname') . '</b>';
                             $logger->save(Logger::MODULE_USER, $identity->id, Logger::ACTION_HR_ACCOUNT_MANAGEMENT, $msg);
                             break;
                         case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_REMOVE_ACCOUNT_VALUE:
                             //log into backoffice
                             $msg = 'Requested to remove <b>' . $request->getPost('feedback-account') . '</b> accounts for <b>' . $request->getPost('feedback-account-username') . '</b>';
                             $logger->save(Logger::MODULE_USER, $identity->id, Logger::ACTION_HR_ACCOUNT_MANAGEMENT, $msg);
                             break;
                         case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_SUSPEND_ACCOUNT_VALUE:
                             //log into backoffice
                             $msg = 'Requested to suspend <b>' . $request->getPost('feedback-account') . '</b> accounts for <b>' . $request->getPost('feedback-account-username') . '</b>';
                             $logger->save(Logger::MODULE_USER, $identity->id, Logger::ACTION_HR_ACCOUNT_MANAGEMENT, $msg);
                             break;
                         case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_UNSUSPEND_ACCOUNT_VALUE:
                             //log into backoffice
                             $msg = 'Requested to suspend <b>' . $request->getPost('feedback-account') . '</b> accounts for <b>' . $request->getPost('feedback-account-username') . '</b>';
                             $logger->save(Logger::MODULE_USER, $identity->id, Logger::ACTION_HR_ACCOUNT_MANAGEMENT, $msg);
                             break;
                         case Feedback::FEEDBACK_SUBTYPE_ACCOUNT_MANAGEMENT_ADD_USER_TO_MAILING_LISTS_VALUE:
                             //log into backoffice
                             $msg = 'Requested to add <b>' . $request->getPost('feedback-account-username') . '</b> to <b>' . $request->getPost('feedback-mailing-list') . '</b> Mailing list';
                             $logger->save(Logger::MODULE_USER, $identity->id, Logger::ACTION_HR_ACCOUNT_MANAGEMENT, $msg);
                             break;
                     }
                     break;
                 case Feedback::FEEDBACK_TYPE_TRAINING_REQUEST_VALUE:
                     $asana->addTagToTask($taskId, $asanaFeedbackConfig['training_tag_id']);
                     break;
                 case Feedback::FEEDBACK_TYPE_ELECTRONICS_REQUEST_VALUE:
                     break;
                 case Feedback::FEEDBACK_TYPE_MARKETING_IDEA_VALUE:
                     break;
                 case Feedback::FEEDBACK_TYPE_CONTENT_IDEA_VALUE:
                     break;
             }
             $result = ['status' => 'success', 'msg' => TextConstants::SUCCESS_ADD, 'data' => ['asana_user' => count($followers) ? true : false, 'workspace_id' => $asanaFeedbackConfig['workspace_id'], 'project_id' => $projectId, 'task_id' => $taskId, 'url' => "https://app.asana.com/0/{$projectId}/{$taskId}"]];
         }
     } else {
         $result['msg'] = TextConstants::ERROR_BAD_REQUEST;
     }
     return new JsonModel($result);
 }
Example #2
0
 public function ajaxGetAsanaIdAction()
 {
     /**
      * @var array|\ArrayObject[] $resultJson
      */
     $request = $this->getRequest();
     $result = ['status' => 'error', 'msg' => TextConstants::SERVER_ERROR];
     if ($request->isPost() && $request->isXmlHttpRequest()) {
         $email = $request->getPost('email');
         try {
             $config = $this->getServiceLocator()->get('config');
             $asanaFeedbackConfig = $config['asana-api']['feedback'];
             $asana = new Asana(['apiKey' => $asanaFeedbackConfig['api_key']]);
             $resultAsana = $asana->getUsers('email');
             if (!in_array($asana->responseCode, ['200', '201']) || is_null($resultAsana)) {
                 $result['msg'] = "Error while trying to connect to Asana, response code: {$asana->responseCode}";
             } else {
                 $resultJson = json_decode($resultAsana);
                 $resultJson = current($resultJson);
                 if (count($resultJson)) {
                     $found = false;
                     foreach ($resultJson as $asanaUser) {
                         if ($email == $asanaUser->email) {
                             $result = ['status' => 'success', 'msg' => TextConstants::SUCCESS_FOUND, 'asana_id' => $asanaUser->id];
                             $found = true;
                             break;
                         }
                     }
                     if (!$found) {
                         $result['msg'] = 'No such user found in Asana, ensure you have created this user and try again.';
                     }
                 }
             }
         } catch (\Exception $ex) {
             $result['msg'] = $ex->getMessage();
         }
     } else {
         $result['msg'] = TextConstants::ERROR_BAD_REQUEST;
     }
     return new JsonModel($result);
 }