dolibarr 21.0.0-alpha
photos.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com>
5 * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2014 Jean-François Ferry <jfefe@aternatik.fr>
7 * Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
8 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
30// Load Dolibarr environment
31require '../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
33require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
34require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/categories.lib.php';
36
37// Load translation files required by the page
38$langs->loadlangs(array('categories', 'bills'));
39
40
41$id = GETPOSTINT('id');
42$label = GETPOST('label', 'alpha');
43$action = GETPOST('action', 'aZ09');
44$confirm = GETPOST('confirm');
45
46if ($id == '' && $label == '') {
47 dol_print_error(null, 'Missing parameter id');
48 exit();
49}
50
51// Security check
52$result = restrictedArea($user, 'categorie', $id, '&category');
53
54$object = new Categorie($db);
55$result = $object->fetch($id, $label);
56if ($result <= 0) {
57 dol_print_error($db, $object->error);
58 exit;
59}
60
61$type = $object->type;
62if (is_numeric($type)) {
63 $type = Categorie::$MAP_ID_TO_CODE[$type]; // For backward compatibility
64}
65
66$upload_dir = $conf->categorie->multidir_output[$object->entity];
67
68$hookmanager->initHooks(array('categorycard'));
69
70/*
71 * Actions
72 */
73$parameters = array('id' => $id, 'label' => $label, 'confirm' => $confirm, 'type' => $type, 'uploaddir' => $upload_dir, 'sendfile' => (GETPOST("sendit") ? true : false));
74// Note that $action and $object may be modified by some hooks
75$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action);
76if ($reshook < 0) {
77 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
78}
79
80if (empty($reshook)) {
81 if (isset($_FILES['userfile']) && $_FILES['userfile']['size'] > 0 && GETPOST("sendit") && getDolGlobalString('MAIN_UPLOAD_DOC')) {
82 if ($object->id) {
83 $file = $_FILES['userfile'];
84 if (is_array($file['name']) && count($file['name']) > 0) {
85 foreach ($file['name'] as $i => $name) {
86 if (empty($file['tmp_name'][$i]) || (getDolGlobalInt('MAIN_UPLOAD_DOC') * 1000) <= filesize($file['tmp_name'][$i])) {
87 setEventMessage($file['name'][$i].' : '.$langs->trans(empty($file['tmp_name'][$i]) ? 'ErrorFailedToSaveFile' : 'MaxSizeForUploadedFiles'), 'errors');
88 unset($file['name'][$i], $file['type'][$i], $file['tmp_name'][$i], $file['error'][$i], $file['size'][$i]);
89 }
90 }
91 }
92
93 if (!empty($file['tmp_name'])) {
94 $object->add_photo($upload_dir, $file);
95 }
96 }
97 }
98
99 if ($action == 'confirm_delete' && GETPOST("file") && $confirm == 'yes' && $user->hasRight('categorie', 'creer')) {
100 $object->delete_photo($upload_dir."/".GETPOST("file"));
101 }
102
103 if ($action == 'addthumb' && GETPOST("file")) {
104 $object->addThumbs($upload_dir."/".GETPOST("file"));
105 }
106}
107
108/*
109 * View
110 */
111
112llxHeader("", "", $langs->trans("Categories"));
113
114$form = new Form($db);
115$formother = new FormOther($db);
116
117if ($object->id) {
118 $title = Categorie::$MAP_TYPE_TITLE_AREA[$type];
119
120 $head = categories_prepare_head($object, $type);
121 print dol_get_fiche_head($head, 'photos', $langs->trans($title), -1, 'category');
122
123 $backtolist = (GETPOST('backtolist') ? GETPOST('backtolist') : DOL_URL_ROOT.'/categories/index.php?leftmenu=cat&type='.urlencode($type));
124 $linkback = '<a href="'.dol_sanitizeUrl($backtolist).'">'.$langs->trans("BackToList").'</a>';
125 $object->next_prev_filter = 'type = '.((int) $object->type);
126 $object->ref = $object->label;
127 $morehtmlref = '<br><div class="refidno"><a href="'.DOL_URL_ROOT.'/categories/index.php?leftmenu=cat&type='.$type.'">'.$langs->trans("Root").'</a> >> ';
128 $ways = $object->print_all_ways(" &gt;&gt; ", '', 1);
129 foreach ($ways as $way) {
130 $morehtmlref .= $way."<br>\n";
131 }
132 $morehtmlref .= '</div>';
133
134 dol_banner_tab($object, 'label', $linkback, ($user->socid ? 0 : 1), 'label', 'label', $morehtmlref, '&type='.$type, 0, '', '', 1);
135
136 /*
137 * Confirmation deletion of picture
138 */
139 if ($action == 'delete') {
140 print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&type='.urlencode($type).'&file='.urlencode(GETPOST("file")), $langs->trans('DeletePicture'), $langs->trans('ConfirmDeletePicture'), 'confirm_delete', '', 0, 1);
141 }
142
143 print '<br>';
144
145 print '<div class="fichecenter">';
146 print '<div class="underbanner clearboth"></div>';
147 print '<table class="border centpercent tableforfield">';
148
149 // Description
150 print '<tr><td class="titlefield notopnoleft">';
151 print $langs->trans("Description").'</td><td>';
152 print dol_htmlentitiesbr($object->description);
153 print '</td></tr>';
154
155 // Color
156 print '<tr><td class="notopnoleft">';
157 print $langs->trans("Color").'</td><td>';
158 print $formother->showColor($object->color);
159 print '</td></tr>';
160
161 print "</table>\n";
162 print '</div>';
163
164 print dol_get_fiche_end();
165
166
167
168 /*
169 * Action bar
170 */
171 print '<div class="tabsAction">'."\n";
172
173 if ($action != 'ajout_photo' && $user->hasRight('categorie', 'creer')) {
174 if (getDolGlobalString('MAIN_UPLOAD_DOC')) {
175 print '<a class="butAction hideonsmartphone" href="'.$_SERVER['PHP_SELF'].'?action=ajout_photo&amp;id='.$object->id.'&amp;type='.$type.'">';
176 print $langs->trans("AddPhoto").'</a>';
177 } else {
178 print '<a class="butActionRefused classfortooltip hideonsmartphone" href="#">';
179 print $langs->trans("AddPhoto").'</a>';
180 }
181 }
182
183 print '</div>'."\n";
184
185 /*
186 * Ajouter une photo
187 */
188 if ($action == 'ajout_photo' && $user->hasRight('categorie', 'creer') && getDolGlobalString('MAIN_UPLOAD_DOC')) {
189 // Affiche formulaire upload
190 $formfile = new FormFile($db);
191 $formfile->form_attach_new_file($_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;type='.$type, $langs->trans("AddPhoto"), 1, '', $user->hasRight('categorie', 'creer'), 50, $object, '', false, '', 0);
192 }
193
194 // Affiche photos
195 if ($action != 'ajout_photo') {
196 $nbphoto = 0;
197 $nbbyrow = 5;
198
199 $maxWidth = 160;
200 $maxHeight = 120;
201
202 $pdir = get_exdir($object->id, 2, 0, 0, $object, 'category').$object->id."/photos/";
203 $dir = $upload_dir.'/'.$pdir;
204
205 $listofphoto = $object->liste_photos($dir);
206
207 if (is_array($listofphoto) && count($listofphoto)) {
208 print '<br>';
209 print '<table width="100%" valign="top" class="center centpercent">';
210
211 foreach ($listofphoto as $key => $obj) {
212 $nbphoto++;
213
214 if ($nbbyrow && ($nbphoto % $nbbyrow == 1)) {
215 print '<tr class"center valignmiddle" border="1">';
216 }
217 if ($nbbyrow) {
218 print '<td width="'.ceil(100 / $nbbyrow).'%" class="photo">';
219 }
220
221 print '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart=category&entity='.$object->entity.'&file='.urlencode($pdir.$obj['photo']).'" alt="Original size" target="_blank" rel="noopener noreferrer">';
222
223 // Si fichier vignette disponible, on l'utilise, sinon on utilise photo origine
224 if ($obj['photo_vignette']) {
225 $filename = $obj['photo_vignette'];
226 } else {
227 $filename = $obj['photo'];
228 }
229
230 // Nom affiche
231 $viewfilename = $obj['photo'];
232
233 // Taille de l'image
234 $object->get_image_size($dir.$filename);
235 $imgWidth = ($object->imgWidth < $maxWidth) ? $object->imgWidth : $maxWidth;
236 $imgHeight = ($object->imgHeight < $maxHeight) ? $object->imgHeight : $maxHeight;
237
238 print '<img border="0" width="'.$imgWidth.'" height="'.$imgHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=category&entity='.$object->entity.'&file='.urlencode($pdir.$filename).'">';
239
240 print '</a>';
241 print '<br>'.$viewfilename;
242 print '<br>';
243
244 // On propose la generation de la vignette si elle n'existe pas et si la taille est superieure aux limites
245 if (!$obj['photo_vignette'] && preg_match('/(\.bmp|\.gif|\.jpg|\.jpeg|\.png)$/i', $obj['photo']) && ($object->imgWidth > $maxWidth || $object->imgHeight > $maxHeight)) {
246 print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&token='.newToken().'&action=addthumb&type='.$type.'&file='.urlencode($pdir.$viewfilename).'">'.img_picto($langs->trans('GenerateThumb'), 'refresh').'&nbsp;&nbsp;</a>';
247 }
248 if ($user->hasRight('categorie', 'creer')) {
249 print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken().'&type='.$type.'&file='.urlencode($pdir.$viewfilename).'">';
250 print img_delete().'</a>';
251 }
252 if ($nbbyrow) {
253 print '</td>';
254 }
255 if ($nbbyrow && ($nbphoto % $nbbyrow == 0)) {
256 print '</tr>';
257 }
258 }
259
260 // Ferme tableau
261 while ($nbphoto % $nbbyrow) {
262 print '<td width="'.ceil(100 / $nbbyrow).'%">&nbsp;</td>';
263 $nbphoto++;
264 }
265
266 print '</table>';
267 }
268
269 if ($nbphoto < 1) {
270 print '<div class="opacitymedium">'.$langs->trans("NoPhotoYet")."</div>";
271 }
272 }
273} else {
274 print $langs->trans("ErrorUnknown");
275}
276
277// End of page
278llxFooter();
279$db->close();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:70
categories_prepare_head(Categorie $object, $type)
Prepare array with list of tabs.
Class to manage categories.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation de composants html autre Only common components are here.
llxFooter()
Footer empty.
Definition document.php:107
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.