/**
  * Add single task
  *
  * @access public
  * @param void
  * @return null
  */
 function add_task()
 {
     $task_list = ProjectTaskLists::findById(get_id('task_list_id'));
     if (!$task_list instanceof ProjectTaskList) {
         flash_error(lang('task list dnx'));
         $this->redirectTo('task');
     }
     // if
     if (!$task_list->canAddTask(logged_user())) {
         flash_error(lang('no access permissions'));
         $this->redirectTo('task');
     }
     // if
     $back_to_list = array_var($_GET, 'back_to_list');
     $task = new ProjectTask();
     $task_data = array_var($_POST, 'task');
     if (!is_array($task_data)) {
         $task_data = array('due_date' => DateTimeValueLib::now());
         // array
     }
     // if
     tpl_assign('task', $task);
     tpl_assign('task_list', $task_list);
     tpl_assign('back_to_list', $back_to_list);
     tpl_assign('task_data', $task_data);
     // Form is submitted
     if (is_array(array_var($_POST, 'task'))) {
         $old_owner = $task->getAssignedTo();
         //$task_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'task_due_date_month', 1), array_var($_POST, 'task_due_date_day', 1), array_var($_POST, 'task_due_date_year', 1970));
         if (isset($_POST['task_start_date'])) {
             $task_data['start_date'] = DateTimeValueLib::makeFromString($_POST['task_start_date']);
         } else {
             $task_data['start_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'task_start_date_month', 1), array_var($_POST, 'task_start_date_day', 1), array_var($_POST, 'task_start_date_year', 1970));
         }
         if (isset($_POST['task_due_date'])) {
             $task_data['due_date'] = DateTimeValueLib::makeFromString($_POST['task_due_date']);
         } else {
             $task_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'task_due_date_month', 1), array_var($_POST, 'task_due_date_day', 1), array_var($_POST, 'task_due_date_year', 1970));
         }
         $task->setFromAttributes($task_data);
         $assigned_to = explode(':', array_var($task_data, 'assigned_to', ''));
         $task->setAssignedToCompanyId(array_var($assigned_to, 0, 0));
         $task->setAssignedToUserId(array_var($assigned_to, 1, 0));
         try {
             DB::beginWork();
             $task->save();
             $task_list->attachTask($task);
             ApplicationLogs::createLog($task, active_project(), ApplicationLogs::ACTION_ADD);
             DB::commit();
             // notify user
             if (array_var($task_data, 'send_notification') == 'checked') {
                 try {
                     $notify_people = array();
                     $project_companies = array();
                     if ($task->getAssignedTo() == null) {
                         $project_companies = active_project()->getCompanies();
                     }
                     if ($task->getAssignedTo() instanceof Company) {
                         $project_companies = array($task->getAssignedTo());
                     }
                     if ($task->getAssignedTo() instanceof User) {
                         $notify_people = array($task->getAssignedTo());
                     }
                     foreach ($project_companies as $project_company) {
                         $company_users = $project_company->getUsersOnProject(active_project());
                         if (is_array($company_users)) {
                             foreach ($company_users as $company_user) {
                                 $notify_people[] = $company_user;
                             }
                         }
                     }
                     // if
                     Notifier::newTask($task, $notify_people);
                 } catch (Exception $e) {
                     Logger::log("Error: Notification failed, " . $e->getMessage(), Logger::ERROR);
                 }
                 // try
             }
             // if
             flash_success(lang('success add task'));
             if ($back_to_list) {
                 $this->redirectToUrl($task_list->getViewUrl());
             } else {
                 $this->redirectTo('task');
             }
             // if
         } catch (Exception $e) {
             DB::rollback();
             tpl_assign('error', $e);
         }
         // try
     }
     // if
 }