/** * Add project * * @param void * @return null */ function add() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_project'); if (!Project::canAdd(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $project = new Project(); $project_data = array_var($_POST, 'project'); $projects = logged_user()->getActiveProjects(); if (active_project() instanceof Project) { $billing_amounts = active_project()->getBillingAmounts(); } else { $billing_amounts = BillingCategories::getDefaultBillingAmounts(); } tpl_assign('project', $project); tpl_assign('projects', $projects); tpl_assign('project_data', $project_data); tpl_assign('billing_amounts', $billing_amounts); // Submited... if (is_array($project_data)) { $project->setFromAttributes($project_data); try { DB::beginWork(); $project->save(); //Save to get the id, then update the project path info if (array_var($project_data, 'parent_id') != $project->getParentId()) { $parent = Projects::findById(array_var($project_data, 'parent_id')); if ($parent) { if (!$project->canSetAsParentWorkspace($parent)) { flash_error(lang('error cannot set workspace as parent', $parent->getName())); ajx_current("empty"); return; } } $project->setParentWorkspace($parent); } $project->save(); /* Billing */ $billings = array_var($project_data, 'billing', null); if ($billings) { foreach ($billings as $billing_id => $billing) { if ($billing['update'] && $billing['value'] && $billing['value'] != 0) { $wb = new WorkspaceBilling(); $wb->setProjectId($project->getId()); $wb->setBillingId($billing_id); $value = $billing['value']; if (strpos($value, ',') && !strpos($value, '.')) { $value = str_replace(',', '.', $value); } $wb->setValue($value); $wb->save(); } } } /* Project contacts */ if (can_manage_contacts(logged_user())) { $contacts = array_var($project_data, 'contacts', null); if ($contacts) { foreach ($contacts as $contact_data) { $contact = Contacts::findById($contact_data['contact_id']); if ($contact instanceof Contact) { $pc = new ProjectContact(); $pc->setProjectId($project->getId()); $pc->setContactId($contact_data['contact_id']); $pc->setRole($contact_data['role']); $pc->save(); } } } } /* <permissions> */ $permissions = null; $permissionsString = array_var($_POST, 'permissions'); if ($permissionsString && $permissionsString != '') { $permissions = json_decode($permissionsString); } if (is_array($permissions) && count($permissions) > 0) { //Add new permissions //TODO - Make batch update of these permissions foreach ($permissions as $perm) { if (ProjectUser::hasAnyPermissions($perm->pr, $perm->pc)) { $relation = new ProjectUser(); $relation->setProjectId($project->getId()); $relation->setUserId($perm->wsid); $relation->setCheckboxPermissions($perm->pc, $relation->getUserOrGroup()->isGuest() ? false : true); $relation->setRadioPermissions($perm->pr, $relation->getUserOrGroup()->isGuest() ? false : true); $relation->save(); } //endif //else if the user has no permissions at all, he is not a project_user. ProjectUser is not created } //end foreach } // if /* </permissions> */ $object_controller = new ObjectController(); $object_controller->add_custom_properties($project); ApplicationLogs::createLog($project, null, ApplicationLogs::ACTION_ADD, false, true); DB::commit(); if (logged_user()->isProjectUser($project)) { evt_add("workspace added", array("id" => $project->getId(), "name" => $project->getName(), "color" => $project->getColor(), "parent" => $project->getParentId())); } flash_success(lang('success add project', $project->getName())); ajx_current("back"); return; } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }