diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index 9f56fe507bb..6974daabc00 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -5304,7 +5304,7 @@ class Form
$entity = (! empty($object->entity) ? $object->entity : $conf->entity);
$id = (! empty($object->id) ? $object->id : $object->rowid);
- $ret='';$dir='';$file='';$altfile='';$email='';
+ $ret='';$dir='';$file='';$originalfile='';$altfile='';$email='';
if ($modulepart=='societe')
{
@@ -5313,9 +5313,11 @@ class Form
$smallfile=preg_replace('/(\.png|\.gif|\.jpg|\.jpeg|\.bmp)/i','_small\\1',$smallfile);
if (! empty($object->logo))
{
+ // TODO Introduce get_exdir
if ((string) $imagesize == 'mini') $file=$id.'/logos/thumbs/'.getImageFileNameForSize($object->logo, '_mini');
else if ((string) $imagesize == 'small') $file=$id.'/logos/thumbs/'.getImageFileNameForSize($object->logo, '_small');
else $file=$id.'/logos/thumbs/'.$smallfile;
+ $originalfile=$id.'/logos/thumbs/'.$smallfile;
}
}
else if ($modulepart=='contact')
@@ -5323,9 +5325,11 @@ class Form
$dir=$conf->societe->multidir_output[$entity].'/contact';
if (! empty($object->photo))
{
+ // TODO Introduce get_exdir
if ((string) $imagesize == 'mini') $file=$id.'/photos/thumbs/'.getImageFileNameForSize($object->photo, '_mini');
else if ((string) $imagesize == 'small') $file=$id.'/photos/thumbs/'.getImageFileNameForSize($object->photo, '_small');
else $file=$id.'/photos/'.$object->photo;
+ $originalfile=$id.'/photos/'.$object->photo;
}
}
else if ($modulepart=='userphoto')
@@ -5336,6 +5340,7 @@ class Form
if ((string) $imagesize == 'mini') $file=get_exdir($id, 2, 0, 0, $object, 'user').getImageFileNameForSize($object->photo, '_mini');
else if ((string) $imagesize == 'small') $file=get_exdir($id, 2, 0, 0, $object, 'user').getImageFileNameForSize($object->photo, '_small');
else $file=get_exdir($id, 2, 0, 0, $object, 'user').$object->photo;
+ $originalfile=get_exdir($id, 2, 0, 0, $object, 'user').$object->photo;
}
if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg"; // For backward compatibility
$email=$object->email;
@@ -5348,6 +5353,7 @@ class Form
if ((string) $imagesize == 'mini') $file=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.getImageFileNameForSize($object->photo, '_mini');
else if ((string) $imagesize == 'small') $file=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.getImageFileNameForSize($object->photo, '_small');
else $file=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.$object->photo;
+ $originalfile=get_exdir($id, 2, 0, 0, $object, 'member').'photos/'.$object->photo;
}
if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg"; // For backward compatibility
$email=$object->email;
@@ -5360,6 +5366,7 @@ class Form
if ((string) $imagesize == 'mini') $file=get_exdir($id, 2, 0, 0, $object, $modulepart).'photos/'.getImageFileNameForSize($object->photo, '_mini');
else if ((string) $imagesize == 'small') $file=get_exdir($id, 2, 0, 0, $object, $modulepart).'photos/'.getImageFileNameForSize($object->photo, '_small');
else $file=get_exdir($id, 2, 0, 0, $object, $modulepart).'photos/'.$object->photo;
+ $originalfile=get_exdir($id, 2, 0, 0, $object, $modulepart).'photos/'.$object->photo;
}
if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg"; // For backward compatibility
$email=$object->email;
@@ -5369,13 +5376,13 @@ class Form
{
if ($file && file_exists($dir."/".$file))
{
- if ($addlinktofullsize) $ret.='';
+ if ($addlinktofullsize) $ret.='';
$ret.='
';
if ($addlinktofullsize) $ret.='';
}
else if ($altfile && file_exists($dir."/".$altfile))
{
- if ($addlinktofullsize) $ret.='';
+ if ($addlinktofullsize) $ret.='';
$ret.='
';
if ($addlinktofullsize) $ret.='';
}
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 4a94863e8c4..5685a2fbb92 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -892,7 +892,7 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r
$showimage=$object->is_photo_available($conf->product->multidir_output[$object->entity]);
$maxvisiblephotos=(isset($conf->global->PRODUCT_MAX_VISIBLE_PHOTO)?$conf->global->PRODUCT_MAX_VISIBLE_PHOTO:5);
if ($conf->browser->phone) $maxvisiblephotos=1;
- if ($showimage) $morehtmlleft.='
'.$object->show_photos($conf->product->multidir_output[$object->entity],1,-$maxvisiblephotos,0,0,0,$width,0).'
';
+ if ($showimage) $morehtmlleft.=''.$object->show_photos($conf->product->multidir_output[$object->entity],'small',-$maxvisiblephotos,0,0,0,$width,0).'
';
else
{
$nophoto='/public/theme/common/nophoto.png';
@@ -901,7 +901,7 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r
}
else
{
- if ($showimage) $morehtmlleft.=''.$form->showphoto($modulepart,$object,0,0,0,'photoref','',1,0,$maxvisiblephotos).'
';
+ if ($showimage) $morehtmlleft.=''.$form->showphoto($modulepart,$object,0,0,0,'photoref','small',1,0,$maxvisiblephotos).'
';
}
if ($showbarcode) $morehtmlleft.=''.$form->showbarcode($object).'
';
if ($object->element == 'societe' && ! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) {
@@ -5325,7 +5325,7 @@ function natural_search($fields, $value, $mode=0, $nofirstand=0)
*
* @param string $file Original filename (full or relative path)
* @param string $extName Extension to differenciate thumb file name ('', '_small', '_mini')
- * @param string $extImgTarget Force image extension for thumbs. Use '' to keep same extension than original image.
+ * @param string $extImgTarget Force image extension for thumbs. Use '' to keep same extension than original image. Use '.png' for generated thumb files.
* @return string New file name (full or relative path, including the thumbs/)
*/
function getImageFileNameForSize($file, $extName, $extImgTarget='')
diff --git a/htdocs/install/mysql/migration/3.8.0-3.9.0.sql b/htdocs/install/mysql/migration/3.8.0-3.9.0.sql
index 5adc839a7d6..74a6d89ab23 100755
--- a/htdocs/install/mysql/migration/3.8.0-3.9.0.sql
+++ b/htdocs/install/mysql/migration/3.8.0-3.9.0.sql
@@ -15,6 +15,7 @@
-- To make pk to be auto increment (postgres): VPGSQL8.2 NOT POSSIBLE. MUST DELETE/CREATE TABLE
-- To set a field as NULL: VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL;
-- To set a field as default NULL: VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL;
+-- Note: fields with type BLOB/TEXT can't have default value.
-- -- VPGSQL8.2 DELETE FROM llx_usergroup_user WHERE fk_user NOT IN (SELECT rowid from llx_user);
-- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
@@ -54,6 +55,11 @@ ALTER TABLE llx_societe_commerciaux ADD COLUMN import_key varchar(14) AFTER fk_u
ALTER TABLE llx_categorie ADD COLUMN color varchar(8);
+ALTER TABLE llx_cronjob ADD COLUMN maxrun integer NOT NULL DEFAULT 0;
+ALTER TABLE llx_cronjob ADD COLUMN autodelete integer DEFAULT 0;
+ALTER TABLE llx_cronjob ADD COLUMN fk_mailing integer DEFAULT NULL;
+
+
create table llx_overwrite_trans
(
rowid integer AUTO_INCREMENT PRIMARY KEY,
@@ -72,7 +78,7 @@ ALTER TABLE llx_paiement ADD COLUMN ref varchar(30) NOT NULL DEFAULT '' AFTER ro
ALTER TABLE llx_socpeople ADD COLUMN photo varchar(255) AFTER skype;
ALTER TABLE llx_user_param MODIFY COLUMN param varchar(255) NOT NULL DEFAULT '';
-ALTER TABLE llx_user_param MODIFY COLUMN value text NOT NULL DEFAULT '';
+ALTER TABLE llx_user_param MODIFY COLUMN value text NOT NULL;
ALTER TABLE llx_expedition ADD COLUMN import_key varchar(14);
ALTER TABLE llx_expedition ADD COLUMN extraparams varchar(255);
@@ -438,4 +444,4 @@ INSERT INTO llx_c_departements ( code_departement, fk_region, cheflieu, tncc, nc
INSERT INTO llx_c_departements ( code_departement, fk_region, cheflieu, tncc, ncc, nom, active) VALUES ('109', 5209, '', 0, '', 'Madre de Dios', 1);
INSERT INTO llx_c_departements ( code_departement, fk_region, cheflieu, tncc, ncc, nom, active) VALUES ('110', 5209, '', 0, '', 'Manuripi', 1);
INSERT INTO llx_c_departements ( code_departement, fk_region, cheflieu, tncc, ncc, nom, active) VALUES ('111', 5209, '', 0, '', 'Nicolás Suárez', 1);
-INSERT INTO llx_c_departements ( code_departement, fk_region, cheflieu, tncc, ncc, nom, active) VALUES ('112', 5209, '', 0, '', 'General Federico Román', 1);
\ No newline at end of file
+INSERT INTO llx_c_departements ( code_departement, fk_region, cheflieu, tncc, ncc, nom, active) VALUES ('112', 5209, '', 0, '', 'General Federico Román', 1);
diff --git a/htdocs/install/mysql/tables/llx_cronjob.sql b/htdocs/install/mysql/tables/llx_cronjob.sql
index 5580b5ab830..96784189b05 100644
--- a/htdocs/install/mysql/tables/llx_cronjob.sql
+++ b/htdocs/install/mysql/tables/llx_cronjob.sql
@@ -26,27 +26,32 @@ CREATE TABLE llx_cronjob
jobtype varchar(10) NOT NULL,
label text NOT NULL,
command varchar(255),
- classesname varchar(255),
+ classesname varchar(255),
objectname varchar(255),
methodename varchar(255),
params text,
md5params varchar(32),
- module_name varchar(255),
+ module_name varchar(255),
priority integer DEFAULT 0,
- datelastrun datetime, -- date last run and when should be next
- datenextrun datetime, -- job will be run if current date higher that this date
+ datelastrun datetime, -- date last run and when should be next
+ datenextrun datetime, -- job will be run if current date higher that this date
datestart datetime, -- before this date no jobs will be run
dateend datetime, -- after this date, no more jobs will be run
- datelastresult datetime,
- lastresult text,
- lastoutput text,
- unitfrequency integer NOT NULL DEFAULT 0,
+ datelastresult datetime,
+ lastresult text,
+ lastoutput text,
+ unitfrequency integer NOT NULL DEFAULT 0,
frequency integer NOT NULL DEFAULT 0,
- nbrun integer,
+ maxrun integer NOT NULL DEFAULT 0, -- set this to 1 for a job queued for on run only
+ nbrun integer, -- nb of run complete (failed or not)
+ autodelete integer DEFAULT 0, -- Job can be delete once finished
status integer NOT NULL DEFAULT 1,
- fk_user_author integer DEFAULT NULL,
- fk_user_mod integer DEFAULT NULL,
- note text,
+ fk_user_author integer DEFAULT NULL,
+ fk_user_mod integer DEFAULT NULL,
+ fk_mailing integer DEFAULT NULL, -- id of emailing if job was queued to send mass emailing
+ note text,
libname varchar(255),
entity integer DEFAULT 0
)ENGINE=innodb;
+
+
diff --git a/htdocs/langs/en_US/sendings.lang b/htdocs/langs/en_US/sendings.lang
index 53a4e4dae7a..29567c24b37 100644
--- a/htdocs/langs/en_US/sendings.lang
+++ b/htdocs/langs/en_US/sendings.lang
@@ -69,7 +69,7 @@ ProductQtyInCustomersOrdersRunning=Product quantity into opened customers orders
ProductQtyInSuppliersOrdersRunning=Product quantity into opened suppliers orders
ProductQtyInShipmentAlreadySent=Product quantity from opened customer order already sent
ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from opened supplier order already received
-NoProductToShipFoundIntoStock=No product to ship found into warehouse %s. Correct sotck or go back to choose another warehouse.
+NoProductToShipFoundIntoStock=No product to ship found into warehouse %s. Correct stock or go back to choose another warehouse.
# Sending methods
SendingMethodCATCH=Catch by customer
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index 30c6d82d73f..258e79be2c0 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -3503,13 +3503,13 @@ class Product extends CommonObject
* TODO Move this into html.formproduct.class.php
*
* @param string $sdir Directory to scan
- * @param int $size 0=original size, 1 use thumbnail if possible
+ * @param int $size 0=original size, 1='small' use thumbnail if possible
* @param int $nbmax Nombre maximum de photos (0=pas de max)
* @param int $nbbyrow Number of image per line or -1 to use div. Used only if size=1.
* @param int $showfilename 1=Show filename
* @param int $showaction 1=Show icon with action links (resize, delete)
- * @param int $maxHeight Max height of image when size=1
- * @param int $maxWidth Max width of image when size=1
+ * @param int $maxHeight Max height of original image when size='small' (so we can use original even if small requested). If 0, always use 'small' thumb image.
+ * @param int $maxWidth Max width of original image when size='small'
* @param int $nolink Do not add a href link to view enlarged imaged into a new tab
* @return string Html code to show photo. Number of photos shown is saved in this->nbphoto
*/
@@ -3557,14 +3557,12 @@ class Product extends CommonObject
$photo = $file;
$viewfilename = $file;
- if ($size == 1) { // Format vignette
- // On determine nom du fichier vignette
- $photo_vignette='';
- if (preg_match('/(\.jpg|\.bmp|\.gif|\.png|\.tiff)$/i', $photo, $regs)) {
- $photo_vignette=preg_replace('/'.$regs[0].'/i', '', $photo)."_small".$regs[0];
- if (! dol_is_file($dirthumb.$photo_vignette)) $photo_vignette='';
- }
+ if ($size == 1 || $size == 'small') { // Format vignette
+ // Find name of thumb file
+ $photo_vignette=basename(getImageFileNameForSize($dir.$file, '_small', '.png'));
+ if (! dol_is_file($dirthumb.$photo_vignette)) $photo_vignette='';
+
// Get filesize of original file
$imgarray=dol_getImageSize($dir.$photo);
@@ -3584,7 +3582,8 @@ class Product extends CommonObject
// Si fichier vignette disponible et image source trop grande, on utilise la vignette, sinon on utilise photo origine
$alt=$langs->transnoentitiesnoconv('File').': '.$pdir.$photo;
$alt.=' - '.$langs->transnoentitiesnoconv('Size').': '.$imgarray['width'].'x'.$imgarray['height'];
- if ($photo_vignette && $imgarray['height'] > $maxHeight)
+
+ if (empty($maxHeight) || $photo_vignette && $imgarray['height'] > $maxHeight)
{
$return.= '';
$return.= '
dol_use_jmobile?'max-height':'height').'="'.$maxHeight.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=product&entity='.$this->entity.'&file='.urlencode($pdirthumb.$photo_vignette).'" title="'.dol_escape_htmltag($alt).'">';
@@ -3626,7 +3625,7 @@ class Product extends CommonObject
else if ($nbbyrow < 0) $return.='';
}
- if ($size == 0) { // Format origine
+ if (empty($size)) { // Format origine
$return.= '
';
if ($showfilename) $return.= '
'.$viewfilename;
@@ -3650,7 +3649,7 @@ class Product extends CommonObject
}
}
- if ($size==1)
+ if ($size==1 || $size='small')
{
if ($nbbyrow > 0)
{
diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php
index c744a71c189..0ebc5c54799 100644
--- a/htdocs/theme/eldy/style.css.php
+++ b/htdocs/theme/eldy/style.css.php
@@ -215,7 +215,7 @@ print '*/'."\n";
if (! empty($conf->dol_optimize_smallscreen)) $fontsize=11;
-//$nb=$menumanager->showmenu('topnb');
+$nbtopmenuentries=$menumanager->showmenu('topnb');
//print $nb;
?>
@@ -3871,6 +3871,17 @@ border-top-right-radius: 6px;
padding: 0 4px 0 4px;
}
@media only screen and (max-width: 767px)
+{
+ .imgopensurveywizard { width:95%; height: auto; }
+
+ #tooltip {
+ position: absolute;
+ width: px;
+ }
+
+}
+
+@media only screen and (max-width: px)
{
.mainmenuaspan {
display: none;
@@ -3888,13 +3899,6 @@ border-top-right-radius: 6px;
div.tmenuleft {
display: none;
}
-
- .imgopensurveywizard { width:95%; height: auto; }
-
- #tooltip {
- position: absolute;
- width: px;
- }
}
@media only screen and (max-width: 570px)
{
@@ -3910,7 +3914,8 @@ border-top-right-radius: 6px;
}
div.login_block {
- top: 9px;
+ top: 4px;
+ max-width: 82px;
}
div.mainmenu {
diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php
index 7a57713337f..d1b2a357b70 100644
--- a/htdocs/theme/md/style.css.php
+++ b/htdocs/theme/md/style.css.php
@@ -32,7 +32,7 @@ if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1');
if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK',1);
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL',1);
if (! defined('NOLOGIN')) define('NOLOGIN',1); // File must be accessed by logon page so without login
-if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1);
+//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1);
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML',1);
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
@@ -209,6 +209,9 @@ print 'dol_screenheight='.$_SESSION['dol_screenheight']."\n";
print '*/'."\n";
if (! empty($conf->dol_optimize_smallscreen)) $fontsize=11;
+
+$nbtopmenuentries=$menumanager->showmenu('topnb');
+
?>
/* ============================================================================== */
@@ -3711,6 +3714,16 @@ border-top-right-radius: 6px;
padding: 0 4px 0 4px;
}
@media only screen and (max-width: 767px)
+{
+ .imgopensurveywizard { width:95%; height: auto; }
+
+ #tooltip {
+ position: absolute;
+ width: px;
+ }
+}
+
+@media only screen and (max-width: px)
{
.mainmenuaspan {
display: none;
@@ -3728,13 +3741,6 @@ border-top-right-radius: 6px;
div.tmenuleft {
display: none;
}
-
- .imgopensurveywizard { width:95%; height: auto; }
-
- #tooltip {
- position: absolute;
- width: px;
- }
}
@media only screen and (max-width: 570px)
{