30require
'../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
35$langs->loadLangs(array(
"products",
"other"));
38$action =
GETPOST(
'action',
'aZ09');
39$modulepart =
GETPOST(
'modulepart',
'alpha') ?
GETPOST(
'modulepart',
'alpha') :
'produit|service';
40$original_file =
GETPOST(
"file");
41$backtourl =
GETPOST(
'backtourl');
42$cancel =
GETPOST(
'cancel',
'alpha');
44$file =
GETPOST(
'file',
'alpha');
46$website =
GETPOST(
'website',
'alpha');
50if (empty($modulepart)) {
54if ($modulepart ==
'produit' || $modulepart ==
'product' || $modulepart ==
'service' || $modulepart ==
'produit|service') {
55 $result =
restrictedArea($user,
'produit|service', $id,
'product&product');
56 if ($modulepart ==
'produit|service' && (!$user->hasRight(
'produit',
'lire') && !$user->hasRight(
'service',
'lire'))) {
60} elseif ($modulepart ==
'project') {
62 if (!$user->hasRight(
'projet',
'lire')) {
66} elseif ($modulepart ==
'bom') {
68 if (!$user->hasRight(
'bom',
'read')) {
72} elseif ($modulepart ==
'member') {
73 $result =
restrictedArea($user,
'adherent', $id,
'',
'',
'fk_soc',
'rowid');
74 if (!$user->hasRight(
'adherent',
'lire')) {
78} elseif ($modulepart ==
'user') {
79 $result =
restrictedArea($user, $modulepart, $id, $modulepart, $modulepart);
80 if (!$user->hasRight(
'user',
'user',
'lire')) {
84} elseif ($modulepart ==
'tax') {
85 $result =
restrictedArea($user, $modulepart, $id,
'chargesociales',
'charges');
86 if (!$user->hasRight(
'tax',
'charges',
'lire')) {
90} elseif ($modulepart ==
'bank') {
92 if (!$user->hasRight(
'banque',
'lire')) {
96} elseif ($modulepart ==
'medias') {
97 $permtoadd = ($user->hasRight(
'mailing',
'creer') || $user->hasRight(
'website',
'write'));
102} elseif ($modulepart ==
'facture_fourn' || $modulepart ==
'facture_fournisseur') {
103 $result =
restrictedArea($user,
'fournisseur', $id,
'facture_fourn',
'facture');
104 if (!$user->hasRight(
'fournisseur',
'facture',
'lire')) {
111 if (!$user->hasRight($modulepart,
'read') && !$user->hasRight($modulepart,
'lire')) {
119if (!$accessallowed) {
125if ($modulepart ==
'produit' || $modulepart ==
'product' || $modulepart ==
'service' || $modulepart ==
'produit|service') {
126 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
133 $dir = $conf->product->multidir_output[
$object->entity];
135 $dir = $conf->product->multidir_output[
$object->entity];
138 $dir = $conf->service->multidir_output[
$object->entity];
141} elseif ($modulepart ==
'project') {
142 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
149 $dir = $conf->project->multidir_output[
$object->entity];
151} elseif ($modulepart ==
'propal') {
152 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
159 $dir = $conf->propal->multidir_output[
$object->entity];
161} elseif ($modulepart ==
'holiday') {
162 require_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
169 $dir = $conf->$modulepart->dir_output;
171} elseif ($modulepart ==
'member') {
172 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
179 $dir = $conf->adherent->dir_output;
181} elseif ($modulepart ==
'societe') {
182 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
189 $dir = $conf->$modulepart->dir_output;
191} elseif ($modulepart ==
'user') {
192 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
199 $dir = $conf->$modulepart->dir_output;
201} elseif ($modulepart ==
'expensereport') {
202 require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
209 $dir = $conf->expensereport->dir_output;
211} elseif ($modulepart ==
'tax') {
212 require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
219 $dir = $conf->$modulepart->dir_output;
221} elseif ($modulepart ==
'ticket') {
222 require_once DOL_DOCUMENT_ROOT.
'/ticket/class/ticket.class.php';
229 $dir = $conf->$modulepart->dir_output;
231} elseif ($modulepart ==
'bom') {
232 require_once DOL_DOCUMENT_ROOT.
'/bom/class/bom.class.php';
239 $dir = $conf->$modulepart->dir_output;
241} elseif ($modulepart ==
'mrp') {
242 require_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
249 $dir = $conf->$modulepart->dir_output;
251} elseif ($modulepart ==
'bank') {
252 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
259 $dir = $conf->bank->dir_output;
261} elseif ($modulepart ==
'facture') {
262 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
269 $dir = $conf->$modulepart->dir_output;
271} elseif ($modulepart ==
'facture_fourn' || $modulepart ==
'facture_fournisseur') {
272 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
279 $dir = $conf->fournisseur->dir_output.
'/facture';
281} elseif ($modulepart ==
'medias') {
282 $dir = $dolibarr_main_data_root.
'/'.$modulepart;
284 print
'Bug: Action crop for modulepart = '.$modulepart.
' is not supported yet by photos_resize.php.';
287if (empty($backtourl)) {
290 if (in_array($modulepart, array(
'product',
'produit',
'service',
'produit|service'))) {
291 $backtourl = DOL_URL_ROOT.
"/product/document.php?id=".((int) $id).
'&file='.urlencode($file);
292 } elseif (in_array($modulepart, array(
'expensereport'))) {
293 $backtourl = DOL_URL_ROOT.
"/expensereport/document.php?id=".((int) $id).
'&file='.urlencode($file);
294 } elseif (in_array($modulepart, array(
'holiday'))) {
295 $backtourl = DOL_URL_ROOT.
"/holiday/document.php?id=".((int) $id).
'&file='.urlencode($file);
296 } elseif (in_array($modulepart, array(
'member'))) {
297 $backtourl = DOL_URL_ROOT.
"/adherents/document.php?id=".((int) $id).
'&file='.urlencode($file);
298 } elseif (in_array($modulepart, array(
'project'))) {
299 $backtourl = DOL_URL_ROOT.
"/projet/document.php?id=".((int) $id).
'&file='.urlencode($file);
300 } elseif (in_array($modulepart, array(
'propal'))) {
301 $backtourl = DOL_URL_ROOT.
"/comm/propal/document.php?id=".((int) $id).
'&file='.urlencode($file);
302 } elseif (in_array($modulepart, array(
'societe'))) {
303 $backtourl = DOL_URL_ROOT.
"/societe/document.php?id=".((int) $id).
'&file='.urlencode($file);
304 } elseif (in_array($modulepart, array(
'tax'))) {
305 $backtourl = DOL_URL_ROOT.
"/compta/sociales/document.php?id=".((int) $id).
'&file='.urlencode($file);
306 } elseif (in_array($modulepart, array(
'ticket'))) {
307 $backtourl = DOL_URL_ROOT.
"/ticket/document.php?id=".((int) $id).
'&file='.urlencode($file);
308 } elseif (in_array($modulepart, array(
'user'))) {
309 $backtourl = DOL_URL_ROOT.
"/user/document.php?id=".((int) $id).
'&file='.urlencode($file);
310 } elseif (in_array($modulepart, array(
'facture'))) {
311 $backtourl = DOL_URL_ROOT.
"/compta/facture/document.php?id=".((int) $id).
'&file='.urlencode($file);
312 } elseif (in_array($modulepart, array(
'facture_fourn',
'facture_fournisseur'))) {
313 $backtourl = DOL_URL_ROOT.
"/fourn/facture/document.php?id=".((int) $id).
'&file='.urlencode($file);
314 } elseif (in_array($modulepart, array(
'bank')) && preg_match(
'/\/statement\/([^\/]+)\//', $file, $regs)) {
316 $backtourl = DOL_URL_ROOT.
"/compta/bank/account_statement_document.php?id=".((int) $id).
'&num='.urlencode($num).
'&file='.urlencode($file);
317 } elseif (in_array($modulepart, array(
'bank'))) {
318 $backtourl = DOL_URL_ROOT.
"/compta/bank/document.php?id=".((int) $id).
'&file='.urlencode($file);
319 } elseif (in_array($modulepart, array(
'mrp'))) {
320 $backtourl = DOL_URL_ROOT.
"/mrp/mo_document.php?id=".((int) $id).
'&file='.urlencode($file);
321 } elseif (in_array($modulepart, array(
'medias'))) {
322 $section_dir = dirname($file);
323 if (!preg_match(
'/\/$/', $section_dir)) {
326 $backtourl = DOL_URL_ROOT.
'/website/index.php?action=file_manager'.($website ?
'&website='.urlencode($website) :
'').
'§ion_dir='.urlencode($section_dir);
329 $backtourl = DOL_URL_ROOT.
"/".$modulepart.
"/".$modulepart.
"_document.php?id=".((int) $id).
'&file='.urlencode($file);
340 header(
"Location: ".$backtourl);
343 dol_print_error(
null,
'Cancel on photo_resize with a not supported value of modulepart='.$modulepart);
348if ($action ==
'confirm_resize' && GETPOSTISSET(
"file") && GETPOSTISSET(
"sizex") && GETPOSTISSET(
"sizey")) {
354 $fullpath = $dir.
"/".$original_file;
358 if ($result == $fullpath) {
365 $rel_filename = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $fullpath);
366 $rel_filename = preg_replace(
'/^[\\/]/',
'', $rel_filename);
368 include_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmfiles.class.php';
370 $result = $ecmfile->fetch(0,
'', $rel_filename);
372 $filename = basename($rel_filename);
373 $rel_dir = dirname($rel_filename);
374 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
375 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
378 $result = $ecmfile->update($user);
379 } elseif ($result == 0) {
380 $filename = basename($rel_filename);
381 $rel_dir = dirname($rel_filename);
382 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
383 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
385 $ecmfile->filepath = $rel_dir;
386 $ecmfile->filename = $filename;
388 $ecmfile->fullpath_orig = $fullpath;
389 $ecmfile->gen_or_uploaded =
'unknown';
390 $ecmfile->description =
'';
391 $ecmfile->keywords =
'';
392 $result = $ecmfile->create($user);
396 $result = $ecmfile->create($user);
400 header(
"Location: ".$backtourl);
403 dol_print_error(
null,
'confirm_resize on photo_resize without backtourl defined for modulepart='.$modulepart);
413if ($action ==
'confirm_crop') {
415 print
'Bug: Value for $dir could not be defined.';
418 $fullpath = $dir.
"/".$original_file;
422 if ($result == $fullpath) {
428 $rel_filename = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $fullpath);
429 $rel_filename = preg_replace(
'/^[\\/]/',
'', $rel_filename);
431 include_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmfiles.class.php';
433 $result = $ecmfile->fetch(0,
'', $rel_filename);
435 $filename = basename($rel_filename);
436 $rel_dir = dirname($rel_filename);
437 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
438 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
441 $result = $ecmfile->update($user);
442 } elseif ($result == 0) {
443 $filename = basename($rel_filename);
444 $rel_dir = dirname($rel_filename);
445 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
446 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
448 $ecmfile->filepath = $rel_dir;
449 $ecmfile->filename = $filename;
451 $ecmfile->fullpath_orig = $fullpath;
452 $ecmfile->gen_or_uploaded =
'unknown';
453 $ecmfile->description =
'';
454 $ecmfile->keywords =
'';
455 $result = $ecmfile->create($user);
462 header(
"Location: ".$backtourl);
465 dol_print_error(
null,
'confirm_crop on photo_resize without backtourl defined for modulepart='.$modulepart);
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');
484llxHeader($head, $title,
'',
'', 0, 0, $morejs, $morecss);
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>';
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.
'">';
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 <span class="opacitymedium">'.$langs->trans(
"or").
'</span> ';
513print $langs->trans(
"NewHeight").
': <input name="sizey" type="number" class="flat maxwidth50 right"> px <br>';
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.
'" />';
521print
'<input class="button" id="submitresize" name="sendit" value="'.dol_escape_htmltag($langs->trans(
"Resize")).
'" type="submit" />';
523print
'<input type="submit" id="cancelresize" name="cancel" class="button button-cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'" />';
524print
'</fieldset>'.
"\n";
536if (!empty($conf->use_javascript_ajax)) {
538 $height = $infoarray[
'height'];
539 $width = $infoarray[
'width'];
540 $widthforcrop = $width;
541 $refsizeforcrop =
'orig';
545 if (!empty($_SESSION[
'dol_screenwidth'])) {
546 $widthforcroporigin = $widthforcrop;
547 while ($widthforcrop > round($_SESSION[
'dol_screenwidth'] / 1.5)) {
549 $ratioforcrop = 2 * $ratioforcrop;
550 $widthforcrop = floor($widthforcroporigin / $ratioforcrop);
551 $refsizeforcrop =
'screenwidth';
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">';
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='.urlencode($modulepart).
'&entity='.((int)
$object->entity).
'&file='.urlencode($original_file).
'" alt="" id="cropbox" width="'.$widthforcrop.
'px"/>';
567 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.((int) $id).($num ?
'&num='.urlencode($num) :
'').
'" method="POST">';
568 print
'<input type="hidden" name="token" value="'.newToken().
'">';
569 print
'<input type="hidden" name="backtourl" value="'.$backtourl.
'">';
571 <div class="jc_coords">
572 '.$langs->trans(
"NewSizeAfterCropping").
':
573 <label>X1=<input type="number" class="flat maxwidth50" id="x" name="x" /></label>
574 <label>Y1=<input type="number" class="flat maxwidth50" id="y" name="y" /></label>
575 <label>X2=<input type="number" class="flat maxwidth50" id="x2" name="x2" /></label>
576 <label>Y2=<input type="number" class="flat maxwidth50" id="y2" name="y2" /></label>
577 <label>W=<input type="number" class="flat maxwidth50" id="w" name="w" /></label>
578 <label>H=<input type="number" class="flat maxwidth50" id="h" name="h" /></label>
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'] ??
'null').
'" />
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 -->
592 <input type="submit" id="submitcrop" name="submitcrop" class="button" value="'.
dol_escape_htmltag($langs->trans(
"Crop")).
'" />
594 <input type="submit" id="cancelcrop" name="cancel" class="button button-cancel" value="'.
dol_escape_htmltag($langs->trans(
"Cancel")).
'" />
597 $langs->load(
"other");
598 print
'<div class="opacitymedium">'.$langs->trans(
"FeatureNotAvailableOnDevicesWithoutMouse").
'</div>';
600 print
'</fieldset>'.
"\n";
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(
"Size"))).
'\');
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage bank accounts.
Class to manage members of a foundation.
Class for managing the social charges.
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 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($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
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_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.