<?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);␊ |
} |