dolibarr  18.0.0
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
28 require '../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
30 require_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
48 if (empty($modulepart)) {
49  accessforbidden('Bad value for modulepart');
50 }
51 $accessallowed = 0;
52 if ($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 (empty($user->rights->projet->lire)) {
62  }
63  $accessallowed = 1;
64 } elseif ($modulepart == 'bom') {
65  $result = restrictedArea($user, $modulepart, $id, 'bom_bom');
66  if (empty($user->rights->bom->read)) {
68  }
69  $accessallowed = 1;
70 } elseif ($modulepart == 'member') {
71  $result = restrictedArea($user, 'adherent', $id, '', '', 'fk_soc', 'rowid');
72  if (empty($user->rights->adherent->lire)) {
74  }
75  $accessallowed = 1;
76 } elseif ($modulepart == 'user') {
77  $result = restrictedArea($user, $modulepart, $id, $modulepart, $modulepart);
78  if (empty($user->rights->user->user->lire)) {
80  }
81  $accessallowed = 1;
82 } elseif ($modulepart == 'tax') {
83  $result = restrictedArea($user, $modulepart, $id, 'chargesociales', 'charges');
84  if (empty($user->rights->tax->charges->lire)) {
86  }
87  $accessallowed = 1;
88 } elseif ($modulepart == 'bank') {
89  $result = restrictedArea($user, 'banque', $id, 'bank_account');
90  if (empty($user->rights->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 (empty($user->rights->fournisseur->facture->lire)) {
103  accessforbidden();
104  }
105  $accessallowed = 1;
106 } else {
107  // ticket, holiday, expensereport, societe...
108  $result = restrictedArea($user, $modulepart, $id, $modulepart);
109  if (empty($user->rights->$modulepart->read) && empty($user->rights->$modulepart->lire)) {
110  accessforbidden();
111  }
112  $accessallowed = 1;
113 }
114 
115 // Security:
116 // Limit access if permissions are wrong
117 if (!$accessallowed) {
118  accessforbidden();
119 }
120 
121 // Define dir according to modulepart
122 $dir = '';
123 if ($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 
285 if (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 
336 if ($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 
346 if ($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
412 if ($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 
484 llxHeader($head, $title, '', '', 0, 0, $morejs, $morecss);
485 
486 
487 print load_fiche_titre($title);
488 
489 $infoarray = dol_getImageSize($dir."/".GETPOST("file", 'alpha'));
490 $height = $infoarray['height'];
491 $width = $infoarray['width'];
492 print '<span class="opacitymedium hideonsmartphone">'.$langs->trans("CurrentInformationOnImage").': </span>';
493 print '<span class="opacitymedium">';
494 print $langs->trans("Width").': <strong>'.$width.'</strong> x '.$langs->trans("Height").': <strong>'.$height.'</strong>';
495 print '</span><br>';
496 
497 print '<br>'."\n";
498 
499 
500 /*
501  * Resize image
502  */
503 
504 print '<!-- Form to resize -->'."\n";
505 print '<form name="redim_file" action="'.$_SERVER["PHP_SELF"].'?id='.((int) $id).($num ? '&num='.urlencode($num) : '').'" method="POST">';
506 print '<input type="hidden" name="token" value="'.newToken().'">';
507 print '<input type="hidden" name="backtourl" value="'.$backtourl.'">';
508 
509 print '<fieldset id="redim_file">';
510 print '<legend>'.$langs->trans("Resize").'</legend>';
511 print $langs->trans("ResizeDesc").'<br>';
512 print $langs->trans("NewLength").': <input name="sizex" type="number" class="flat maxwidth50 right"> px &nbsp; <span class="opacitymedium">'.$langs->trans("or").'</span> &nbsp; ';
513 print $langs->trans("NewHeight").': <input name="sizey" type="number" class="flat maxwidth50 right"> px &nbsp; <br>';
514 
515 print '<input type="hidden" name="file" value="'.dol_escape_htmltag($file).'" />';
516 print '<input type="hidden" name="action" value="confirm_resize" />';
517 print '<input type="hidden" name="product" value="'.$id.'" />';
518 print '<input type="hidden" name="modulepart" value="'.dol_escape_htmltag($modulepart).'" />';
519 print '<input type="hidden" name="id" value="'.$id.'" />';
520 print '<br>';
521 print '<input class="button" id="submitresize" name="sendit" value="'.dol_escape_htmltag($langs->trans("Resize")).'" type="submit" />';
522 print '&nbsp;';
523 print '<input type="submit" id="cancelresize" name="cancel" class="button button-cancel" value="'.dol_escape_htmltag($langs->trans("Cancel")).'" />';
524 print '</fieldset>'."\n";
525 print '</form>';
526 
527 print '<br>'."\n";
528 
529 
530 /*
531  * Crop image
532  */
533 
534 print '<br>'."\n";
535 
536 if (!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("Recenter").'</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("Recenter")).'" />
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 */
605 print '<script nonce="'.getNonce().'" type="text/javascript">
606 jQuery(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 
617 llxFooter();
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:56
Class to manage bank accounts.
Class to manage members of a foundation.
Class for BOM.
Definition: bom.class.php:39
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.
Definition: user.class.php:48
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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
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)
Definition: images.lib.php:181
dol_getImageSize($file, $url=false)
Return size of image file on disk (Supported extensions are gif, jpg, png, bmp and webp)
Definition: images.lib.php:140
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.