| <?php␊ |
| /* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */␊ |
| /*␊ |
| # ***** BEGIN LICENSE BLOCK *****␊ |
| # This file is part of InDefero, an open source project management application.␊ |
| # Copyright (C) 2008 Céondo Ltd and contributors.␊ |
| #␊ |
| # InDefero is free software; you can redistribute it and/or modify␊ |
| # it under the terms of the GNU General Public License as published by␊ |
| # the Free Software Foundation; either version 2 of the License, or␊ |
| # (at your option) any later version.␊ |
| #␊ |
| # InDefero is distributed in the hope that it will be useful,␊ |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of␊ |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the␊ |
| # GNU General Public License for more details.␊ |
| #␊ |
| # You should have received a copy of the GNU General Public License␊ |
| # along with this program; if not, write to the Free Software␊ |
| # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA␊ |
| #␊ |
| # ***** END LICENSE BLOCK ***** */␊ |
| ␊ |
| Pluf::loadFunction('Pluf_HTTP_URL_urlForView');␊ |
| Pluf::loadFunction('Pluf_Shortcuts_RenderToResponse');␊ |
| Pluf::loadFunction('Pluf_Shortcuts_GetObjectOr404');␊ |
| Pluf::loadFunction('Pluf_Shortcuts_GetFormForModel');␊ |
| ␊ |
| /**␊ |
| * Download's views.␊ |
| *␊ |
| * - List all the files.␊ |
| * - Upload a file.␊ |
| * - See the details of a file.␊ |
| */␊ |
| class IDF_Views_Download␊ |
| {␊ |
| /**␊ |
| * List the files available for download.␊ |
| */␊ |
| public function index($request, $match)␊ |
| {␊ |
| $prj = $request->project;␊ |
| $title = sprintf(__('%s Downloads'), (string) $prj);␊ |
| // Paginator to paginate the files to download.␊ |
| $pag = new Pluf_Paginator(new IDF_Upload());␊ |
| $pag->class = 'recent-issues';␊ |
| $pag->item_extra_props = array('project_m' => $prj,␊ |
| 'shortname' => $prj->shortname);␊ |
| $pag->summary = __('This table shows the files to download.');␊ |
| $pag->action = array('IDF_Views_Download::index', array($prj->shortname));␊ |
| $pag->edit_action = array('IDF_Views_Download::view', 'shortname', 'id');␊ |
| $list_display = array(␊ |
| 'file' => __('File'),␊ |
| array('summary', 'IDF_Views_Download_SummaryAndLabels', __('Summary')),␊ |
| array('filesize', 'IDF_Views_Download_Size', __('Size')),␊ |
| array('modif_dtime', 'Pluf_Paginator_DateYMD', __('Uploaded')),␊ |
| );␊ |
| $pag->configure($list_display, array(), array('file', 'filesize', 'modif_dtime'));␊ |
| $pag->items_per_page = 10;␊ |
| $pag->no_results_text = __('No downloads were found.');␊ |
| $pag->sort_order = array('file', 'ASC');␊ |
| $pag->setFromRequest($request);␊ |
| return Pluf_Shortcuts_RenderToResponse('downloads/index.html',␊ |
| array('project' => $prj,␊ |
| 'page_title' => $title,␊ |
| 'downloads' => $pag,␊ |
| ),␊ |
| $request);␊ |
| ␊ |
| }␊ |
| ␊ |
| /**␊ |
| * View details of a file.␊ |
| */␊ |
| public function view($request, $match)␊ |
| {␊ |
| $prj = $request->project;␊ |
| $upload = Pluf_Shortcuts_GetObjectOr404('IDF_Upload', $match[2]);␊ |
| $title = sprintf(__('Download %s'), $upload->summary);␊ |
| $form = false;␊ |
| if ($request->method == 'POST' and␊ |
| true === IDF_Precondition::projectMemberOrOwner($request)) {␊ |
| ␊ |
| $form = new IDF_Form_UpdateUpload($request->POST,␊ |
| array('project' => $prj,␊ |
| 'upload' => $upload,␊ |
| 'user' => $request->user));␊ |
| if ($form->isValid()) {␊ |
| $upload = $form->save();␊ |
| $urlfile = Pluf_HTTP_URL_urlForView('IDF_Views_Download::view', ␊ |
| array($prj->shortname, $upload->id));␊ |
| $request->user->setMessage(sprintf(__('The file <a href="%1$s">%2$s</a> has been updated.'), $urlfile, Pluf_esc($upload->file)));␊ |
| $url = Pluf_HTTP_URL_urlForView('IDF_Views_Download::index', ␊ |
| array($prj->shortname));␊ |
| return new Pluf_HTTP_Response_Redirect($url);␊ |
| }␊ |
| } elseif (true === IDF_Precondition::projectMemberOrOwner($request)) {␊ |
| $form = new IDF_Form_UpdateUpload(null,␊ |
| array('upload' => $upload,␊ |
| 'project' => $prj,␊ |
| 'user' => $request->user));␊ |
| }␊ |
| return Pluf_Shortcuts_RenderToResponse('downloads/view.html',␊ |
| array(␊ |
| 'file' => $upload,␊ |
| 'auto_labels' => self::autoCompleteArrays($prj),␊ |
| 'page_title' => $title,␊ |
| 'form' => $form,␊ |
| ),␊ |
| $request);␊ |
| }␊ |
| ␊ |
| /**␊ |
| * Submit a new file for download.␊ |
| */␊ |
| public $submit_precond = array('IDF_Precondition::projectMemberOrOwner');␊ |
| public function submit($request, $match)␊ |
| {␊ |
| $prj = $request->project;␊ |
| $title = __('New Download');␊ |
| if ($request->method == 'POST') {␊ |
| $form = new IDF_Form_Upload(array_merge($request->POST, $request->FILES),␊ |
| array('project' => $prj,␊ |
| 'user' => $request->user));␊ |
| if ($form->isValid()) {␊ |
| $upload = $form->save();␊ |
| $urlfile = Pluf_HTTP_URL_urlForView('IDF_Views_Download::view', ␊ |
| array($prj->shortname, $upload->id));␊ |
| $request->user->setMessage(sprintf(__('The <a href="%s">file</a> has been uploaded.'), $urlfile));␊ |
| $url = Pluf_HTTP_URL_urlForView('IDF_Views_Download::index', ␊ |
| array($prj->shortname));␊ |
| return new Pluf_HTTP_Response_Redirect($url);␊ |
| }␊ |
| } else {␊ |
| $form = new IDF_Form_Upload(null,␊ |
| array('project' => $prj,␊ |
| 'user' => $request->user));␊ |
| }␊ |
| return Pluf_Shortcuts_RenderToResponse('downloads/submit.html',␊ |
| array(␊ |
| 'auto_labels' => self::autoCompleteArrays($prj),␊ |
| 'page_title' => $title,␊ |
| 'form' => $form,␊ |
| ),␊ |
| $request);␊ |
| }␊ |
| ␊ |
| /**␊ |
| * Create the autocomplete arrays for the little AJAX stuff.␊ |
| */␊ |
| public static function autoCompleteArrays($project)␊ |
| {␊ |
| $conf = new IDF_Conf();␊ |
| $conf->setProject($project);␊ |
| $st = preg_split("/\015\012|\015|\012/", ␊ |
| $conf->getVal('labels_downloads_predefined', IDF_Form_UploadConf::init_predefined), -1, PREG_SPLIT_NO_EMPTY);␊ |
| $auto = '';␊ |
| foreach ($st as $s) {␊ |
| $v = '';␊ |
| $d = '';␊ |
| $_s = split('=', $s, 2);␊ |
| if (count($_s) > 1) {␊ |
| $v = trim($_s[0]);␊ |
| $d = trim($_s[1]);␊ |
| } else {␊ |
| $v = trim($_s[0]);␊ |
| }␊ |
| $auto .= sprintf('{ name: "%s", to: "%s" }, ',␊ |
| Pluf_esc($d), Pluf_esc($v));␊ |
| }␊ |
| return substr($auto, 0, -1);␊ |
| }␊ |
| }␊ |
| ␊ |
| /**␊ |
| * Display the summary of a download, then on a new line, display the␊ |
| * list of labels.␊ |
| *␊ |
| * The summary of the download is linking to the download.␊ |
| */␊ |
| function IDF_Views_Download_SummaryAndLabels($field, $down, $extra='')␊ |
| {␊ |
| //$edit = Pluf_HTTP_URL_urlForView('IDF_Views_Download::view', ␊ |
| // array($down->shortname, $down->id));␊ |
| $tags = array();␊ |
| foreach ($down->get_tags_list() as $tag) {␊ |
| $tags[] = sprintf('<span class="label">%s</span>', Pluf_esc((string) $tag));␊ |
| }␊ |
| $out = '';␊ |
| if (count($tags)) {␊ |
| $out = '<br /><span class="note">'.implode(', ', $tags).'</span>';␊ |
| }␊ |
| return Pluf_esc($down->summary).$out;␊ |
| }␊ |
| ␊ |
| function IDF_Views_Download_Size($field, $down)␊ |
| {␊ |
| return Pluf_Utils::prettySize($down->$field);␊ |
| } |