/** * Manage repository users * * @param void * @return null */ function repository_users() { if ($this->active_repository->isNew()) { flash_error('Repository does not exist'); $this->redirectToReferer(SOURCE_MODULE_PATH); } // if if (!$this->active_repository->canEdit($this->logged_user)) { $this->httpError(HTTP_ERR_FORBIDDEN); } // if $this->wireframe->addPageAction(lang('Browse repository'), $this->active_repository->getBrowseUrl(), null); $this->wireframe->addPageAction(lang('Commit History'), $this->active_repository->getHistoryUrl()); $source_users = SourceUsers::findByRepository($this->active_repository); $distinct_repository_users = $this->active_repository->getDistinctUsers(); // loop through already mapped users and remove them from repository users foreach ($source_users as $source_user) { $mapped_user_key = array_search($source_user->getRepositoryUser(), $distinct_repository_users); if ($mapped_user_key !== false) { unset($distinct_repository_users[$mapped_user_key]); } // if } // foreach $this->smarty->assign(array('source_users' => $source_users, 'repository_users' => $distinct_repository_users, 'system_users' => ProjectUsers::findByProject($this->active_project), 'repository_user_add_url' => assemble_url('repository_user_add', array('project_id' => $this->active_project->getId(), 'repository_id' => $this->active_repository->getId())))); }
/** * Copy project items into a destination project * * @param Project $to * @return null */ function copyItems(&$to) { // Prepare time diff $source_starts_on = $this->getStartsOn(); if (!instance_of($source_starts_on, 'DateValue')) { $source_starts_on = $this->getCreatedOn(); } // if $target_starts_on = $to->getStartsOn(); if (!instance_of($target_starts_on, 'DateValue')) { $target_starts_on = $to->getCreatedOn(); } // if $diff = $target_starts_on->getTimestamp() - $source_starts_on->getTimestamp(); // Migrate project users $project_users = ProjectUsers::findByProject($this); if (is_foreachable($project_users)) { foreach ($project_users as $project_user) { if ($to->getLeaderId() != $project_user->getUserId()) { $user = $project_user->getUser(); if (instance_of($user, 'User')) { $to->addUser($user, $project_user->getRole(), $project_user->getPermissions()); } // if } // if } // foreach } // if // We need to move milestones in order to get milestones map $milestones_map = null; $milestones = Milestones::findAllByProject($this, VISIBILITY_PRIVATE); if (is_foreachable($milestones)) { $milestones_map = array(); foreach ($milestones as $milestone) { $copied_milestone = $milestone->copyToProject($to); if (instance_of($copied_milestone, 'Milestone')) { $copied_milestone->advance($diff, true); $milestones_map[$milestone->getId()] = $copied_milestone; } // if } // foreach } // if // Now move categories $categories_map = null; $categories = Categories::findByProject($this); if (is_foreachable($categories)) { foreach ($categories as $category) { $copied_category = $category->copyToProject($to, null, null, false); if (instance_of($copied_category, 'Category')) { $categories_map[$category->getId()] = $copied_category; } // if } // foreach } // if // Let the modules to their thing event_trigger('on_copy_project_items', array(&$this, &$to, $milestones_map, $categories_map)); // Now, lets update due dates $completable_types = get_completable_project_object_types(); if (is_foreachable($completable_types)) { foreach ($completable_types as $k => $type) { if (strtolower($type) == 'milestone') { unset($completable_types[$k]); } // if } // foreach if (count($completable_types) > 0) { $rows = db_execute_all('SELECT id, due_on FROM ' . TABLE_PREFIX . 'project_objects WHERE project_id = ? AND type IN (?) AND due_on IS NOT NULL', $to->getId(), $completable_types); if (is_foreachable($rows)) { foreach ($rows as $row) { $id = (int) $row['id']; $new_date = date(DATE_MYSQL, strtotime($row['due_on']) + $diff); db_execute('UPDATE ' . TABLE_PREFIX . 'project_objects SET due_on = ? WHERE id = ?', $new_date, $id); cache_remove("acx_project_objects_id_{$id}"); } // foreach } // if } // if } // if // Refresh tasks count, just in case... $to->refreshTasksCount(); }