/** * Optimize git repo * * @return void */ public function gitgcTask() { $id = Request::getVar('id', 0); // Get repo model require_once PATH_CORE . DS . 'components' . DS . 'com_projects' . DS . 'models' . DS . 'repo.php'; $project = new Models\Project($id); if (!$project->exists()) { App::redirect(Route::url('index.php?option=' . $this->_option, false), Lang::txt('COM_PROJECTS_NOTICE_ID_NOT_FOUND'), 'error'); return; } $repo = new \Components\Projects\Models\Repo($project, 'local'); $params = array('path' => $repo->get('path'), 'adv' => true); $repo->call('optimize', $params); // Redirect App::redirect(Route::url('index.php?option=' . $this->_option . '&task=edit&id=' . $id, false), Lang::txt('Git repo optimized')); }
/** * Serve file (usually via public link) * * @param string $type * @param integer $projectid * @param string $query * @return void */ public function serve($type = '', $projectid = 0, $query = '') { $this->_area = $this->onProjectAreas(); if ($type != $this->_area['name']) { return false; } $data = json_decode($query); if (!isset($data->file) || !$projectid) { return false; } $file = $data->file; $disp = isset($data->disp) ? $data->disp : 'inline'; $limited = isset($data->limited) ? $data->limited : 0; $hash = isset($data->hash) ? $data->hash : 0; $repoName = isset($data->repo) ? $data->repo : 'local'; // Instantiate a project $model = new \Components\Projects\Models\Project($projectid); if (!$model->exists() || $limited == 1 && !$model->access('member')) { // Throw error App::abort(403, Lang::txt('COM_PROJECTS_ERROR_ACTION_NOT_AUTHORIZED')); } // Load repo $repo = new \Components\Projects\Models\Repo($model, $repoName); $deleteTemp = false; if ($hash) { $tempPath = sys_get_temp_dir(); $tempName = 'temp-' . \Components\Projects\Helpers\Html::generateCode(4, 4, 0, 1, 0) . basename($file); $serve = $tempPath . DS . $tempName; // Get file content $repo->call('content', $params = array('fileName' => $file, 'hash' => $hash, 'target' => $serve)); $deleteTemp = true; } else { $serve = $repo->get('path') . DS . $file; } // Ensure the file exist if (!file_exists($serve)) { // Throw error App::abort(404, Lang::txt('COM_PROJECTS_FILE_NOT_FOUND')); } // Initiate a new content server and serve up the file $server = new \Hubzero\Content\Server(); $server->filename($serve); $server->disposition($disp); $server->acceptranges(false); // @TODO fix byte range support $server->saveas(basename($file)); $result = $server->serve(); if ($deleteTemp) { // Delete downloaded temp file Filesystem::delete($serve); } if (!$result) { // Should only get here on error App::abort(404, Lang::txt('PLG_PROJECTS_FILES_SERVER_ERROR')); } else { exit; } return; }