dolibarr 19.0.3
photos_resize.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2010-2015 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2009 Meos
4 * Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
27// Load Dolibarr environment
28require '../main.inc.php';
29require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
30require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
31
32// Load translation files required by the page
33$langs->loadLangs(array("products", "other"));
34
35$id = GETPOST('id', 'int');
36$action = GETPOST('action', 'aZ09');
37$modulepart = GETPOST('modulepart', 'alpha') ? GETPOST('modulepart', 'alpha') : 'produit|service';
38$original_file = GETPOST("file");
39$backtourl = GETPOST('backtourl');
40$cancel = GETPOST('cancel', 'alpha');
41
42$file = GETPOST('file', 'alpha');
43$num = GETPOST('num', 'alpha'); // Used for document on bank statement
44$website = GETPOST('website', 'alpha');
45
46
47// Security check
48if (empty($modulepart)) {
49 accessforbidden('Bad value for modulepart');
50}
51$accessallowed = 0;
52if ($modulepart == 'produit' || $modulepart == 'product' || $modulepart == 'service' || $modulepart == 'produit|service') {
53 $result = restrictedArea($user, 'produit|service', $id, 'product&product');
54 if ($modulepart == 'produit|service' && (!$user->hasRight('produit', 'lire') && !$user->hasRight('service', 'lire'))) {
56 }
57 $accessallowed = 1;
58} elseif ($modulepart == 'project') {
59 $result = restrictedArea($user, 'projet', $id);
60 if (!$user->hasRight('projet', 'lire')) {
62 }
63 $accessallowed = 1;
64} elseif ($modulepart == 'bom') {
65 $result = restrictedArea($user, $modulepart, $id, 'bom_bom');
66 if (!$user->hasRight('bom', 'read')) {
68 }
69 $accessallowed = 1;
70} elseif ($modulepart == 'member') {
71 $result = restrictedArea($user, 'adherent', $id, '', '', 'fk_soc', 'rowid');
72 if (!$user->hasRight('adherent', 'lire')) {
74 }
75 $accessallowed = 1;
76} elseif ($modulepart == 'user') {
77 $result = restrictedArea($user, $modulepart, $id, $modulepart, $modulepart);
78 if (!$user->hasRight('user', 'user', 'lire')) {
80 }
81 $accessallowed = 1;
82} elseif ($modulepart == 'tax') {
83 $result = restrictedArea($user, $modulepart, $id, 'chargesociales', 'charges');
84 if (!$user->hasRight('tax', 'charges', 'lire')) {
86 }
87 $accessallowed = 1;
88} elseif ($modulepart == 'bank') {
89 $result = restrictedArea($user, 'banque', $id, 'bank_account');
90 if (!$user->hasRight('banque', 'lire')) {
92 }
93 $accessallowed = 1;
94} elseif ($modulepart == 'medias') {
95 $permtoadd = ($user->rights->mailing->creer || $user->rights->website->write);
96 if (!$permtoadd) {
98 }
99 $accessallowed = 1;
100} elseif ($modulepart == 'facture_fourn' || $modulepart == 'facture_fournisseur') {
101 $result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture');
102 if (!$user->hasRight('fournisseur', 'facture', 'lire')) {
104 }
105 $accessallowed = 1;
106} else {
107 // ticket, holiday, expensereport, societe...
108 $result = restrictedArea($user, $modulepart, $id, $modulepart);
109 if (!$user->hasRight($modulepart, 'read') && !$user->hasRight($modulepart, 'lire')) {
111 }
112 $accessallowed = 1;
113}
114
115// Security:
116// Limit access if permissions are wrong
117if (!$accessallowed) {
119}
120
121// Define dir according to modulepart
122$dir = '';
123if ($modulepart == 'produit' || $modulepart == 'product' || $modulepart == 'service' || $modulepart == 'produit|service') {
124 require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
125 $object = new Product($db);
126 if ($id > 0) {
127 $result = $object->fetch($id);
128 if ($result <= 0) {
129 dol_print_error($db, 'Failed to load object');
130 }
131 $dir = $conf->product->multidir_output[$object->entity]; // By default
132 if ($object->type == Product::TYPE_PRODUCT) {
133 $dir = $conf->product->multidir_output[$object->entity];
134 }
135 if ($object->type == Product::TYPE_SERVICE) {
136 $dir = $conf->service->multidir_output[$object->entity];
137 }
138 }
139} elseif ($modulepart == 'project') {
140 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
141 $object = new Project($db);
142 if ($id > 0) {
143 $result = $object->fetch($id);
144 if ($result <= 0) {
145 dol_print_error($db, 'Failed to load object');
146 }
147 $dir = $conf->project->multidir_output[$object->entity]; // By default
148 }
149} elseif ($modulepart == 'propal') {
150 require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
151 $object = new Propal($db);
152 if ($id > 0) {
153 $result = $object->fetch($id);
154 if ($result <= 0) {
155 dol_print_error($db, 'Failed to load object');
156 }
157 $dir = $conf->propal->multidir_output[$object->entity]; // By default
158 }
159} elseif ($modulepart == 'holiday') {
160 require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php';
161 $object = new Holiday($db);
162 if ($id > 0) {
163 $result = $object->fetch($id);
164 if ($result <= 0) {
165 dol_print_error($db, 'Failed to load object');
166 }
167 $dir = $conf->$modulepart->dir_output; // By default
168 }
169} elseif ($modulepart == 'member') {
170 require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
171 $object = new Adherent($db);
172 if ($id > 0) {
173 $result = $object->fetch($id);
174 if ($result <= 0) {
175 dol_print_error($db, 'Failed to load object');
176 }
177 $dir = $conf->adherent->dir_output; // By default
178 }
179} elseif ($modulepart == 'societe') {
180 require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
181 $object = new Societe($db);
182 if ($id > 0) {
183 $result = $object->fetch($id);
184 if ($result <= 0) {
185 dol_print_error($db, 'Failed to load object');
186 }
187 $dir = $conf->$modulepart->dir_output;
188 }
189} elseif ($modulepart == 'user') {
190 require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
191 $object = new User($db);
192 if ($id > 0) {
193 $result = $object->fetch($id);
194 if ($result <= 0) {
195 dol_print_error($db, 'Failed to load object');
196 }
197 $dir = $conf->$modulepart->dir_output; // By default
198 }
199} elseif ($modulepart == 'expensereport') {
200 require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
201 $object = new ExpenseReport($db);
202 if ($id > 0) {
203 $result = $object->fetch($id);
204 if ($result <= 0) {
205 dol_print_error($db, 'Failed to load object');
206 }
207 $dir = $conf->expensereport->dir_output; // By default
208 }
209} elseif ($modulepart == 'tax') {
210 require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
211 $object = new ChargeSociales($db);
212 if ($id > 0) {
213 $result = $object->fetch($id);
214 if ($result <= 0) {
215 dol_print_error($db, 'Failed to load object');
216 }
217 $dir = $conf->$modulepart->dir_output; // By default
218 }
219} elseif ($modulepart == 'ticket') {
220 require_once DOL_DOCUMENT_ROOT.'/ticket/class/ticket.class.php';
221 $object = new Ticket($db);
222 if ($id > 0) {
223 $result = $object->fetch($id);
224 if ($result <= 0) {
225 dol_print_error($db, 'Failed to load object');
226 }
227 $dir = $conf->$modulepart->dir_output; // By default
228 }
229} elseif ($modulepart == 'bom') {
230 require_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php';
231 $object = new BOM($db);
232 if ($id > 0) {
233 $result = $object->fetch($id);
234 if ($result <= 0) {
235 dol_print_error($db, 'Failed to load object');
236 }
237 $dir = $conf->$modulepart->dir_output; // By default
238 }
239} elseif ($modulepart == 'mrp') {
240 require_once DOL_DOCUMENT_ROOT.'/mrp/class/mo.class.php';
241 $object = new Mo($db);
242 if ($id > 0) {
243 $result = $object->fetch($id);
244 if ($result <= 0) {
245 dol_print_error($db, 'Failed to load object');
246 }
247 $dir = $conf->$modulepart->dir_output; // By default
248 }
249} elseif ($modulepart == 'bank') {
250 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
251 $object = new Account($db);
252 if ($id > 0) {
253 $result = $object->fetch($id);
254 if ($result <= 0) {
255 dol_print_error($db, 'Failed to load object');
256 }
257 $dir = $conf->bank->dir_output; // By default
258 }
259} elseif ($modulepart == 'facture') {
260 require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
261 $object = new Facture($db);
262 if ($id > 0) {
263 $result = $object->fetch($id);
264 if ($result <= 0) {
265 dol_print_error($db, 'Failed to load object');
266 }
267 $dir = $conf->$modulepart->dir_output; // By default
268 }
269} elseif ($modulepart == 'facture_fourn' || $modulepart == 'facture_fournisseur') {
270 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
271 $object = new FactureFournisseur($db);
272 if ($id > 0) {
273 $result = $object->fetch($id);
274 if ($result <= 0) {
275 dol_print_error($db, 'Failed to load object');
276 }
277 $dir = $conf->fournisseur->dir_output.'/facture'; // By default
278 }
279} elseif ($modulepart == 'medias') {
280 $dir = $dolibarr_main_data_root.'/'.$modulepart;
281} else {
282 print 'Bug: Action crop for modulepart = '.$modulepart.' is not supported yet by photos_resize.php.';
283}
284
285if (empty($backtourl)) {
286 $regs = array();
287
288 if (in_array($modulepart, array('product', 'produit', 'service', 'produit|service'))) {
289 $backtourl = DOL_URL_ROOT."/product/document.php?id=".((int) $id).'&file='.urlencode($file);
290 } elseif (in_array($modulepart, array('expensereport'))) {
291 $backtourl = DOL_URL_ROOT."/expensereport/document.php?id=".((int) $id).'&file='.urlencode($file);
292 } elseif (in_array($modulepart, array('holiday'))) {
293 $backtourl = DOL_URL_ROOT."/holiday/document.php?id=".((int) $id).'&file='.urlencode($file);
294 } elseif (in_array($modulepart, array('member'))) {
295 $backtourl = DOL_URL_ROOT."/adherents/document.php?id=".((int) $id).'&file='.urlencode($file);
296 } elseif (in_array($modulepart, array('project'))) {
297 $backtourl = DOL_URL_ROOT."/projet/document.php?id=".((int) $id).'&file='.urlencode($file);
298 } elseif (in_array($modulepart, array('propal'))) {
299 $backtourl = DOL_URL_ROOT."/comm/propal/document.php?id=".((int) $id).'&file='.urlencode($file);
300 } elseif (in_array($modulepart, array('societe'))) {
301 $backtourl = DOL_URL_ROOT."/societe/document.php?id=".((int) $id).'&file='.urlencode($file);
302 } elseif (in_array($modulepart, array('tax'))) {
303 $backtourl = DOL_URL_ROOT."/compta/sociales/document.php?id=".((int) $id).'&file='.urlencode($file);
304 } elseif (in_array($modulepart, array('ticket'))) {
305 $backtourl = DOL_URL_ROOT."/ticket/document.php?id=".((int) $id).'&file='.urlencode($file);
306 } elseif (in_array($modulepart, array('user'))) {
307 $backtourl = DOL_URL_ROOT."/user/document.php?id=".((int) $id).'&file='.urlencode($file);
308 } elseif (in_array($modulepart, array('facture'))) {
309 $backtourl = DOL_URL_ROOT."/compta/facture/document.php?id=".((int) $id).'&file='.urlencode($file);
310 } elseif (in_array($modulepart, array('facture_fourn', 'facture_fournisseur'))) {
311 $backtourl = DOL_URL_ROOT."/fourn/facture/document.php?id=".((int) $id).'&file='.urlencode($file);
312 } elseif (in_array($modulepart, array('bank')) && preg_match('/\/statement\/([^\/]+)\//', $file, $regs)) {
313 $num = $regs[1];
314 $backtourl = DOL_URL_ROOT."/compta/bank/account_statement_document.php?id=".((int) $id).'&num='.urlencode($num).'&file='.urlencode($file);
315 } elseif (in_array($modulepart, array('bank'))) {
316 $backtourl = DOL_URL_ROOT."/compta/bank/document.php?id=".((int) $id).'&file='.urlencode($file);
317 } elseif (in_array($modulepart, array('mrp'))) {
318 $backtourl = DOL_URL_ROOT."/mrp/mo_document.php?id=".((int) $id).'&file='.urlencode($file);
319 } elseif (in_array($modulepart, array('medias'))) {
320 $section_dir = dirname($file);
321 if (!preg_match('/\/$/', $section_dir)) {
322 $section_dir .= '/';
323 }
324 $backtourl = DOL_URL_ROOT.'/website/index.php?action=file_manager'.($website ? '&website='.urlencode($website) : '').'&section_dir='.urlencode($section_dir);
325 } else {
326 // Generic case that should work for everybody else
327 $backtourl = DOL_URL_ROOT."/".$modulepart."/".$modulepart."_document.php?id=".((int) $id).'&file='.urlencode($file);
328 }
329}
330
331
332/*
333 * Actions
334 */
335
336if ($cancel) {
337 if ($backtourl) {
338 header("Location: ".$backtourl);
339 exit;
340 } else {
341 dol_print_error('', 'Cancel on photo_resize with a not supported value of modulepart='.$modulepart);
342 exit;
343 }
344}
345
346if ($action == 'confirm_resize' && GETPOSTISSET("file") && GETPOSTISSET("sizex") && GETPOSTISSET("sizey")) {
347 if (empty($dir)) {
348 dol_print_error('', 'Bug: Value for $dir could not be defined.');
349 exit;
350 }
351
352 $fullpath = $dir."/".$original_file;
353
354 $result = dol_imageResizeOrCrop($fullpath, 0, GETPOST('sizex', 'int'), GETPOST('sizey', 'int'));
355
356 if ($result == $fullpath) {
357 // If image is related to a given object, we create also thumbs.
358 if (is_object($object)) {
359 $object->addThumbs($fullpath);
360 }
361
362 // Update/create database for file $fullpath
363 $rel_filename = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $fullpath);
364 $rel_filename = preg_replace('/^[\\/]/', '', $rel_filename);
365
366 include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
367 $ecmfile = new EcmFiles($db);
368 $result = $ecmfile->fetch(0, '', $rel_filename);
369 if ($result > 0) { // If found
370 $filename = basename($rel_filename);
371 $rel_dir = dirname($rel_filename);
372 $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
373 $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
374
375 $ecmfile->label = md5_file(dol_osencode($fullpath));
376 $result = $ecmfile->update($user);
377 } elseif ($result == 0) { // If not found
378 $filename = basename($rel_filename);
379 $rel_dir = dirname($rel_filename);
380 $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
381 $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
382
383 $ecmfile->filepath = $rel_dir;
384 $ecmfile->filename = $filename;
385 $ecmfile->label = md5_file(dol_osencode($fullpath)); // $fullpath is a full path to file
386 $ecmfile->fullpath_orig = $fullpath;
387 $ecmfile->gen_or_uploaded = 'unknown';
388 $ecmfile->description = ''; // indexed content
389 $ecmfile->keywords = ''; // keyword content
390 $result = $ecmfile->create($user);
391 if ($result < 0) {
392 setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings');
393 }
394 $result = $ecmfile->create($user);
395 }
396
397 if ($backtourl) {
398 header("Location: ".$backtourl);
399 exit;
400 } else {
401 dol_print_error('', 'confirm_resize on photo_resize without backtourl defined for modulepart='.$modulepart);
402 exit;
403 }
404 } else {
405 setEventMessages($result, null, 'errors');
406 $_GET['file'] = $_POST["file"];
407 $action = '';
408 }
409}
410
411// Crop d'une image
412if ($action == 'confirm_crop') {
413 if (empty($dir)) {
414 print 'Bug: Value for $dir could not be defined.';
415 }
416
417 $fullpath = $dir."/".$original_file;
418
419 $result = dol_imageResizeOrCrop($fullpath, 1, GETPOST('w', 'int'), GETPOST('h', 'int'), GETPOST('x', 'int'), GETPOST('y', 'int'));
420
421 if ($result == $fullpath) {
422 if (is_object($object)) {
423 $object->addThumbs($fullpath);
424 }
425
426 // Update/create database for file $fullpath
427 $rel_filename = preg_replace('/^'.preg_quote(DOL_DATA_ROOT, '/').'/', '', $fullpath);
428 $rel_filename = preg_replace('/^[\\/]/', '', $rel_filename);
429
430 include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
431 $ecmfile = new EcmFiles($db);
432 $result = $ecmfile->fetch(0, '', $rel_filename);
433 if ($result > 0) { // If found
434 $filename = basename($rel_filename);
435 $rel_dir = dirname($rel_filename);
436 $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
437 $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
438
439 $ecmfile->label = md5_file(dol_osencode($fullpath));
440 $result = $ecmfile->update($user);
441 } elseif ($result == 0) { // If not found
442 $filename = basename($rel_filename);
443 $rel_dir = dirname($rel_filename);
444 $rel_dir = preg_replace('/[\\/]$/', '', $rel_dir);
445 $rel_dir = preg_replace('/^[\\/]/', '', $rel_dir);
446
447 $ecmfile->filepath = $rel_dir;
448 $ecmfile->filename = $filename;
449 $ecmfile->label = md5_file(dol_osencode($fullpath)); // $fullpath is a full path to file
450 $ecmfile->fullpath_orig = $fullpath;
451 $ecmfile->gen_or_uploaded = 'unknown';
452 $ecmfile->description = ''; // indexed content
453 $ecmfile->keywords = ''; // keyword content
454 $result = $ecmfile->create($user);
455 if ($result < 0) {
456 setEventMessages($ecmfile->error, $ecmfile->errors, 'warnings');
457 }
458 }
459
460 if ($backtourl) {
461 header("Location: ".$backtourl);
462 exit;
463 } else {
464 dol_print_error('', 'confirm_crop on photo_resize without backtourl defined for modulepart='.$modulepart);
465 exit;
466 }
467 } else {
468 setEventMessages($result, null, 'errors');
469 $_GET['file'] = $_POST["file"];
470 $action = '';
471 }
472}
473
474
475/*
476 * View
477 */
478
479$head = '';
480$title = $langs->trans("ImageEditor");
481$morejs = array('/includes/jquery/plugins/jcrop/js/jquery.Jcrop.min.js', '/core/js/lib_photosresize.js');
482$morecss = array('/includes/jquery/plugins/jcrop/css/jquery.Jcrop.css');
483
484llxHeader($head, $title, '', '', 0, 0, $morejs, $morecss);
485
486
487print load_fiche_titre($title);
488
489$infoarray = dol_getImageSize($dir."/".GETPOST("file", 'alpha'));
490$height = $infoarray['height'];
491$width = $infoarray['width'];
492print '<span class="opacitymedium hideonsmartphone">'.$langs->trans("CurrentInformationOnImage").': </span>';
493print '<span class="opacitymedium">';
494print $langs->trans("Width").': <strong>'.$width.'</strong> x '.$langs->trans("Height").': <strong>'.$height.'</strong>';
495print '</span><br>';
496
497print '<br>'."\n";
498
499
500/*
501 * Resize image
502 */
503
504print '<!-- Form to resize -->'."\n";
505print '<form name="redim_file" action="'.$_SERVER["PHP_SELF"].'?id='.((int) $id).($num ? '&num='.urlencode($num) : '').'" method="POST">';
506print '<input type="hidden" name="token" value="'.newToken().'">';
507print '<input type="hidden" name="backtourl" value="'.$backtourl.'">';
508
509print '<fieldset id="redim_file">';
510print '<legend>'.$langs->trans("Resize").'</legend>';
511print $langs->trans("ResizeDesc").'<br>';
512print $langs->trans("NewLength").': <input name="sizex" type="number" class="flat maxwidth50 right"> px &nbsp; <span class="opacitymedium">'.$langs->trans("or").'</span> &nbsp; ';
513print $langs->trans("NewHeight").': <input name="sizey" type="number" class="flat maxwidth50 right"> px &nbsp; <br>';
514
515print '<input type="hidden" name="file" value="'.dol_escape_htmltag($file).'" />';
516print '<input type="hidden" name="action" value="confirm_resize" />';
517print '<input type="hidden" name="product" value="'.$id.'" />';
518print '<input type="hidden" name="modulepart" value="'.dol_escape_htmltag($modulepart).'" />';
519print '<input type="hidden" name="id" value="'.$id.'" />';
520print '<br>';
521print '<input class="button" id="submitresize" name="sendit" value="'.dol_escape_htmltag($langs->trans("Resize")).'" type="submit" />';
522print '&nbsp;';
523print '<input type="submit" id="cancelresize" name="cancel" class="button button-cancel" value="'.dol_escape_htmltag($langs->trans("Cancel")).'" />';
524print '</fieldset>'."\n";
525print '</form>';
526
527print '<br>'."\n";
528
529
530/*
531 * Crop image
532 */
533
534print '<br>'."\n";
535
536if (!empty($conf->use_javascript_ajax)) {
537 $infoarray = dol_getImageSize($dir."/".GETPOST("file"));
538 $height = $infoarray['height'];
539 $width = $infoarray['width'];
540 $widthforcrop = $width;
541 $refsizeforcrop = 'orig';
542 $ratioforcrop = 1;
543
544 // If image is too large, we use another scale.
545 if (!empty($_SESSION['dol_screenwidth'])) {
546 $widthforcroporigin = $widthforcrop;
547 while ($widthforcrop > round($_SESSION['dol_screenwidth'] / 1.5)) {
548 //var_dump($widthforcrop.' '.round($_SESSION['dol_screenwidth'] / 1.5));
549 $ratioforcrop = 2 * $ratioforcrop;
550 $widthforcrop = floor($widthforcroporigin / $ratioforcrop);
551 $refsizeforcrop = 'screenwidth';
552 }
553 }
554
555 print '<!-- Form to crop -->'."\n";
556 print '<fieldset id="redim_file">';
557 print '<legend>'.$langs->trans("Crop").'</legend>';
558 print $langs->trans("DefineNewAreaToPick").'...<br>';
559 print '<br><div class="center">';
560
561 if (empty($conf->dol_no_mouse_hover)) {
562 print '<div style="border: 1px solid #888888; width: '.$widthforcrop.'px;">';
563 print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$object->entity.'&file='.urlencode($original_file).'" alt="" id="cropbox" width="'.$widthforcrop.'px"/>';
564 print '</div>';
565 print '</div><br>';
566
567 print '<form action="'.$_SERVER["PHP_SELF"].'?id='.((int) $id).($num ? '&num='.$num : '').'" method="POST">';
568 print '<input type="hidden" name="token" value="'.newToken().'">';
569 print '<input type="hidden" name="backtourl" value="'.$backtourl.'">';
570 print '
571 <div class="jc_coords">
572 '.$langs->trans("NewSizeAfterCropping").':
573 &nbsp; <label>X1=<input type="number" class="flat maxwidth50" id="x" name="x" /></label>
574 &nbsp; <label>Y1=<input type="number" class="flat maxwidth50" id="y" name="y" /></label>
575 &nbsp; <label>X2=<input type="number" class="flat maxwidth50" id="x2" name="x2" /></label>
576 &nbsp; <label>Y2=<input type="number" class="flat maxwidth50" id="y2" name="y2" /></label>
577 &nbsp; <label>W=<input type="number" class="flat maxwidth50" id="w" name="w" /></label>
578 &nbsp; <label>H=<input type="number" class="flat maxwidth50" id="h" name="h" /></label>
579 </div>
580
581 <input type="hidden" id="file" name="file" value="'.dol_escape_htmltag($original_file).'" />
582 <input type="hidden" id="action" name="action" value="confirm_crop" />
583 <input type="hidden" id="product" name="product" value="'.dol_escape_htmltag($id).'" />
584 <input type="hidden" id="dol_screenwidth" name="dol_screenwidth" value="'.$_SESSION['dol_screenwidth'].'" />
585 <input type="hidden" id="refsizeforcrop" name="refsizeforcrop" value="'.$refsizeforcrop.'" />
586 <input type="hidden" id="ratioforcrop" name="ratioforcrop" value="'.$ratioforcrop.'" /><!-- value in field used by js/lib/lib_photoresize.js -->
587 <input type="hidden" id="imagewidth" name="imagewidth" value="'.$width.'" /><!-- value in field used by js/lib/lib_photoresize.js -->
588 <input type="hidden" id="imageheight" name="imageheight" value="'.$height.'" /><!-- value in field used by js/lib/lib_photoresize.js -->
589 <input type="hidden" name="modulepart" value="'.dol_escape_htmltag($modulepart).'" />
590 <input type="hidden" name="id" value="'.dol_escape_htmltag($id).'" />
591 <br>
592 <input type="submit" id="submitcrop" name="submitcrop" class="button" value="'.dol_escape_htmltag($langs->trans("Crop")).'" />
593 &nbsp;
594 <input type="submit" id="cancelcrop" name="cancel" class="button button-cancel" value="'.dol_escape_htmltag($langs->trans("Cancel")).'" />
595 </form>'."\n";
596 } else {
597 $langs->load("other");
598 print '<div class="opacitymedium">'.$langs->trans("FeatureNotAvailableOnDevicesWithoutMouse").'</div>';
599 }
600 print '</fieldset>'."\n";
601 print '<br>';
602}
603
604/* Check that mandatory fields are filled */
605print '<script nonce="'.getNonce().'" type="text/javascript">
606jQuery(document).ready(function() {
607 $("#submitcrop").click(function(e) {
608 console.log("We click on submitcrop");
609 var idClicked = e.target.id;
610 if (parseInt(jQuery(\'#w\').val())) return true;
611 alert(\''.dol_escape_js($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Dimension"))).'\');
612 return false;
613 });
614});
615</script>';
616
617llxFooter();
618$db->close();
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:55
Class to manage bank accounts.
Class to manage members of a foundation.
Class for BOM.
Definition bom.class.php:43
Classe permettant la gestion des paiements des charges La tva collectee n'est calculee que sur les fa...
Class to manage ECM files.
Class to manage Trips and Expenses.
Class to manage suppliers invoices.
Class to manage invoices.
Class of the module paid holiday.
Class for Mo.
Definition mo.class.php:34
Class to manage products or services.
const TYPE_PRODUCT
Regular product.
const TYPE_SERVICE
Service.
Class to manage projects.
Class to manage proposals.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_escape_js($stringtoescape, $mode=0, $noescapebackslashn=0)
Returns text escaped for inclusion into javascript code.
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_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
dol_imageResizeOrCrop($file, $mode, $newWidth, $newHeight, $src_x=0, $src_y=0, $filetowrite='', $newquality=0)
Resize or crop an image file (Supported extensions are gif, jpg, png, bmp and webp)
dol_getImageSize($file, $url=false)
Return size of image file on disk (Supported extensions are gif, jpg, png, bmp and webp)
Class to generate the form for creating a new ticket.
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.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.