/** * Show and process add milestone form * * @access public * @param void * @return null */ function add() { $this->setTemplate('add_milestone'); if (!ProjectMilestone::canAdd(logged_user(), active_project())) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('milestone')); } // if $milestone_data = array_var($_POST, 'milestone'); if (!is_array($milestone_data)) { $milestone_data = array('due_date' => DateTimeValueLib::now(), 'is_private' => config_option('default_private', false)); // array } // if $milestone = new ProjectMilestone(); tpl_assign('milestone_data', $milestone_data); tpl_assign('milestone', $milestone); if (is_array(array_var($_POST, 'milestone'))) { if (isset($_POST['milestone_due_date'])) { $milestone_data['due_date'] = DateTimeValueLib::makeFromString($_POST['milestone_due_date']); } else { $milestone_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'milestone_due_date_month', 1), array_var($_POST, 'milestone_due_date_day', 1), array_var($_POST, 'milestone_due_date_year', 1970)); } $assigned_to = explode(':', array_var($milestone_data, 'assigned_to', '')); $milestone->setFromAttributes($milestone_data); if (!logged_user()->isMemberOfOwnerCompany()) { $milestone->setIsPrivate(false); } $milestone->setProjectId(active_project()->getId()); $milestone->setAssignedToCompanyId(array_var($assigned_to, 0, 0)); $milestone->setAssignedToUserId(array_var($assigned_to, 1, 0)); try { DB::beginWork(); $milestone->save(); if (plugin_active('tags')) { $milestone->setTagsFromCSV(array_var($milestone_data, 'tags')); } ApplicationLogs::createLog($milestone, active_project(), ApplicationLogs::ACTION_ADD); DB::commit(); // Send notification try { if (array_var($milestone_data, 'send_notification') == 'checked') { Notifier::milestoneAssigned($milestone); // send notification } // if } catch (Exception $e) { } // try flash_success(lang('success add milestone', $milestone->getName())); $this->redirectTo('milestone'); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }
<?php trace(__FILE__, 'ProjectMessage::project_tabbed_navigation()'); project_tabbed_navigation(); trace(__FILE__, 'ProjectMessage::canAdd'); if (ProjectMessage::canAdd(logged_user(), active_project())) { add_page_action(lang('add message'), get_url('message', 'add')); } // if trace(__FILE__, 'ProjectTaskList::canAdd'); if (ProjectTaskList::canAdd(logged_user(), active_project())) { add_page_action(lang('add task list'), get_url('task', 'add_list')); } // if trace(__FILE__, 'ProjectMilestone::canAdd'); if (ProjectMilestone::canAdd(logged_user(), active_project())) { add_page_action(lang('add milestone'), get_url('milestone', 'add')); } // if //trace(__FILE__,'project.canChangePermissions()'); //if (active_project()->canChangePermissions(logged_user())) { // add_page_action(lang('permissions'), get_url('project', 'permissions')); //} // if trace(__FILE__, 'plugin hook'); // PLUGIN HOOK plugin_manager()->do_action('project_overview_page_actions'); // PLUGIN HOOK if (use_permitted(logged_user(), active_project(), 'tasks')) { add_page_action(lang('download task lists'), get_url('project', 'download_task_lists')); }
/** * Copies tasks from milestoneFrom to milestoneTo. * * @param ProjectMilestone $milestoneFrom * @param ProjectMilestone $milestoneTo */ function copyTasks(ProjectMilestone $milestoneFrom, ProjectMilestone $milestoneTo, $as_template = false) { //FIXME foreach ($milestoneFrom->getTasks($as_template) as $sub) { if ($sub->getParentId() != 0) { continue; } $new = ProjectTasks::createTaskCopy($sub); $new->setMilestoneId($milestoneTo->getId()); $new->save(); $object_controller = new ObjectController(); $members = $milestoneFrom->getMemberIds(); if (count($members)) { $object_controller->add_to_members($new, $members); } /* foreach ($sub->getWorkspaces() as $workspace) { if (ProjectTask::canAdd(logged_user(), $workspace)) { $new->addToWorkspace($workspace); } } if (!$as_template && active_project() instanceof Project && ProjectTask::canAdd(logged_user(), active_project())) { $new->removeFromAllWorkspaces(); $new->addToWorkspace(active_project()); } */ $new->copyCustomPropertiesFrom($sub); $new->copyLinkedObjectsFrom($sub); ProjectTasks::copySubTasks($sub, $new, $as_template); } }
/** * Milestone has been assigned to the user * * @param ProjectMilestone $milestone * @return boolean * @throws NotifierConnectionError */ function milestoneAssigned(ProjectMilestone $milestone) { if ($milestone->isCompleted()) { return true; // milestone has been already completed... } // if if (!$milestone->getAssignedTo() instanceof Contact) { return true; // not assigned to user } // if tpl_assign('milestone_assigned', $milestone); if (!$milestone->getCreatedBy() instanceof Contact) { return; } $locale = $milestone->getAssignedTo()->getLocale(); Localization::instance()->loadSettings($locale, ROOT . '/language'); if ($milestone->getDueDate() instanceof DateTimeValue) { $date = Localization::instance()->formatDescriptiveDate($milestone->getDueDate(), $milestone->getAssignedTo()->getTimezone()); tpl_assign('date', $date); } return self::queueEmail(array(self::prepareEmailAddress($milestone->getAssignedTo()->getEmailAddress(), $milestone->getAssignedTo()->getObjectName())), null, null, self::prepareEmailAddress($milestone->getCreatedBy()->getEmailAddress(), $milestone->getCreatedByDisplayName()), lang('milestone assigned to you', $milestone->getObjectName()), tpl_fetch(get_template_path('milestone_assigned', 'notifier'))); // send $locale = logged_user() instanceof Contact ? logged_user()->getLocale() : DEFAULT_LOCALIZATION; Localization::instance()->loadSettings($locale, ROOT . '/language'); }
/** * Milestone has been assigned to the user * * @param ProjectMilestone $milestone * @return boolean * @throws NotifierConnectionError */ function milestoneAssigned(ProjectMilestone $milestone) { if ($milestone->isCompleted()) { return true; // milestone has been already completed... } // if if (!$milestone->getAssignedTo() instanceof User) { return true; // not assigned to user } // if tpl_assign('milestone_assigned', $milestone); return self::sendEmail(self::prepareEmailAddress($milestone->getAssignedTo()->getEmail(), $milestone->getAssignedTo()->getDisplayName()), self::prepareEmailAddress($milestone->getCreatedBy()->getEmail(), $milestone->getCreatedByDisplayName()), $milestone->getProject()->getName() . ' - ' . lang('milestone assigned to you') . " - " . $milestone->getName(), tpl_fetch(get_template_path('milestone_assigned', 'notifier'))); // send }
/** * Create a new milestone template * */ function new_template() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $project = active_or_personal_project(); if (!ProjectMilestone::canAdd(logged_user(), $project)) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $id = get_id(); $milestone = ProjectMilestones::findById($id); if (!$milestone instanceof ProjectMilestone) { $milestone_data = array('is_template' => true); } else { $milestone_data = array('name' => $milestone->getName(), 'assigned_to' => $milestone->getAssignedToCompanyId() . ":" . $milestone->getAssignedToUserId(), 'tags' => implode(",", $milestone->getTagNames()), 'project_id' => $milestone->getProjectId(), 'description' => $milestone->getDescription(), 'copyId' => $milestone->getId(), 'is_template' => true); // array if ($milestone->getDueDate() instanceof DateTimeValue) { $milestone_data['due_date'] = $milestone->getDueDate()->getTimestamp(); } } $milestone = new ProjectMilestone(); tpl_assign('milestone_data', $milestone_data); tpl_assign('milestone', $milestone); $this->setTemplate("add_milestone"); }
/** * Create a new milestone template * */ function new_template() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $notAllowedMember = ''; if(!ProjectMilestone::canAdd(logged_user(), active_context(),$notAllowedMember)) { if (str_starts_with($notAllowedMember, '-- req dim --')) flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in))); else flash_error(lang('no context permissions to add',lang("milestones"),$notAllowedMember)); ajx_current("empty"); return; } // if $id = get_id(); $milestone = ProjectMilestones::findById($id); if (!$milestone instanceof ProjectMilestone) { $milestone_data = array('is_template' => true); } else { $milestone_data = array( 'name' => $milestone->getObjectName(), 'description' => $milestone->getDescription(), 'copyId' => $milestone->getId(), 'is_template' => true, ); // array if ($milestone->getDueDate() instanceof DateTimeValue) { $milestone_data['due_date'] = $milestone->getDueDate()->getTimestamp(); } } $milestone = new ProjectMilestone(); tpl_assign('milestone_data', $milestone_data); tpl_assign('milestone', $milestone); $this->setTemplate("add_milestone"); } // new_template
function instantiate() { $id = get_id(); $template = COTemplates::findById($id); if (!$template instanceof COTemplate) { flash_error(lang("template dnx")); ajx_current("empty"); return; } $parameters = TemplateParameters::getParametersByTemplate($id); $parameterValues = array_var($_POST, 'parameterValues'); if (count($parameters) > 0 && !isset($parameterValues)) { ajx_current("back"); return; } $objects = $template->getObjects(); foreach ($objects as $object) { if (!$object instanceof ProjectDataObject) { continue; } // copy object $copy = $object->copy(); if ($copy->columnExists('is_template')) { $copy->setColumnValue('is_template', false); } if ($copy instanceof ProjectTask) { // don't copy parent task and milestone $copy->setMilestoneId(0); $copy->setParentId(0); } $copy->save(); $wsId = array_var($_POST, 'project_id', active_or_personal_project()->getId()); // if specified, set workspace $workspace = Projects::findById($wsId); if (!$workspace instanceof Project) { $workspace = active_or_personal_project(); } $copy->addToWorkspace($workspace); // add object tags and specified tags $tags = implode(',', $object->getTagNames()); $copy->setTagsFromCSV($tags . "," . array_var($_POST, 'tags')); // copy linked objects $copy->copyLinkedObjectsFrom($object); // copy subtasks if applicable if ($copy instanceof ProjectTask) { ProjectTasks::copySubTasks($object, $copy, false); $manager = new ProjectTask(); } else { if ($copy instanceof ProjectMilestone) { ProjectMilestones::copyTasks($object, $copy, false); $manager = new ProjectMilestone(); } } // copy custom properties $copy->copyCustomPropertiesFrom($object); // set property values as defined in template $objProp = TemplateObjectProperties::getPropertiesByTemplateObject($id, $object->getId()); foreach ($objProp as $property) { $propName = $property->getProperty(); $value = $property->getValue(); if ($manager->getColumnType($propName) == DATA_TYPE_STRING) { if (is_array($parameterValues)) { foreach ($parameterValues as $param => $val) { $value = str_replace('{' . $param . '}', $val, $value); } } } else { if ($manager->getColumnType($propName) == DATA_TYPE_DATE || $manager->getColumnType($propName) == DATA_TYPE_DATETIME) { $operator = '+'; if (strpos($value, '+') === false) { $operator = '-'; } $opPos = strpos($value, $operator); if ($opPos !== false) { $dateParam = substr($value, 1, strpos($value, '}') - 1); $dateUnit = substr($value, strlen($value) - 1); // d, w or m (for days, weeks or months) if ($dateUnit == 'm') { $dateUnit = 'M'; // make month unit uppercase to call DateTimeValue::add with correct parameter } $dateNum = (int) substr($value, strpos($value, $operator), strlen($value) - 2); $date = $parameterValues[$dateParam]; $date = DateTimeValueLib::dateFromFormatAndString(user_config_option('date_format'), $date); $value = $date->add($dateUnit, $dateNum); } } else { if ($manager->getColumnType($propName) == DATA_TYPE_INTEGER) { if (is_array($parameterValues)) { foreach ($parameterValues as $param => $val) { $value = str_replace('{' . $param . '}', $val, $value); } } } } } if ($value != '') { $copy->setColumnValue($propName, $value); $copy->save(); } } //copy assigned to company if applicable if ($copy->getAssignedToUserId() != 0) { $copy->setAssignedToCompanyId($copy->getAssignedTo()->getCompanyId()); $copy->save(); } // copy reminders $reminders = ObjectReminders::getByObject($object); foreach ($reminders as $reminder) { $copy_reminder = new ObjectReminder(); $copy_reminder->setContext($reminder->getContext()); $reminder_date = $copy->getColumnValue($reminder->getContext()); if ($reminder_date instanceof DateTimeValue) { $reminder_date = new DateTimeValue($reminder_date->getTimestamp()); $reminder_date->add('m', -$reminder->getMinutesBefore()); } $copy_reminder->setDate($reminder_date); $copy_reminder->setMinutesBefore($reminder->getMinutesBefore()); $copy_reminder->setObject($copy); $copy_reminder->setType($reminder->getType()); $copy_reminder->setUserId($reminder->getUserId()); $copy_reminder->save(); } } if (is_array($parameters) && count($parameters) > 0) { ajx_current("back"); } else { ajx_current("reload"); } }
/** * Copies tasks from milestoneFrom to milestoneTo. * * @param ProjectMilestone $milestoneFrom * @param ProjectMilestone $milestoneTo */ function copyTasks(ProjectMilestone $milestoneFrom, ProjectMilestone $milestoneTo, $as_template = false) { foreach ($milestoneFrom->getTasks() as $sub) { if ($sub->getParentId() != 0) { continue; } $new = ProjectTasks::createTaskCopy($sub); $new->setIsTemplate($as_template); $new->setMilestoneId($milestoneTo->getId()); if ($sub->getIsTemplate()) { $new->setFromTemplateId($sub->getId()); } $new->save(); foreach ($sub->getWorkspaces() as $workspace) { if (ProjectTask::canAdd(logged_user(), $workspace)) { $new->addToWorkspace($workspace); } } if (!$as_template && active_project() instanceof Project && ProjectTask::canAdd(logged_user(), active_project())) { $new->removeFromAllWorkspaces(); $new->addToWorkspace(active_project()); } $new->copyCustomPropertiesFrom($sub); $new->copyLinkedObjectsFrom($sub); $new->setTagsFromCSV(implode(",", $sub->getTagNames())); ProjectTasks::copySubTasks($sub, $new, $as_template); } }
/** * Copy project * * @param void * @return null */ function copy() { trace(__FILE__, "copy():begin"); if (!Project::canAdd(logged_user())) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('dashboard')); } // if $this->setTemplate('copy_project'); $this->setLayout('administration'); $project_data = array_var($_POST, 'project'); tpl_assign('project_data', $project_data); // Submitted... if (is_array($project_data)) { $source = Projects::findById($project_data['source']); if (!$source instanceof Project) { flash_error(lang('project dnx')); $this->redirectTo('administration', 'projects'); } // if try { $shift_dates = isset($project_data['shift_dates']) ? $project_data['shift_dates'] == 'checked' : false; $copy_details = isset($project_data['copy_details']) ? $project_data['copy_details'] == 'checked' : false; $copy_tasks = isset($project_data['copy_tasks']) ? $project_data['copy_tasks'] == 'checked' : false; $copy_milestones = isset($project_data['copy_milestones']) ? $project_data['copy_milestones'] == 'checked' : false; $copy_messages = isset($project_data['copy_messages']) ? $project_data['copy_messages'] == 'checked' : false; $copy_links = isset($project_data['copy_links']) ? $project_data['copy_links'] == 'checked' : false; $copy_files = isset($project_data['copy_files']) ? $project_data['copy_files'] == 'checked' : false; $copy_users = isset($project_data['copy_users']) ? $project_data['copy_users'] == 'checked' : false; $copy_pages = isset($project_data['copy_pages']) ? $project_data['copy_pages'] == 'checked' : false; DB::beginWork(); $project = new Project(); $new_name = lang('projects copy new name', $source->getName()); $new_name .= date(' z H:i:s'); $project->setName($new_name); if ($copy_details) { $project->setDescription($source->getDescription()); $project->setPriority($source->getPriority()); $project->setShowDescriptionInOverview($source->getShowDescriptionInOverview()); } $project->save(); $project_id = $project->getId(); $add_seconds = 0; if (isset($project_data['add_days'])) { $add_days = 0 + trim($project_data['add_days']); $add_seconds = $add_days * 24 * 60 * 60; } $source_created_on = $source->getCreatedOn(); //var_dump($source_created_on); $milestone_map = array(0 => 0); // project milestones if ($copy_milestones) { $source_milestones = $source->getAllMilestones(); if (is_array($source_milestones)) { foreach ($source_milestones as $source_milestone) { $milestone = new ProjectMilestone(); //$milestone->copy($source_milestone); $milestone->setName($source_milestone->getName()); $milestone->setDescription($source_milestone->getDescription()); if ($shift_dates) { trace(__FILE__, "copy():shift dates"); $milestone->setDueDate(DateTimeValueLib::now()); $seconds = $source_milestone->getDueDate()->difference($source_created_on); $milestone->getDueDate()->advance($seconds); } else { $milestone->setDueDate($source_milestone->getDueDate()); } $milestone->getDueDate()->advance($add_seconds); $milestone->setIsPrivate($source_milestone->getIsPrivate()); $milestone->setAssignedToUserId($source_milestone->getAssignedToUserId()); $milestone->setAssignedToCompanyId($source_milestone->getAssignedToCompanyId()); $milestone->setProjectId($project_id); $milestone->save(); $milestone_map[$source_milestone->getId()] = $milestone->getId(); } // foreach } // if } // if // project tasks if ($copy_tasks) { $source_task_lists = $source->getAllTaskLists(); if (is_array($source_task_lists)) { foreach ($source_task_lists as $source_task_list) { $task_list = new ProjectTaskList(); //$task_list->copy($source_milestone); $task_list->setName($source_task_list->getName()); $task_list->setPriority($source_task_list->getPriority()); $task_list->setDescription($source_task_list->getDescription()); if ($copy_milestones) { $task_list->setMilestoneId($milestone_map[$source_task_list->getMilestoneId()]); } $task_list->setDueDate($source_task_list->getDueDate()); if ($task_list->getDueDate() instanceof DateTimeValue) { if ($shift_dates) { trace(__FILE__, "copy():task list shift dates"); $task_list->setDueDate(DateTimeValueLib::now()); $seconds = $source_task_list->getDueDate()->difference($source_created_on); $task_list->getDueDate()->advance($seconds); } $task_list->getDueDate()->advance($add_seconds); } $task_list->setIsPrivate($source_task_list->getIsPrivate()); $task_list->setOrder($source_task_list->getOrder()); $task_list->setProjectId($project_id); $task_list->save(); $source_tasks = $source_task_list->getTasks(); if (is_array($source_tasks)) { foreach ($source_tasks as $source_task) { $task = new ProjectTask(); $task->setOrder($source_task->getOrder()); $task->setDueDate($source_task->getDueDate()); if ($task->getDueDate() instanceof DateTimeValue) { if ($shift_dates) { trace(__FILE__, "copy():task shift dates"); $task->setDueDate(DateTimeValueLib::now()); $seconds = $source_task->getDueDate()->difference($source_created_on); $task->getDueDate()->advance($seconds); } $task->getDueDate()->advance($add_seconds); } $task->setText($source_task->getText()); $task->getAssignedToUserId($source_task->getAssignedToUserId()); $task->getAssignedToCompanyId($source_task->getAssignedToCompanyId()); $task_list->attachTask($task); } } } // foreach } // if } // if // project messages if ($copy_messages) { $source_messages = $source->getAllMessages(); if (is_array($source_messages)) { foreach ($source_messages as $source_message) { $message = new ProjectMessage(); //$message->copy($source_message); $message->setTitle($source_message->getTitle()); $message->setText($source_message->getText()); $message->setAdditionalText($source_message->getAdditionalText()); if ($copy_milestones) { $message->setMilestoneId($milestone_map[$source_message->getMilestoneId()]); } $message->setIsImportant($source_message->getIsImportant()); $message->setIsPrivate($source_message->getIsPrivate()); $message->setCommentsEnabled($source_message->getCommentsEnabled()); $message->setAnonymousCommentsEnabled($source_message->getAnonymousCommentsEnabled()); $message->setProjectId($project_id); $message->save(); } // foreach } // if } // if // project links if ($copy_links) { $source_links = ProjectLinks::getAllProjectLinks($source); if (is_array($source_links)) { foreach ($source_links as $source_link) { $link = new ProjectLink(); //$folder->copy($source_link); $link->setTitle($source_link->getTitle()); $link->setUrl($source_link->getUrl()); $link->setProjectId($project_id); $link->save(); } // foreach } // if } // if // project folders & files if ($copy_files) { $folder_map = array(0 => 0); $source_folders = $source->getFolders(); if (is_array($source_folders)) { foreach ($source_folders as $source_folder) { $folder = new ProjectFolder(); //$folder->copy($source_folder); $folder->setName($source_folder->getName()); $folder->setProjectId($project_id); $folder->save(); $folder_map[$source_folder->getId()] = $folder->getId(); } // foreach } // if $source_files = ProjectFiles::getAllFilesByProject($source); if (is_array($source_files)) { foreach ($source_files as $source_file) { $file = new ProjectFile(); $file->setProjectId($project_id); $file->setFolderId($folder_map[$source_file->getFolderId()]); $file->setFileName($source_file->getFileName()); $file->setDescription($source_file->getDescription()); $file->setIsPrivate($source_file->getIsPrivate()); $file->setIsImportant($source_file->getIsImportant()); $file->setIsLocked($source_file->getIsLocked()); $file->setIsVisible($source_file->getIsVisible()); $file->setExpirationTime($source_file->getExpirationTime()); $file->setCommentsEnabled($source_file->getCommentsEnabled()); $file->setAnonymousCommentsEnabled($source_file->getAnonymousCommentsEnabled()); $file->save(); $source_revision = $source_file->getLastRevision(); if ($source_revision instanceof ProjectFileRevision) { $revision = new ProjectFileRevision(); $revision->setFileId($file->getId()); $revision->setRevisionNumber($source_revision->getRevisionNumber()); $revision->setRepositoryId($source_revision->getRepositoryId()); $revision->setFilesize($source_revision->getFilesize()); $revision->setFilename($source_revision->getFileName()); $revision->setTypeString($source_revision->getTypeString()); $revision->setThumbFilename($source_revision->getThumbFilename()); $revision->setFileTypeId($source_revision->getFileTypeId()); $revision->setComment($source_revision->getComment()); $revision->save(); } } // foreach } // if } // if if ($copy_pages) { $source_pages = Wiki::getAllProjectPages($source); if (is_array($source_pages)) { foreach ($source_pages as $source_page) { $page = new WikiPage(); $page->setProjectId($project_id); $page->setProjectIndex($source_page->getProjectIndex()); $page->setProjectSidebar($source_page->getProjectSidebar()); if (plugin_active('tags')) { //$page->setTags($source_page->getTagNames()); } //Make a new revision of this page $revision = $page->makeRevision(); $source_revision = $source_page->getLatestRevision(); //Set attributes $revision->setName($source_revision->getName()); $revision->setContent($source_revision->getContent()); $revision->setLogMessage($source_revision->getLogMessage()); //Save the page $page->save(); } // foreach } // if } // if if ($copy_users) { $source_companies = ProjectCompanies::instance()->getCompaniesByProject($source); if (is_array($source_companies)) { foreach ($source_companies as $source_company) { $project_company = new ProjectCompany(); $project_company->setCompanyId($source_company->getId()); $project_company->setProjectId($project_id); $project_company->save(); } // foreach } $source_users = ProjectUsers::instance()->getUsersByProject($source); if (is_array($source_users)) { foreach ($source_users as $source_user) { $project_user = new ProjectUser(); $project_user->setUserId($source_user->getId()); $project_user->setProjectId($project_id); $project_user->save(); } // foreach } } /* $permissions = array_keys(PermissionManager::getPermissionsText()); $auto_assign_users = owner_company()->getAutoAssignUsers(); // We are getting the list of auto assign users. If current user is not in the list // add it. He's creating the project after all... if (is_array($auto_assign_users)) { $auto_assign_logged_user = false; foreach ($auto_assign_users as $user) { if ($user->getId() == logged_user()->getId()) { $auto_assign_logged_user = true; } } // if if (!$auto_assign_logged_user) { $auto_assign_users[] = logged_user(); } } else { $auto_assign_users[] = logged_user(); } // if foreach ($auto_assign_users as $user) { $project_user = new ProjectUser(); $project_user->setProjectId($project->getId()); $project_user->setUserId($user->getId()); if (is_array($permissions)) { foreach ($permissions as $permission) { $user = Users::findById($project_user->getUserId()); $user->setProjectPermission($project,$permission,true); } } // if $project_user->save(); } // foreach */ ApplicationLogs::createLog($project, null, ApplicationLogs::ACTION_ADD, false, true); DB::commit(); flash_success(lang('success copy project', $source->getName(), $project->getName())); $this->redirectToUrl($project->getPermissionsUrl()); } catch (Exception $e) { echo $e->getMessage(); tpl_assign('error', $e); DB::rollback(); } // try } // if (submitted) }