From d04ecd60c4c55edb1932e11369a3ac40f1ab7f9b Mon Sep 17 00:00:00 2001 From: William MARTIN Date: Fri, 1 Apr 2011 14:13:42 +0200 Subject: [PATCH 1/9] Add default logo for project without one --- logo/no_logo.svg | 143 ++++++++++++++++++++++++++++++++++ www/media/idf/img/no_logo.png | Bin 0 -> 1308 bytes 2 files changed, 143 insertions(+) create mode 100644 logo/no_logo.svg create mode 100644 www/media/idf/img/no_logo.png diff --git a/logo/no_logo.svg b/logo/no_logo.svg new file mode 100644 index 0000000..8ae85f2 --- /dev/null +++ b/logo/no_logo.svg @@ -0,0 +1,143 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ? + + diff --git a/www/media/idf/img/no_logo.png b/www/media/idf/img/no_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bdaef70cc74822d06fe817f747ee0318c0d4c8f0 GIT binary patch literal 1308 zcmV+%1>^dOP)9pYeg z7qfPuyHGZJ<0|6nSVu}3z3`{CU{Q30iUS#iLDvpO%^0JIj9yfTTX6$v)rob}Fc*{P ziD{B!jyB&e)>@n8B+&}J*>iPx|DNZZ=ljn24gvTZz|Tkl#+WTt&1MjhGmWw`0^r>0 z@SOq?Ik}fXyczsX4Qgy`RO$74n;;0KtE;PDcXoC@NT+W{ENE|U=QxfVE+{B?Q>)bq zZnt~E=ks0XIPUY-*4CIJ`A%7|zP{d6SXfx0)9D1B=V7r}OeG~Hp8@zTRd3n?h-eoP zy+=e>iO5MrE+YD!i0<6DapTjWp&`}M($YqKW@aXDu~^=2X=(X5>0G2?0TI0dU>-nL zvO2X|jjF0D)YsR8hyVZ+6BG9%k;v$tIXO86k|Z5dnw|D8ICbh&e|~=cUY$-?rq}CpMN#yKqIj*n zy}j+ql`GXwr}M4R(NO@v&6_uI^5jVn5wfzfc4@WR(*TAN&E?YB0WB>p9~?e>_}kLb z(&JXEwa{QNsEdkGS8$ze+@Wb#?Vdy(CHScsu|AB7z_YuO*tx7_+6c;KGFq zHj~NZC@Lz-d+O^`7z~E}DwXOTBFYd&aU-r)t6?-6pWP+LX_V$C6>#RvnM|Ed*Ky#$ zfxU_Hk$-W2ZEa2EbUu6aS5{Vn=byPtL>WpPN!NhUXzaIItp}Czp-^afY;4T!@puYn zW@Z2Y#l^*FYHE6}j))X*R8hdWbLR|sd3lv;wOUc2$KzSKd-v{-c(Of@9z6=X-H!O4 z_4RfCmIY`un%eB_Y;zKFI2;ZOfZYI4Q&WSwx;n(K6UG=;S63fyS%4r2$F*85CCbUN zj7yg;Asi0x27tP{I@H$ICY%!t1|Lh3G^oU*=#56B*{_rv85zOc+#CSFY&QFp$N^ws zVPQ5L4&UCg0FL7nb5m1O8`npU9EmE`t*op_!C>%9hrhS}NKdlxTW>`@$qBx`^%rYNqestWt|?fW4V3SG<3&;KbtAB)8>H8u5c zd3pJxWaL1SCm_r6qa@-0K#s*?o=_;X64!_E@$p~1UhlD*Sif34Y#AwXoVmMYEcybkR)lu@AtR$_4S2PkrRCpEz+Ma`x=mYQ~t3G4{!J$x{jdfVQ@_*6Hc#=E=#)2}zO=i9{Z| z-R=k7-Q9Oyg!n1aI+9(!eEFN^=H{VbF!&(=bw);pgFV@cFN**F4GAy#_xvCB@Xk-V SXKV=o0000 Date: Fri, 1 Apr 2011 14:14:30 +0200 Subject: [PATCH 2/9] Update the index template --- src/IDF/templates/idf/index.html | 20 +++++++++++++++++--- www/media/idf/css/style.css | 21 +++++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/IDF/templates/idf/index.html b/src/IDF/templates/idf/index.html index b093e76..a2f5abd 100644 --- a/src/IDF/templates/idf/index.html +++ b/src/IDF/templates/idf/index.html @@ -9,9 +9,23 @@ {aurl 'url', 'IDF_Views_Admin::projectCreate'}

+ {trans 'Create Project'}

{/if} {else} -
    {foreach $projects as $p} -
  • {if $p.private}{trans 'Private project'} {/if}{$p}{if $p.shortdesc}, {$p.shortdesc}{/if}
  • -{/foreach}
+{foreach $projects as $p} + +
+

{$p}{if $p.private} - {trans 'Private project'}

{/if}

+ {if $p.shortdesc}

{$p.shortdesc}

{/if} +
+
+{/foreach} {/if} {/block} {block context} diff --git a/www/media/idf/css/style.css b/www/media/idf/css/style.css index c1e3356..3e92715 100644 --- a/www/media/idf/css/style.css +++ b/www/media/idf/css/style.css @@ -1043,3 +1043,24 @@ span.scm-action.property-changed { #stats td { padding: .2em; } + +/* + * Project list on index + */ +div.p-list-img { + float: left; +} + +div.p-list-prj { + float: left; + margin: 0 0 .5em 1em; +} + +div.p-list-prj p { + margin: 0px; +} + +.p-list-private { + bottom: 10px; + position: relative; +} From 9a93acd1a55e168061e2597577e5a0109cd6c738 Mon Sep 17 00:00:00 2001 From: William MARTIN Date: Fri, 1 Apr 2011 14:17:56 +0200 Subject: [PATCH 3/9] Update the admin template --- src/IDF/Views/Project.php | 28 ++++++++++++++++++++++++ src/IDF/templates/idf/admin/summary.html | 26 +++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/IDF/Views/Project.php b/src/IDF/Views/Project.php index 2befafc..03f2f9b 100644 --- a/src/IDF/Views/Project.php +++ b/src/IDF/Views/Project.php @@ -265,6 +265,33 @@ class IDF_Views_Project public $admin_precond = array('IDF_Precondition::projectOwner'); public function admin($request, $match) { + $prj = $request->project; + $title = sprintf(__('%s Project Summary'), (string) $prj); + $extra = array('project' => $prj); + if ($request->method == 'POST') { + $form = new IDF_Form_ProjectConf(array_merge($request->POST, + $request->FILES), + $extra); + if ($form->isValid()) { + $form->save(); + $request->user->setMessage(__('The project has been updated.')); + $url = Pluf_HTTP_URL_urlForView('IDF_Views_Project::admin', + array($prj->shortname)); + return new Pluf_HTTP_Response_Redirect($url); + } + } else { + $form = new IDF_Form_ProjectConf($prj->getData(), $extra); + } + + return Pluf_Shortcuts_RenderToResponse('idf/admin/summary.html', + array( + 'page_title' => $title, + 'form' => $form, + 'project' => $prj, + 'upload_path' => Pluf::f('upload_path'), + ), + $request); +/* $prj = $request->project; $title = sprintf(__('%s Project Summary'), (string) $prj); $form_fields = array('fields'=> array('name', 'shortdesc', @@ -292,6 +319,7 @@ class IDF_Views_Project 'form' => $form, ), $request); +*/ } /** diff --git a/src/IDF/templates/idf/admin/summary.html b/src/IDF/templates/idf/admin/summary.html index 8ee1d71..1c012bb 100644 --- a/src/IDF/templates/idf/admin/summary.html +++ b/src/IDF/templates/idf/admin/summary.html @@ -9,7 +9,7 @@ {/if} {/if} -
+ @@ -30,6 +30,30 @@ {$form.f.description|unsafe} + + + + + + + + +{if $project.logo} + + + + +{/if} -{if $project.logo} +{if $logo} - + From dc31155de19b8ba472a5c210711c3bb264a9ba8d Mon Sep 17 00:00:00 2001 From: William MARTIN Date: Mon, 11 Apr 2011 15:37:40 +0200 Subject: [PATCH 8/9] Second pass of code review --- INSTALL.mdtext | 6 ++ logo/no_logo.svg | 75 ++++------------------- src/IDF/Form/ProjectConf.php | 4 +- src/IDF/Views/Project.php | 2 +- src/IDF/templates/idf/admin/summary.html | 2 +- src/IDF/templates/idf/base-full.html | 2 +- src/IDF/templates/idf/base.html | 2 +- www/media/idf/css/style.css | 4 +- www/media/idf/img/no_logo.png | Bin 1308 -> 1248 bytes 9 files changed, 24 insertions(+), 73 deletions(-) diff --git a/INSTALL.mdtext b/INSTALL.mdtext index 97a43d6..7827f25 100644 --- a/INSTALL.mdtext +++ b/INSTALL.mdtext @@ -4,6 +4,12 @@ The installation of InDefero is composed of 2 parts, first the installation of the [Pluf framework](http://www.pluf.org) and second, the installation of InDefero by itself. +## PHP modules for indefero + +Indefero need the GD module for PHP. It's named "php5-gd" in debian. + + $ apt-get install php5-gd + ## Recommended Layout of the Files If your server document root is in `/var/www` a good thing is to keep diff --git a/logo/no_logo.svg b/logo/no_logo.svg index 8ae85f2..80c206b 100644 --- a/logo/no_logo.svg +++ b/logo/no_logo.svg @@ -14,7 +14,10 @@ id="svg2985" height="32" width="32" - version="1.1"> + version="1.1" + inkscape:export-filename="/home/www/indefero/logo/no_logo.png" + inkscape:export-xdpi="89.989998" + inkscape:export-ydpi="89.989998"> image/svg+xml - + - - - - - - - - - - - - - - - - - + id="g3838" /> ? diff --git a/src/IDF/Form/ProjectConf.php b/src/IDF/Form/ProjectConf.php index 9290cde..0144cd1 100644 --- a/src/IDF/Form/ProjectConf.php +++ b/src/IDF/Form/ProjectConf.php @@ -3,7 +3,7 @@ /* # ***** BEGIN LICENSE BLOCK ***** # This file is part of InDefero, an open source project management application. -# Copyright(C) 2008 Céondo Ltd and contributors. +# Copyright(C) 2008-2011 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 @@ -63,7 +63,7 @@ class IDF_Form_ProjectConf extends Pluf_Form 'label' => __('Update the logo'), 'initial' => '', 'help_text' => __('The logo must be a picture with a size of 32 by 32.'), - 'max_size' => Pluf::f('max_upload_size', 100 * 1024), + 'max_size' => Pluf::f('max_upload_size', 5 * 1024), 'move_function_params' => array('upload_path' => $upload_path, 'upload_path_create' => true, diff --git a/src/IDF/Views/Project.php b/src/IDF/Views/Project.php index 58ecf91..394a898 100644 --- a/src/IDF/Views/Project.php +++ b/src/IDF/Views/Project.php @@ -40,7 +40,7 @@ class IDF_Views_Project $prj = $request->project; $logo = $prj->getConf()->getVal('logo'); - if(empty($logo)) { + if (empty($logo)) { $url = Pluf::f('url_media') . '/idf/img/no_logo.png'; return new Pluf_HTTP_Response_Redirect($url); } diff --git a/src/IDF/templates/idf/admin/summary.html b/src/IDF/templates/idf/admin/summary.html index 349a840..5a44503 100644 --- a/src/IDF/templates/idf/admin/summary.html +++ b/src/IDF/templates/idf/admin/summary.html @@ -34,7 +34,7 @@
{$form.f.name.labelTag}:
{trans 'Actual logo'}: +{if $project.logo} +project logo +{else} +{trans 'Your project do not have a logo configured yet.'} +{/if} +
{$form.f.logo.labelTag}:{if $form.f.logo.errors}{$form.f.logo.fieldErrors}{/if} +{$form.f.logo|unsafe} +
{$form.f.logo_remove.labelTag}:{if $form.f.logo_remove.errors}{$form.f.logo_remove.fieldErrors}{/if} +{$form.f.logo_remove|unsafe} +
  From aa164936f44b533252e14d66b93db2c590b0f897 Mon Sep 17 00:00:00 2001 From: William MARTIN Date: Fri, 1 Apr 2011 14:19:07 +0200 Subject: [PATCH 4/9] Remove commented code --- src/IDF/Views/Project.php | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/IDF/Views/Project.php b/src/IDF/Views/Project.php index 03f2f9b..cb071b1 100644 --- a/src/IDF/Views/Project.php +++ b/src/IDF/Views/Project.php @@ -291,35 +291,6 @@ class IDF_Views_Project 'upload_path' => Pluf::f('upload_path'), ), $request); -/* - $prj = $request->project; - $title = sprintf(__('%s Project Summary'), (string) $prj); - $form_fields = array('fields'=> array('name', 'shortdesc', - 'description')); - if ($request->method == 'POST') { - $form = Pluf_Shortcuts_GetFormForModel($prj, $request->POST, - $form_fields); - if ($form->isValid()) { - $prj = $form->save(); - $request->user->setMessage(__('The project has been updated.')); - $url = Pluf_HTTP_URL_urlForView('IDF_Views_Project::admin', - array($prj->shortname)); - return new Pluf_HTTP_Response_Redirect($url); - } - } else { - $form = Pluf_Shortcuts_GetFormForModel($prj, $prj->getData(), - $form_fields); - } - $form->fields['description']->widget->attrs['cols'] = 68; - $form->fields['description']->widget->attrs['rows'] = 26; - $form->fields['shortdesc']->widget->attrs['size'] = 67; - return Pluf_Shortcuts_RenderToResponse('idf/admin/summary.html', - array( - 'page_title' => $title, - 'form' => $form, - ), - $request); -*/ } /** From 352dc3e179cfa1dc804552aef1e4e83728422306 Mon Sep 17 00:00:00 2001 From: William MARTIN Date: Fri, 1 Apr 2011 16:05:32 +0200 Subject: [PATCH 5/9] Add IDF_Form_ProjectConf Update template --- src/IDF/FileUtil.php | 11 ++ src/IDF/Form/ProjectConf.php | 141 +++++++++++++++++++++++ src/IDF/Views.php | 14 ++- src/IDF/Views/Project.php | 7 +- src/IDF/templates/idf/admin/summary.html | 6 +- src/IDF/templates/idf/index.html | 4 +- 6 files changed, 176 insertions(+), 7 deletions(-) create mode 100644 src/IDF/Form/ProjectConf.php diff --git a/src/IDF/FileUtil.php b/src/IDF/FileUtil.php index 725d980..c9ec8e9 100644 --- a/src/IDF/FileUtil.php +++ b/src/IDF/FileUtil.php @@ -162,4 +162,15 @@ class IDF_FileUtil $ext = array_merge(self::$supportedExtenstions, explode(' ' , $ext)); return (in_array($fileinfo[2], $ext)); } + + /* + * + */ + public static function getPictureInline($file) + { + $info = IDF_FileUtil::getMimeType($file); + $content = file_get_contents($file); + $base64 = 'data:' . $info[0] . ';base64,' . base64_encode($content); + return $base64; + } } diff --git a/src/IDF/Form/ProjectConf.php b/src/IDF/Form/ProjectConf.php new file mode 100644 index 0000000..1a3bd45 --- /dev/null +++ b/src/IDF/Form/ProjectConf.php @@ -0,0 +1,141 @@ +project = $extra['project']; + + // Basic part + $this->fields['name'] = new Pluf_Form_Field_Varchar(array('required' => true, + 'label' => __('Name'), + 'initial' => $this->project->name, + )); + $this->fields['shortdesc'] = new Pluf_Form_Field_Varchar(array('required' => true, + 'label' => __('Short Description'), + 'initial' => $this->project->shortdesc, + 'widget_attrs' => array('size' => '68'), + )); + $this->fields['description'] = new Pluf_Form_Field_Varchar(array('required' => true, + 'label' => __('Description'), + 'initial' => $this->project->description, + 'widget_attrs' => array('cols' => 68, + 'rows' => 26, + ), + 'widget' => 'Pluf_Form_Widget_TextareaInput', + )); + + // Logo part + $upload_path = Pluf::f('upload_path', false); + if(false === $upload_path) { + throw new Pluf_Exception_SettingError(__('The "upload_issue_path" configuration variable was not set.')); + } + $md5 = md5(rand().microtime().Pluf_Utils::getRandomString()); + $filename = substr($md5, 0, 2).'/'.substr($md5, 2, 2).'/'.substr($md5, 4).'/%s'; + $this->fields['logo'] = new Pluf_Form_Field_File(array('required' => false, + 'label' => __('Update the logo'), + 'initial' => '', + 'help_text' => __('The logo must be a picture with a size of 16 by 16.'), + 'max_size' => Pluf::f('max_upload_size', 2097152), + 'move_function_params' => + array('upload_path' => $upload_path, + 'upload_path_create' => true, + 'file_name' => $filename, + ) + )); + + $this->fields['logo_remove'] = new Pluf_Form_Field_Boolean(array('required' => false, + 'label' => __('Remove the current logo'), + 'initial' => false, + 'widget' => 'Pluf_Form_Widget_CheckboxInput', + )); + } + + /** + * If we have uploaded a file, but the form failed remove it. + * + */ + function failed() + { + if(!empty($this->cleaned_data['logo']) + and file_exists(Pluf::f('upload_path').'/'.$this->cleaned_data['logo'])) { + unlink(Pluf::f('upload_path').'/'.$this->cleaned_data['logo']); + } + } + + public function clean() + { + if(!isset($this->cleaned_data['logo_remove'])) { + $this->cleaned_data['logo_remove'] = false; + } + + return $this->cleaned_data; + } + + public function clean_logo() + { + if(!isset($this->cleaned_data['logo']) || + $this->cleaned_data['logo'] == "") { + return ''; + } + + $meta = getimagesize(Pluf::f('upload_path').'/'.$this->cleaned_data['logo']); + + if($meta === FALSE) { + throw new Pluf_Form_Invalid("Error during the determination of the size of the picture"); + } + + if($meta[0] !== 32 || $meta[1] !== 32) { + throw new Pluf_Form_Invalid("The picture must have a size of 16 by 16."); + } + + return $this->cleaned_data['logo']; + } + + public function save($commit=true) + { + $conf = $this->project->getConf(); + + // Basic part + $this->project->name = $this->cleaned_data['name']; + $this->project->shortdesc = $this->cleaned_data['shortdesc']; + $this->project->description = $this->cleaned_data['description']; + $this->project->update(); + + // Logo part + if($this->cleaned_data['logo'] !== "") { + $conf->setVal('logo', $this->cleaned_data['logo']); + } + if($this->cleaned_data['logo_remove'] === true) { + @unlink(Pluf::f('upload_path').'/'.$conf->getVal('logo')); + $conf->delVal('logo'); + } + } +} diff --git a/src/IDF/Views.php b/src/IDF/Views.php index 208299e..8dc92b7 100644 --- a/src/IDF/Views.php +++ b/src/IDF/Views.php @@ -41,12 +41,24 @@ class IDF_Views { $projects = self::getProjects($request->user); $stats = self::getProjectsStatistics ($projects); + + $logos = array(); + foreach ($projects as $p) { + $logo = $p->getConf()->getVal('logo'); + if (!empty($logo)) { + $logo = Pluf::f('upload_path').'/'.$logo; + $logos[$p->shortname] = IDF_FileUtil::getPictureInline($logo); + } else { + $logos[$p->shortname] = ""; + } + } if ($api == true) return $projects; return Pluf_Shortcuts_RenderToResponse('idf/index.html', array('page_title' => __('Projects'), 'projects' => $projects, - 'stats' => new Pluf_Template_ContextVars($stats)), + 'stats' => new Pluf_Template_ContextVars($stats), + 'logos' => $logos), $request); } diff --git a/src/IDF/Views/Project.php b/src/IDF/Views/Project.php index cb071b1..d78dd9c 100644 --- a/src/IDF/Views/Project.php +++ b/src/IDF/Views/Project.php @@ -283,12 +283,17 @@ class IDF_Views_Project $form = new IDF_Form_ProjectConf($prj->getData(), $extra); } + $logo = $prj->getConf()->getVal('logo'); + if (!empty($logo)) { + $logo = Pluf::f('upload_path').'/'.$logo; + $logo_base64 = IDF_FileUtil::getPictureInline($logo); + } return Pluf_Shortcuts_RenderToResponse('idf/admin/summary.html', array( 'page_title' => $title, 'form' => $form, 'project' => $prj, - 'upload_path' => Pluf::f('upload_path'), + 'logo' => $logo_base64, ), $request); } diff --git a/src/IDF/templates/idf/admin/summary.html b/src/IDF/templates/idf/admin/summary.html index 1c012bb..9653ede 100644 --- a/src/IDF/templates/idf/admin/summary.html +++ b/src/IDF/templates/idf/admin/summary.html @@ -33,8 +33,8 @@
{trans 'Actual logo'}: -{if $project.logo} -project logo +{if $logo} +project logo {else} {trans 'Your project do not have a logo configured yet.'} {/if} @@ -46,7 +46,7 @@ {$form.f.logo|unsafe}
{$form.f.logo_remove.labelTag}: {if $form.f.logo_remove.errors}{$form.f.logo_remove.fieldErrors}{/if} diff --git a/src/IDF/templates/idf/index.html b/src/IDF/templates/idf/index.html index a2f5abd..5f70957 100644 --- a/src/IDF/templates/idf/index.html +++ b/src/IDF/templates/idf/index.html @@ -12,8 +12,8 @@ {foreach $projects as $p}
- {if $p.logo != 0} - {trans 'Project logo'} + {if $logos[$p->shortname]} + {trans 'Project logo'} {else} {trans 'Project logo'} {/if} From 836ff71364668ae7ae190530caf2d3ed5dd4e7db Mon Sep 17 00:00:00 2001 From: William MARTIN Date: Wed, 6 Apr 2011 15:33:26 +0200 Subject: [PATCH 6/9] Update code to fix thomas review's --- src/IDF/FileUtil.php | 11 ------- src/IDF/Form/ProjectConf.php | 37 ++++++++++++------------ src/IDF/Views.php | 14 +-------- src/IDF/Views/Project.php | 25 ++++++++++++---- src/IDF/conf/urls.php | 5 ++++ src/IDF/templates/idf/admin/summary.html | 4 +-- src/IDF/templates/idf/index.html | 21 +++++++++----- www/media/idf/css/style.css | 7 +++-- 8 files changed, 64 insertions(+), 60 deletions(-) diff --git a/src/IDF/FileUtil.php b/src/IDF/FileUtil.php index c9ec8e9..725d980 100644 --- a/src/IDF/FileUtil.php +++ b/src/IDF/FileUtil.php @@ -162,15 +162,4 @@ class IDF_FileUtil $ext = array_merge(self::$supportedExtenstions, explode(' ' , $ext)); return (in_array($fileinfo[2], $ext)); } - - /* - * - */ - public static function getPictureInline($file) - { - $info = IDF_FileUtil::getMimeType($file); - $content = file_get_contents($file); - $base64 = 'data:' . $info[0] . ';base64,' . base64_encode($content); - return $base64; - } } diff --git a/src/IDF/Form/ProjectConf.php b/src/IDF/Form/ProjectConf.php index 1a3bd45..9290cde 100644 --- a/src/IDF/Form/ProjectConf.php +++ b/src/IDF/Form/ProjectConf.php @@ -54,16 +54,16 @@ class IDF_Form_ProjectConf extends Pluf_Form // Logo part $upload_path = Pluf::f('upload_path', false); - if(false === $upload_path) { - throw new Pluf_Exception_SettingError(__('The "upload_issue_path" configuration variable was not set.')); + if (false === $upload_path) { + throw new Pluf_Exception_SettingError(__('The "upload_path" configuration variable was not set.')); } - $md5 = md5(rand().microtime().Pluf_Utils::getRandomString()); - $filename = substr($md5, 0, 2).'/'.substr($md5, 2, 2).'/'.substr($md5, 4).'/%s'; + $upload_path .= '/' . $this->project->shortname; + $filename = '/%s'; $this->fields['logo'] = new Pluf_Form_Field_File(array('required' => false, 'label' => __('Update the logo'), 'initial' => '', - 'help_text' => __('The logo must be a picture with a size of 16 by 16.'), - 'max_size' => Pluf::f('max_upload_size', 2097152), + 'help_text' => __('The logo must be a picture with a size of 32 by 32.'), + 'max_size' => Pluf::f('max_upload_size', 100 * 1024), 'move_function_params' => array('upload_path' => $upload_path, 'upload_path_create' => true, @@ -84,15 +84,15 @@ class IDF_Form_ProjectConf extends Pluf_Form */ function failed() { - if(!empty($this->cleaned_data['logo']) - and file_exists(Pluf::f('upload_path').'/'.$this->cleaned_data['logo'])) { + if (!empty($this->cleaned_data['logo']) + && file_exists(Pluf::f('upload_path').'/'.$this->cleaned_data['logo'])) { unlink(Pluf::f('upload_path').'/'.$this->cleaned_data['logo']); } } public function clean() { - if(!isset($this->cleaned_data['logo_remove'])) { + if (!isset($this->cleaned_data['logo_remove'])) { $this->cleaned_data['logo_remove'] = false; } @@ -101,19 +101,18 @@ class IDF_Form_ProjectConf extends Pluf_Form public function clean_logo() { - if(!isset($this->cleaned_data['logo']) || - $this->cleaned_data['logo'] == "") { + if (empty($this->cleaned_data['logo'])) { return ''; } - $meta = getimagesize(Pluf::f('upload_path').'/'.$this->cleaned_data['logo']); + $meta = getimagesize(Pluf::f('upload_path') . '/' . $this->project->shortname . $this->cleaned_data['logo']); - if($meta === FALSE) { - throw new Pluf_Form_Invalid("Error during the determination of the size of the picture"); + if ($meta === false) { + throw new Pluf_Form_Invalid("Could not determine the size of the uploaded picture."); } - if($meta[0] !== 32 || $meta[1] !== 32) { - throw new Pluf_Form_Invalid("The picture must have a size of 16 by 16."); + if ($meta[0] !== 32 || $meta[1] !== 32) { + throw new Pluf_Form_Invalid("The picture must have a size of 32 by 32."); } return $this->cleaned_data['logo']; @@ -130,11 +129,11 @@ class IDF_Form_ProjectConf extends Pluf_Form $this->project->update(); // Logo part - if($this->cleaned_data['logo'] !== "") { + if ($this->cleaned_data['logo'] !== "") { $conf->setVal('logo', $this->cleaned_data['logo']); } - if($this->cleaned_data['logo_remove'] === true) { - @unlink(Pluf::f('upload_path').'/'.$conf->getVal('logo')); + if ($this->cleaned_data['logo_remove'] === true) { + @unlink(Pluf::f('upload_path') . '/' . $this->project->shortname . $conf->getVal('logo')); $conf->delVal('logo'); } } diff --git a/src/IDF/Views.php b/src/IDF/Views.php index 8dc92b7..da0ec0a 100644 --- a/src/IDF/Views.php +++ b/src/IDF/Views.php @@ -42,23 +42,11 @@ class IDF_Views $projects = self::getProjects($request->user); $stats = self::getProjectsStatistics ($projects); - $logos = array(); - foreach ($projects as $p) { - $logo = $p->getConf()->getVal('logo'); - if (!empty($logo)) { - $logo = Pluf::f('upload_path').'/'.$logo; - $logos[$p->shortname] = IDF_FileUtil::getPictureInline($logo); - } else { - $logos[$p->shortname] = ""; - } - } - if ($api == true) return $projects; return Pluf_Shortcuts_RenderToResponse('idf/index.html', array('page_title' => __('Projects'), 'projects' => $projects, - 'stats' => new Pluf_Template_ContextVars($stats), - 'logos' => $logos), + 'stats' => new Pluf_Template_ContextVars($stats)), $request); } diff --git a/src/IDF/Views/Project.php b/src/IDF/Views/Project.php index d78dd9c..57b63d8 100644 --- a/src/IDF/Views/Project.php +++ b/src/IDF/Views/Project.php @@ -31,6 +31,25 @@ Pluf::loadFunction('Pluf_Shortcuts_GetFormForModel'); */ class IDF_Views_Project { + /** + * Home page of a project. + */ + public $logo_precond = array('IDF_Precondition::baseAccess'); + public function logo($request, $match) + { + $prj = $request->project; + + $logo = $prj->getConf()->getVal('logo'); + if(empty($logo)) { + $url = Pluf::f('url_media') . '/idf/img/no_logo.png'; + return new Pluf_HTTP_Response_Redirect($url); + } + + $info = IDF_FileUtil::getMimeType($logo); + return new Pluf_HTTP_Response_File(Pluf::f('upload_path') . '/' . $prj->shortname . $logo, + $info[0]); + } + /** * Home page of a project. */ @@ -284,16 +303,12 @@ class IDF_Views_Project } $logo = $prj->getConf()->getVal('logo'); - if (!empty($logo)) { - $logo = Pluf::f('upload_path').'/'.$logo; - $logo_base64 = IDF_FileUtil::getPictureInline($logo); - } return Pluf_Shortcuts_RenderToResponse('idf/admin/summary.html', array( 'page_title' => $title, 'form' => $form, 'project' => $prj, - 'logo' => $logo_base64, + 'logo' => $logo, ), $request); } diff --git a/src/IDF/conf/urls.php b/src/IDF/conf/urls.php index dccf03b..7ba9582 100644 --- a/src/IDF/conf/urls.php +++ b/src/IDF/conf/urls.php @@ -73,6 +73,11 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/$#', 'base' => $base, 'model' => 'IDF_Views_Project', 'method' => 'home'); + +$ctl[] = array('regex' => '#^/p/([\-\w]+)/logo/$#', + 'base' => $base, + 'model' => 'IDF_Views_Project', + 'method' => 'logo'); $ctl[] = array('regex' => '#^/p/([\-\w]+)/timeline/(\w+)/$#', 'base' => $base, diff --git a/src/IDF/templates/idf/admin/summary.html b/src/IDF/templates/idf/admin/summary.html index 9653ede..0436a02 100644 --- a/src/IDF/templates/idf/admin/summary.html +++ b/src/IDF/templates/idf/admin/summary.html @@ -31,10 +31,10 @@
{trans 'Actual logo'}:{trans 'Current logo'}: {if $logo} -project logo +{trans 'project logo'} {else} {trans 'Your project do not have a logo configured yet.'} {/if} diff --git a/src/IDF/templates/idf/index.html b/src/IDF/templates/idf/index.html index 5f70957..14d0d7b 100644 --- a/src/IDF/templates/idf/index.html +++ b/src/IDF/templates/idf/index.html @@ -12,17 +12,22 @@ {foreach $projects as $p}
- {if $logos[$p->shortname]} - {trans 'Project logo'} - {else} - {trans 'Project logo'} - {/if} + {trans 'Project logo'} - {if $p.private}
{trans 'Private project'}
{/if} + {if $p.private} +
+ + {trans 'Private project'} + +
+ {/if}
-

{$p}{if $p.private} - {trans 'Private project'}

{/if}

- {if $p.shortdesc}

{$p.shortdesc}

{/if} +

+ {$p} + {if $p.private} - {trans 'Private project'}{/if} +

+

{$p.shortdesc}

{/foreach} diff --git a/www/media/idf/css/style.css b/www/media/idf/css/style.css index 3e92715..903abc5 100644 --- a/www/media/idf/css/style.css +++ b/www/media/idf/css/style.css @@ -1049,18 +1049,21 @@ span.scm-action.property-changed { */ div.p-list-img { float: left; + height: 32px; + margin-top: .5em; } div.p-list-prj { float: left; - margin: 0 0 .5em 1em; + margin: .5em 0 .5em 1em; } div.p-list-prj p { margin: 0px; } -.p-list-private { +div.p-list-private { bottom: 10px; + right: -6px; position: relative; } From 0bae69908b20cfd22abdb9f9c2e708ebfbe74c09 Mon Sep 17 00:00:00 2001 From: Thomas Keller Date: Thu, 7 Apr 2011 22:40:32 +0200 Subject: [PATCH 7/9] Spelling --- src/IDF/templates/idf/admin/summary.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/IDF/templates/idf/admin/summary.html b/src/IDF/templates/idf/admin/summary.html index 0436a02..349a840 100644 --- a/src/IDF/templates/idf/admin/summary.html +++ b/src/IDF/templates/idf/admin/summary.html @@ -36,7 +36,7 @@ {if $logo} {trans 'project logo'} {else} -{trans 'Your project do not have a logo configured yet.'} +{trans 'Your project does not have a logo configured yet.'} {/if}
{trans 'Current logo'}: {if $logo} -{trans 'project logo'} +{trans 'Project logo'} {else} {trans 'Your project does not have a logo configured yet.'} {/if} diff --git a/src/IDF/templates/idf/base-full.html b/src/IDF/templates/idf/base-full.html index 8e19345..51baf73 100644 --- a/src/IDF/templates/idf/base-full.html +++ b/src/IDF/templates/idf/base-full.html @@ -37,7 +37,7 @@
- {if $project}

{$project}

{/if} + {if $project}

{$project} {trans 'Project logo'}

{/if} {include 'idf/main-menu.html'}