From 75624376a525a4e819c62e2adb42da9726fd7bc3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 9 Jun 2017 00:27:19 +0200 Subject: [PATCH 1/2] FIX Warnings --- htdocs/core/lib/files.lib.php | 10 +++++----- htdocs/core/lib/images.lib.php | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 3fa17aa8bcf..06df150d983 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -72,11 +72,11 @@ function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefil $reshook = 0; $file_list = array(); - $hookmanager->resArray=array(); - - if (! $nohook) + if (is_object($hookmanager) && ! $nohook) { - $hookmanager->initHooks(array('fileslib')); + $hookmanager->resArray=array(); + + $hookmanager->initHooks(array('fileslib')); $parameters=array( 'path' => $newpath, @@ -197,7 +197,7 @@ function dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefil } } - $file_list = array_merge($file_list, $hookmanager->resArray); + if (is_object($hookmanager) && is_array($hookmanager->resArray)) $file_list = array_merge($file_list, $hookmanager->resArray); return $file_list; } diff --git a/htdocs/core/lib/images.lib.php b/htdocs/core/lib/images.lib.php index acfa917720e..d9d7d0d9730 100644 --- a/htdocs/core/lib/images.lib.php +++ b/htdocs/core/lib/images.lib.php @@ -38,7 +38,7 @@ $quality = 80; function image_format_supported($file) { $regeximgext='\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.xpm|\.xbm'; // See also into product.class.php - + // Case filename is not a format image if (! preg_match('/('.$regeximgext.')$/i',$file,$reg)) return -1; @@ -90,7 +90,7 @@ function dol_getImageSize($file, $url = false) $ret['width']=$infoImg[0]; // Largeur de l'image $ret['height']=$infoImg[1]; // Hauteur de l'image } - + return $ret; } @@ -438,6 +438,7 @@ function vignette($file, $maxWidth = 160, $maxHeight = 120, $extName='_small', $ dol_mkdir($dirthumb); // Initialisation des variables selon l'extension de l'image + $img=null; switch($infoImg[2]) { case IMAGETYPE_GIF: // 1 From 811b0d9af44158f0aac7aaeacfa0c7183c425d4f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 9 Jun 2017 00:27:44 +0200 Subject: [PATCH 2/2] Fix missing thumbs images for products --- htdocs/install/repair.php | 121 ++++++++++++++++++++++++++++---------- 1 file changed, 90 insertions(+), 31 deletions(-) diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index a70553cbfb0..bab7b5e5da4 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -26,6 +26,7 @@ include_once 'inc.php'; if (file_exists($conffile)) include_once $conffile; require_once $dolibarr_main_document_root.'/core/lib/admin.lib.php'; +include_once $dolibarr_main_document_root.'/core/lib/images.lib.php'; require_once $dolibarr_main_document_root.'/core/class/extrafields.class.php'; require_once 'lib/repair.lib.php'; @@ -72,11 +73,12 @@ $actiondone=1; print '

'.$langs->trans("Repair").'

'; -print 'Option restore_thirdparties_logos is '.(GETPOST('restore_thirdparties_logos')?GETPOST('restore_thirdparties_logos'):'0').'
'."\n"; -print 'Option clean_linked_elements is '.(GETPOST('clean_linked_elements')?GETPOST('clean_linked_elements'):'0').'
'."\n"; -print 'Option clean_orphelin_dir (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_orphelin_dir')?GETPOST('clean_orphelin_dir'):'0').'
'."\n"; -print 'Option clean_product_stock_batch (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_product_stock_batch')?GETPOST('clean_product_stock_batch'):'0').'
'."\n"; -print 'Option set_empty_time_spent_amount (0 or \'test\' or \'confirmed\') is '.(GETPOST('set_empty_time_spent_amount')?GETPOST('set_empty_time_spent_amount'):'0').'
'."\n"; +print 'Option restore_thirdparties_logos is '.(GETPOST('restore_thirdparties_logos','alpha')?GETPOST('restore_thirdparties_logos','alpha'):'0').'
'."\n"; +print 'Option clean_linked_elements is '.(GETPOST('clean_linked_elements','alpha')?GETPOST('clean_linked_elements','alpha'):'0').'
'."\n"; +print 'Option clean_orphelin_dir (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_orphelin_dir','alpha')?GETPOST('clean_orphelin_dir','alpha'):'0').'
'."\n"; +print 'Option clean_product_stock_batch (0 or \'test\' or \'confirmed\') is '.(GETPOST('clean_product_stock_batch','alpha')?GETPOST('clean_product_stock_batch','alpha'):'0').'
'."\n"; +print 'Option set_empty_time_spent_amount (0 or \'test\' or \'confirmed\') is '.(GETPOST('set_empty_time_spent_amount','alpha')?GETPOST('set_empty_time_spent_amount','alpha'):'0').'
'."\n"; +print 'Option rebuild_product_thumbs (0 or \'test\' or \'confirmed\') is '.(GETPOST('rebuild_product_thumbs','alpha')?GETPOST('rebuild_product_thumbs','alpha'):'0').'
'."\n"; print '
'; print ''; @@ -253,7 +255,7 @@ if ($ok) { print 'Found field '.$code.' declared into '.MAIN_DB_PREFIX.'extrafields table but not found into desc of table '.$tableextra." -> "; $type=$extrafields->attribute_type[$code]; $length=$extrafields->attribute_size[$code]; $attribute=''; $default=''; $extra=''; $null='null'; - + if ($type=='boolean') { $typedb='int'; $lengthdb='1'; @@ -276,7 +278,7 @@ if ($ok) $typedb=$type; $lengthdb=$length; } - + $field_desc=array( 'type'=>$typedb, 'value'=>$lengthdb, @@ -318,13 +320,13 @@ if ($ok) -// clean_linked_elements: Check and clean linked elements +// restore_thirdparties_logos: Move logos to correct new directory. if ($ok && GETPOST('restore_thirdparties_logos')) { //$exts=array('gif','png','jpg'); $ext=''; - + print ''; +} + // clean_linked_elements: Check and clean linked elements -if ($ok && GETPOST('clean_linked_elements')) +if ($ok && GETPOST('clean_linked_elements','alpha')) { print ''; // propal => order @@ -418,7 +478,7 @@ if ($ok && GETPOST('clean_linked_elements')) // clean_orphelin_dir: Run purge of directory -if ($ok && GETPOST('clean_orphelin_dir')) +if ($ok && GETPOST('clean_orphelin_dir','alpha')) { $conf->setValues($db); @@ -530,7 +590,7 @@ if ($ok && GETPOST('clean_orphelin_dir')) // Clean of orphelins directories are done into repair.php print ''; - + $sql ="SELECT p.rowid, p.ref, p.tobatch, ps.rowid as psrowid, ps.fk_entrepot, ps.reel, SUM(pb.qty) as reelbatch"; $sql.=" FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."product_stock as ps LEFT JOIN ".MAIN_DB_PREFIX."product_batch as pb ON ps.rowid = pb.fk_product_stock"; $sql.=" WHERE p.rowid = ps.fk_product"; @@ -562,7 +622,7 @@ if ($ok && GETPOST('clean_product_stock_batch')) if ($resql) { $num = $db->num_rows($resql); - + if ($num) { $i = 0; @@ -570,7 +630,7 @@ if ($ok && GETPOST('clean_product_stock_batch')) { $obj=$db->fetch_object($resql); print ''; - + $i++; } } @@ -646,7 +706,7 @@ if ($ok && GETPOST('clean_product_stock_batch')) // clean_linked_elements: Check and clean linked elements -if ($ok && GETPOST('clean_product_stock_negative_if_batch')) +if ($ok && GETPOST('clean_product_stock_negative_if_batch','alpha')) { print ''; @@ -675,7 +735,7 @@ if ($ok && GETPOST('clean_product_stock_negative_if_batch')) } // clean_linked_elements: Check and clean linked elements -if ($ok && GETPOST('set_empty_time_spent_amount')) +if ($ok && GETPOST('set_empty_time_spent_amount','alpha')) { print ''; @@ -684,7 +744,7 @@ if ($ok && GETPOST('set_empty_time_spent_amount')) $sql.=" WHERE ptt.fk_user = u.rowid"; $sql.=" AND ptt.thm IS NULL and u.thm > 0"; $sql.=" GROUP BY u.rowid, u.login, u.thm"; - + $resql = $db->query($sql); if ($resql) { @@ -711,14 +771,14 @@ if ($ok && GETPOST('set_empty_time_spent_amount')) dol_print_error($db); } } - + if (!$error) $db->commit(); else $db->rollback(); print''; if ($error) break; - + $i++; } } @@ -732,7 +792,6 @@ if ($ok && GETPOST('set_empty_time_spent_amount')) dol_print_error($db); } - }

*** Restore thirdparties logo
'; //foreach($exts as $ext) //{ @@ -393,8 +395,66 @@ if ($ok && GETPOST('restore_thirdparties_logos')) } +// rebuild_product_thumbs: Rebuild thumbs for product files +if ($ok && GETPOST('rebuild_product_thumbs','alpha')) +{ + $ext=''; + global $maxwidthsmall, $maxheightsmall, $maxwidthmini, $maxheightmini; + + print '

*** Rebuild product thumbs
'; + + $sql="SELECT s.rowid, s.ref FROM ".MAIN_DB_PREFIX."product as s ORDER BY s.ref"; + $resql=$db->query($sql); + if ($resql) + { + $num=$db->num_rows($resql); + $i=0; + + while($i < $num) + { + $obj=$db->fetch_object($resql); + + if (! empty($obj->ref)) + { + $files=dol_dir_list($dolibarr_main_data_root.'/produit/'.$obj->ref, 'files', 0); + foreach($files as $file) + { + // Generate thumbs. + if (image_format_supported($file['fullname']) == 1) + { + $imgThumbSmall='notbuild'; + if (GETPOST('rebuild_product_thumbs','alpha') == 'confirmed') + { + // Used on logon for example + $imgThumbSmall = vignette($file['fullname'], $maxwidthsmall, $maxheightsmall, '_small', 50, "thumbs"); + } + print 'Check product '.$obj->rowid.", file ".$file['fullname']." -> ".$imgThumbSmall." maxwidthsmall=".$maxwidthsmall." maxheightsmall=".$maxheightsmall."
\n"; + $imgThumbMini='notbuild'; + if (GETPOST('rebuild_product_thumbs','alpha') == 'confirmed') + { + // Create mini thumbs for image (Ratio is near 16/9) + // Used on menu or for setup page for example + $imgThumbMini = vignette($file['fullname'], $maxwidthmini, $maxheightmini, '_mini', 50, "thumbs"); + } + print 'Check product '.$obj->rowid.", file ".$file['fullname']." -> ".$imgThumbMini." maxwidthmini=".$maxwidthmini." maxheightmini=".$maxheightmini."
\n"; + } + } + } + + $i++; + } + } + else + { + $ok=0; + dol_print_error($db); + } + + print '

*** Check table of linked elements and delete orphelins links
'; print 'Delete orphelins file '.$file['fullname'].'
'; - if (GETPOST('clean_orphelin_dir') == 'confirmed') + if (GETPOST('clean_orphelin_dir','alpha') == 'confirmed') { dol_delete_file($file['fullname'],1,1,1); dol_delete_dir(dirname($file['fullname']),1); @@ -545,12 +605,12 @@ if ($ok && GETPOST('clean_orphelin_dir')) } // clean_linked_elements: Check and clean linked elements -if ($ok && GETPOST('clean_product_stock_batch')) +if ($ok && GETPOST('clean_product_stock_batch','alpha')) { - $methodtofix=GETPOST('methodtofix')?GETPOST('methodtofix'):'updatestock'; - + $methodtofix=GETPOST('methodtofix','alpha')?GETPOST('methodtofix','alpha'):'updatestock'; + print '

*** Clean table product_batch, methodtofix='.$methodtofix.' (possible values: updatestock or updatebatch)
Product '.$obj->rowid.'-'.$obj->ref.' in warehose '.$obj->fk_entrepot.' -> '.$obj->psrowid.': '.$obj->reel.' (product_stock.reel) != '.($obj->reelbatch?$obj->reelbatch:'0').' (sum product_batch)'; - + // Fix if ($obj->reel != $obj->reelbatch) { @@ -599,9 +659,9 @@ if ($ok && GETPOST('clean_product_stock_batch')) if (GETPOST('clean_product_stock_batch') == 'confirmed') { $error=0; - + $db->begin(); - + $sql2 ="UPDATE ".MAIN_DB_PREFIX."product_stock"; $sql2.=" SET reel = ".($obj->reelbatch?$obj->reelbatch:'0')." WHERE rowid = ".$obj->psrowid; $resql2=$db->query($sql2); @@ -610,26 +670,26 @@ if ($ok && GETPOST('clean_product_stock_batch')) // We update product_stock, so we must field stock into product too. $sql3='UPDATE llx_product p SET p.stock= (SELECT SUM(ps.reel) FROM llx_product_stock ps WHERE ps.fk_product = p.rowid)'; $resql3=$db->query($sql3); - if (! $resql3) + if (! $resql3) { $error++; dol_print_error($db); } } - else + else { $error++; dol_print_error($db); } - + if (!$error) $db->commit(); else $db->rollback(); } } } - + print'

Clean table product_batch, methodtofix='.$methodtofix.' (possible values: updatestock or updatebatch)

*** Set value of time spent without amount