From 72f1df8eabe1dc29347ba9b63a12dff51d7a78bf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 28 Jul 2009 13:37:28 +0000 Subject: [PATCH] New: Enhancement in project module --- htdocs/lib/functions.lib.php | 12 +- htdocs/lib/project.lib.php | 88 +++++++-- htdocs/project.class.php | 6 +- htdocs/projet/element.php | 2 +- htdocs/projet/fiche.php | 2 +- htdocs/projet/tasks/fiche.php | 30 ++-- htdocs/projet/tasks/index.php | 20 ++- htdocs/projet/tasks/task.php | 18 +- htdocs/projet/tasks/time.php | 11 +- htdocs/projet/tasks/who.php | 12 +- htdocs/task.class.php | 169 ++++++++++-------- htdocs/theme/auguria/img/folder.png | Bin 736 -> 1232 bytes htdocs/theme/auguria/img/object_project.png | Bin 736 -> 1226 bytes .../theme/auguria/img/object_projecttask.png | Bin 0 -> 1238 bytes htdocs/theme/bluelagoon/img/folder.png | Bin 0 -> 1232 bytes .../theme/bluelagoon/img/object_project.png | Bin 736 -> 1226 bytes .../bluelagoon/img/object_projecttask.png | Bin 0 -> 1238 bytes htdocs/theme/eldy/img/folder.png | Bin 736 -> 1232 bytes htdocs/theme/eldy/img/object_project.png | Bin 736 -> 1226 bytes htdocs/theme/eldy/img/object_projecttask.png | Bin 0 -> 1238 bytes htdocs/theme/eldy/img/object_task.png | Bin 1048 -> 1048 bytes htdocs/theme/freelug/img/folder.png | Bin 0 -> 1232 bytes htdocs/theme/freelug/img/object_project.png | Bin 736 -> 1226 bytes .../theme/freelug/img/object_projecttask.png | Bin 0 -> 1238 bytes htdocs/theme/rodolphe/img/Thumbs.db | Bin 0 -> 121344 bytes htdocs/theme/rodolphe/img/folder.png | Bin 736 -> 1232 bytes htdocs/theme/rodolphe/img/object_project.png | Bin 736 -> 1226 bytes .../theme/rodolphe/img/object_projecttask.png | Bin 0 -> 1238 bytes htdocs/theme/yellow/img/folder.png | Bin 736 -> 1232 bytes htdocs/theme/yellow/img/object_project.png | Bin 736 -> 1226 bytes .../theme/yellow/img/object_projecttask.png | Bin 0 -> 1238 bytes 31 files changed, 251 insertions(+), 119 deletions(-) create mode 100644 htdocs/theme/auguria/img/object_projecttask.png create mode 100644 htdocs/theme/bluelagoon/img/folder.png create mode 100644 htdocs/theme/bluelagoon/img/object_projecttask.png create mode 100644 htdocs/theme/eldy/img/object_projecttask.png create mode 100644 htdocs/theme/freelug/img/folder.png create mode 100644 htdocs/theme/freelug/img/object_projecttask.png create mode 100644 htdocs/theme/rodolphe/img/Thumbs.db create mode 100644 htdocs/theme/rodolphe/img/object_projecttask.png create mode 100644 htdocs/theme/yellow/img/object_projecttask.png diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php index 5494a9ccb70..dfcfce9e369 100644 --- a/htdocs/lib/functions.lib.php +++ b/htdocs/lib/functions.lib.php @@ -283,13 +283,14 @@ function dolibarr_fiche_head($links, $active='0', $title='', $notab=0) } /** - * \brief Affiche le header d'une fiche - * \param links Tableau de titre d'onglets - * \param active 0=onglet non actif, 1=onglet actif - * \param title Titre tabelau ("" par defaut) + * \brief Show tab header of a card + * \param links Array of tabs + * \param active Active tab name + * \param title Title * \param notab 0=Add tab header, 1=no tab header + * \param picto Add a picto on tab titel */ -function dol_fiche_head($links, $active='0', $title='', $notab=0) +function dol_fiche_head($links, $active='0', $title='', $notab=0, $picto='') { print "\n".'
'."\n"; @@ -298,6 +299,7 @@ function dol_fiche_head($links, $active='0', $title='', $notab=0) { $limittitle=30; print ''; + if ($picto) print img_object('',$picto).' '; print ((!defined('MAIN_USE_SHORT_TITLE')) || (defined('MAIN_USE_SHORT_TITLE') && MAIN_USE_SHORT_TITLE)) ? dol_trunc($title,$limittitle) diff --git a/htdocs/lib/project.lib.php b/htdocs/lib/project.lib.php index a3fbec0c171..b417fd50590 100644 --- a/htdocs/lib/project.lib.php +++ b/htdocs/lib/project.lib.php @@ -141,7 +141,16 @@ function select_projects($socid, $selected='', $htmlname='projectid') } - +/** + * Enter description here... + * + * @param unknown_type $inc + * @param unknown_type $parent + * @param unknown_type $lines + * @param unknown_type $level + * @param unknown_type $tasksrole + * @return unknown + */ function PLinesb(&$inc, $parent, $lines, &$level, $tasksrole) { global $user, $bc, $langs; @@ -220,12 +229,12 @@ function PLinesb(&$inc, $parent, $lines, &$level, $tasksrole) /** * Show task lines with a particular parent * @param $inc Counter that count number of lines legitimate to show (for return) - * @param $parent Id of parent task + * @param $parent Id of parent task to start * @param $lines Array of all tasks * @param $level Level of task * @param $var Color * @param $showproject Show project columns - * @param $linesfiltered ''=No filter on users, Array=Shown tasks filtered on a particular user, the array contains tasks filtered + * @param $taskrole Array of task filtered on a particular user */ function PLines(&$inc, $parent, &$lines, &$level, $var, $showproject=1, &$taskrole='') { @@ -234,6 +243,7 @@ function PLines(&$inc, $parent, &$lines, &$level, $var, $showproject=1, &$taskro $lastprojectid=0; $projectstatic = new Project($db); + $taskstatic = new Task($db); for ($i = 0 ; $i < sizeof($lines) ; $i++) { @@ -257,13 +267,14 @@ function PLines(&$inc, $parent, &$lines, &$level, $var, $showproject=1, &$taskro // If there is filters to use if (is_array($taskrole)) { - // If task not legitimate to show, search if a task exists later in tree - if (! isset($taskrole[$lines[$i]->id])) + // If task not legitimate to show, search if a legitimate task exists later in tree + if (! isset($taskrole[$lines[$i]->id]) && $lines[$i]->id != $lines[$i]->fk_parent) { // So search if task has a subtask legitimate to show - // FIXME - //SearchPLine($foundtaskforuserafter,$lines[$i]->id,$lines,$taskrole); - if ($foundtaskforuserlater) + $foundtaskforuserdeeper=0; + SearchTaskInChild($foundtaskforuserdeeper,$lines[$i]->id,$lines,$taskrole); + //print '$foundtaskforuserpeeper='.$foundtaskforuserdeeper.'
'; + if ($foundtaskforuserdeeper > 0) { $showlineingray=1; // We will show line but in gray } @@ -279,25 +290,38 @@ function PLines(&$inc, $parent, &$lines, &$level, $var, $showproject=1, &$taskro print "\n"; print ''; - if (! $showlineingray) print '
'; - print $lines[$i]->id; - if (! $showlineingray) print ''; + if ($showlineingray) + { + print ''.$lines[$i]->id.''; + } + else + { + $taskstatic->id=$lines[$i]->id; + $taskstatic->ref=$lines[$i]->id; + print $taskstatic->getNomUrl(1); + } print ''; print ""; + if ($showlineingray) print ''; + else print ''; for ($k = 0 ; $k < $level ; $k++) { print "   "; } print $lines[$i]->title; + if ($showlineingray) print ''; + else print ''; print "\n"; if ($showproject) { print ""; + if ($showlineingray) print ''; $projectstatic->id=$lines[$i]->projectid; $projectstatic->ref=$lines[$i]->projectref; print $projectstatic->getNomUrl(1); + if ($showlineingray) print ''; print ""; } @@ -305,9 +329,11 @@ function PLines(&$inc, $parent, &$lines, &$level, $var, $showproject=1, &$taskro $minutes = round((($lines[$i]->duration - $heure) * 60),0); $minutes = substr("00"."$minutes", -2); print ''; - if (! $showlineingray) print ''; + if ($showlineingray) print ''; + else print ''; print $heure." h ".$minutes; - if (! $showlineingray) print ''; + if ($showlineingray) print ''; + else print ''; print ''; print "\n"; @@ -328,6 +354,42 @@ function PLines(&$inc, $parent, &$lines, &$level, $var, $showproject=1, &$taskro return $inc; } + +/** + * Search in task lines with a particular parent if there is a task for a particular user (in taskrole) + * @param $inc Counter that count number of lines legitimate to show (for return) + * @param $parent Id of parent task to start + * @param $lines Array of all tasks + * @param $taskrole Array of task filtered on a particular user + * @return int 1 if there is + */ +function SearchTaskInChild(&$inc, $parent, &$lines, &$taskrole) +{ + //print 'Search in line with parent id = '.$parent.'
'; + for ($i = 0 ; $i < sizeof($lines) ; $i++) + { + // Process line $lines[$i] + if ($lines[$i]->fk_parent == $parent && $lines[$i]->id != $lines[$i]->fk_parent) + { + // If task is legitimate to show, no more need to search deeper + if (isset($taskrole[$lines[$i]->id])) + { + //print 'Found a legitimate task id='.$lines[$i]->id.'
'; + $inc++; + return $inc; + } + + SearchTaskInChild($inc, $lines[$i]->id, $lines, $taskrole); + //print 'Found inc='.$inc.'
'; + + if ($inc > 0) return $inc; + } + } + + return $inc; +} + + /** * Clean task not linked to a parent * @param unknown_type $db diff --git a/htdocs/project.class.php b/htdocs/project.class.php index 3232390006b..0fa3b46065c 100644 --- a/htdocs/project.class.php +++ b/htdocs/project.class.php @@ -422,8 +422,10 @@ class Project extends CommonObject /* Liste des taches et role sur la tache du user courant dans $tasksrole */ $sql = "SELECT a.fk_projet_task, a.role"; - $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_actors as a"; - $sql .= " WHERE a.fk_user = ".$user->id; + $sql.= " FROM ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."projet_task_actors as a"; + $sql.= " WHERE pt.rowid = a.fk_projet_task"; + $sql.= " AND a.fk_user = ".$user->id; + if ($this->id) $sql.= " AND pt.fk_projet =".$this->id; $resql = $this->db->query($sql); if ($resql) diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 42c1efd2499..69877390f2b 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -71,7 +71,7 @@ if ($projet->user_resp_id > 0) } $head=project_prepare_head($projet); -dol_fiche_head($head, 'element', $langs->trans("Project")); +dol_fiche_head($head, 'element', $langs->trans("Project"),0,'project'); print ''; diff --git a/htdocs/projet/fiche.php b/htdocs/projet/fiche.php index a2b8ba04e7d..9065b8a8617 100644 --- a/htdocs/projet/fiche.php +++ b/htdocs/projet/fiche.php @@ -197,7 +197,7 @@ else if ($projet->user_resp_id > 0) $result=$projet->fetch_user($projet->user_resp_id); $head=project_prepare_head($projet); - dol_fiche_head($head, 'project', $langs->trans("Project")); + dol_fiche_head($head, 'project', $langs->trans("Project"),0,'project'); if ($_GET["action"] == 'delete') { diff --git a/htdocs/projet/tasks/fiche.php b/htdocs/projet/tasks/fiche.php index 9654c00ca54..9307199e492 100644 --- a/htdocs/projet/tasks/fiche.php +++ b/htdocs/projet/tasks/fiche.php @@ -1,4 +1,4 @@ - * Copyright (C) 2004-2009 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin @@ -186,7 +186,7 @@ else if ($_REQUEST["mode"]=='mine') $tab='mytasks'; $head=project_prepare_head($projet); - dol_fiche_head($head, $tab, $langs->trans("Project")); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,'project'); $param=($_REQUEST["mode"]=='mine'?'&mode=mine':''); @@ -223,13 +223,6 @@ else print ''; print ''; - // Get list of tasks in tasksarray and taskarrayfiltered - // We need all tasks (even not limited to a user because a task to user - // can have a parent that is not affected to him). - $tasksarray=$projet->getTasksArray(0, 0, 0); - // We load also tasks limited to a particular user - $tasksrole=($_REQUEST["mode"]=='mine' ? $projet->getTasksRoleForUser($user) : ''); - /* * Actions */ @@ -250,6 +243,14 @@ else print ''; print '
'; + + // Get list of tasks in tasksarray and taskarrayfiltered + // We need all tasks (even not limited to a user because a task to user + // can have a parent that is not affected to him). + $tasksarray=$projet->getTasksArray(0, 0, 0); + // We load also tasks limited to a particular user + $tasksrole=($_REQUEST["mode"]=='mine' ? $projet->getTasksRoleForUser($user) : ''); + print '
'; print ''; if ($projectstatic->id) print ''; @@ -261,11 +262,18 @@ else $j=0; $nboftaskshown=PLines($j, 0, $tasksarray, $level, true, 0, $tasksrole); print "
'.$langs->trans("Project").'
"; + print '
'; - if ($nboftaskshown < sizeof($tasksarray)) + // Test if database is clean. If not we clean it. + //print '$nboftaskshown='.$nboftaskshown.' sizeof($tasksarray)='.sizeof($tasksarray).' sizeof($tasksrole)='.sizeof($tasksrole).'
'; + if ($_REQUEST["mode"]=='mine') { - clean_orphelins($db); + if ($nboftaskshown < sizeof($tasksrole)) clean_orphelins($db); + } + else + { + if ($nboftaskshown < sizeof($tasksarray)) clean_orphelins($db); } } diff --git a/htdocs/projet/tasks/index.php b/htdocs/projet/tasks/index.php index 4613f292889..5d88989c4e2 100644 --- a/htdocs/projet/tasks/index.php +++ b/htdocs/projet/tasks/index.php @@ -79,22 +79,28 @@ print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorde $projet = new Project($db); -$tasksarray=$projet->getTasksArray($_GET["mode"]=='mine'?$user:0); +// Get list of tasks in tasksarray and taskarrayfiltered +// We need all tasks (even not limited to a user because a task to user +// can have a parent that is not affected to him). +$tasksarray=$projet->getTasksArray(0, 0, 0); +// We load also tasks limited to a particular user +$tasksrole=($_REQUEST["mode"]=='mine' ? $projet->getTasksRoleForUser($user) : ''); + print ''; print ''; -print ''; -print ''; +print ''; +print ''; print ''; print ''; print "\n"; - -$level=0; +// Show all lines in taskarray (recusrive function to go down on tree) $j=0; -PLines($j, 0, $tasksarray, $level, true); - +$nboftaskshown=PLines($j, 0, $tasksarray, $level, true, 1, $tasksrole); print "
'.$langs->trans("Task").''.$langs->trans("Label").''.$langs->trans("RefTask").''.$langs->trans("LabelTask").''.$langs->trans("Project").''.$langs->trans("TimeSpent").'
"; + + print ''; diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 77779b7ede1..7ca1fd688b5 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -86,7 +86,7 @@ if ($_GET["id"] > 0) $head=task_prepare_head($task); - dol_fiche_head($head, 'task', $langs->trans("Task")); + dol_fiche_head($head, 'task', $langs->trans("Task"),0,'projecttask'); if ($mesg) print $mesg.'
'; @@ -101,7 +101,15 @@ if ($_GET["id"] > 0) print ''; print ''; - print ''; + // Ref + print ''; + print ''; + + // Label print ''; print '
'.$langs->trans("Ref").''.$task->id.'
'; + print $langs->trans("Ref"); + print ''; + print $html->showrefnav($task,'id','',1,'rowid','ref','',''); + print '
'.$langs->trans("Label").''.$task->title.'
'.$langs->trans("Project").''; @@ -151,10 +159,14 @@ if ($_GET["id"] > 0) */ print '
'; - if ($user->rights->projet->creer) + if (!$user->rights->projet->creer) { print ''.$langs->trans('Delete').''; } + else + { + print ''.$langs->trans('Delete').''; + } print '
'; diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 25fb1f52ab1..79aae335b84 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -63,7 +63,7 @@ if ($_GET["id"] > 0) $head=task_prepare_head($task); - dol_fiche_head($head, 'time', $langs->trans("Task")); + dol_fiche_head($head, 'time', $langs->trans("Task"),0,'projecttask'); if ($mesg) print $mesg.'
'; @@ -72,7 +72,14 @@ if ($_GET["id"] > 0) print ''; print ''; - print ''; + // Ref + print ''; + + // Label print ''; print '
'.$langs->trans("Ref").''.$task->id.'
'; + print $langs->trans("Ref"); + print ''; + print $html->showrefnav($task,'id','',1,'rowid','ref','',''); + print '
'.$langs->trans("Label").''.$task->title.'
'.$langs->trans("Project").''; diff --git a/htdocs/projet/tasks/who.php b/htdocs/projet/tasks/who.php index 5ab94eeee5f..36d20f02e4b 100644 --- a/htdocs/projet/tasks/who.php +++ b/htdocs/projet/tasks/who.php @@ -20,7 +20,7 @@ /** * \file htdocs/projet/tasks/task.php * \ingroup projet - * \brief Fiche tāches d'un projet + * \brief Fiche tļæ½ches d'un projet * \version $Id$ */ @@ -63,7 +63,7 @@ if ($_GET["id"] > 0) $head=task_prepare_head($task); - dol_fiche_head($head, 'who', $langs->trans("Task")); + dol_fiche_head($head, 'who', $langs->trans("Task"),0,'projecttask'); if ($mesg) print $mesg.'
'; @@ -72,7 +72,13 @@ if ($_GET["id"] > 0) print ''; print ''; - print ''; + // Ref + print ''; + + // Label print ''; print '
'.$langs->trans("Ref").''.$task->id.'
'.$langs->trans("Ref"); + print ''; + print $html->showrefnav($task,'id','',1,'rowid','ref','',''); + print '
'.$langs->trans("Label").''.$task->title.'
'.$langs->trans("Project").''; diff --git a/htdocs/task.class.php b/htdocs/task.class.php index fbda91af4d0..7d74b7d640e 100644 --- a/htdocs/task.class.php +++ b/htdocs/task.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2008-2009 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,12 +17,12 @@ */ /** - \file task.class.php - \ingroup project - \brief This file is a CRUD class file for Taks (Create/Read/Update/Delete) - \version $Id$ - \remarks Initialy built by build_class_from_table on 2008-09-10 12:41 -*/ + * \file task.class.php + * \ingroup project + * \brief This file is a CRUD class file for Taks (Create/Read/Update/Delete) + * \version $Id$ + * \remarks Initialy built by build_class_from_table on 2008-09-10 12:41 + */ // Put here all includes required by your class file //require_once(DOL_DOCUMENT_ROOT."/commonobject.class.php"); @@ -31,20 +31,20 @@ /** - \class Projet_task - \brief Put here description of your class - \remarks Initialy built by build_class_from_table on 2008-09-10 12:41 -*/ -class Task // extends CommonObject + * \class Projet_task + * \brief Put here description of your class + * \remarks Initialy built by build_class_from_table on 2008-09-10 12:41 + */ +class Task extends CommonObject { var $db; //!< To store db handler var $error; //!< To return error code (or message) var $errors=array(); //!< To return several error codes (or messages) - //var $element='projet_task'; //!< Id that identify managed objects - //var $table_element='projet_task'; //!< Name of table without prefix where object is stored - + var $element='projet_task'; //!< Id that identify managed objects + var $table_element='projet_task'; //!< Name of table without prefix where object is stored + var $id; - + var $fk_projet; var $fk_task_parent; var $title; @@ -53,20 +53,20 @@ class Task // extends CommonObject var $statut; var $note; - - + + /** * \brief Constructor * \param DB Database handler */ - function Task($DB) + function Task($DB) { $this->db = $DB; return 1; } - + /** * \brief Create in database * \param user User that create @@ -77,9 +77,9 @@ class Task // extends CommonObject { global $conf, $langs; $error=0; - + // Clean parameters - + if (isset($this->fk_projet)) $this->fk_projet=trim($this->fk_projet); if (isset($this->fk_task_parent)) $this->fk_task_parent=trim($this->fk_task_parent); if (isset($this->title)) $this->title=trim($this->title); @@ -88,14 +88,14 @@ class Task // extends CommonObject if (isset($this->statut)) $this->statut=trim($this->statut); if (isset($this->note)) $this->note=trim($this->note); - + // Check parameters // Put here code to add control on parameters values - + // Insert request $sql = "INSERT INTO ".MAIN_DB_PREFIX."projet_task("; - + $sql.= "fk_projet,"; $sql.= "fk_task_parent,"; $sql.= "title,"; @@ -104,9 +104,9 @@ class Task // extends CommonObject $sql.= "statut,"; $sql.= "note"; - + $sql.= ") VALUES ("; - + $sql.= " ".(! isset($this->fk_projet)?'NULL':"'".$this->fk_projet."'").","; $sql.= " ".(! isset($this->fk_task_parent)?'NULL':"'".$this->fk_task_parent."'").","; $sql.= " ".(! isset($this->title)?'NULL':"'".$this->title."'").","; @@ -115,24 +115,24 @@ class Task // extends CommonObject $sql.= " ".(! isset($this->statut)?'NULL':"'".$this->statut."'").","; $sql.= " ".(! isset($this->note)?'NULL':"'".$this->note."'").""; - + $sql.= ")"; $this->db->begin(); - + dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG); $resql=$this->db->query($sql); if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - + if (! $error) { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."projet_task"); - + if (! $notrigger) { // Uncomment this and change MYOBJECT to your own tag if you // want this action call a trigger. - + //// Call triggers //include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); //$interface=new Interfaces($this->db); @@ -149,7 +149,7 @@ class Task // extends CommonObject { dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR); $this->error.=($this->error?', '.$errmsg:$errmsg); - } + } $this->db->rollback(); return -1*$error; } @@ -160,7 +160,7 @@ class Task // extends CommonObject } } - + /** * \brief Load object in memory from database * \param id id object @@ -171,7 +171,7 @@ class Task // extends CommonObject global $langs; $sql = "SELECT"; $sql.= " t.rowid,"; - + $sql.= " t.fk_projet,"; $sql.= " t.fk_task_parent,"; $sql.= " t.title,"; @@ -180,10 +180,10 @@ class Task // extends CommonObject $sql.= " t.statut,"; $sql.= " t.note"; - + $sql.= " FROM ".MAIN_DB_PREFIX."projet_task as t"; $sql.= " WHERE t.rowid = ".$id; - + dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG); $resql=$this->db->query($sql); if ($resql) @@ -191,9 +191,10 @@ class Task // extends CommonObject if ($this->db->num_rows($resql)) { $obj = $this->db->fetch_object($resql); - + $this->id = $obj->rowid; - + $this->ref = $obj->rowid; + $this->fk_projet = $obj->fk_projet; $this->fk_task_parent = $obj->fk_task_parent; $this->title = $obj->title; @@ -202,10 +203,10 @@ class Task // extends CommonObject $this->statut = $obj->statut; $this->note = $obj->note; - + } $this->db->free($resql); - + return 1; } else @@ -215,7 +216,7 @@ class Task // extends CommonObject return -1; } } - + /** * \brief Update database @@ -227,9 +228,9 @@ class Task // extends CommonObject { global $conf, $langs; $error=0; - + // Clean parameters - + if (isset($this->fk_projet)) $this->fk_projet=trim($this->fk_projet); if (isset($this->fk_task_parent)) $this->fk_task_parent=trim($this->fk_task_parent); if (isset($this->title)) $this->title=trim($this->title); @@ -238,14 +239,14 @@ class Task // extends CommonObject if (isset($this->statut)) $this->statut=trim($this->statut); if (isset($this->note)) $this->note=trim($this->note); - + // Check parameters // Put here code to add control on parameters values // Update request $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task SET"; - + $sql.= " fk_projet=".(isset($this->fk_projet)?$this->fk_projet:"null").","; $sql.= " fk_task_parent=".(isset($this->fk_task_parent)?$this->fk_task_parent:"null").","; $sql.= " title=".(isset($this->title)?"'".addslashes($this->title)."'":"null").","; @@ -254,22 +255,22 @@ class Task // extends CommonObject $sql.= " statut=".(isset($this->statut)?$this->statut:"null").","; $sql.= " note=".(isset($this->note)?"'".addslashes($this->note)."'":"null").""; - + $sql.= " WHERE rowid=".$this->id; $this->db->begin(); - + dol_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG); $resql = $this->db->query($sql); if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - + if (! $error) { if (! $notrigger) { // Uncomment this and change MYOBJECT to your own tag if you // want this action call a trigger. - + //// Call triggers //include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); //$interface=new Interfaces($this->db); @@ -278,7 +279,7 @@ class Task // extends CommonObject //// End call triggers } } - + // Commit or rollback if ($error) { @@ -286,7 +287,7 @@ class Task // extends CommonObject { dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR); $this->error.=($this->error?', '.$errmsg:$errmsg); - } + } $this->db->rollback(); return -1*$error; } @@ -294,10 +295,10 @@ class Task // extends CommonObject { $this->db->commit(); return 1; - } + } } - - + + /** * \brief Delete object in database * \param user User that delete @@ -308,9 +309,9 @@ class Task // extends CommonObject { global $conf, $langs; $error=0; - + $this->db->begin(); - + if ($this->hasChildren() > 0) { dol_syslog(get_class($this)."::delete Can't delete record as it has some child", LOG_WARNING); @@ -318,30 +319,30 @@ class Task // extends CommonObject $this->db->rollback(); return 0; } - + $sql = "DELETE FROM ".MAIN_DB_PREFIX."projet_task"; $sql.= " WHERE rowid=".$this->id; - + dol_syslog(get_class($this)."::delete sql=".$sql); $resql = $this->db->query($sql); if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - + if (! $error) { if (! $notrigger) { // Uncomment this and change MYOBJECT to your own tag if you // want this action call a trigger. - + //// Call triggers //include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); //$interface=new Interfaces($this->db); //$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf); //if ($result < 0) { $error++; $this->errors=$interface->errors; } //// End call triggers - } + } } - + // Commit or rollback if ($error) { @@ -349,7 +350,7 @@ class Task // extends CommonObject { dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR); $this->error.=($this->error?', '.$errmsg:$errmsg); - } + } $this->db->rollback(); return -1*$error; } @@ -367,10 +368,10 @@ class Task // extends CommonObject function hasChildren() { $ret=0; - + $sql = "SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX."projet_task"; $sql.= " WHERE fk_task_parent=".$this->id; - + dol_syslog(get_class($this)."::hasChildren sql=".$sql, LOG_DEBUG); $resql = $this->db->query($sql); if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } @@ -379,17 +380,43 @@ class Task // extends CommonObject $obj=$this->db->fetch_object($resql); if ($obj) $ret=$obj->nb; } - + if (! $error) { - return $ret; + return $ret; } else { return -1; } - } - + } + + + /** + * \brief Renvoie nom clicable (avec eventuellement le picto) + * \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul + * \param option Sur quoi pointe le lien + * \return string Chaine avec URL + */ + function getNomUrl($withpicto=0,$option='') + { + global $langs; + + $result=''; + + $lien = ''; + $lienfin=''; + + $picto='projecttask'; + + $label=$langs->trans("ShowTask").': '.$this->ref; + + if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin); + if ($withpicto && $withpicto != 2) $result.=' '; + if ($withpicto != 2) $result.=$lien.$this->ref.$lienfin; + return $result; + } + /** * \brief Initialise object with example values * \remarks id must be 0 if object instance is a specimen. @@ -397,7 +424,7 @@ class Task // extends CommonObject function initAsSpecimen() { $this->id=0; - + $this->fk_projet=''; $this->fk_task_parent=''; $this->title=''; diff --git a/htdocs/theme/auguria/img/folder.png b/htdocs/theme/auguria/img/folder.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..908a6df9348330b2e9aaebcda75d5c6a08b86fef 100644 GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zRh}-6Ar-fhXEZZOD1@Xt1gOusEji=jElHk7#y2c(-25e8dVWSo4)3E~;nSXM^Pe|s zo=_Isl(Y^0y*jJcb$WYzDhy;Sip^gA>b2M9PkZN-gjhc}IO6v@bCt)Jf-6@8mo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZvGeb}S diff --git a/htdocs/theme/auguria/img/object_project.png b/htdocs/theme/auguria/img/object_project.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..5ea2e846ddfd125708ef8fdc650742f6acc88823 100644 GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zC7v#hAr-fhXEZZOD1@Xt2nd-QEZ%A?ab|1bhRt8~U(GXIc|+<*>3W@$x$|vIZB?)E z9NFsMtFwAtr?UVB~sw0BNPNaLLwnYO;7opOD)7h-~{h%+v;y;G=+CX%_{b3i23~H p&6_nH1@`gU-o*mqoM&b-Gd$i9>iuy=Cn#VUJYD@<);T3K0RX&V9`pbJ delta 688 zcmV;h0#E(Q3E%~g85;%w0019IEztk~00(qQO+^RQ0s$5Z2%yBQLyo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZf6GKV> diff --git a/htdocs/theme/auguria/img/object_projecttask.png b/htdocs/theme/auguria/img/object_projecttask.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec85fed9d3b2f6ca50036741eed51f4b0ded557 GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUDNSs56Z83KGlT!G?TTzm{1(%d}4y!>K( z0ulm(;-X@*3>=Eg+-eM5T8!LUjJ(>+yjm>0T8heg%BlvUx_)X}PCmiatg0Q{TAiF) zJv`c-ygFTcI^FzwJp%f@g8F@e27TgIU91LM1T40S*=!ZI+bLjkSkZsKk7jjZ1Ei&zTaKzRfw~Vp#c+$f^VW zHIIrLR#&!dtZv!m*>W|k`)cIG+tHJ6#Z0;5-tykR|6@Sc$M^|PGH2b*p7}0k!Tqeo z-*cDz$X)-pZso(uwV#^$ws%e4*EaWD&*TFWW*nS6>*%z(C#KCm-Lmjj`^x)M795|u z;@pIFcjqm;(75Jd%gP5WYajKmeblo4Ys-dLZM*(-?)=iR=g*Y&k0$SZF=gNTx!ayD zT5)#S`Ws6&Tv@UC>h9fVm+XGDVfUl<1Ak{6{5k8)@7)J(?>lsV!O_=?kH24a;OX)U zzn5SAx8~ZHt!H2FI`d}NnYTMGzT0^5!|rPzwm$y5`^mrkPyZY_diC7-JI78vI&kLA zxvQ_v-u!go@{1ccp4__g_RO1KH=q8z`sM%4AOD{`dHdx3-xn{wzJ2%o-McTZ-u`^{ z``?@I|37^A`ThIvkH7!_{rm6#|Np>f9RBtV7K25M?(v#l>?}$0k zkKD{R8yguIaAmC0Zr*V(xaSA!jn=z9TemvgnGqShOD#fbYpPqT1k=vM&FSaoT~abg z^(yY;oRB?l?%cUkQ>RQ#P0i$c)YK?CV~#O9!{5EmAvP@v_Mph{boFyt=akR{01)CE AGynhq literal 0 HcmV?d00001 diff --git a/htdocs/theme/bluelagoon/img/folder.png b/htdocs/theme/bluelagoon/img/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..908a6df9348330b2e9aaebcda75d5c6a08b86fef GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zRh}-6Ar-fhXEZZOD1@Xt1gOusEji=jElHk7#y2c(-25e8dVWSo4)3E~;nSXM^Pe|s zo=_Isl(Y^0y*jJcb$WYzDhy;Sip^gA>b2M9PkZN-gjhc}IO6v@bCt)Jf-6@8m!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zC7v#hAr-fhXEZZOD1@Xt2nd-QEZ%A?ab|1bhRt8~U(GXIc|+<*>3W@$x$|vIZB?)E z9NFsMtFwAtr?UVB~sw0BNPNaLLwnYO;7opOD)7h-~{h%+v;y;G=+CX%_{b3i23~H p&6_nH1@`gU-o*mqoM&b-Gd$i9>iuy=Cn#VUJYD@<);T3K0RX&V9`pbJ delta 688 zcmV;h0#E(Q3E%~g85;%w0019IEztk~00(qQO+^RQ0s$5Z2%yBQLyo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZf6GKV> diff --git a/htdocs/theme/bluelagoon/img/object_projecttask.png b/htdocs/theme/bluelagoon/img/object_projecttask.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec85fed9d3b2f6ca50036741eed51f4b0ded557 GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUDNSs56Z83KGlT!G?TTzm{1(%d}4y!>K( z0ulm(;-X@*3>=Eg+-eM5T8!LUjJ(>+yjm>0T8heg%BlvUx_)X}PCmiatg0Q{TAiF) zJv`c-ygFTcI^FzwJp%f@g8F@e27TgIU91LM1T40S*=!ZI+bLjkSkZsKk7jjZ1Ei&zTaKzRfw~Vp#c+$f^VW zHIIrLR#&!dtZv!m*>W|k`)cIG+tHJ6#Z0;5-tykR|6@Sc$M^|PGH2b*p7}0k!Tqeo z-*cDz$X)-pZso(uwV#^$ws%e4*EaWD&*TFWW*nS6>*%z(C#KCm-Lmjj`^x)M795|u z;@pIFcjqm;(75Jd%gP5WYajKmeblo4Ys-dLZM*(-?)=iR=g*Y&k0$SZF=gNTx!ayD zT5)#S`Ws6&Tv@UC>h9fVm+XGDVfUl<1Ak{6{5k8)@7)J(?>lsV!O_=?kH24a;OX)U zzn5SAx8~ZHt!H2FI`d}NnYTMGzT0^5!|rPzwm$y5`^mrkPyZY_diC7-JI78vI&kLA zxvQ_v-u!go@{1ccp4__g_RO1KH=q8z`sM%4AOD{`dHdx3-xn{wzJ2%o-McTZ-u`^{ z``?@I|37^A`ThIvkH7!_{rm6#|Np>f9RBtV7K25M?(v#l>?}$0k zkKD{R8yguIaAmC0Zr*V(xaSA!jn=z9TemvgnGqShOD#fbYpPqT1k=vM&FSaoT~abg z^(yY;oRB?l?%cUkQ>RQ#P0i$c)YK?CV~#O9!{5EmAvP@v_Mph{boFyt=akR{01)CE AGynhq literal 0 HcmV?d00001 diff --git a/htdocs/theme/eldy/img/folder.png b/htdocs/theme/eldy/img/folder.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..908a6df9348330b2e9aaebcda75d5c6a08b86fef 100644 GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zRh}-6Ar-fhXEZZOD1@Xt1gOusEji=jElHk7#y2c(-25e8dVWSo4)3E~;nSXM^Pe|s zo=_Isl(Y^0y*jJcb$WYzDhy;Sip^gA>b2M9PkZN-gjhc}IO6v@bCt)Jf-6@8mo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZvGeb}S diff --git a/htdocs/theme/eldy/img/object_project.png b/htdocs/theme/eldy/img/object_project.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..5ea2e846ddfd125708ef8fdc650742f6acc88823 100644 GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zC7v#hAr-fhXEZZOD1@Xt2nd-QEZ%A?ab|1bhRt8~U(GXIc|+<*>3W@$x$|vIZB?)E z9NFsMtFwAtr?UVB~sw0BNPNaLLwnYO;7opOD)7h-~{h%+v;y;G=+CX%_{b3i23~H p&6_nH1@`gU-o*mqoM&b-Gd$i9>iuy=Cn#VUJYD@<);T3K0RX&V9`pbJ delta 688 zcmV;h0#E(Q3E%~g85;%w0019IEztk~00(qQO+^RQ0s$5Z2%yBQLyo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZf6GKV> diff --git a/htdocs/theme/eldy/img/object_projecttask.png b/htdocs/theme/eldy/img/object_projecttask.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec85fed9d3b2f6ca50036741eed51f4b0ded557 GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUDNSs56Z83KGlT!G?TTzm{1(%d}4y!>K( z0ulm(;-X@*3>=Eg+-eM5T8!LUjJ(>+yjm>0T8heg%BlvUx_)X}PCmiatg0Q{TAiF) zJv`c-ygFTcI^FzwJp%f@g8F@e27TgIU91LM1T40S*=!ZI+bLjkSkZsKk7jjZ1Ei&zTaKzRfw~Vp#c+$f^VW zHIIrLR#&!dtZv!m*>W|k`)cIG+tHJ6#Z0;5-tykR|6@Sc$M^|PGH2b*p7}0k!Tqeo z-*cDz$X)-pZso(uwV#^$ws%e4*EaWD&*TFWW*nS6>*%z(C#KCm-Lmjj`^x)M795|u z;@pIFcjqm;(75Jd%gP5WYajKmeblo4Ys-dLZM*(-?)=iR=g*Y&k0$SZF=gNTx!ayD zT5)#S`Ws6&Tv@UC>h9fVm+XGDVfUl<1Ak{6{5k8)@7)J(?>lsV!O_=?kH24a;OX)U zzn5SAx8~ZHt!H2FI`d}NnYTMGzT0^5!|rPzwm$y5`^mrkPyZY_diC7-JI78vI&kLA zxvQ_v-u!go@{1ccp4__g_RO1KH=q8z`sM%4AOD{`dHdx3-xn{wzJ2%o-McTZ-u`^{ z``?@I|37^A`ThIvkH7!_{rm6#|Np>f9RBtV7K25M?(v#l>?}$0k zkKD{R8yguIaAmC0Zr*V(xaSA!jn=z9TemvgnGqShOD#fbYpPqT1k=vM&FSaoT~abg z^(yY;oRB?l?%cUkQ>RQ#P0i$c)YK?CV~#O9!{5EmAvP@v_Mph{boFyt=akR{01)CE AGynhq literal 0 HcmV?d00001 diff --git a/htdocs/theme/eldy/img/object_task.png b/htdocs/theme/eldy/img/object_task.png index 82f4dff41b953dd9e0d0318565215b665a709ecc..60c194f1048a75cc1f36c4ebf4394dd1ca91195e 100644 GIT binary patch delta 42 wcmbQiF@s}*mi$e286FL#3%W<67#J8h3p^r=85p=efH0%e8j~3tJ!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zRh}-6Ar-fhXEZZOD1@Xt1gOusEji=jElHk7#y2c(-25e8dVWSo4)3E~;nSXM^Pe|s zo=_Isl(Y^0y*jJcb$WYzDhy;Sip^gA>b2M9PkZN-gjhc}IO6v@bCt)Jf-6@8m!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zC7v#hAr-fhXEZZOD1@Xt2nd-QEZ%A?ab|1bhRt8~U(GXIc|+<*>3W@$x$|vIZB?)E z9NFsMtFwAtr?UVB~sw0BNPNaLLwnYO;7opOD)7h-~{h%+v;y;G=+CX%_{b3i23~H p&6_nH1@`gU-o*mqoM&b-Gd$i9>iuy=Cn#VUJYD@<);T3K0RX&V9`pbJ delta 688 zcmV;h0#E(Q3E%~g85;%w0019IEztk~00(qQO+^RQ0s$5Z2%yBQLyo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZf6GKV> diff --git a/htdocs/theme/freelug/img/object_projecttask.png b/htdocs/theme/freelug/img/object_projecttask.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec85fed9d3b2f6ca50036741eed51f4b0ded557 GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUDNSs56Z83KGlT!G?TTzm{1(%d}4y!>K( z0ulm(;-X@*3>=Eg+-eM5T8!LUjJ(>+yjm>0T8heg%BlvUx_)X}PCmiatg0Q{TAiF) zJv`c-ygFTcI^FzwJp%f@g8F@e27TgIU91LM1T40S*=!ZI+bLjkSkZsKk7jjZ1Ei&zTaKzRfw~Vp#c+$f^VW zHIIrLR#&!dtZv!m*>W|k`)cIG+tHJ6#Z0;5-tykR|6@Sc$M^|PGH2b*p7}0k!Tqeo z-*cDz$X)-pZso(uwV#^$ws%e4*EaWD&*TFWW*nS6>*%z(C#KCm-Lmjj`^x)M795|u z;@pIFcjqm;(75Jd%gP5WYajKmeblo4Ys-dLZM*(-?)=iR=g*Y&k0$SZF=gNTx!ayD zT5)#S`Ws6&Tv@UC>h9fVm+XGDVfUl<1Ak{6{5k8)@7)J(?>lsV!O_=?kH24a;OX)U zzn5SAx8~ZHt!H2FI`d}NnYTMGzT0^5!|rPzwm$y5`^mrkPyZY_diC7-JI78vI&kLA zxvQ_v-u!go@{1ccp4__g_RO1KH=q8z`sM%4AOD{`dHdx3-xn{wzJ2%o-McTZ-u`^{ z``?@I|37^A`ThIvkH7!_{rm6#|Np>f9RBtV7K25M?(v#l>?}$0k zkKD{R8yguIaAmC0Zr*V(xaSA!jn=z9TemvgnGqShOD#fbYpPqT1k=vM&FSaoT~abg z^(yY;oRB?l?%cUkQ>RQ#P0i$c)YK?CV~#O9!{5EmAvP@v_Mph{boFyt=akR{01)CE AGynhq literal 0 HcmV?d00001 diff --git a/htdocs/theme/rodolphe/img/Thumbs.db b/htdocs/theme/rodolphe/img/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..6e43e1b2cd962bdb595e1cadc275184de248df13 GIT binary patch literal 121344 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 literal 0 HcmV?d00001 diff --git a/htdocs/theme/rodolphe/img/folder.png b/htdocs/theme/rodolphe/img/folder.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..908a6df9348330b2e9aaebcda75d5c6a08b86fef 100644 GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zRh}-6Ar-fhXEZZOD1@Xt1gOusEji=jElHk7#y2c(-25e8dVWSo4)3E~;nSXM^Pe|s zo=_Isl(Y^0y*jJcb$WYzDhy;Sip^gA>b2M9PkZN-gjhc}IO6v@bCt)Jf-6@8mo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZvGeb}S diff --git a/htdocs/theme/rodolphe/img/object_project.png b/htdocs/theme/rodolphe/img/object_project.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..5ea2e846ddfd125708ef8fdc650742f6acc88823 100644 GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zC7v#hAr-fhXEZZOD1@Xt2nd-QEZ%A?ab|1bhRt8~U(GXIc|+<*>3W@$x$|vIZB?)E z9NFsMtFwAtr?UVB~sw0BNPNaLLwnYO;7opOD)7h-~{h%+v;y;G=+CX%_{b3i23~H p&6_nH1@`gU-o*mqoM&b-Gd$i9>iuy=Cn#VUJYD@<);T3K0RX&V9`pbJ delta 688 zcmV;h0#E(Q3E%~g85;%w0019IEztk~00(qQO+^RQ0s$5Z2%yBQLyo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZf6GKV> diff --git a/htdocs/theme/rodolphe/img/object_projecttask.png b/htdocs/theme/rodolphe/img/object_projecttask.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec85fed9d3b2f6ca50036741eed51f4b0ded557 GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUDNSs56Z83KGlT!G?TTzm{1(%d}4y!>K( z0ulm(;-X@*3>=Eg+-eM5T8!LUjJ(>+yjm>0T8heg%BlvUx_)X}PCmiatg0Q{TAiF) zJv`c-ygFTcI^FzwJp%f@g8F@e27TgIU91LM1T40S*=!ZI+bLjkSkZsKk7jjZ1Ei&zTaKzRfw~Vp#c+$f^VW zHIIrLR#&!dtZv!m*>W|k`)cIG+tHJ6#Z0;5-tykR|6@Sc$M^|PGH2b*p7}0k!Tqeo z-*cDz$X)-pZso(uwV#^$ws%e4*EaWD&*TFWW*nS6>*%z(C#KCm-Lmjj`^x)M795|u z;@pIFcjqm;(75Jd%gP5WYajKmeblo4Ys-dLZM*(-?)=iR=g*Y&k0$SZF=gNTx!ayD zT5)#S`Ws6&Tv@UC>h9fVm+XGDVfUl<1Ak{6{5k8)@7)J(?>lsV!O_=?kH24a;OX)U zzn5SAx8~ZHt!H2FI`d}NnYTMGzT0^5!|rPzwm$y5`^mrkPyZY_diC7-JI78vI&kLA zxvQ_v-u!go@{1ccp4__g_RO1KH=q8z`sM%4AOD{`dHdx3-xn{wzJ2%o-McTZ-u`^{ z``?@I|37^A`ThIvkH7!_{rm6#|Np>f9RBtV7K25M?(v#l>?}$0k zkKD{R8yguIaAmC0Zr*V(xaSA!jn=z9TemvgnGqShOD#fbYpPqT1k=vM&FSaoT~abg z^(yY;oRB?l?%cUkQ>RQ#P0i$c)YK?CV~#O9!{5EmAvP@v_Mph{boFyt=akR{01)CE AGynhq literal 0 HcmV?d00001 diff --git a/htdocs/theme/yellow/img/folder.png b/htdocs/theme/yellow/img/folder.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..908a6df9348330b2e9aaebcda75d5c6a08b86fef 100644 GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zRh}-6Ar-fhXEZZOD1@Xt1gOusEji=jElHk7#y2c(-25e8dVWSo4)3E~;nSXM^Pe|s zo=_Isl(Y^0y*jJcb$WYzDhy;Sip^gA>b2M9PkZN-gjhc}IO6v@bCt)Jf-6@8mo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZvGeb}S diff --git a/htdocs/theme/yellow/img/object_project.png b/htdocs/theme/yellow/img/object_project.png index 9e1316935bcc4e9fa30bb8948914fd362662a86b..5ea2e846ddfd125708ef8fdc650742f6acc88823 100644 GIT binary patch literal 1226 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUD!lvNA9*GX(gAxB|twxcC@2q`7&7dHKco z1SA9m#YM$r88{S~xz!lBv>3Uy7yai2v}?tv)L+aw^P98u%iEdBcBD*&PSzO zjw^VbRtmXl9C6$t>X>ozb%V6~dYMn1L+81K&UK958kgK2pED&eeVcQ}#jx@tkyQu$ zYaSIhtgdX^SlzPAv*l`7_tnUWx1%TDikWi9z2&`s|Hpu?kMR?pWX`&qJ@Z}8g8NyE zzvnLbk-PqH-O7iRYdfT_mX!}$);{WA`>198*Om>h+IIcv-1((r&z~vlA5Gr-V#>bvbGJQR zwBqct^*5GmxUypN)!n<#F4_HP!|q4z2ma1D_;c2o-@6ao-goH!f}^h&AAi5_{kGjDfXe7Eu9huzmcY<>K9_mhA7pZ+;=^y<0ucaEKUbl}XJ zb5~!Tz4__F?^7hI5zb{^Vef#eFyLVq+z5V&@ z_rEva|9|-K^ZWPTAAkS<`}g1f|Nnu}Itqvhfy7rGpv*P5B*-rq7;b|WFr5Cg#|P-p zC7v#hAr-fhXEZZOD1@Xt2nd-QEZ%A?ab|1bhRt8~U(GXIc|+<*>3W@$x$|vIZB?)E z9NFsMtFwAtr?UVB~sw0BNPNaLLwnYO;7opOD)7h-~{h%+v;y;G=+CX%_{b3i23~H p&6_nH1@`gU-o*mqoM&b-Gd$i9>iuy=Cn#VUJYD@<);T3K0RX&V9`pbJ delta 688 zcmV;h0#E(Q3E%~g85;%w0019IEztk~00(qQO+^RQ0s$5Z2%yBQLyo%@Oti5uv9PqUu%OWYz{=i+Kfo9b z78(m|DAdB3AU>kTO%`@p7S`pm_x+eV&WeJuaAuP4%*^@aK(ZZkf4r~g4)&%qlnL_V zS1mXmC3+_~`pr;o?`m@sNPKw!w_cNWjG)wLn4r5B`f>@i|9 z>%(z9*p|a9c|7)cpFXN}3oHuvz{SP4H(op!4$R8Bhi^VK7O{hvzxx5RC=Dvzw4X1l WHn9p5J%a!M3IG5}MNUMnLSTZf6GKV> diff --git a/htdocs/theme/yellow/img/object_projecttask.png b/htdocs/theme/yellow/img/object_projecttask.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec85fed9d3b2f6ca50036741eed51f4b0ded557 GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC*h@TpUDNSs56Z83KGlT!G?TTzm{1(%d}4y!>K( z0ulm(;-X@*3>=Eg+-eM5T8!LUjJ(>+yjm>0T8heg%BlvUx_)X}PCmiatg0Q{TAiF) zJv`c-ygFTcI^FzwJp%f@g8F@e27TgIU91LM1T40S*=!ZI+bLjkSkZsKk7jjZ1Ei&zTaKzRfw~Vp#c+$f^VW zHIIrLR#&!dtZv!m*>W|k`)cIG+tHJ6#Z0;5-tykR|6@Sc$M^|PGH2b*p7}0k!Tqeo z-*cDz$X)-pZso(uwV#^$ws%e4*EaWD&*TFWW*nS6>*%z(C#KCm-Lmjj`^x)M795|u z;@pIFcjqm;(75Jd%gP5WYajKmeblo4Ys-dLZM*(-?)=iR=g*Y&k0$SZF=gNTx!ayD zT5)#S`Ws6&Tv@UC>h9fVm+XGDVfUl<1Ak{6{5k8)@7)J(?>lsV!O_=?kH24a;OX)U zzn5SAx8~ZHt!H2FI`d}NnYTMGzT0^5!|rPzwm$y5`^mrkPyZY_diC7-JI78vI&kLA zxvQ_v-u!go@{1ccp4__g_RO1KH=q8z`sM%4AOD{`dHdx3-xn{wzJ2%o-McTZ-u`^{ z``?@I|37^A`ThIvkH7!_{rm6#|Np>f9RBtV7K25M?(v#l>?}$0k zkKD{R8yguIaAmC0Zr*V(xaSA!jn=z9TemvgnGqShOD#fbYpPqT1k=vM&FSaoT~abg z^(yY;oRB?l?%cUkQ>RQ#P0i$c)YK?CV~#O9!{5EmAvP@v_Mph{boFyt=akR{01)CE AGynhq literal 0 HcmV?d00001