31require
'../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
45$langs->loadLangs(array(
"products",
"other"));
48$action =
GETPOST(
'action',
'aZ09');
49$modulepart =
GETPOST(
'modulepart',
'alpha') ?
GETPOST(
'modulepart',
'alpha') :
'produit|service';
50$original_file =
GETPOST(
"file");
51$backtourl =
GETPOST(
'backtourl');
52$cancel =
GETPOST(
'cancel',
'alpha');
54$file =
GETPOST(
'file',
'alpha');
56$website =
GETPOST(
'website',
'alpha');
60if (empty($modulepart)) {
64if ($modulepart ==
'produit' || $modulepart ==
'product' || $modulepart ==
'service' || $modulepart ==
'produit|service') {
65 $result =
restrictedArea($user,
'produit|service', $id,
'product&product');
66 if ($modulepart ==
'produit|service' && (!$user->hasRight(
'produit',
'lire') && !$user->hasRight(
'service',
'lire'))) {
70} elseif ($modulepart ==
'project') {
72 if (!$user->hasRight(
'projet',
'lire')) {
76} elseif ($modulepart ==
'bom') {
78 if (!$user->hasRight(
'bom',
'read')) {
82} elseif ($modulepart ==
'member') {
83 $result =
restrictedArea($user,
'adherent', $id,
'',
'',
'fk_soc',
'rowid');
84 if (!$user->hasRight(
'adherent',
'lire')) {
88} elseif ($modulepart ==
'user') {
89 $result =
restrictedArea($user, $modulepart, $id, $modulepart, $modulepart);
90 if (!$user->hasRight(
'user',
'user',
'lire')) {
94} elseif ($modulepart ==
'tax') {
95 $result =
restrictedArea($user, $modulepart, $id,
'chargesociales',
'charges');
96 if (!$user->hasRight(
'tax',
'charges',
'lire')) {
100} elseif ($modulepart ==
'bank') {
102 if (!$user->hasRight(
'banque',
'lire')) {
106} elseif ($modulepart ==
'medias') {
107 $permtoadd = ($user->hasRight(
'mailing',
'creer') || $user->hasRight(
'website',
'write'));
112} elseif ($modulepart ==
'facture_fourn' || $modulepart ==
'facture_fournisseur') {
113 $result =
restrictedArea($user,
'fournisseur', $id,
'facture_fourn',
'facture');
114 if (!$user->hasRight(
'fournisseur',
'facture',
'lire')) {
121 if (!$user->hasRight($modulepart,
'read') && !$user->hasRight($modulepart,
'lire')) {
129if (!$accessallowed) {
136if ($modulepart ==
'produit' || $modulepart ==
'product' || $modulepart ==
'service' || $modulepart ==
'produit|service') {
137 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
152} elseif ($modulepart ==
'project') {
153 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
162} elseif ($modulepart ==
'propal') {
163 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
172} elseif ($modulepart ==
'holiday') {
173 require_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
180 $dir =
$conf->$modulepart->dir_output;
182} elseif ($modulepart ==
'member') {
183 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
190 $dir =
$conf->adherent->dir_output;
192} elseif ($modulepart ==
'societe') {
193 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
200 $dir =
$conf->$modulepart->dir_output;
202} elseif ($modulepart ==
'user') {
203 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
210 $dir =
$conf->$modulepart->dir_output;
212} elseif ($modulepart ==
'expensereport') {
213 require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
220 $dir =
$conf->expensereport->dir_output;
222} elseif ($modulepart ==
'tax') {
223 require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
230 $dir =
$conf->$modulepart->dir_output;
232} elseif ($modulepart ==
'ticket') {
233 require_once DOL_DOCUMENT_ROOT.
'/ticket/class/ticket.class.php';
240 $dir =
$conf->$modulepart->dir_output;
242} elseif ($modulepart ==
'bom') {
243 require_once DOL_DOCUMENT_ROOT.
'/bom/class/bom.class.php';
250 $dir =
$conf->$modulepart->dir_output;
252} elseif ($modulepart ==
'mrp') {
253 require_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
260 $dir =
$conf->$modulepart->dir_output;
262} elseif ($modulepart ==
'bank') {
263 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
270 $dir =
$conf->bank->dir_output;
272} elseif ($modulepart ==
'facture') {
273 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
280 $dir =
$conf->$modulepart->dir_output;
282} elseif ($modulepart ==
'facture_fourn' || $modulepart ==
'facture_fournisseur') {
283 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
290 $dir =
$conf->fournisseur->dir_output.
'/facture';
292} elseif ($modulepart ==
'medias') {
293 $dir = $dolibarr_main_data_root.
'/'.$modulepart;
295 print
'Bug: Action crop for modulepart = '.$modulepart.
' is not supported yet by photos_resize.php.';
298if (empty($backtourl)) {
301 if (in_array($modulepart, array(
'product',
'produit',
'service',
'produit|service'))) {
302 $backtourl = DOL_URL_ROOT.
"/product/document.php?id=".((int) $id).
'&file='.urlencode($file);
303 } elseif (in_array($modulepart, array(
'expensereport'))) {
304 $backtourl = DOL_URL_ROOT.
"/expensereport/document.php?id=".((int) $id).
'&file='.urlencode($file);
305 } elseif (in_array($modulepart, array(
'holiday'))) {
306 $backtourl = DOL_URL_ROOT.
"/holiday/document.php?id=".((int) $id).
'&file='.urlencode($file);
307 } elseif (in_array($modulepart, array(
'member'))) {
308 $backtourl = DOL_URL_ROOT.
"/adherents/document.php?id=".((int) $id).
'&file='.urlencode($file);
309 } elseif (in_array($modulepart, array(
'project'))) {
310 $backtourl = DOL_URL_ROOT.
"/projet/document.php?id=".((int) $id).
'&file='.urlencode($file);
311 } elseif (in_array($modulepart, array(
'propal'))) {
312 $backtourl = DOL_URL_ROOT.
"/comm/propal/document.php?id=".((int) $id).
'&file='.urlencode($file);
313 } elseif (in_array($modulepart, array(
'societe'))) {
314 $backtourl = DOL_URL_ROOT.
"/societe/document.php?id=".((int) $id).
'&file='.urlencode($file);
315 } elseif (in_array($modulepart, array(
'tax'))) {
316 $backtourl = DOL_URL_ROOT.
"/compta/sociales/document.php?id=".((int) $id).
'&file='.urlencode($file);
317 } elseif (in_array($modulepart, array(
'ticket'))) {
318 $backtourl = DOL_URL_ROOT.
"/ticket/document.php?id=".((int) $id).
'&file='.urlencode($file);
319 } elseif (in_array($modulepart, array(
'user'))) {
320 $backtourl = DOL_URL_ROOT.
"/user/document.php?id=".((int) $id).
'&file='.urlencode($file);
321 } elseif (in_array($modulepart, array(
'facture'))) {
322 $backtourl = DOL_URL_ROOT.
"/compta/facture/document.php?id=".((int) $id).
'&file='.urlencode($file);
323 } elseif (in_array($modulepart, array(
'facture_fourn',
'facture_fournisseur'))) {
324 $backtourl = DOL_URL_ROOT.
"/fourn/facture/document.php?id=".((int) $id).
'&file='.urlencode($file);
325 } elseif (in_array($modulepart, array(
'bank')) && preg_match(
'/\/statement\/([^\/]+)\//', $file, $regs)) {
327 $backtourl = DOL_URL_ROOT.
"/compta/bank/account_statement_document.php?id=".((int) $id).
'&num='.urlencode($num).
'&file='.urlencode($file);
328 } elseif (in_array($modulepart, array(
'bank'))) {
329 $backtourl = DOL_URL_ROOT.
"/compta/bank/document.php?id=".((int) $id).
'&file='.urlencode($file);
330 } elseif (in_array($modulepart, array(
'mrp'))) {
331 $backtourl = DOL_URL_ROOT.
"/mrp/mo_document.php?id=".((int) $id).
'&file='.urlencode($file);
332 } elseif (in_array($modulepart, array(
'medias'))) {
333 $section_dir = dirname($file);
334 if (!preg_match(
'/\/$/', $section_dir)) {
337 $backtourl = DOL_URL_ROOT.
'/website/index.php?action=file_manager'.($website ?
'&website='.urlencode($website) :
'').
'§ion_dir='.urlencode($section_dir);
340 $backtourl = DOL_URL_ROOT.
"/".$modulepart.
"/".$modulepart.
"_document.php?id=".((int) $id).
'&file='.urlencode($file);
351 header(
"Location: ".$backtourl);
354 dol_print_error(
null,
'Cancel on photo_resize with a not supported value of modulepart='.$modulepart);
359if ($action ==
'confirm_resize' && GETPOSTISSET(
"file") && GETPOSTISSET(
"sizex") && GETPOSTISSET(
"sizey")) {
365 $fullpath = $dir.
"/".$original_file;
369 if ($result == $fullpath) {
371 if (is_object($object)) {
376 $rel_filename = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $fullpath);
377 $rel_filename = preg_replace(
'/^[\\/]/',
'', $rel_filename);
379 include_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmfiles.class.php';
381 $result = $ecmfile->fetch(0,
'', $rel_filename);
383 $filename = basename($rel_filename);
384 $rel_dir = dirname($rel_filename);
385 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
386 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
389 $result = $ecmfile->update($user);
390 } elseif ($result == 0) {
391 $filename = basename($rel_filename);
392 $rel_dir = dirname($rel_filename);
393 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
394 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
396 $ecmfile->filepath = $rel_dir;
397 $ecmfile->filename = $filename;
399 $ecmfile->fullpath_orig = $fullpath;
400 $ecmfile->gen_or_uploaded =
'unknown';
401 $ecmfile->description =
'';
402 $ecmfile->keywords =
'';
403 $result = $ecmfile->create($user);
407 $result = $ecmfile->create($user);
411 header(
"Location: ".$backtourl);
414 dol_print_error(
null,
'confirm_resize on photo_resize without backtourl defined for modulepart='.$modulepart);
424if ($action ==
'confirm_crop') {
426 print
'Bug: Value for $dir could not be defined.';
429 $fullpath = $dir.
"/".$original_file;
433 if ($result == $fullpath) {
434 if (is_object($object)) {
439 $rel_filename = preg_replace(
'/^'.preg_quote(DOL_DATA_ROOT,
'/').
'/',
'', $fullpath);
440 $rel_filename = preg_replace(
'/^[\\/]/',
'', $rel_filename);
442 include_once DOL_DOCUMENT_ROOT.
'/ecm/class/ecmfiles.class.php';
444 $result = $ecmfile->fetch(0,
'', $rel_filename);
446 $filename = basename($rel_filename);
447 $rel_dir = dirname($rel_filename);
448 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
449 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
452 $result = $ecmfile->update($user);
453 } elseif ($result == 0) {
454 $filename = basename($rel_filename);
455 $rel_dir = dirname($rel_filename);
456 $rel_dir = preg_replace(
'/[\\/]$/',
'', $rel_dir);
457 $rel_dir = preg_replace(
'/^[\\/]/',
'', $rel_dir);
459 $ecmfile->filepath = $rel_dir;
460 $ecmfile->filename = $filename;
462 $ecmfile->fullpath_orig = $fullpath;
463 $ecmfile->gen_or_uploaded =
'unknown';
464 $ecmfile->description =
'';
465 $ecmfile->keywords =
'';
466 $result = $ecmfile->create($user);
473 header(
"Location: ".$backtourl);
476 dol_print_error(
null,
'confirm_crop on photo_resize without backtourl defined for modulepart='.$modulepart);
491$title = $langs->trans(
"ImageEditor");
492$morejs = array(
'/public/includes/jquery/plugins/jcrop/js/jquery.Jcrop.min.js',
'/core/js/lib_photosresize.js');
493$morecss = array(
'/public/includes/jquery/plugins/jcrop/css/jquery.Jcrop.css');
495llxHeader($head, $title,
'',
'', 0, 0, $morejs, $morecss);
501$height = $infoarray[
'height'];
502$width = $infoarray[
'width'];
503print
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"CurrentInformationOnImage").
': </span>';
504print
'<span class="opacitymedium">';
505print $langs->trans(
"Width").
': <strong>'.$width.
'</strong> x '.$langs->trans(
"Height").
': <strong>'.$height.
'</strong>';
515print
'<!-- Form to resize -->'.
"\n";
516print
'<form name="redim_file" action="'.$_SERVER[
"PHP_SELF"].
'?id='.((int) $id).($num ?
'&num='.urlencode($num) :
'').
'" method="POST">';
517print
'<input type="hidden" name="token" value="'.newToken().
'">';
518print
'<input type="hidden" name="backtourl" value="'.$backtourl.
'">';
520print
'<fieldset id="redim_file">';
521print
'<legend>'.$langs->trans(
"Resize").
'</legend>';
522print $langs->trans(
"ResizeDesc").
'<br>';
523print $langs->trans(
"NewLength").
': <input name="sizex" type="number" class="flat maxwidth75 right"> px <span class="opacitymedium">'.$langs->trans(
"or").
'</span> ';
524print $langs->trans(
"NewHeight").
': <input name="sizey" type="number" class="flat maxwidth75 right"> px <br>';
526print
'<input type="hidden" name="file" value="'.dol_escape_htmltag($file).
'" />';
527print
'<input type="hidden" name="action" value="confirm_resize" />';
528print
'<input type="hidden" name="product" value="'.$id.
'" />';
529print
'<input type="hidden" name="modulepart" value="'.dol_escape_htmltag($modulepart).
'" />';
530print
'<input type="hidden" name="id" value="'.$id.
'" />';
532print
'<input class="button" id="submitresize" name="sendit" value="'.dol_escape_htmltag($langs->trans(
"Resize")).
'" type="submit" />';
534print
'<input type="submit" id="cancelresize" name="cancel" class="button button-cancel" value="'.dol_escape_htmltag($langs->trans(
"Cancel")).
'" />';
535print
'</fieldset>'.
"\n";
547if (!empty(
$conf->use_javascript_ajax)) {
549 $height = $infoarray[
'height'];
550 $width = $infoarray[
'width'];
551 $widthforcrop = $width;
552 $refsizeforcrop =
'orig';
556 if (!empty($_SESSION[
'dol_screenwidth'])) {
557 $widthforcroporigin = $widthforcrop;
558 while ($widthforcrop > round($_SESSION[
'dol_screenwidth'] / 1.5)) {
560 $ratioforcrop = 2 * $ratioforcrop;
561 $widthforcrop = floor($widthforcroporigin / $ratioforcrop);
562 $refsizeforcrop =
'screenwidth';
566 print
'<!-- Form to crop -->'.
"\n";
567 print
'<fieldset id="redim_file">';
568 print
'<legend>'.$langs->trans(
"Crop").
'</legend>';
569 print $langs->trans(
"DefineNewAreaToPick").
'...<br>';
570 print
'<br><div class="center">';
572 if (empty(
$conf->dol_no_mouse_hover) && $object !==
null) {
573 print
'<div style="border: 1px solid #888888; width: '.$widthforcrop.
'px;">';
574 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"/>';
578 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.((int) $id).($num ?
'&num='.urlencode($num) :
'').
'" method="POST">';
579 print
'<input type="hidden" name="token" value="'.newToken().
'">';
580 print
'<input type="hidden" name="backtourl" value="'.$backtourl.
'">';
582 <div class="jc_coords">
583 '.$langs->trans(
"NewSizeAfterCropping").
':
584 <label>X1=<input type="number" class="flat maxwidth50" id="x" name="x" /></label>
585 <label>Y1=<input type="number" class="flat maxwidth50" id="y" name="y" /></label>
586 <label>X2=<input type="number" class="flat maxwidth50" id="x2" name="x2" /></label>
587 <label>Y2=<input type="number" class="flat maxwidth50" id="y2" name="y2" /></label>
588 <label>W=<input type="number" class="flat maxwidth50" id="w" name="w" /></label>
589 <label>H=<input type="number" class="flat maxwidth50" id="h" name="h" /></label>
592 <input type="hidden" id="file" name="file" value="'.
dol_escape_htmltag($original_file).
'" />
593 <input type="hidden" id="action" name="action" value="confirm_crop" />
594 <input type="hidden" id="product" name="product" value="'.
dol_escape_htmltag((
string) $id).
'" />
595 <input type="hidden" id="dol_screenwidth" name="dol_screenwidth" value="'.($_SESSION[
'dol_screenwidth'] ??
'null').
'" />
596 <input type="hidden" id="refsizeforcrop" name="refsizeforcrop" value="'.$refsizeforcrop.
'" />
597 <input type="hidden" id="ratioforcrop" name="ratioforcrop" value="'.$ratioforcrop.
'" /><!-- value in field used by js/lib/lib_photoresize.js -->
598 <input type="hidden" id="imagewidth" name="imagewidth" value="'.$width.
'" /><!-- value in field used by js/lib/lib_photoresize.js -->
599 <input type="hidden" id="imageheight" name="imageheight" value="'.$height.
'" /><!-- value in field used by js/lib/lib_photoresize.js -->
603 <input type="submit" id="submitcrop" name="submitcrop" class="button" value="'.
dol_escape_htmltag($langs->trans(
"Crop")).
'" />
605 <input type="submit" id="cancelcrop" name="cancel" class="button button-cancel" value="'.
dol_escape_htmltag($langs->trans(
"Cancel")).
'" />
608 $langs->load(
"other");
609 print
'<div class="opacitymedium">'.$langs->trans(
"FeatureNotAvailableOnDevicesWithoutMouse").
'</div>';
611 print
'</fieldset>'.
"\n";
616print
'<script nonce="'.getNonce().
'" type="text/javascript">
617jQuery(document).ready(function() {
618 $("#submitcrop").click(function(e) {
619 console.log("We click on submitcrop");
620 var idClicked = e.target.id;
621 if (parseInt(jQuery(\'#w\').val())) return true;
622 alert(\''.
dol_escape_js($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Size"))).
'\');
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
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.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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.