FIX resolve conflicts
This commit is contained in:
commit
8a910e6cef
@ -52,7 +52,7 @@ Ace 1.4.14 BSD Yes
|
||||
ChartJS 3.7.1 MIT License Yes JS library for graph
|
||||
CKEditor 4.18 LGPL-2.1+ Yes Editor WYSIWYG
|
||||
jQuery 3.6.0 MIT License Yes JS library
|
||||
jQuery UI 1.13.1 GPL and MIT License Yes JS library plugin UI
|
||||
jQuery UI 1.13.2 GPL and MIT License Yes JS library plugin UI
|
||||
jQuery select2 4.0.13 GPL and Apache License Yes JS library plugin for sexier multiselect. Warning: 4.0.6+ create troubles without patching css
|
||||
jQuery blockUI 2.70.0 GPL and MIT License Yes JS library plugin blockUI (to use ajax popups)
|
||||
jQuery Colorpicker 1.1 MIT License Yes JS library for color picker for a defined list of colors
|
||||
|
||||
@ -49,7 +49,7 @@ if (empty($user->rights->accounting->mouvements->lire)) {
|
||||
if (empty($conf->comptabilite->enabled) && empty($conf->accounting->enabled) && empty($conf->asset->enabled) && empty($conf->intracommreport->enabled)) {
|
||||
accessforbidden();
|
||||
}
|
||||
if (empty($user->rights->compta->resultat->lire) && empty($user->rights->accounting->comptarapport->lire) && empty($user->rights->accounting->mouvements->lire) && empty($user->rights->asset->read) && empty($user->rights->intracommreport->read)) {
|
||||
if (empty($user->hasRight('compta', 'resultat', 'lire')) && empty($user->hasRight('accounting', 'comptarapport', 'lire')) && empty($user->hasRight('accounting', 'mouvements', 'lire')) && empty($user->hasRight('asset', 'read')) && empty($user->hasRight('intracommreport', 'read'))) {
|
||||
accessforbidden();
|
||||
}
|
||||
|
||||
|
||||
@ -40,6 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||
|
||||
@ -311,8 +312,8 @@ if (empty($reshook)) {
|
||||
//$object->twitter = trim(GETPOST("twitter", 'alpha'));
|
||||
//$object->facebook = trim(GETPOST("facebook", 'alpha'));
|
||||
//$object->linkedin = trim(GETPOST("linkedin", 'alpha'));
|
||||
$object->birth = $birthdate;
|
||||
|
||||
$object->birth = $birthdate;
|
||||
$object->default_lang = GETPOST('default_lang', 'alpha');
|
||||
$object->typeid = GETPOST("typeid", 'int');
|
||||
//$object->note = trim(GETPOST("comment","alpha"));
|
||||
$object->morphy = GETPOST("morphy", 'alpha');
|
||||
@ -457,6 +458,7 @@ if (empty($reshook)) {
|
||||
|
||||
$userid = GETPOST("userid", 'int');
|
||||
$socid = GETPOST("socid", 'int');
|
||||
$default_lang = GETPOST('default_lang', 'alpha');
|
||||
|
||||
$object->civility_id = $civility_id;
|
||||
$object->firstname = $firstname;
|
||||
@ -498,7 +500,7 @@ if (empty($reshook)) {
|
||||
$object->user_id = $userid;
|
||||
$object->socid = $socid;
|
||||
$object->public = $public;
|
||||
|
||||
$object->default_lang = $default_lang;
|
||||
// Fill array 'array_options' with data from add form
|
||||
$ret = $extrafields->setOptionalsFromPost(null, $object);
|
||||
if ($ret < 0) {
|
||||
@ -899,6 +901,7 @@ if (empty($reshook)) {
|
||||
|
||||
$form = new Form($db);
|
||||
$formfile = new FormFile($db);
|
||||
$formadmin = new FormAdmin($db);
|
||||
$formcompany = new FormCompany($db);
|
||||
|
||||
$title = $langs->trans("Member")." - ".$langs->trans("Card");
|
||||
@ -1363,6 +1366,14 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
print $form->selectDate(($object->birth ? $object->birth : -1), 'birth', '', '', 1, 'formsoc');
|
||||
print "</td></tr>\n";
|
||||
|
||||
// Default language
|
||||
if (!empty($conf->global->MAIN_MULTILANGS)) {
|
||||
print '<tr><td>'.$form->editfieldkey('DefaultLang', 'default_lang', '', $object, 0).'</td><td colspan="3">'."\n";
|
||||
print img_picto('', 'language').$formadmin->select_language($object->default_lang, 'default_lang', 0, 0, 1);
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
// Public profil
|
||||
print "<tr><td>".$langs->trans("Public")."</td><td>\n";
|
||||
print $form->selectyesno("public", (GETPOSTISSET("public") ? GETPOST("public", 'alphanohtml', 2) : $object->public), 1);
|
||||
@ -1803,6 +1814,19 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
// Birth Date
|
||||
print '<tr><td class="titlefield">'.$langs->trans("DateOfBirth").'</td><td class="valeur">'.dol_print_date($object->birth, 'day').'</td></tr>';
|
||||
|
||||
// Default language
|
||||
if (!empty($conf->global->MAIN_MULTILANGS)) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
print '<tr><td>'.$langs->trans("DefaultLang").'</td><td>';
|
||||
//$s=picto_from_langcode($object->default_lang);
|
||||
//print ($s?$s.' ':'');
|
||||
$langs->load("languages");
|
||||
$labellang = ($object->default_lang ? $langs->trans('Language_'.$object->default_lang) : '');
|
||||
print picto_from_langcode($object->default_lang, 'class="paddingrightonly saturatemedium opacitylow"');
|
||||
print $labellang;
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// Public
|
||||
print '<tr><td>'.$langs->trans("Public").'</td><td class="valeur">'.yn($object->public).'</td></tr>';
|
||||
|
||||
|
||||
@ -215,6 +215,12 @@ class Adherent extends CommonObject
|
||||
*/
|
||||
public $public;
|
||||
|
||||
/**
|
||||
* Default language code of member (en_US, ...)
|
||||
* @var string
|
||||
*/
|
||||
public $default_lang;
|
||||
|
||||
/**
|
||||
* @var string photo of member
|
||||
*/
|
||||
@ -328,6 +334,7 @@ class Adherent extends CommonObject
|
||||
'photo' => array('type' => 'varchar(255)', 'label' => 'Photo', 'enabled' => 1, 'visible' => -1, 'position' => 135),
|
||||
'public' => array('type' => 'smallint(6)', 'label' => 'Public', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 145),
|
||||
'datefin' => array('type' => 'datetime', 'label' => 'DateEnd', 'enabled' => 1, 'visible' => -1, 'position' => 150),
|
||||
'default_lang' =>array('type'=>'varchar(6)', 'label'=>'Default lang', 'enabled'=>1, 'visible'=>-1, 'position'=> 153),
|
||||
'note_private' => array('type' => 'text', 'label' => 'NotePublic', 'enabled' => 1, 'visible' => 0, 'position' => 155),
|
||||
'note_public' => array('type' => 'text', 'label' => 'NotePrivate', 'enabled' => 1, 'visible' => 0, 'position' => 160),
|
||||
'datevalid' => array('type' => 'datetime', 'label' => 'DateValidation', 'enabled' => 1, 'visible' => -1, 'position' => 165),
|
||||
@ -710,9 +717,11 @@ class Adherent extends CommonObject
|
||||
$sql .= ", photo = ".($this->photo ? "'".$this->db->escape($this->photo)."'" : "null");
|
||||
$sql .= ", public = '".$this->db->escape($this->public)."'";
|
||||
$sql .= ", statut = ".$this->db->escape($this->statut);
|
||||
$sql .= ", default_lang = ".(!empty($this->default_lang) ? "'".$this->db->escape($this->default_lang)."'" : "null");
|
||||
$sql .= ", fk_adherent_type = ".$this->db->escape($this->typeid);
|
||||
$sql .= ", morphy = '".$this->db->escape($this->morphy)."'";
|
||||
$sql .= ", birth = ".($this->birth ? "'".$this->db->idate($this->birth)."'" : "null");
|
||||
|
||||
if ($this->datefin) {
|
||||
$sql .= ", datefin = '".$this->db->idate($this->datefin)."'"; // Must be modified only when deleting a subscription
|
||||
}
|
||||
@ -833,6 +842,8 @@ class Adherent extends CommonObject
|
||||
$luser->office_phone = $this->phone;
|
||||
$luser->user_mobile = $this->phone_mobile;
|
||||
|
||||
$luser->lang = $this->default_lang;
|
||||
|
||||
$luser->fk_member = $this->id;
|
||||
|
||||
$result = $luser->update($user, 0, 1, 1); // Use nosync to 1 to avoid cyclic updates
|
||||
@ -868,6 +879,7 @@ class Adherent extends CommonObject
|
||||
$lthirdparty->state_id = $this->state_id;
|
||||
$lthirdparty->country_id = $this->country_id;
|
||||
//$lthirdparty->phone_mobile=$this->phone_mobile;
|
||||
$lthirdparty->default_lang = $this->default_lang;
|
||||
|
||||
$result = $lthirdparty->update($this->fk_soc, $user, 0, 1, 1, 'update'); // Use sync to 0 to avoid cyclic updates
|
||||
|
||||
@ -1314,7 +1326,7 @@ class Adherent extends CommonObject
|
||||
$sql .= " d.photo, d.fk_adherent_type, d.morphy, d.entity,";
|
||||
$sql .= " d.datec as datec,";
|
||||
$sql .= " d.tms as datem,";
|
||||
$sql .= " d.datefin as datefin,";
|
||||
$sql .= " d.datefin as datefin, d.default_lang,";
|
||||
$sql .= " d.birth as birthday,";
|
||||
$sql .= " d.datevalid as datev,";
|
||||
$sql .= " d.country,";
|
||||
@ -1407,6 +1419,8 @@ class Adherent extends CommonObject
|
||||
$this->date_validation = $this->db->jdate($obj->datev);
|
||||
$this->birth = $this->db->jdate($obj->birthday);
|
||||
|
||||
$this->default_lang = $obj->default_lang;
|
||||
|
||||
$this->note_private = $obj->note_private;
|
||||
$this->note_public = $obj->note_public;
|
||||
$this->morphy = $obj->morphy;
|
||||
@ -2556,6 +2570,7 @@ class Adherent extends CommonObject
|
||||
|
||||
$this->datefin = $now;
|
||||
$this->datevalid = $now;
|
||||
$this->default_lang = '';
|
||||
|
||||
$this->typeid = 1; // Id type adherent
|
||||
$this->type = 'Type adherent'; // Libelle type adherent
|
||||
|
||||
@ -1220,14 +1220,16 @@ if ($id > 0) {
|
||||
$sql .= natural_search("code_iso", $search_code);
|
||||
} elseif ($search_code != '' && $id == 28) {
|
||||
$sql .= natural_search("h.code", $search_code);
|
||||
} elseif ($search_code != '' && $id == 32) {
|
||||
} elseif ($search_code != '' && ($id == 7 || $id == 32)) {
|
||||
$sql .= natural_search("a.code", $search_code);
|
||||
} elseif ($search_code != '' && $id == 3) {
|
||||
$sql .= natural_search("r.code_region", $search_code);
|
||||
} elseif ($search_code != '' && $id == 7) {
|
||||
$sql .= natural_search("a.code", $search_code);
|
||||
} elseif ($search_code != '' && $id == 10) {
|
||||
} elseif ($search_code != '' && ($id == 8 || $id == 10)) {
|
||||
$sql .= natural_search("t.code", $search_code);
|
||||
} elseif ($search_code != '' && $id == 1) {
|
||||
$sql .= natural_search("f.code", $search_code);
|
||||
} elseif ($search_code != '' && $id == 2) {
|
||||
$sql .= natural_search("d.code_departement", $search_code);
|
||||
} elseif ($search_code != '' && $id != 9) {
|
||||
$sql .= natural_search("code", $search_code);
|
||||
}
|
||||
|
||||
@ -88,7 +88,15 @@ if ($action == 'update' && !$cancel) {
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT", GETPOST("MAIN_MAIL_SMTP_PORT", 'int'), 'chaine', 0, '', $conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER", GETPOST("MAIN_MAIL_SMTP_SERVER", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID", GETPOST("MAIN_MAIL_SMTPS_ID", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", GETPOST("MAIN_MAIL_SMTPS_PW", 'none'), 'chaine', 0, '', $conf->entity);
|
||||
if (GETPOSTISSET("MAIN_MAIL_SMTPS_PW")) {
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", GETPOST("MAIN_MAIL_SMTPS_PW", 'none'), 'chaine', 0, '', $conf->entity);
|
||||
}
|
||||
if (GETPOSTISSET("MAIN_MAIL_SMTPS_AUTH_TYPE")) {
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTPS_AUTH_TYPE", GETPOST("MAIN_MAIL_SMTPS_AUTH_TYPE", 'chaine'), 'chaine', 0, '', $conf->entity);
|
||||
}
|
||||
if (GETPOSTISSET("MAIN_MAIL_SMTPS_OAUTH_SERVICE")) {
|
||||
dolibarr_set_const($db, "MAIN_MAIL_SMTPS_OAUTH_SERVICE", GETPOST("MAIN_MAIL_SMTPS_OAUTH_SERVICE", 'chaine'), 'chaine', 0, '', $conf->entity);
|
||||
}
|
||||
dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", GETPOST("MAIN_MAIL_EMAIL_TLS", 'int'), 'chaine', 0, '', $conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS", GETPOST("MAIN_MAIL_EMAIL_STARTTLS", 'int'), 'chaine', 0, '', $conf->entity);
|
||||
dolibarr_set_const($db, "MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED", GETPOST("MAIN_MAIL_EMAIL_SMTP_ALLOW_SELF_SIGNED", 'int'), 'chaine', 0, '', $conf->entity);
|
||||
@ -171,6 +179,24 @@ if (version_compare(phpversion(), '7.0', '>=')) {
|
||||
$listofmethods['swiftmailer'] = 'Swift Mailer socket library';
|
||||
}
|
||||
|
||||
// List of oauth services
|
||||
$oauthservices = array();
|
||||
|
||||
foreach ($conf->global as $key => $val) {
|
||||
if (!empty($val) && preg_match('/^OAUTH_.*_ID$/', $key)) {
|
||||
$key = preg_replace('/^OAUTH_/', '', $key);
|
||||
$key = preg_replace('/_ID$/', '', $key);
|
||||
if (preg_match('/^.*-/', $key)) {
|
||||
$name = preg_replace('/^.*-/', '', $key);
|
||||
} else {
|
||||
$name = $langs->trans("NoName");
|
||||
}
|
||||
$provider = preg_replace('/-.*$/', '', $key);
|
||||
$provider = ucfirst(strtolower($provider));
|
||||
|
||||
$oauthservices[$key] = $name." (".$provider.")";
|
||||
}
|
||||
}
|
||||
|
||||
if ($action == 'edit') {
|
||||
if ($conf->use_javascript_ajax) {
|
||||
@ -195,6 +221,7 @@ if ($action == 'edit') {
|
||||
jQuery("#MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY").prop("disabled", true);
|
||||
jQuery(".smtp_method").hide();
|
||||
jQuery(".dkim").hide();
|
||||
jQuery(".smtp_auth_method").hide();
|
||||
';
|
||||
if ($linuxlike) {
|
||||
print '
|
||||
@ -237,6 +264,7 @@ if ($action == 'edit') {
|
||||
jQuery("#smtp_port_mess").hide();
|
||||
jQuery(".smtp_method").show();
|
||||
jQuery(".dkim").hide();
|
||||
jQuery(".smtp_auth_method").show();
|
||||
}
|
||||
if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'swiftmailer\')
|
||||
{
|
||||
@ -264,12 +292,31 @@ if ($action == 'edit') {
|
||||
jQuery("#smtp_port_mess").hide();
|
||||
jQuery(".smtp_method").show();
|
||||
jQuery(".dkim").show();
|
||||
jQuery(".smtp_auth_method").hide();
|
||||
}
|
||||
}
|
||||
function change_smtp_auth_method() {
|
||||
console.log(jQuery("#radio_pw").prop("checked"));
|
||||
if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'smtps\' && jQuery("#radio_oauth").prop("checked")) {
|
||||
jQuery(".smtp_oauth_service").show();
|
||||
jQuery(".smtp_pw").hide();
|
||||
} else if(jQuery("#MAIN_MAIL_SENDMODE").val()==\'mail\'){
|
||||
jQuery(".smtp_oauth_service").hide();
|
||||
jQuery(".smtp_pw").hide();
|
||||
} else {
|
||||
jQuery(".smtp_oauth_service").hide();
|
||||
jQuery(".smtp_pw").show();
|
||||
}
|
||||
}
|
||||
initfields();
|
||||
change_smtp_auth_method();
|
||||
jQuery("#MAIN_MAIL_SENDMODE").change(function() {
|
||||
initfields();
|
||||
change_smtp_auth_method();
|
||||
});
|
||||
jQuery("#radio_pw, #radio_oauth").change(function() {
|
||||
change_smtp_auth_method();
|
||||
});
|
||||
jQuery("#MAIN_MAIL_EMAIL_TLS").change(function() {
|
||||
if (jQuery("#MAIN_MAIL_EMAIL_TLS").val() == 1)
|
||||
jQuery("#MAIN_MAIL_EMAIL_STARTTLS").val(0);
|
||||
@ -413,10 +460,29 @@ if ($action == 'edit') {
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
|
||||
// OAUTH
|
||||
if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) {
|
||||
print '<tr class="oddeven smtp_auth_method"><td>'.$langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE").'</td><td>';
|
||||
if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity)) {
|
||||
print '<input type="radio" id="radio_pw" name="MAIN_MAIL_SMTPS_AUTH_TYPE" value="LOGIN"'.($conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE == 'LOGIN' ? ' checked' : '').'> ';
|
||||
print '<label for="radio_pw" >'.$langs->trans("UsePassword").'</label>';
|
||||
print ' ';
|
||||
print '<input type="radio" id="radio_oauth" name="MAIN_MAIL_SMTPS_AUTH_TYPE" value="XOAUTH2"'.($conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE == 'XOAUTH2' ? ' checked' : '').'> ';
|
||||
print '<label for="radio_oauth" >'.$form->textwithpicto($langs->trans("UseOauth"), $langs->trans("OauthNotAvailableForAllAndHadToBeCreatedBefore")).'</label>';
|
||||
} else {
|
||||
$value = $conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE;
|
||||
$htmltext = $langs->trans("ContactSuperAdminForChange");
|
||||
print $form->textwithpicto($langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE"), $htmltext, 1, 'superadmin');
|
||||
print '<input type="hidden" id="MAIN_MAIL_SMTPS_AUTH_TYPE" name="MAIN_MAIL_SMTPS_AUTH_TYPE" value="'.$value.'">';
|
||||
}
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// PW
|
||||
if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) {
|
||||
$mainsmtppw = (!empty($conf->global->MAIN_MAIL_SMTPS_PW) ? $conf->global->MAIN_MAIL_SMTPS_PW : '');
|
||||
print '<tr class="drag drop oddeven"><td>';
|
||||
print '<tr class="drag drop oddeven smtp_pw"><td>';
|
||||
print $form->textwithpicto($langs->trans("MAIN_MAIL_SMTPS_PW"), $langs->trans("WithGMailYouCanCreateADedicatedPassword"));
|
||||
print '</td><td>';
|
||||
// SuperAdministrator access only
|
||||
@ -430,6 +496,24 @@ if ($action == 'edit') {
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// OAUTH service provider
|
||||
if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps')))) {
|
||||
print '<tr class="oddeven smtp_oauth_service"><td>'.$langs->trans("MAIN_MAIL_SMTPS_OAUTH_SERVICE").'</td><td>';
|
||||
|
||||
// SuperAdministrator access only
|
||||
if ((empty($conf->global->MAIN_MODULE_MULTICOMPANY)) || ($user->admin && !$user->entity)) {
|
||||
print $form->selectarray('MAIN_MAIL_SMTPS_OAUTH_SERVICE', $oauthservices, $conf->global->MAIN_MAIL_SMTPS_OAUTH_SERVICE);
|
||||
} else {
|
||||
$text = $oauthservices[$conf->global->MAIN_MAIL_SMTPS_OAUTH_SERVICE];
|
||||
if (empty($text)) {
|
||||
$text = $langs->trans("Undefined");
|
||||
}
|
||||
$htmltext = $langs->trans("ContactSuperAdminForChange");
|
||||
print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
|
||||
print '<input type="hidden" name="MAIN_MAIL_SMTPS_OAUTH_SERVICE" value="'.$conf->global->MAIN_MAIL_SMTPS_OAUTH_SERVICE.'">';
|
||||
}
|
||||
print '</td></tr>';
|
||||
}
|
||||
// TLS
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_TLS").'</td><td>';
|
||||
if (!empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) {
|
||||
@ -601,6 +685,7 @@ if ($action == 'edit') {
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_SERVER", ini_get('SMTP') ?ini_get('SMTP') : $langs->transnoentities("Undefined")).'</td><td>'.(!empty($conf->global->MAIN_MAIL_SMTP_SERVER) ? $conf->global->MAIN_MAIL_SMTP_SERVER : '').'</td></tr>';
|
||||
}
|
||||
|
||||
|
||||
// Port
|
||||
if ($linuxlike && (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'mail')) {
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike").'</td><td><span class="opacitymedium">'.$langs->trans("SeeLocalSendMailSetup").'</span></td></tr>';
|
||||
@ -613,11 +698,27 @@ if ($action == 'edit') {
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_ID").'</td><td>'.$conf->global->MAIN_MAIL_SMTPS_ID.'</td></tr>';
|
||||
}
|
||||
|
||||
// AUTH method
|
||||
if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps'))) {
|
||||
$authtype = $conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE;
|
||||
$text = ($authtype === "LOGIN") ? $langs->trans("UsePassword") : ($authtype === "XOAUTH2" ? $langs->trans("UseOauth") : '') ;
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE").'</td><td>'.$text.'</td></tr>';
|
||||
}
|
||||
|
||||
// SMTPS PW
|
||||
if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) {
|
||||
if (isset($conf->global->MAIN_MAIL_SENDMODE) && (in_array($conf->global->MAIN_MAIL_SENDMODE, array('swiftmailer')) || (in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps')) && (isset($conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE) && $conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE === "LOGIN")))) {
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_PW").'</td><td>'.preg_replace('/./', '*', $conf->global->MAIN_MAIL_SMTPS_PW).'</td></tr>';
|
||||
}
|
||||
|
||||
// SMTPS oauth service
|
||||
if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps')) && isset($conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE) && $conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE === "XOAUTH2") {
|
||||
$text = $oauthservices[$conf->global->MAIN_MAIL_SMTPS_OAUTH_SERVICE];
|
||||
if (empty($text)) {
|
||||
$text = $langs->trans("Undefined").img_warning();
|
||||
}
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_OAUTH_SERVICE").'</td><td>'.$text.'</td></tr>';
|
||||
}
|
||||
|
||||
// TLS
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_EMAIL_TLS").'</td><td>';
|
||||
if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) {
|
||||
|
||||
@ -305,7 +305,8 @@ class Categories extends DolibarrApi
|
||||
Categorie::TYPE_CUSTOMER,
|
||||
Categorie::TYPE_SUPPLIER,
|
||||
Categorie::TYPE_MEMBER,
|
||||
Categorie::TYPE_PROJECT
|
||||
Categorie::TYPE_PROJECT,
|
||||
Categorie::TYPE_KNOWLEDGEMANAGEMENT
|
||||
])) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
@ -322,6 +323,8 @@ class Categories extends DolibarrApi
|
||||
throw new RestException(401);
|
||||
} elseif ($type == Categorie::TYPE_PROJECT && !DolibarrApiAccess::$user->rights->projet->lire) {
|
||||
throw new RestException(401);
|
||||
} elseif ($type == Categorie::TYPE_KNOWLEDGEMANAGEMENT && !DolibarrApiAccess::$user->rights->knowledgemanagement->knowledgerecord->read) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
|
||||
$categories = $this->category->getListForItem($id, $type, $sortfield, $sortorder, $limit, $page);
|
||||
|
||||
@ -1030,7 +1030,7 @@ if ($type == Categorie::TYPE_PROJECT) {
|
||||
}
|
||||
|
||||
// List of users
|
||||
if ($type == Categorie::TYPE_USER) {
|
||||
if ($type == Categorie::TYPE_USER && $user->hasRight("user", "user", "read")) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
|
||||
|
||||
$users = $object->getObjectsInCateg($type);
|
||||
@ -1099,6 +1099,9 @@ if ($type == Categorie::TYPE_USER) {
|
||||
|
||||
print '</form>'."\n";
|
||||
}
|
||||
} else {
|
||||
print_barre_liste($langs->trans("Users"), null, $_SERVER["PHP_SELF"], '', '', '', '', '', '', 'user');
|
||||
accessforbidden($langs->trans("NotEnoughPermissions"), 0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -75,7 +75,7 @@ if ($_socid > 0) {
|
||||
// We load data of thirdparty
|
||||
$objsoc = new Societe($db);
|
||||
$objsoc->id = $_socid;
|
||||
$objsoc->fetch($_socid, $to);
|
||||
$objsoc->fetch($_socid);
|
||||
|
||||
|
||||
$head = societe_prepare_head($objsoc);
|
||||
@ -141,7 +141,6 @@ if ($_socid > 0) {
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
print '<table class="noborder centpercent">';
|
||||
$tag = !$tag;
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Date").'</td>';
|
||||
print '<td>'.$langs->trans("PriceLevel").'</td>';
|
||||
|
||||
@ -112,9 +112,9 @@ if ($id > 0 || !empty($ref)) {
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('propalcard', 'globalcard'));
|
||||
|
||||
$usercanread = $user->rights->propal->lire;
|
||||
$usercancreate = $user->rights->propal->creer;
|
||||
$usercandelete = $user->rights->propal->supprimer;
|
||||
$usercanread = $user->hasRight("propal", "lire");
|
||||
$usercancreate = $user->hasRight("propal", "creer");
|
||||
$usercandelete = $user->hasRight("propal", "supprimer");
|
||||
|
||||
$usercanclose = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->propal->propal_advance->close)));
|
||||
$usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->propal->propal_advance->validate)));
|
||||
|
||||
@ -108,9 +108,9 @@ $extrafields->fetch_name_optionals_label($object->table_element);
|
||||
// Load object
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once
|
||||
|
||||
$usercanread = $user->hasRight('commande', 'lire');
|
||||
$usercancreate = $user->hasRight('commande', 'creer');
|
||||
$usercandelete = $user->hasRight('commande', 'supprimer');
|
||||
$usercanread = $user->hasRight("commande", "lire");
|
||||
$usercancreate = $user->hasRight("commande", "creer");
|
||||
$usercandelete = $user->hasRight("commande", "supprimer");
|
||||
// Advanced permissions
|
||||
|
||||
$usercanclose = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($usercancreate)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->hasRight('commande', 'order_advance', 'close'))));
|
||||
|
||||
@ -128,11 +128,11 @@ if ($id > 0 || !empty($ref)) {
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('invoicecard', 'globalcard'));
|
||||
|
||||
$usercanread = $user->rights->facture->lire;
|
||||
$usercancreate = $user->rights->facture->creer;
|
||||
$usercanissuepayment = $user->rights->facture->paiement;
|
||||
$usercandelete = $user->rights->facture->supprimer;
|
||||
$usercancreatecontract = $user->rights->contrat->creer;
|
||||
$usercanread = $user->hasRight("facture", "lire");
|
||||
$usercancreate = $user->hasRight("facture", "creer");
|
||||
$usercanissuepayment = $user->hasRight("facture", "paiement");
|
||||
$usercandelete = $user->hasRight("facture", "supprimer");
|
||||
$usercancreatecontract = $user->hasRight("contrat", "creer");
|
||||
$usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->validate)));
|
||||
$usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->send)));
|
||||
$usercanreopen = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->reopen)));
|
||||
|
||||
@ -59,8 +59,15 @@ $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
|
||||
$offset = $limit * $page;
|
||||
|
||||
$upload_dir = $conf->bank->multidir_output[$object->entity ? $object->entity : $conf->entity]."/checkdeposits";
|
||||
|
||||
$filterdate = dol_mktime(0, 0, 0, GETPOST('fdmonth'), GETPOST('fdday'), GETPOST('fdyear'));
|
||||
// filter by dates from / to
|
||||
$search_date_start_day = GETPOST('search_date_start_day', 'int');
|
||||
$search_date_start_month = GETPOST('search_date_start_month', 'int');
|
||||
$search_date_start_year = GETPOST('search_date_start_year', 'int');
|
||||
$search_date_end_day = GETPOST('search_date_end_day', 'int');
|
||||
$search_date_end_month = GETPOST('search_date_end_month', 'int');
|
||||
$search_date_end_year = GETPOST('search_date_end_year', 'int');
|
||||
$search_date_start = dol_mktime(0, 0, 0, $search_date_start_month, $search_date_start_day, $search_date_start_year);
|
||||
$search_date_end = dol_mktime(23, 59, 59, $search_date_end_month, $search_date_end_day, $search_date_end_year);
|
||||
$filteraccountid = GETPOST('accountid', 'int');
|
||||
|
||||
// Security check
|
||||
@ -265,7 +272,15 @@ if ($action == 'builddoc' && $user->rights->banque->cheque) {
|
||||
*/
|
||||
|
||||
if (GETPOST('removefilter')) {
|
||||
$filterdate = '';
|
||||
// filter by dates from / to
|
||||
$search_date_start_day = '';
|
||||
$search_date_start_month = '';
|
||||
$search_date_start_year = '';
|
||||
$search_date_end_day = '';
|
||||
$search_date_end_month = '';
|
||||
$search_date_end_year = '';
|
||||
$search_date_start = '';
|
||||
$search_date_end = '';
|
||||
$filteraccountid = 0;
|
||||
}
|
||||
|
||||
@ -352,7 +367,13 @@ if ($action == 'new') {
|
||||
//print '<tr><td width="30%">'.$langs->trans('Date').'</td><td width="70%">'.dol_print_date($now,'day').'</td></tr>';
|
||||
// Filter
|
||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("DateChequeReceived").'</td><td>';
|
||||
print $form->selectDate($filterdate, 'fd', 0, 0, 1, '', 1, 1);
|
||||
// filter by dates from / to
|
||||
print '<div class="nowrap">';
|
||||
print $form->selectDate($search_date_start, 'search_date_start_', 0, 0, 1, '', 1, 1, 0, '', '', '', '', 1, '', $langs->trans('From'));
|
||||
print '</div>';
|
||||
print '<div class="nowrap">';
|
||||
print $form->selectDate($search_date_end, 'search_date_end_', 0, 0, 1, '', 1, 1, 0, '', '', '', '', 1, '', $langs->trans('to'));
|
||||
print '</div>';
|
||||
print '</td></tr>';
|
||||
print '<tr><td>'.$langs->trans("BankAccount").'</td><td>';
|
||||
$form->select_comptes($filteraccountid, 'accountid', 0, 'courant <> 2', 1);
|
||||
@ -363,7 +384,7 @@ if ($action == 'new') {
|
||||
|
||||
print '<div class="center">';
|
||||
print '<input type="submit" class="button" name="filter" value="'.dol_escape_htmltag($langs->trans("ToFilter")).'">';
|
||||
if ($filterdate || $filteraccountid > 0) {
|
||||
if ($search_date_start || $search_date_end || $filteraccountid > 0) {
|
||||
print ' ';
|
||||
print '<input type="submit" class="button" name="removefilter" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
|
||||
}
|
||||
@ -382,8 +403,11 @@ if ($action == 'new') {
|
||||
$sql .= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||
$sql .= " AND b.fk_bordereau = 0";
|
||||
$sql .= " AND b.amount > 0";
|
||||
if ($filterdate) {
|
||||
$sql .= " AND b.dateo = '".$db->idate($filterdate)."'";
|
||||
if ($search_date_start) {
|
||||
$sql .= " AND b.dateo >= '".$db->idate($search_date_start)."'";
|
||||
}
|
||||
if ($search_date_end) {
|
||||
$sql .= " AND b.dateo <= '".$db->idate($search_date_end)."'";
|
||||
}
|
||||
if ($filteraccountid > 0) {
|
||||
$sql .= " AND ba.rowid = ".((int) $filteraccountid);
|
||||
|
||||
@ -185,7 +185,7 @@ $dolibarr_main_instance_unique_id='84b5bc91f83b56e458db71e0adac2b62';
|
||||
// values using a ",". In this case, Dolibarr will check login/pass for each value in
|
||||
// order defined into value. However, note that this can't work with all values.
|
||||
// Examples:
|
||||
// $dolibarr_main_authentication='dolibarr'; // Use the password defined into application on user record.
|
||||
// $dolibarr_main_authentication='dolibarr'; // Use the password defined into application on user file (default).
|
||||
// $dolibarr_main_authentication='http'; // Use the HTTP Basic authentication
|
||||
// $dolibarr_main_authentication='ldap'; // Check the password into a LDAP server
|
||||
// $dolibarr_main_authentication='ldap,dolibarr'; // You can set several mode using a comma as a separator.
|
||||
|
||||
@ -361,7 +361,7 @@ if (($action == 'send' || $action == 'relance') && !GETPOST('addfile') && !GETPO
|
||||
}
|
||||
$mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, $sendtocc, $sendtobcc, $deliveryreceipt, -1, '', '', $trackid, '', $sendcontext);
|
||||
|
||||
if ($mailfile->error) {
|
||||
if (!empty($mailfile->error) || !empty($mailfile->errors)) {
|
||||
setEventMessages($mailfile->error, $mailfile->errors, 'errors');
|
||||
$action = 'presend';
|
||||
} else {
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
* \brief File of class to send emails (with attachments or not)
|
||||
*/
|
||||
|
||||
use OAuth\Common\Storage\DoliStorage;
|
||||
/**
|
||||
* Class to send emails (with attachments or not)
|
||||
* Usage: $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filepath,$mimetype,$filename,$cc,$ccc,$deliveryreceipt,$msgishtml,$errors_to,$css,$trackid,$moreinheader,$sendcontext,$replyto);
|
||||
@ -470,12 +471,12 @@ class CMailFile
|
||||
$emailMatchs = preg_match_all($regexp, $from, $adressEmailFrom);
|
||||
$adressEmailFrom = reset($adressEmailFrom);
|
||||
if ($emailMatchs !== false && filter_var($conf->global->MAIN_MAIL_SMTPS_ID, FILTER_VALIDATE_EMAIL) && $conf->global->MAIN_MAIL_SMTPS_ID !== $adressEmailFrom) {
|
||||
$result = $this->message->setFrom($conf->global->MAIN_MAIL_SMTPS_ID);
|
||||
$this->message->setFrom($conf->global->MAIN_MAIL_SMTPS_ID);
|
||||
} else {
|
||||
$result = $this->message->setFrom($this->getArrayAddress($this->addr_from));
|
||||
$this->message->setFrom($this->getArrayAddress($this->addr_from));
|
||||
}
|
||||
} else {
|
||||
$result = $this->message->setFrom($this->getArrayAddress($this->addr_from));
|
||||
$this->message->setFrom($this->getArrayAddress($this->addr_from));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->errors[] = $e->getMessage();
|
||||
@ -485,7 +486,7 @@ class CMailFile
|
||||
// Set the To addresses with an associative array
|
||||
if (!empty($this->addr_to)) {
|
||||
try {
|
||||
$result = $this->message->setTo($this->getArrayAddress($this->addr_to));
|
||||
$this->message->setTo($this->getArrayAddress($this->addr_to));
|
||||
} catch (Exception $e) {
|
||||
$this->errors[] = $e->getMessage();
|
||||
}
|
||||
@ -493,14 +494,14 @@ class CMailFile
|
||||
|
||||
if (!empty($this->reply_to)) {
|
||||
try {
|
||||
$result = $this->message->SetReplyTo($this->getArrayAddress($this->reply_to));
|
||||
$this->message->SetReplyTo($this->getArrayAddress($this->reply_to));
|
||||
} catch (Exception $e) {
|
||||
$this->errors[] = $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$result = $this->message->setCharSet($conf->file->character_set_client);
|
||||
$this->message->setCharSet($conf->file->character_set_client);
|
||||
} catch (Exception $e) {
|
||||
$this->errors[] = $e->getMessage();
|
||||
}
|
||||
@ -562,7 +563,11 @@ class CMailFile
|
||||
}
|
||||
//if (! empty($this->errors_to)) $this->message->setErrorsTo($this->getArrayAddress($this->errors_to));
|
||||
if (isset($this->deliveryreceipt) && $this->deliveryreceipt == 1) {
|
||||
$this->message->setReadReceiptTo($this->getArrayAddress($this->addr_from));
|
||||
try {
|
||||
$this->message->setReadReceiptTo($this->getArrayAddress($this->addr_from));
|
||||
} catch (Exception $e) {
|
||||
$this->errors[] = $e->getMessage();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Send mail method not correctly defined
|
||||
@ -665,6 +670,8 @@ class CMailFile
|
||||
}
|
||||
|
||||
$keyforsmtpserver = 'MAIN_MAIL_SMTP_SERVER';
|
||||
$keyforsmtpauthtype = "MAIN_MAIL_SMTPS_AUTH_TYPE";
|
||||
$keyforsmtpoauthservice = "MAIN_MAIL_SMTPS_OAUTH_SERVICE";
|
||||
$keyforsmtpport = 'MAIN_MAIL_SMTP_PORT';
|
||||
$keyforsmtpid = 'MAIN_MAIL_SMTPS_ID';
|
||||
$keyforsmtppw = 'MAIN_MAIL_SMTPS_PW';
|
||||
@ -840,6 +847,36 @@ class CMailFile
|
||||
$this->smtps->setPW($loginpass);
|
||||
}
|
||||
|
||||
if (!empty($conf->global->$keyforsmtpauthtype) && $conf->global->$keyforsmtpauthtype === "XOAUTH2") {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/oauth.lib.php'; // define $supportedoauth2array
|
||||
$keyforsupportedoauth2array = $conf->global->$keyforsmtpoauthservice;
|
||||
if (preg_match('/^.*-/', $keyforsupportedoauth2array)) {
|
||||
$keyforprovider = preg_replace('/^.*-/', '', $keyforsupportedoauth2array);
|
||||
} else {
|
||||
$keyforprovider = '';
|
||||
}
|
||||
$keyforsupportedoauth2array = preg_replace('/-.*$/', '', $keyforsupportedoauth2array);
|
||||
$keyforsupportedoauth2array = 'OAUTH_'.$keyforsupportedoauth2array.'_NAME';
|
||||
|
||||
$OAUTH_SERVICENAME = (empty($supportedoauth2array[$keyforsupportedoauth2array]['name']) ? 'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array]['name'].($keyforprovider ? '-'.$keyforprovider : ''));
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/includes/OAuth/bootstrap.php';
|
||||
|
||||
$storage = new DoliStorage($db, $conf);
|
||||
try {
|
||||
$tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
|
||||
if (is_object($tokenobj)) {
|
||||
$this->smtps->setToken($tokenobj->getAccessToken());
|
||||
} else {
|
||||
$this->error = "Token not found";
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
// Return an error if token not found
|
||||
$this->error = $e->getMessage();
|
||||
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
|
||||
}
|
||||
}
|
||||
|
||||
$res = true;
|
||||
$from = $this->smtps->getFrom('org');
|
||||
if ($res && !$from) {
|
||||
|
||||
@ -6024,7 +6024,7 @@ abstract class CommonObject
|
||||
// Test fetch_array ! is_int($key) because fetch_array result is a mix table with Key as alpha and Key as int (depend db engine)
|
||||
if ($key != 'rowid' && $key != 'tms' && $key != 'fk_member' && !is_int($key)) {
|
||||
// we can add this attribute to object
|
||||
if (!empty($extrafields) && in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date', 'datetime'))) {
|
||||
if (!empty($extrafields->attributes[$this->table_element]) && in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date', 'datetime'))) {
|
||||
//var_dump($extrafields->attributes[$this->table_element]['type'][$key]);
|
||||
$this->array_options["options_".$key] = $this->db->jdate($value);
|
||||
} else {
|
||||
@ -6037,7 +6037,7 @@ abstract class CommonObject
|
||||
|
||||
// If field is a computed field, value must become result of compute
|
||||
foreach ($tab as $key => $value) {
|
||||
if (!empty($extrafields) && !empty($extrafields->attributes[$this->table_element]['computed'][$key])) {
|
||||
if (!empty($extrafields->attributes[$this->table_element]) && !empty($extrafields->attributes[$this->table_element]['computed'][$key])) {
|
||||
//var_dump($conf->disable_compute);
|
||||
if (empty($conf->disable_compute)) {
|
||||
$this->array_options["options_".$key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, '');
|
||||
|
||||
@ -68,6 +68,11 @@ class SMTPs
|
||||
*/
|
||||
private $_smtpsPW = null;
|
||||
|
||||
/**
|
||||
* Token in case we use OAUTH2
|
||||
*/
|
||||
private $_smtpsToken = null;
|
||||
|
||||
/**
|
||||
* Who sent the Message
|
||||
* This can be defined via a INI file or via a setter method
|
||||
@ -565,13 +570,13 @@ class SMTPs
|
||||
}
|
||||
|
||||
// Default authentication method is LOGIN
|
||||
if (empty($conf->global->MAIL_SMTP_AUTH_TYPE)) {
|
||||
$conf->global->MAIL_SMTP_AUTH_TYPE = 'LOGIN';
|
||||
if (empty($conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE)) {
|
||||
$conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE = 'LOGIN';
|
||||
}
|
||||
|
||||
// Send Authentication to Server
|
||||
// Check for errors along the way
|
||||
switch ($conf->global->MAIL_SMTP_AUTH_TYPE) {
|
||||
switch ($conf->global->MAIN_MAIL_SMTPS_AUTH_TYPE) {
|
||||
case 'NONE':
|
||||
// Do not send the 'AUTH type' message. For test purpose, if you don't need authentication, it is better to not enter login/pass into setup.
|
||||
$_retVal = true;
|
||||
@ -583,9 +588,10 @@ class SMTPs
|
||||
break;
|
||||
case 'XOAUTH2':
|
||||
// "user=$email\1auth=Bearer $token\1\1"
|
||||
$token = 'xxx';
|
||||
$xxxx = "user=".$this->_smtpsID."\1auth=Bearer ".$token."\1\1";
|
||||
$_retVal = $this->socket_send_str('AUTH XOAUTH2 '.base64_encode($xxxx), '235');
|
||||
$user = $this->_smtpsID;
|
||||
$token = $this->_smtpsToken;
|
||||
$initRes = "user=".$user."\001auth=Bearer ".$token."\001\001";
|
||||
$_retVal = $this->socket_send_str('AUTH XOAUTH2 '.base64_encode($initRes), '235');
|
||||
if (!$_retVal) {
|
||||
$this->_setErr(130, 'Error when asking for AUTH XOAUTH2');
|
||||
}
|
||||
@ -631,7 +637,7 @@ class SMTPs
|
||||
// Connect to Server
|
||||
if ($this->socket = $this->_server_connect()) {
|
||||
// If a User ID *and* a password is given, assume Authentication is desired
|
||||
if (!empty($this->_smtpsID) && !empty($this->_smtpsPW)) {
|
||||
if (!empty($this->_smtpsID) && (!empty($this->_smtpsPW) || !empty($this->_smtpsToken))) {
|
||||
// Send the RFC2554 specified EHLO.
|
||||
$_retVal = $this->_server_authenticate();
|
||||
} else {
|
||||
@ -923,6 +929,27 @@ class SMTPs
|
||||
return $this->_smtpsPW;
|
||||
}
|
||||
|
||||
/**
|
||||
* User token for OAUTH2
|
||||
*
|
||||
* @param string $_strToken User token
|
||||
* @return void
|
||||
*/
|
||||
public function setToken($_strToken)
|
||||
{
|
||||
$this->_smtpsToken = $_strToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the User token for OAUTH2
|
||||
*
|
||||
* @return string User token for OAUTH2
|
||||
*/
|
||||
public function getToken()
|
||||
{
|
||||
return $this->_smtpsToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Character set used for current message
|
||||
* Character set is defaulted to 'iso-8859-1';
|
||||
@ -1866,7 +1893,7 @@ class SMTPs
|
||||
}
|
||||
|
||||
if (!(substr($server_response, 0, 3) == $response)) {
|
||||
$this->_setErr(120, "Ran into problems sending Mail.\r\nResponse: $server_response");
|
||||
$this->_setErr(120, "Ran into problems sending Mail.\r\nResponse:".$server_response);
|
||||
$_retVal = false;
|
||||
}
|
||||
|
||||
|
||||
@ -276,3 +276,32 @@ function dol_ftp_rmdir($connect_id, $file, $newsection)
|
||||
return @ftp_rmdir($connect_id, $newremotefileiso);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove FTP directory
|
||||
*
|
||||
* @param resource $connect_id Connection handler
|
||||
* @param string $newdir Dir create
|
||||
* @param string $newsection $newsection
|
||||
* @return result
|
||||
*/
|
||||
function dol_ftp_mkdir($connect_id, $newdir, $newsection)
|
||||
{
|
||||
|
||||
global $conf;
|
||||
|
||||
if (!empty($conf->global->FTP_CONNECT_WITH_SFTP)) {
|
||||
$newsection = ssh2_sftp_realpath($connect_id, ".").'/./'; // workaround for bug https://bugs.php.net/bug.php?id=64169
|
||||
}
|
||||
|
||||
// Remote file
|
||||
$newremotefileiso = $newsection.(preg_match('@[\\\/]$@', $newsection) ? '' : '/').$newdir;
|
||||
$newremotefileiso = utf8_decode($newremotefileiso);
|
||||
|
||||
if (!empty($conf->global->FTP_CONNECT_WITH_SFTP)) {
|
||||
return ssh2_sftp_mkdir($connect_id, $newremotefileiso, 0777);
|
||||
} else {
|
||||
return @ftp_mkdir($connect_id, $newremotefileiso);
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,30 +116,30 @@ class pdf_sponge extends ModelePDFFactures
|
||||
public $marge_basse;
|
||||
|
||||
|
||||
/**
|
||||
* @var int heightforinfotot
|
||||
*/
|
||||
public $heightforinfotot;
|
||||
/**
|
||||
* @var int heightforinfotot
|
||||
*/
|
||||
public $heightforinfotot;
|
||||
|
||||
/**
|
||||
* @var int heightforfreetext
|
||||
*/
|
||||
public $heightforfreetext;
|
||||
/**
|
||||
* @var int heightforfreetext
|
||||
*/
|
||||
public $heightforfreetext;
|
||||
|
||||
/**
|
||||
* @var int heightforfooter
|
||||
*/
|
||||
public $heightforfooter;
|
||||
/**
|
||||
* @var int heightforfooter
|
||||
*/
|
||||
public $heightforfooter;
|
||||
|
||||
/**
|
||||
* @var int tab_top
|
||||
*/
|
||||
public $tab_top;
|
||||
/**
|
||||
* @var int tab_top
|
||||
*/
|
||||
public $tab_top;
|
||||
|
||||
/**
|
||||
* @var int tab_top_newpage
|
||||
*/
|
||||
public $tab_top_newpage;
|
||||
/**
|
||||
* @var int tab_top_newpage
|
||||
*/
|
||||
public $tab_top_newpage;
|
||||
|
||||
/**
|
||||
* Issuer
|
||||
@ -1243,37 +1243,37 @@ class pdf_sponge extends ModelePDFFactures
|
||||
if (empty($object->mode_reglement_code)
|
||||
&& empty($conf->global->FACTURE_CHQ_NUMBER)
|
||||
&& empty($conf->global->FACTURE_RIB_NUMBER)) {
|
||||
$this->error = $outputlangs->transnoentities("ErrorNoPaiementModeConfigured");
|
||||
$this->error = $outputlangs->transnoentities("ErrorNoPaiementModeConfigured");
|
||||
} elseif (($object->mode_reglement_code == 'CHQ' && empty($conf->global->FACTURE_CHQ_NUMBER) && empty($object->fk_account) && empty($object->fk_bank))
|
||||
|| ($object->mode_reglement_code == 'VIR' && empty($conf->global->FACTURE_RIB_NUMBER) && empty($object->fk_account) && empty($object->fk_bank))) {
|
||||
// Avoid having any valid PDF with setup that is not complete
|
||||
$outputlangs->load("errors");
|
||||
|| ($object->mode_reglement_code == 'VIR' && empty($conf->global->FACTURE_RIB_NUMBER) && empty($object->fk_account) && empty($object->fk_bank))) {
|
||||
// Avoid having any valid PDF with setup that is not complete
|
||||
$outputlangs->load("errors");
|
||||
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
$pdf->SetTextColor(200, 0, 0);
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
$this->error = $outputlangs->transnoentities("ErrorPaymentModeDefinedToWithoutSetup", $object->mode_reglement_code);
|
||||
$pdf->MultiCell($posxend - $this->marge_gauche, 3, $this->error, 0, 'L', 0);
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
$pdf->SetTextColor(200, 0, 0);
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
$this->error = $outputlangs->transnoentities("ErrorPaymentModeDefinedToWithoutSetup", $object->mode_reglement_code);
|
||||
$pdf->MultiCell($posxend - $this->marge_gauche, 3, $this->error, 0, 'L', 0);
|
||||
$pdf->SetTextColor(0, 0, 0);
|
||||
|
||||
$posy = $pdf->GetY() + 1;
|
||||
$posy = $pdf->GetY() + 1;
|
||||
}
|
||||
|
||||
// Show payment mode
|
||||
if (!empty($object->mode_reglement_code)
|
||||
&& $object->mode_reglement_code != 'CHQ'
|
||||
&& $object->mode_reglement_code != 'VIR') {
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
$titre = $outputlangs->transnoentities("PaymentMode").':';
|
||||
$pdf->MultiCell($posxend - $this->marge_gauche, 5, $titre, 0, 'L');
|
||||
&& $object->mode_reglement_code != 'CHQ'
|
||||
&& $object->mode_reglement_code != 'VIR') {
|
||||
$pdf->SetFont('', 'B', $default_font_size - 2);
|
||||
$pdf->SetXY($this->marge_gauche, $posy);
|
||||
$titre = $outputlangs->transnoentities("PaymentMode").':';
|
||||
$pdf->MultiCell($posxend - $this->marge_gauche, 5, $titre, 0, 'L');
|
||||
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posxval, $posy);
|
||||
$lib_mode_reg = $outputlangs->transnoentities("PaymentType".$object->mode_reglement_code) != ('PaymentType'.$object->mode_reglement_code) ? $outputlangs->transnoentities("PaymentType".$object->mode_reglement_code) : $outputlangs->convToOutputCharset($object->mode_reglement);
|
||||
$pdf->MultiCell($posxend - $posxval, 5, $lib_mode_reg, 0, 'L');
|
||||
$pdf->SetFont('', '', $default_font_size - 2);
|
||||
$pdf->SetXY($posxval, $posy);
|
||||
$lib_mode_reg = $outputlangs->transnoentities("PaymentType".$object->mode_reglement_code) != ('PaymentType'.$object->mode_reglement_code) ? $outputlangs->transnoentities("PaymentType".$object->mode_reglement_code) : $outputlangs->convToOutputCharset($object->mode_reglement);
|
||||
$pdf->MultiCell($posxend - $posxval, 5, $lib_mode_reg, 0, 'L');
|
||||
|
||||
$posy = $pdf->GetY();
|
||||
$posy = $pdf->GetY();
|
||||
}
|
||||
|
||||
// Show online payment link
|
||||
@ -1461,13 +1461,12 @@ class pdf_sponge extends ModelePDFFactures
|
||||
if ($posy > $this->page_hauteur - 4 - $this->heightforfooter) {
|
||||
$this->_pagefoot($pdf, $object, $outputlangs, 1);
|
||||
$pdf->addPage();
|
||||
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) {
|
||||
$this->_pagehead($pdf, $object, 0, $outputlangs, $outputlangsbis);
|
||||
$pdf->setY($this->tab_top_newpage);
|
||||
}
|
||||
else{
|
||||
$pdf->setY($this->marge_haute);
|
||||
}
|
||||
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) {
|
||||
$this->_pagehead($pdf, $object, 0, $outputlangs, $outputlangsbis);
|
||||
$pdf->setY($this->tab_top_newpage);
|
||||
} else {
|
||||
$pdf->setY($this->marge_haute);
|
||||
}
|
||||
$posy = $pdf->GetY();
|
||||
}
|
||||
|
||||
@ -1529,13 +1528,12 @@ class pdf_sponge extends ModelePDFFactures
|
||||
|
||||
if ($posy > $this->page_hauteur - 4 - $this->heightforfooter) {
|
||||
$pdf->addPage();
|
||||
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) {
|
||||
$this->_pagehead($pdf, $object, 0, $outputlangs, $outputlangsbis);
|
||||
$pdf->setY($this->tab_top_newpage);
|
||||
}
|
||||
else {
|
||||
$pdf->setY($this->marge_haute);
|
||||
}
|
||||
if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) {
|
||||
$this->_pagehead($pdf, $object, 0, $outputlangs, $outputlangsbis);
|
||||
$pdf->setY($this->tab_top_newpage);
|
||||
} else {
|
||||
$pdf->setY($this->marge_haute);
|
||||
}
|
||||
|
||||
$posy = $pdf->GetY();
|
||||
}
|
||||
|
||||
@ -120,7 +120,7 @@ if ($user->socid > 0) {
|
||||
|
||||
// For some module part, dir may be privates
|
||||
if (in_array($modulepart, array('facture_paiement', 'unpaid'))) {
|
||||
if (empty($user->rights->societe->client->voir) || $socid) {
|
||||
if (empty($user->hasRight('societe', 'client', 'voir')) || $socid) {
|
||||
$original_file = 'private/'.$user->id.'/'.$original_file; // If user has no permission to see all, output dir is specific to user
|
||||
}
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ class EmailCollector extends CommonObject
|
||||
public $fields = array(
|
||||
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1),
|
||||
'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'help'=>'Example: MyCollector1', 'csslist'=>'tdoverflowmax200'),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'help'=>'Example: MyCollector1', 'csslist'=>'tdoverflowmax150'),
|
||||
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'help'=>'Example: My Email collector', 'csslist'=>'tdoverflowmax150'),
|
||||
'description' => array('type'=>'text', 'label'=>'Description', 'visible'=>-1, 'enabled'=>1, 'position'=>60, 'notnull'=>-1, 'csslist'=>'small'),
|
||||
'host' => array('type'=>'varchar(255)', 'label'=>'EMailHost', 'visible'=>1, 'enabled'=>1, 'position'=>90, 'notnull'=>1, 'searchall'=>1, 'comment'=>"IMAP server", 'help'=>'Example: imap.gmail.com', 'csslist'=>'tdoverflow125'),
|
||||
|
||||
@ -41,6 +41,7 @@ $result = restrictedArea($user, 'ftp', '');
|
||||
// Get parameters
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$section = GETPOST('section');
|
||||
$newfolder = GETPOST('newfolder');
|
||||
if (!$section) {
|
||||
$section = '/';
|
||||
}
|
||||
@ -141,11 +142,8 @@ if ($action == 'uploadfile') {
|
||||
$mesg = $resultarray['mesg'];
|
||||
}
|
||||
if ($conn_id && $ok && !$mesg) {
|
||||
// var_dump($_FILES['userfile']['name']);
|
||||
$nbfile = count($_FILES['userfile']['name']);
|
||||
$i = 0;
|
||||
for (; $i < $nbfile; $i++) {
|
||||
var_dump($i);
|
||||
for ($i = 0; $i < $nbfile; $i++) {
|
||||
$newsection = $newsectioniso;
|
||||
$fileupload = $_FILES['userfile']['name'][$i];
|
||||
$fileuploadpath = $_FILES['userfile']['tmp_name'][$i];
|
||||
@ -164,6 +162,30 @@ if ($action == 'uploadfile') {
|
||||
}
|
||||
}
|
||||
|
||||
if ($action == 'addfolder') {
|
||||
// set up a connection or die
|
||||
if (!$conn_id) {
|
||||
$newsectioniso = utf8_decode($section);
|
||||
$resultarray = dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $newsectioniso, $ftp_passive);
|
||||
$conn_id = $resultarray['conn_id'];
|
||||
$ok = $resultarray['ok'];
|
||||
$mesg = $resultarray['mesg'];
|
||||
}
|
||||
if ($conn_id && $ok && !$mesg) {
|
||||
$result = dol_ftp_mkdir($conn_id, $newfolder, $newsectioniso);
|
||||
|
||||
if ($result) {
|
||||
setEventMessages($langs->trans("FileWasCreateFolder", $newfolder), null, 'mesgs');
|
||||
} else {
|
||||
dol_syslog("ftp/index.php ftp_delete", LOG_ERR);
|
||||
setEventMessages($langs->trans("FTPFailedToCreateFolder", $newfolder), null, 'errors');
|
||||
}
|
||||
$action = '';
|
||||
} else {
|
||||
dol_print_error('', $mesg);
|
||||
}
|
||||
}
|
||||
|
||||
// Action ajout d'un rep
|
||||
if ($action == 'add' && $user->rights->ftp->setup) {
|
||||
$ecmdir->ref = GETPOST("ref");
|
||||
@ -633,6 +655,16 @@ if (!function_exists('ftp_connect')) {
|
||||
print '<td></td>';
|
||||
print '<td align="center"><button type="submit" class="butAction" name="uploadfile" value="'.$langs->trans("Save").'">'.$langs->trans("Upload").'</button></td>';
|
||||
print '</form>';
|
||||
print load_fiche_titre($langs->trans("AddFolder"), null, null);
|
||||
print '<form enctype="multipart/form-data" action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="numero_ftp" value="'.$numero_ftp.'">';
|
||||
print '<input type="hidden" name="section" value="'.$section.'">';
|
||||
print '<input type="hidden" name="action" value="addfolder">';
|
||||
print '<td><input type="text" class="flat" name="newfolder" multiple></td>';
|
||||
print '<td></td>';
|
||||
print '<td align="center"><button type="submit" class="butAction" name="addfolder" value="'.$langs->trans("Save").'">'.$langs->trans("AddFolder").'</button></td>';
|
||||
print '</form>';
|
||||
}
|
||||
} else {
|
||||
$foundsetup = false;
|
||||
|
||||
@ -1818,7 +1818,7 @@ if ($step == 5 && $datatoimport) {
|
||||
|
||||
// Actions
|
||||
print '<div class="center">';
|
||||
if ($user->rights->import->run) {
|
||||
if ($user->hasRight('import', 'run')) {
|
||||
print '<input type="submit" class="butAction" value="'.$langs->trans("RunSimulateImportFile").'">';
|
||||
} else {
|
||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("RunSimulateImportFile").'</a>';
|
||||
@ -1974,7 +1974,7 @@ if ($step == 5 && $datatoimport) {
|
||||
|
||||
// Actions
|
||||
print '<div class="center">';
|
||||
if ($user->rights->import->run) {
|
||||
if ($user->hasRight('import', 'run')) {
|
||||
if (empty($nboferrors)) {
|
||||
print '<a class="butAction" href="'.DOL_URL_ROOT.'/imports/import.php?leftmenu=import&step=6&importid='.$importid.$param.'">'.$langs->trans("RunImportFile").'</a>';
|
||||
} else {
|
||||
|
||||
165
htdocs/includes/jquery/js/jquery-ui.js
vendored
165
htdocs/includes/jquery/js/jquery-ui.js
vendored
@ -1,4 +1,4 @@
|
||||
/*! jQuery UI - v1.13.1 - 2022-01-20
|
||||
/*! jQuery UI - v1.13.2 - 2022-07-14
|
||||
* http://jqueryui.com
|
||||
* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
|
||||
* Copyright jQuery Foundation and other contributors; Licensed MIT */
|
||||
@ -20,11 +20,11 @@
|
||||
|
||||
$.ui = $.ui || {};
|
||||
|
||||
var version = $.ui.version = "1.13.1";
|
||||
var version = $.ui.version = "1.13.2";
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Widget 1.13.1
|
||||
* jQuery UI Widget 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -766,7 +766,7 @@ var widget = $.widget;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Position 1.13.1
|
||||
* jQuery UI Position 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -1263,7 +1263,7 @@ var position = $.ui.position;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI :data 1.13.1
|
||||
* jQuery UI :data 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -1292,7 +1292,7 @@ var data = $.extend( $.expr.pseudos, {
|
||||
} );
|
||||
|
||||
/*!
|
||||
* jQuery UI Disable Selection 1.13.1
|
||||
* jQuery UI Disable Selection 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -2047,7 +2047,7 @@ colors = jQuery.Color.names = {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects 1.13.1
|
||||
* jQuery UI Effects 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -2431,7 +2431,7 @@ if ( $.uiBackCompat !== false ) {
|
||||
}
|
||||
|
||||
$.extend( $.effects, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
|
||||
define: function( name, mode, effect ) {
|
||||
if ( !effect ) {
|
||||
@ -2999,7 +2999,7 @@ var effect = $.effects;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Blind 1.13.1
|
||||
* jQuery UI Effects Blind 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3054,7 +3054,7 @@ var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, d
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Bounce 1.13.1
|
||||
* jQuery UI Effects Bounce 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3149,7 +3149,7 @@ var effectsEffectBounce = $.effects.define( "bounce", function( options, done )
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Clip 1.13.1
|
||||
* jQuery UI Effects Clip 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3199,7 +3199,7 @@ var effectsEffectClip = $.effects.define( "clip", "hide", function( options, don
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Drop 1.13.1
|
||||
* jQuery UI Effects Drop 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3253,7 +3253,7 @@ var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, don
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Explode 1.13.1
|
||||
* jQuery UI Effects Explode 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3349,7 +3349,7 @@ var effectsEffectExplode = $.effects.define( "explode", "hide", function( option
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Fade 1.13.1
|
||||
* jQuery UI Effects Fade 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3381,7 +3381,7 @@ var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, d
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Fold 1.13.1
|
||||
* jQuery UI Effects Fold 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3455,7 +3455,7 @@ var effectsEffectFold = $.effects.define( "fold", "hide", function( options, don
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Highlight 1.13.1
|
||||
* jQuery UI Effects Highlight 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3497,7 +3497,7 @@ var effectsEffectHighlight = $.effects.define( "highlight", "show", function( op
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Size 1.13.1
|
||||
* jQuery UI Effects Size 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3675,7 +3675,7 @@ var effectsEffectSize = $.effects.define( "size", function( options, done ) {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Scale 1.13.1
|
||||
* jQuery UI Effects Scale 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3715,7 +3715,7 @@ var effectsEffectScale = $.effects.define( "scale", function( options, done ) {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Puff 1.13.1
|
||||
* jQuery UI Effects Puff 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3741,7 +3741,7 @@ var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, don
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Pulsate 1.13.1
|
||||
* jQuery UI Effects Pulsate 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3790,7 +3790,7 @@ var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( option
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Shake 1.13.1
|
||||
* jQuery UI Effects Shake 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3849,7 +3849,7 @@ var effectsEffectShake = $.effects.define( "shake", function( options, done ) {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Slide 1.13.1
|
||||
* jQuery UI Effects Slide 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3910,7 +3910,7 @@ var effectsEffectSlide = $.effects.define( "slide", "show", function( options, d
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Effects Transfer 1.13.1
|
||||
* jQuery UI Effects Transfer 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -3935,7 +3935,7 @@ var effectsEffectTransfer = effect;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Focusable 1.13.1
|
||||
* jQuery UI Focusable 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4017,7 +4017,7 @@ var form = $.fn._form = function() {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Form Reset Mixin 1.13.1
|
||||
* jQuery UI Form Reset Mixin 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4079,7 +4079,7 @@ var formResetMixin = $.ui.formResetMixin = {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Support for jQuery core 1.8.x and newer 1.13.1
|
||||
* jQuery UI Support for jQuery core 1.8.x and newer 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4154,7 +4154,7 @@ if ( !$.fn.even || !$.fn.odd ) {
|
||||
|
||||
;
|
||||
/*!
|
||||
* jQuery UI Keycode 1.13.1
|
||||
* jQuery UI Keycode 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4189,7 +4189,7 @@ var keycode = $.ui.keyCode = {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Labels 1.13.1
|
||||
* jQuery UI Labels 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4244,7 +4244,7 @@ var labels = $.fn.labels = function() {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Scroll Parent 1.13.1
|
||||
* jQuery UI Scroll Parent 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4278,7 +4278,7 @@ var scrollParent = $.fn.scrollParent = function( includeHidden ) {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Tabbable 1.13.1
|
||||
* jQuery UI Tabbable 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4302,7 +4302,7 @@ var tabbable = $.extend( $.expr.pseudos, {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Unique ID 1.13.1
|
||||
* jQuery UI Unique ID 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4340,7 +4340,7 @@ var uniqueId = $.fn.extend( {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Accordion 1.13.1
|
||||
* jQuery UI Accordion 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4361,7 +4361,7 @@ var uniqueId = $.fn.extend( {
|
||||
|
||||
|
||||
var widgetsAccordion = $.widget( "ui.accordion", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
options: {
|
||||
active: 0,
|
||||
animate: {},
|
||||
@ -4972,7 +4972,7 @@ var safeActiveElement = $.ui.safeActiveElement = function( document ) {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Menu 1.13.1
|
||||
* jQuery UI Menu 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -4991,7 +4991,7 @@ var safeActiveElement = $.ui.safeActiveElement = function( document ) {
|
||||
|
||||
|
||||
var widgetsMenu = $.widget( "ui.menu", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
defaultElement: "<ul>",
|
||||
delay: 300,
|
||||
options: {
|
||||
@ -5663,7 +5663,7 @@ var widgetsMenu = $.widget( "ui.menu", {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Autocomplete 1.13.1
|
||||
* jQuery UI Autocomplete 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -5682,7 +5682,7 @@ var widgetsMenu = $.widget( "ui.menu", {
|
||||
|
||||
|
||||
$.widget( "ui.autocomplete", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
defaultElement: "<input>",
|
||||
options: {
|
||||
appendTo: null,
|
||||
@ -6319,7 +6319,7 @@ var widgetsAutocomplete = $.ui.autocomplete;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Controlgroup 1.13.1
|
||||
* jQuery UI Controlgroup 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -6340,7 +6340,7 @@ var widgetsAutocomplete = $.ui.autocomplete;
|
||||
var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;
|
||||
|
||||
var widgetsControlgroup = $.widget( "ui.controlgroup", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
defaultElement: "<div>",
|
||||
options: {
|
||||
direction: "horizontal",
|
||||
@ -6604,7 +6604,7 @@ var widgetsControlgroup = $.widget( "ui.controlgroup", {
|
||||
} );
|
||||
|
||||
/*!
|
||||
* jQuery UI Checkboxradio 1.13.1
|
||||
* jQuery UI Checkboxradio 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -6624,7 +6624,7 @@ var widgetsControlgroup = $.widget( "ui.controlgroup", {
|
||||
|
||||
|
||||
$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
options: {
|
||||
disabled: null,
|
||||
label: null,
|
||||
@ -6636,8 +6636,7 @@ $.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
|
||||
},
|
||||
|
||||
_getCreateOptions: function() {
|
||||
var disabled, labels;
|
||||
var that = this;
|
||||
var disabled, labels, labelContents;
|
||||
var options = this._super() || {};
|
||||
|
||||
// We read the type here, because it makes more sense to throw a element type error first,
|
||||
@ -6657,12 +6656,18 @@ $.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
|
||||
|
||||
// We need to get the label text but this may also need to make sure it does not contain the
|
||||
// input itself.
|
||||
this.label.contents().not( this.element[ 0 ] ).each( function() {
|
||||
// The label contents could be text, html, or a mix. We wrap all elements
|
||||
// and read the wrapper's `innerHTML` to get a string representation of
|
||||
// the label, without the input as part of it.
|
||||
labelContents = this.label.contents().not( this.element[ 0 ] );
|
||||
|
||||
// The label contents could be text, html, or a mix. We concat each element to get a
|
||||
// string representation of the label, without the input as part of it.
|
||||
that.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;
|
||||
} );
|
||||
if ( labelContents.length ) {
|
||||
this.originalLabel += labelContents
|
||||
.clone()
|
||||
.wrapAll( "<div></div>" )
|
||||
.parent()
|
||||
.html();
|
||||
}
|
||||
|
||||
// Set the label option if we found label text
|
||||
if ( this.originalLabel ) {
|
||||
@ -6870,7 +6875,7 @@ var widgetsCheckboxradio = $.ui.checkboxradio;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Button 1.13.1
|
||||
* jQuery UI Button 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -6889,7 +6894,7 @@ var widgetsCheckboxradio = $.ui.checkboxradio;
|
||||
|
||||
|
||||
$.widget( "ui.button", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
defaultElement: "<button>",
|
||||
options: {
|
||||
classes: {
|
||||
@ -7296,7 +7301,7 @@ var widgetsButton = $.ui.button;
|
||||
|
||||
/* eslint-disable max-len, camelcase */
|
||||
/*!
|
||||
* jQuery UI Datepicker 1.13.1
|
||||
* jQuery UI Datepicker 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -7314,7 +7319,7 @@ var widgetsButton = $.ui.button;
|
||||
//>>css.theme: ../../themes/base/theme.css
|
||||
|
||||
|
||||
$.extend( $.ui, { datepicker: { version: "1.13.1" } } );
|
||||
$.extend( $.ui, { datepicker: { version: "1.13.2" } } );
|
||||
|
||||
var datepicker_instActive;
|
||||
|
||||
@ -9511,7 +9516,7 @@ $.fn.datepicker = function( options ) {
|
||||
$.datepicker = new Datepicker(); // singleton instance
|
||||
$.datepicker.initialized = false;
|
||||
$.datepicker.uuid = new Date().getTime();
|
||||
$.datepicker.version = "1.13.1";
|
||||
$.datepicker.version = "1.13.2";
|
||||
|
||||
var widgetsDatepicker = $.datepicker;
|
||||
|
||||
@ -9521,7 +9526,7 @@ var widgetsDatepicker = $.datepicker;
|
||||
var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
|
||||
|
||||
/*!
|
||||
* jQuery UI Mouse 1.13.1
|
||||
* jQuery UI Mouse 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -9541,7 +9546,7 @@ $( document ).on( "mouseup", function() {
|
||||
} );
|
||||
|
||||
var widgetsMouse = $.widget( "ui.mouse", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
options: {
|
||||
cancel: "input, textarea, button, select, option",
|
||||
distance: 1,
|
||||
@ -9783,7 +9788,7 @@ var safeBlur = $.ui.safeBlur = function( element ) {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Draggable 1.13.1
|
||||
* jQuery UI Draggable 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -9800,7 +9805,7 @@ var safeBlur = $.ui.safeBlur = function( element ) {
|
||||
|
||||
|
||||
$.widget( "ui.draggable", $.ui.mouse, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
widgetEventPrefix: "drag",
|
||||
options: {
|
||||
addClasses: true,
|
||||
@ -11018,7 +11023,7 @@ var widgetsDraggable = $.ui.draggable;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Resizable 1.13.1
|
||||
* jQuery UI Resizable 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -11037,7 +11042,7 @@ var widgetsDraggable = $.ui.draggable;
|
||||
|
||||
|
||||
$.widget( "ui.resizable", $.ui.mouse, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
widgetEventPrefix: "resize",
|
||||
options: {
|
||||
alsoResize: false,
|
||||
@ -12216,7 +12221,7 @@ var widgetsResizable = $.ui.resizable;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Dialog 1.13.1
|
||||
* jQuery UI Dialog 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -12235,7 +12240,7 @@ var widgetsResizable = $.ui.resizable;
|
||||
|
||||
|
||||
$.widget( "ui.dialog", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
options: {
|
||||
appendTo: "body",
|
||||
autoOpen: true,
|
||||
@ -13141,7 +13146,7 @@ var widgetsDialog = $.ui.dialog;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Droppable 1.13.1
|
||||
* jQuery UI Droppable 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -13157,7 +13162,7 @@ var widgetsDialog = $.ui.dialog;
|
||||
|
||||
|
||||
$.widget( "ui.droppable", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
widgetEventPrefix: "drop",
|
||||
options: {
|
||||
accept: "*",
|
||||
@ -13624,7 +13629,7 @@ var widgetsDroppable = $.ui.droppable;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Progressbar 1.13.1
|
||||
* jQuery UI Progressbar 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -13645,7 +13650,7 @@ var widgetsDroppable = $.ui.droppable;
|
||||
|
||||
|
||||
var widgetsProgressbar = $.widget( "ui.progressbar", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
options: {
|
||||
classes: {
|
||||
"ui-progressbar": "ui-corner-all",
|
||||
@ -13787,7 +13792,7 @@ var widgetsProgressbar = $.widget( "ui.progressbar", {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Selectable 1.13.1
|
||||
* jQuery UI Selectable 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -13804,7 +13809,7 @@ var widgetsProgressbar = $.widget( "ui.progressbar", {
|
||||
|
||||
|
||||
var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
options: {
|
||||
appendTo: "body",
|
||||
autoRefresh: true,
|
||||
@ -14085,7 +14090,7 @@ var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Selectmenu 1.13.1
|
||||
* jQuery UI Selectmenu 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -14106,7 +14111,7 @@ var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, {
|
||||
|
||||
|
||||
var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
defaultElement: "<select>",
|
||||
options: {
|
||||
appendTo: null,
|
||||
@ -14479,7 +14484,7 @@ var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
|
||||
// Support: IE
|
||||
// Setting the text selection kills the button focus in IE, but
|
||||
// restoring the focus doesn't kill the selection.
|
||||
this.button.focus();
|
||||
this.button.trigger( "focus" );
|
||||
},
|
||||
|
||||
_documentClick: {
|
||||
@ -14754,7 +14759,7 @@ var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Slider 1.13.1
|
||||
* jQuery UI Slider 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -14773,7 +14778,7 @@ var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, {
|
||||
|
||||
|
||||
var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
widgetEventPrefix: "slide",
|
||||
|
||||
options: {
|
||||
@ -15489,7 +15494,7 @@ var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Sortable 1.13.1
|
||||
* jQuery UI Sortable 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -15506,7 +15511,7 @@ var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, {
|
||||
|
||||
|
||||
var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
widgetEventPrefix: "sort",
|
||||
ready: false,
|
||||
options: {
|
||||
@ -17082,7 +17087,7 @@ var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, {
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Spinner 1.13.1
|
||||
* jQuery UI Spinner 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -17112,7 +17117,7 @@ function spinnerModifier( fn ) {
|
||||
}
|
||||
|
||||
$.widget( "ui.spinner", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
defaultElement: "<input>",
|
||||
widgetEventPrefix: "spin",
|
||||
options: {
|
||||
@ -17643,7 +17648,7 @@ var widgetsSpinner = $.ui.spinner;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Tabs 1.13.1
|
||||
* jQuery UI Tabs 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -17662,7 +17667,7 @@ var widgetsSpinner = $.ui.spinner;
|
||||
|
||||
|
||||
$.widget( "ui.tabs", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
delay: 300,
|
||||
options: {
|
||||
active: null,
|
||||
@ -18547,7 +18552,7 @@ var widgetsTabs = $.ui.tabs;
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI Tooltip 1.13.1
|
||||
* jQuery UI Tooltip 1.13.2
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
@ -18566,7 +18571,7 @@ var widgetsTabs = $.ui.tabs;
|
||||
|
||||
|
||||
$.widget( "ui.tooltip", {
|
||||
version: "1.13.1",
|
||||
version: "1.13.2",
|
||||
options: {
|
||||
classes: {
|
||||
"ui-tooltip": "ui-corner-all ui-widget-shadow"
|
||||
|
||||
4
htdocs/includes/jquery/js/jquery-ui.min.js
vendored
4
htdocs/includes/jquery/js/jquery-ui.min.js
vendored
File diff suppressed because one or more lines are too long
@ -155,14 +155,14 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/workboardresponse.class.php';
|
||||
|
||||
// Number of actions to do (late)
|
||||
if (isModEnabled('agenda') && empty($conf->global->MAIN_DISABLE_BLOCK_AGENDA) && $user->rights->agenda->myactions->read) {
|
||||
if (isModEnabled('agenda') && empty($conf->global->MAIN_DISABLE_BLOCK_AGENDA) && $user->hasRight('agenda', 'myactions', 'read')) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
|
||||
$board = new ActionComm($db);
|
||||
$dashboardlines[$board->element] = $board->load_board($user);
|
||||
}
|
||||
|
||||
// Number of project opened
|
||||
if (!empty($conf->project->enabled) && empty($conf->global->MAIN_DISABLE_BLOCK_PROJECT) && $user->hasRight('projet', 'lire')) {
|
||||
if (isModEnabled('project') && empty($conf->global->MAIN_DISABLE_BLOCK_PROJECT) && $user->hasRight('projet', 'lire')) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
$board = new Project($db);
|
||||
$dashboardlines[$board->element] = $board->load_board($user);
|
||||
@ -202,7 +202,7 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) {
|
||||
}
|
||||
|
||||
// Number of suppliers orders a deal
|
||||
if (isModEnabled('supplier_order') && empty($conf->global->MAIN_DISABLE_BLOCK_SUPPLIER) && $user->rights->fournisseur->commande->lire) {
|
||||
if (isModEnabled('supplier_order') && empty($conf->global->MAIN_DISABLE_BLOCK_SUPPLIER) && $user->hasRight('fournisseur', 'commande', 'lire')) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
|
||||
$board = new CommandeFournisseur($db);
|
||||
$dashboardlines[$board->element.'_opened'] = $board->load_board($user, "opened");
|
||||
@ -235,7 +235,7 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) {
|
||||
}
|
||||
|
||||
// Number of supplier invoices (paid)
|
||||
if (isModEnabled('supplier_invoice') && empty($conf->global->MAIN_DISABLE_BLOCK_SUPPLIER) && !empty($user->rights->fournisseur->facture->lire)) {
|
||||
if (isModEnabled('supplier_invoice') && empty($conf->global->MAIN_DISABLE_BLOCK_SUPPLIER) && $user->hasRight('fournisseur', 'facture', 'lire')) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
|
||||
$board = new FactureFournisseur($db);
|
||||
$dashboardlines[$board->element] = $board->load_board($user);
|
||||
|
||||
Binary file not shown.
@ -78,5 +78,7 @@ ALTER TABLE llx_ticket ADD email_date datetime after email_msgid;
|
||||
|
||||
INSERT INTO llx_const (name, entity, value, type, visible) VALUES ('MAIN_SECURITY_MAX_IMG_IN_HTML_CONTENT', 1, 1000, 'int', 0);
|
||||
|
||||
ALTER TABLE llx_adherent ADD COLUMN default_lang VARCHAR(6) DEFAULT NULL AFTER datefin;
|
||||
|
||||
-- Make sell-by or eat-by date mandatory
|
||||
ALTER TABLE llx_product ADD COLUMN sell_or_eat_by_mandatory tinyint DEFAULT 0 NOT NULL AFTER tobatch;
|
||||
|
||||
@ -71,6 +71,7 @@ create table llx_adherent
|
||||
statut smallint NOT NULL DEFAULT 0,
|
||||
public smallint NOT NULL DEFAULT 0, -- certain champ de la fiche sont ils public ou pas ?
|
||||
datefin datetime, -- end date of validity of the contribution / date de fin de validite de la cotisation
|
||||
default_lang varchar(6) DEFAULT NULL,
|
||||
note_private text DEFAULT NULL,
|
||||
note_public text DEFAULT NULL,
|
||||
model_pdf varchar(255),
|
||||
|
||||
@ -125,18 +125,19 @@ class KnowledgeManagement extends DolibarrApi
|
||||
*
|
||||
* Get a list of knowledgerecords
|
||||
*
|
||||
* @param string $sortfield Sort field
|
||||
* @param string $sortorder Sort order
|
||||
* @param int $limit Limit for list
|
||||
* @param int $page Page number
|
||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
|
||||
* @param string $sortfield Sort field
|
||||
* @param string $sortorder Sort order
|
||||
* @param int $limit Limit for list
|
||||
* @param int $page Page number
|
||||
* @param int $category Use this param to filter list by category
|
||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
|
||||
* @return array Array of order objects
|
||||
*
|
||||
* @throws RestException
|
||||
*
|
||||
* @url GET /knowledgerecords/
|
||||
*/
|
||||
public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
|
||||
public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $category = 0, $sqlfilters = '')
|
||||
{
|
||||
global $db, $conf;
|
||||
|
||||
@ -166,6 +167,9 @@ class KnowledgeManagement extends DolibarrApi
|
||||
if ($restrictonsocid && (!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) {
|
||||
$sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale
|
||||
}
|
||||
if ($category > 0) {
|
||||
$sql .= ", ".$this->db->prefix()."categorie_knowledgemanagement as c";
|
||||
}
|
||||
$sql .= " WHERE 1 = 1";
|
||||
|
||||
// Example of use $mode
|
||||
@ -188,6 +192,11 @@ class KnowledgeManagement extends DolibarrApi
|
||||
if ($restrictonsocid && $search_sale > 0) {
|
||||
$sql .= " AND sc.fk_user = ".((int) $search_sale);
|
||||
}
|
||||
// Select products of given category
|
||||
if ($category > 0) {
|
||||
$sql .= " AND c.fk_categorie = ".((int) $category);
|
||||
$sql .= " AND c.fk_knowledgemanagement = t.rowid";
|
||||
}
|
||||
if ($sqlfilters) {
|
||||
$errormessage = '';
|
||||
if (!DolibarrApi::_checkFilters($sqlfilters, $errormessage)) {
|
||||
|
||||
@ -468,6 +468,24 @@ class KnowledgeRecord extends CommonObject
|
||||
$this->error .= $this->db->lasterror();
|
||||
$errorflag = -1;
|
||||
}
|
||||
|
||||
// Delete all child tables
|
||||
if (!$error) {
|
||||
$elements = array('categorie_knowledgemanagement');
|
||||
foreach ($elements as $table) {
|
||||
if (!$error) {
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX.$table;
|
||||
$sql .= " WHERE fk_knowledgemanagement = ".(int) $this->id;
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if (!$result) {
|
||||
$error++;
|
||||
$this->errors[] = $this->db->lasterror();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->deleteCommon($user, $notrigger);
|
||||
//return $this->deleteCommon($user, $notrigger, 1);
|
||||
}
|
||||
|
||||
@ -2287,6 +2287,13 @@ DoesNotWorkWithAllThemes=Will not work with all themes
|
||||
NoName=No name
|
||||
ShowAdvancedOptions= Show advanced options
|
||||
HideAdvancedoptions= Hide advanced options
|
||||
CIDLookupURL=The module brings an URL that can be used by an external tool to get the name of a thirdparty or contact from its phone number. URL to use is:
|
||||
OauthNotAvailableForAllAndHadToBeCreatedBefore=OAUTH2 authentication is not available for all hosts, and a token with the right permissions must have been created upstream with the OAUTH module
|
||||
MAIN_MAIL_SMTPS_OAUTH_SERVICE=OAUTH2 authentication service
|
||||
DontForgetCreateTokenOauthMod=A token with the right permissions must have been created upstream with the OAUTH module
|
||||
MAIN_MAIL_SMTPS_AUTH_TYPE=Authentification method
|
||||
UsePassword=Use a password
|
||||
UseOauth=Use a OAUTH token
|
||||
Images=Images
|
||||
MaxNumberOfImagesInGetPost=Max number of images allowed in GETPOST check
|
||||
CIDLookupURL=The module brings an URL that can be used by an external tool to get the name of a thirdparty or contact from its phone number. URL to use is:
|
||||
CIDLookupURL=The module brings an URL that can be used by an external tool to get the name of a thirdparty or contact from its phone number. URL to use is:
|
||||
|
||||
@ -328,3 +328,6 @@ FailedToGetFile=Failed to get files %s
|
||||
ErrorFTPNodisconnect=Error to disconnect FTP/SFTP server
|
||||
FileWasUpload=File <b>%s</b> was upload
|
||||
FTPFailedToUploadFile=Failed to upload file <b>%s</b>.
|
||||
AddFolder=Create folder
|
||||
FileWasCreateFolder=Folder <b>%s</b> was create
|
||||
FTPFailedToCreateFolder=Failed to create folder <b>%s</b>.
|
||||
|
||||
@ -2286,3 +2286,10 @@ NoName=Sans nom
|
||||
ShowAdvancedOptions= Show advanced options
|
||||
HideAdvancedoptions= Hide advanced options
|
||||
CIDLookupURL=The module brings an URL that can be used by an external tool to get the name of a thirdparty or contact from its phone number. URL to use is:
|
||||
DoesNotWorkWithAllThemes=Ne fonctionne pas avec tous les thèmes
|
||||
OauthNotAvailableForAllAndHadToBeCreatedBefore=L'authentification OAUTH2 n'est pas disponible pour tous les hôtes, de plus, un jeton avec les bonnes permissions doit avoir été créé en amont avec le module OAUTH
|
||||
MAIN_MAIL_SMTPS_OAUTH_SERVICE=Service d'authentification OAUTH2
|
||||
DontForgetCreateTokenOauthMod=Un jeton avec les bonnes permissions doit avoir été créé en amont avec le module OAUTH
|
||||
MAIN_MAIL_SMTPS_AUTH_TYPE=Méthode d'authentication
|
||||
UsePassword=Utiliser un mot de pass
|
||||
UseOauth=Utiliser un jeton d'authentification OAUTH
|
||||
@ -101,7 +101,7 @@ class Mo extends CommonObject
|
||||
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",),
|
||||
'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'position'=>5, 'notnull'=>1, 'default'=>'1', 'index'=>1),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'showoncombobox'=>'1', 'noteditable'=>1),
|
||||
'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0:t.status=1', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>'$conf->bom->enabled', 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM", 'css'=>'minwidth100 maxwidth300', 'csslist'=>'nowraponall'),
|
||||
'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0:t.status=1', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>'$conf->bom->enabled', 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM", 'css'=>'minwidth100 maxwidth300', 'csslist'=>'nowraponall', 'picto'=>'bom'),
|
||||
'mrptype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>34, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassemble'), 'css'=>'minwidth150', 'csslist'=>'minwidth150 center'),
|
||||
'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:0', 'label'=>'Product', 'enabled'=>'$conf->product->enabled', 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce", 'css'=>'maxwidth300', 'csslist'=>'tdoverflowmax100', 'picto'=>'product'),
|
||||
'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'comment'=>"Qty to produce", 'css'=>'width75', 'default'=>1, 'isameasure'=>1),
|
||||
@ -1375,13 +1375,13 @@ class Mo extends CommonObject
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
// Product or sub-bom
|
||||
print '<td class="linecoldescription">'.$langs->trans('Description');
|
||||
print '<td class="linecoldescription">'.$langs->trans('Ref');
|
||||
if (!empty($conf->global->BOM_SUB_BOM)) {
|
||||
print ' <a id="show_all" href="#">'.img_picto('', 'folder-open', 'class="paddingright"').$langs->trans("ExpandAll").'</a> ';
|
||||
print '<a id="hide_all" href="#">'.img_picto('', 'folder', 'class="paddingright"').$langs->trans("UndoExpandAll").'</a> ';
|
||||
}
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans('Ref').'</td>';
|
||||
// Qty
|
||||
print '<td class="right">'.$langs->trans('Qty');
|
||||
if ($this->bom->bomtype == 0) {
|
||||
print ' <span class="opacitymedium">('.$langs->trans("ForAQuantityOf", $this->bom->qty).')</span>';
|
||||
@ -1395,7 +1395,7 @@ class Mo extends CommonObject
|
||||
print '<td class="center">'.$langs->trans('DisableStockChange').'</td>';
|
||||
print '<td class="center">'.$langs->trans('MoChildGenerate').'</td>';
|
||||
//print '<td class="center">'.$form->showCheckAddButtons('checkforselect', 1).'</td>';
|
||||
// print '<td class="center"></td>';
|
||||
//print '<td class="center"></td>';
|
||||
print '</tr>';
|
||||
$i = 0;
|
||||
|
||||
|
||||
@ -257,6 +257,7 @@ if (empty($reshook)) {
|
||||
|
||||
// Process line to produce
|
||||
$pos = 0;
|
||||
|
||||
foreach ($object->lines as $line) {
|
||||
if ($line->role == 'toproduce') {
|
||||
$tmpproduct = new Product($db);
|
||||
@ -430,6 +431,8 @@ $tmpstockmovement = new MouvementStock($db);
|
||||
$help_url = 'EN:Module_Manufacturing_Orders|FR:Module_Ordres_de_Fabrication';
|
||||
llxHeader('', $langs->trans('Mo'), $help_url, '', 0, 0, array('/mrp/js/lib_dispatch.js.php'));
|
||||
|
||||
$newToken = newToken();
|
||||
|
||||
// Part to show record
|
||||
if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
|
||||
$res = $object->fetch_thirdparty();
|
||||
@ -588,7 +591,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
if ($object->status == $object::STATUS_DRAFT) {
|
||||
if ($permissiontoadd) {
|
||||
if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
|
||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=validate">'.$langs->trans("Validate").'</a>';
|
||||
print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=validate&token='.$newToken.'">'.$langs->trans("Validate").'</a>';
|
||||
} else {
|
||||
$langs->load("errors");
|
||||
print '<a class="butActionRefused" href="" title="'.$langs->trans("ErrorAddAtLeastOneLineFirst").'">'.$langs->trans("Validate").'</a>';
|
||||
@ -599,7 +602,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
// Consume or produce
|
||||
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
||||
if ($permissiontoproduce) {
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consumeorproduce">'.$langs->trans('ConsumeOrProduce').'</a>';
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consumeorproduce&token='.$newToken.'">'.$langs->trans('ConsumeOrProduce').'</a>';
|
||||
} else {
|
||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('ConsumeOrProduce').'</a>';
|
||||
}
|
||||
@ -610,7 +613,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
// ConsumeAndProduceAll
|
||||
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
||||
if ($permissiontoproduce) {
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consumeandproduceall">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consumeandproduceall&token='.$newToken.'">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
||||
} else {
|
||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
||||
}
|
||||
@ -627,21 +630,21 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
$nbProduced += $lineproduced['qty'];
|
||||
}
|
||||
if ($nbProduced > 0) { // If production has started, we can close it
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_produced&confirm=yes">'.$langs->trans("Close").'</a>'."\n";
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_produced&confirm=yes&token='.$newToken.'">'.$langs->trans("Close").'</a>'."\n";
|
||||
} else {
|
||||
print '<a class="butActionRefused" href="#" title="'.$langs->trans("GoOnTabProductionToProduceFirst", $langs->transnoentitiesnoconv("Production")).'">'.$langs->trans("Close").'</a>'."\n";
|
||||
}
|
||||
|
||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_close&confirm=yes">'.$langs->trans("Cancel").'</a>'."\n";
|
||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_close&confirm=yes&token='.$newToken.'">'.$langs->trans("Cancel").'</a>'."\n";
|
||||
}
|
||||
|
||||
if ($object->status == $object::STATUS_CANCELED) {
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_reopen&confirm=yes">'.$langs->trans("Re-Open").'</a>'."\n";
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_reopen&confirm=yes&token='.$newToken.'">'.$langs->trans("Re-Open").'</a>'."\n";
|
||||
}
|
||||
|
||||
if ($object->status == $object::STATUS_PRODUCED) {
|
||||
if ($permissiontoproduce) {
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_reopen">'.$langs->trans('ReOpen').'</a>';
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_reopen&token='.$newToken.'">'.$langs->trans('ReOpen').'</a>';
|
||||
} else {
|
||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('ReOpen').'</a>';
|
||||
}
|
||||
@ -708,7 +711,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
print '<div class="clearboth"></div>';
|
||||
|
||||
$url = $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addconsumeline&token='.newToken();
|
||||
$permissiontoaddaconsumeline = $object->status != $object::STATUS_PRODUCED && $object->status != $object::STATUS_CANCELED && $action != 'consumeorproduce' && $action != 'consumeandproduceall';
|
||||
$permissiontoaddaconsumeline = $object->status != $object::STATUS_PRODUCED && $object->status != $object::STATUS_CANCELED;
|
||||
$parameters = array('morecss'=>'reposition');
|
||||
|
||||
$newcardbutton = '';
|
||||
@ -996,6 +999,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
$i = 1;
|
||||
print '<!-- Enter line to consume -->'."\n";
|
||||
print '<tr name="batch_'.$line->id.'_'.$i.'">';
|
||||
// Ref
|
||||
print '<td><span class="opacitymedium">'.$langs->trans("ToConsume").'</span></td>';
|
||||
$preselected = (GETPOSTISSET('qty-'.$line->id.'-'.$i) ? GETPOST('qty-'.$line->id.'-'.$i) : max(0, $line->qty - $alreadyconsumed));
|
||||
if ($action == 'consumeorproduce' && !GETPOSTISSET('qty-'.$line->id.'-'.$i)) {
|
||||
@ -1044,12 +1048,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
$preselected = (GETPOSTISSET('batch-'.$line->id.'-'.$i) ? GETPOST('batch-'.$line->id.'-'.$i) : '');
|
||||
print '<input type="text" class="width50" name="batch-'.$line->id.'-'.$i.'" value="'.$preselected.'" list="batch-'.$line->id.'-'.$i.'">';
|
||||
print $formproduct->selectLotDataList('batch-'.$line->id.'-'.$i, 0, $line->fk_product, '', '');
|
||||
}
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
if ($tmpproduct->status_batch) {
|
||||
|
||||
$type = 'batch';
|
||||
print img_picto($langs->trans('AddStockLocationLine'), 'split.png', 'class="splitbutton" onClick="addDispatchLine('.$line->id.', \''.$type.'\', \'qtymissingconsume\')"');
|
||||
print ' '.img_picto($langs->trans('AddStockLocationLine'), 'split.png', 'class="splitbutton" onClick="addDispatchLine('.((int) $line->id).', \''.dol_escape_js($type).'\', \'qtymissingconsume\')"');
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
@ -1094,10 +1095,12 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
|
||||
$newcardbutton = '';
|
||||
$url = $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=addproduceline&token='.newToken();
|
||||
$permissiontoaddaproductline = $object->status != $object::STATUS_PRODUCED && $object->status != $object::STATUS_CANCELED && $action != 'consumeorproduce' && $action != 'consumeandproduceall';
|
||||
$permissiontoaddaproductline = $object->status != $object::STATUS_PRODUCED && $object->status != $object::STATUS_CANCELED;
|
||||
$parameters = array('morecss'=>'reposition');
|
||||
if ($nblinetoproduce == 0 || $object->mrptype == 1) {
|
||||
$newcardbutton = dolGetButtonTitle($langs->trans('AddNewProduceLines'), '', 'fa fa-plus-circle size15x', $url, '', $permissiontoaddaproductline, $parameters);
|
||||
if ($action != 'consumeorproduce' && $action != 'consumeandproduceall') {
|
||||
if ($nblinetoproduce == 0 || $object->mrptype == 1) {
|
||||
$newcardbutton = dolGetButtonTitle($langs->trans('AddNewProduceLines'), '', 'fa fa-plus-circle size15x', $url, '', $permissiontoaddaproductline, $parameters);
|
||||
}
|
||||
}
|
||||
|
||||
print load_fiche_titre($langs->trans('Production'), $newcardbutton, '', 0, '', '');
|
||||
@ -1196,12 +1199,15 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
print '<td class="right">'.$line->qty.'</td>';
|
||||
if ($permissiontoupdatecost) {
|
||||
// Defined $manufacturingcost
|
||||
$manufacturingcost = $bomcost;
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->cost_price, 'MU');
|
||||
}
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->pmp, 'MU');
|
||||
$manufacturingcost = 0;
|
||||
if ($object->mrptype == 0) { // If MO is a "Manufacture" type (and not "Disassemble"
|
||||
$manufacturingcost = $bomcost;
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->cost_price, 'MU');
|
||||
}
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->pmp, 'MU');
|
||||
}
|
||||
}
|
||||
|
||||
print '<td class="right nowraponall">';
|
||||
@ -1300,19 +1306,22 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
print '<td class="right"><input type="text" class="width50 right" id="qtytoproduce-'.$line->id.'-'.$i.'" name="qtytoproduce-'.$line->id.'-'.$i.'" value="'.$preselected.'"></td>';
|
||||
if ($permissiontoupdatecost) {
|
||||
// Defined $manufacturingcost
|
||||
$manufacturingcost = $bomcost;
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->cost_price, 'MU');
|
||||
}
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->pmp, 'MU');
|
||||
$manufacturingcost = 0;
|
||||
if ($object->mrptype == 0) { // If MO is a "Manufacture" type (and not "Disassemble"
|
||||
$manufacturingcost = $bomcost;
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->cost_price, 'MU');
|
||||
}
|
||||
if (empty($manufacturingcost)) {
|
||||
$manufacturingcost = price2num($tmpproduct->pmp, 'MU');
|
||||
}
|
||||
}
|
||||
|
||||
if ($tmpproduct->type == Product::TYPE_PRODUCT || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
|
||||
$preselected = (GETPOSTISSET('pricetoproduce-'.$line->id.'-'.$i) ? GETPOST('pricetoproduce-'.$line->id.'-'.$i) : price($manufacturingcost));
|
||||
$preselected = (GETPOSTISSET('pricetoproduce-'.$line->id.'-'.$i) ? GETPOST('pricetoproduce-'.$line->id.'-'.$i) : ($manufacturingcost ? price($manufacturingcost) : ''));
|
||||
print '<td class="right"><input type="text" class="width50 right" name="pricetoproduce-'.$line->id.'-'.$i.'" value="'.$preselected.'"></td>';
|
||||
} else {
|
||||
print '<td><input type="hidden" class="width50 right" name="pricetoproduce-'.$line->id.'-'.$i.'" value="'.$manufacturingcost.'"></td>';
|
||||
print '<td><input type="hidden" class="width50 right" name="pricetoproduce-'.$line->id.'-'.$i.'" value="'.($manufacturingcost ? $manufacturingcost : '').'"></td>';
|
||||
}
|
||||
}
|
||||
print '<td></td>';
|
||||
|
||||
@ -44,6 +44,7 @@ $res = $tmpbom->fetch($line->fk_bom_child);
|
||||
<!-- BEGIN PHP TEMPLATE originproductline.tpl.php -->
|
||||
<?php
|
||||
print '<tr class="oddeven'.(empty($this->tpl['strike']) ? '' : ' strikefordisabled').'">';
|
||||
// Ref or label
|
||||
print '<td>';
|
||||
if ($res) {
|
||||
print $tmpproduct->getNomUrl(1);
|
||||
@ -58,7 +59,7 @@ if ($res) {
|
||||
print $this->tpl['label'];
|
||||
}
|
||||
print '</td>';
|
||||
//print '<td>'.$this->tpl['label'].'</td>';
|
||||
// Qty
|
||||
print '<td class="right">'.$this->tpl['qty'].(($this->tpl['efficiency'] > 0 && $this->tpl['efficiency'] < 1) ? ' / '.$form->textwithpicto($this->tpl['efficiency'], $langs->trans("ValueOfMeansLoss")).' = '.$qtytoconsumeforline : '').'</td>';
|
||||
print '<td class="center">'.(empty($this->tpl['stock']) ? 0 : price2num($this->tpl['stock'], 'MS'));
|
||||
if ($this->tpl['seuil_stock_alerte'] != '' && ($this->tpl['stock'] < $this->tpl['seuil_stock_alerte'])) {
|
||||
@ -78,18 +79,19 @@ $selected = 1;
|
||||
if (!empty($selectedLines) && !in_array($this->tpl['id'], $selectedLines)) {
|
||||
$selected = 0;
|
||||
}
|
||||
print '<td class="center">';
|
||||
//print '<input id="cb'.$this->tpl['id'].'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$this->tpl['id'].'"'.($selected?' checked="checked"':'').'>';
|
||||
print '</td>';
|
||||
|
||||
if ($tmpbom->id) {
|
||||
if ($tmpbom->id > 0) {
|
||||
print '<td class="center">';
|
||||
print '<input type="checkbox" name="bomlineid[]" value="' . $line->id . '">';
|
||||
print '</td>';
|
||||
} else {
|
||||
print '<td class="center"> </td>';
|
||||
print '<td class="center"></td>';
|
||||
}
|
||||
|
||||
//print '<td class="center">';
|
||||
//print '<input id="cb'.$this->tpl['id'].'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$this->tpl['id'].'"'.($selected?' checked="checked"':'').'>';
|
||||
//print '</td>';
|
||||
|
||||
print '</tr>'."\n";
|
||||
|
||||
// Select of all the sub-BOM lines
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
* Copyright (C) 2016-2022 Charlene Benke <charlene@patas-monkey.com>
|
||||
* Copyright (C) 2016 Meziane Sof <virtualsof@yahoo.fr>
|
||||
* Copyright (C) 2017 Josep Lluís Amador <joseplluis@lliuretic.cat>
|
||||
* Copyright (C) 2019-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2019-2022 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2019-2020 Thibault FOUCART <support@ptibogxiv.net>
|
||||
* Copyright (C) 2020 Pierre Ardoin <mapiolca@me.com>
|
||||
*
|
||||
@ -1973,7 +1973,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
|
||||
|
||||
// We use dolibarr_details as type of DolEditor here, because we must not accept images as description is included into PDF and not accepted by TCPDF.
|
||||
$doleditor = new DolEditor('desc', $object->description, '', 160, 'dolibarr_details', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_4, '90%');
|
||||
$doleditor = new DolEditor('desc', GETPOSTISSET('desc') ? GETPOST('desc', 'restricthtml') : $object->description, '', 160, 'dolibarr_details', '', false, true, getDolGlobalInt('FCKEDITOR_ENABLE_PRODUCTDESC'), ROWS_4, '90%');
|
||||
$doleditor->Create();
|
||||
|
||||
print "</td></tr>";
|
||||
@ -1983,7 +1983,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
if (empty($conf->global->PRODUCT_DISABLE_PUBLIC_URL)) {
|
||||
print '<tr><td>'.$langs->trans("PublicUrl").'</td><td>';
|
||||
print img_picto('', 'globe', 'class="pictofixedwidth"');
|
||||
print '<input type="text" name="url" class="quatrevingtpercent" value="'.$object->url.'">';
|
||||
print '<input type="text" name="url" class="quatrevingtpercent" value="'.(GETPOSTISSET('url') ? GETPOST('url') : $object->url).'">';
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
|
||||
@ -253,7 +253,7 @@ class Products extends DolibarrApi
|
||||
if (!$ids_only) {
|
||||
$product_static = new Product($this->db);
|
||||
if ($product_static->fetch($obj->rowid)) {
|
||||
if ($includestockdata && DolibarrApiAccess::$user->rights->stock->lire) {
|
||||
if (!empty($includestockdata) && DolibarrApiAccess::$user->rights->stock->lire) {
|
||||
$product_static->load_stock();
|
||||
|
||||
if (is_array($product_static->stock_warehouse)) {
|
||||
@ -1644,10 +1644,10 @@ class Products extends DolibarrApi
|
||||
$combinations[$key]->attributes = $prodc2vp->fetchByFkCombination((int) $combination->id);
|
||||
$combinations[$key] = $this->_cleanObjectDatas($combinations[$key]);
|
||||
|
||||
if ($includestock==1 && DolibarrApiAccess::$user->rights->stock->lire) {
|
||||
if (!empty($includestock) && DolibarrApiAccess::$user->rights->stock->lire) {
|
||||
$productModel = new Product($this->db);
|
||||
$productModel->fetch((int) $combination->fk_product_child);
|
||||
$productModel->load_stock();
|
||||
$productModel->load_stock($includestock);
|
||||
$combinations[$key]->stock_warehouse = $this->_cleanObjectDatas($productModel)->stock_warehouse;
|
||||
}
|
||||
}
|
||||
@ -2040,8 +2040,8 @@ class Products extends DolibarrApi
|
||||
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||
}
|
||||
|
||||
if ($includestockdata && DolibarrApiAccess::$user->rights->stock->lire) {
|
||||
$this->product->load_stock();
|
||||
if (!empty($includestockdata) && DolibarrApiAccess::$user->rights->stock->lire) {
|
||||
$this->product->load_stock($includestockdata);
|
||||
|
||||
if (is_array($this->product->stock_warehouse)) {
|
||||
foreach ($this->product->stock_warehouse as $keytmp => $valtmp) {
|
||||
|
||||
@ -3038,12 +3038,13 @@ class Product extends CommonObject
|
||||
/**
|
||||
* Charge tableau des stats commande fournisseur pour le produit/service
|
||||
*
|
||||
* @param int $socid Id societe pour filtrer sur une societe
|
||||
* @param string $filtrestatut Id des statuts pour filtrer sur des statuts
|
||||
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
||||
* @return int Array of stats in $this->stats_commande_fournisseur, <0 if ko or >0 if ok
|
||||
* @param int $socid Id societe pour filtrer sur une societe
|
||||
* @param string $filtrestatut Id des statuts pour filtrer sur des statuts
|
||||
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
||||
* @param int $dateofvirtualstock Date of virtual stock
|
||||
* @return int Array of stats in $this->stats_commande_fournisseur, <0 if ko or >0 if ok
|
||||
*/
|
||||
public function load_stats_commande_fournisseur($socid = 0, $filtrestatut = '', $forVirtualStock = 0)
|
||||
public function load_stats_commande_fournisseur($socid = 0, $filtrestatut = '', $forVirtualStock = 0, $dateofvirtualstock = null)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf, $user, $hookmanager, $action;
|
||||
@ -3069,6 +3070,9 @@ class Product extends CommonObject
|
||||
if ($filtrestatut != '') {
|
||||
$sql .= " AND c.fk_statut in (".$this->db->sanitize($filtrestatut).")"; // Peut valoir 0
|
||||
}
|
||||
if (!empty($dateofvirtualstock)) {
|
||||
$sql .= " AND c.date_livraison <= '".$this->db->idate($dateofvirtualstock)."'";
|
||||
}
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
@ -3181,12 +3185,13 @@ class Product extends CommonObject
|
||||
/**
|
||||
* Charge tableau des stats réception fournisseur pour le produit/service
|
||||
*
|
||||
* @param int $socid Id societe pour filtrer sur une societe
|
||||
* @param string $filtrestatut Id statut pour filtrer sur un statut
|
||||
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
||||
* @param int $socid Id societe pour filtrer sur une societe
|
||||
* @param string $filtrestatut Id statut pour filtrer sur un statut
|
||||
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
||||
* @param int $dateofvirtualstock Date of virtual stock
|
||||
* @return int Array of stats in $this->stats_reception, <0 if ko or >0 if ok
|
||||
*/
|
||||
public function load_stats_reception($socid = 0, $filtrestatut = '', $forVirtualStock = 0)
|
||||
public function load_stats_reception($socid = 0, $filtrestatut = '', $forVirtualStock = 0, $dateofvirtualstock = null)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf, $user, $hookmanager, $action;
|
||||
@ -3212,6 +3217,9 @@ class Product extends CommonObject
|
||||
if ($filtrestatut <> '') {
|
||||
$sql .= " AND cf.fk_statut IN (".$this->db->sanitize($filtrestatut).")";
|
||||
}
|
||||
if (!empty($dateofvirtualstock)) {
|
||||
$sql .= " AND fd.datec <= '".$this->db->idate($dateofvirtualstock)."'";
|
||||
}
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
@ -3238,12 +3246,13 @@ class Product extends CommonObject
|
||||
/**
|
||||
* Charge tableau des stats production pour le produit/service
|
||||
*
|
||||
* @param int $socid Id societe pour filtrer sur une societe
|
||||
* @param string $filtrestatut Id statut pour filtrer sur un statut
|
||||
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
||||
* @param int $socid Id societe pour filtrer sur une societe
|
||||
* @param string $filtrestatut Id statut pour filtrer sur un statut
|
||||
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
||||
* @param int $dateofvirtualstock Date of virtual stock
|
||||
* @return integer Array of stats in $this->stats_mrptoproduce (nb=nb of order, qty=qty ordered), <0 if ko or >0 if ok
|
||||
*/
|
||||
public function load_stats_inproduction($socid = 0, $filtrestatut = '', $forVirtualStock = 0)
|
||||
public function load_stats_inproduction($socid = 0, $filtrestatut = '', $forVirtualStock = 0, $dateofvirtualstock = null)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf, $user, $hookmanager, $action;
|
||||
@ -3268,6 +3277,9 @@ class Product extends CommonObject
|
||||
if ($filtrestatut <> '') {
|
||||
$sql .= " AND m.status IN (".$this->db->sanitize($filtrestatut).")";
|
||||
}
|
||||
if (!empty($dateofvirtualstock)) {
|
||||
$sql .= " AND m.date_valid <= '".$this->db->idate($dateofvirtualstock)."'"; // better date to code ? end of production ?
|
||||
}
|
||||
$sql .= " GROUP BY role";
|
||||
|
||||
$this->stats_mrptoconsume['customers'] = 0;
|
||||
@ -5037,7 +5049,7 @@ class Product extends CommonObject
|
||||
$result .= (img_object(($notooltip ? '' : $label), 'service', ($notooltip ? 'class="paddingright"' : 'class="paddingright classfortooltip"'), 0, 0, $notooltip ? 0 : 1));
|
||||
}
|
||||
}
|
||||
$result .= $newref;
|
||||
$result .= dol_escape_htmltag($newref);
|
||||
$result .= $linkend;
|
||||
if ($withpicto != 2) {
|
||||
$result .= (($add_label && $this->label) ? $sep.dol_trunc($this->label, ($add_label > 1 ? $add_label : 0)) : '');
|
||||
@ -5346,10 +5358,11 @@ class Product extends CommonObject
|
||||
* @param string $option '' = Load all stock info, also from closed and internal warehouses, 'nobatch', 'novirtual'
|
||||
* You can also filter on 'warehouseclosed', 'warehouseopen', 'warehouseinternal'
|
||||
* @param int $includedraftpoforvirtual Include draft status of PO for virtual stock calculation
|
||||
* @param int $dateofvirtualstock Date of virtual stock
|
||||
* @return int < 0 if KO, > 0 if OK
|
||||
* @see load_virtual_stock(), loadBatchInfo()
|
||||
*/
|
||||
public function load_stock($option = '', $includedraftpoforvirtual = null)
|
||||
public function load_stock($option = '', $includedraftpoforvirtual = null, $dateofvirtualstock = null)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf;
|
||||
@ -5407,7 +5420,7 @@ class Product extends CommonObject
|
||||
$this->db->free($result);
|
||||
|
||||
if (!preg_match('/novirtual/', $option)) {
|
||||
$this->load_virtual_stock($includedraftpoforvirtual); // This also load all arrays stats_xxx...
|
||||
$this->load_virtual_stock($includedraftpoforvirtual, $dateofvirtualstock); // This also load all arrays stats_xxx...
|
||||
}
|
||||
|
||||
return 1;
|
||||
@ -5424,10 +5437,11 @@ class Product extends CommonObject
|
||||
* This function need a lot of load. If you use it on list, use a cache to execute it one for each product id.
|
||||
*
|
||||
* @param int $includedraftpoforvirtual Include draft status and not yet approved Purchase Orders for virtual stock calculation
|
||||
* @param int $dateofvirtualstock Date of virtual stock
|
||||
* @return int < 0 if KO, > 0 if OK
|
||||
* @see load_stock(), loadBatchInfo()
|
||||
*/
|
||||
public function load_virtual_stock($includedraftpoforvirtual = null)
|
||||
public function load_virtual_stock($includedraftpoforvirtual = null, $dateofvirtualstock = null)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf, $hookmanager, $action;
|
||||
@ -5466,7 +5480,7 @@ class Product extends CommonObject
|
||||
if (isset($includedraftpoforvirtual)) {
|
||||
$filterStatus = '0,1,2,'.$filterStatus; // 1,2 may have already been inside $filterStatus but it is better to have twice than missing $filterStatus does not include them
|
||||
}
|
||||
$result = $this->load_stats_commande_fournisseur(0, $filterStatus, 1);
|
||||
$result = $this->load_stats_commande_fournisseur(0, $filterStatus, 1, $dateofvirtualstock);
|
||||
if ($result < 0) {
|
||||
dol_print_error($this->db, $this->error);
|
||||
}
|
||||
@ -5478,7 +5492,7 @@ class Product extends CommonObject
|
||||
if (isset($includedraftpoforvirtual)) {
|
||||
$filterStatus = '0,'.$filterStatus;
|
||||
}
|
||||
$result = $this->load_stats_reception(0, $filterStatus, 1);
|
||||
$result = $this->load_stats_reception(0, $filterStatus, 1, $dateofvirtualstock);
|
||||
if ($result < 0) {
|
||||
dol_print_error($this->db, $this->error);
|
||||
}
|
||||
@ -5490,14 +5504,14 @@ class Product extends CommonObject
|
||||
if (isset($includedraftpoforvirtual)) {
|
||||
$filterStatus = '0,'.$filterStatus;
|
||||
}
|
||||
$result = $this->load_stats_reception(0, $filterStatus, 1); // Use same tables than when module reception is not used.
|
||||
$result = $this->load_stats_reception(0, $filterStatus, 1, $dateofvirtualstock); // Use same tables than when module reception is not used.
|
||||
if ($result < 0) {
|
||||
dol_print_error($this->db, $this->error);
|
||||
}
|
||||
$stock_reception_fournisseur = $this->stats_reception['qty'];
|
||||
}
|
||||
if (!empty($conf->mrp->enabled)) {
|
||||
$result = $this->load_stats_inproduction(0, '1,2', 1);
|
||||
$result = $this->load_stats_inproduction(0, '1,2', 1, $dateofvirtualstock);
|
||||
if ($result < 0) {
|
||||
dol_print_error($this->db, $this->error);
|
||||
}
|
||||
@ -6196,8 +6210,6 @@ class Product extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Class to manage products or services.
|
||||
* Do not use 'Service' as class name since it is already used by APIs.
|
||||
|
||||
@ -471,6 +471,7 @@ if ($id > 0 || $ref) {
|
||||
print load_fiche_titre($langs->trans("AddSupplierPrice"));
|
||||
}
|
||||
|
||||
print "<!-- form to add a supplier price -->\n";
|
||||
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'" method="POST">';
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="action" value="save_price">';
|
||||
@ -480,7 +481,7 @@ if ($id > 0 || $ref) {
|
||||
print '<table class="border centpercent">';
|
||||
|
||||
// Supplier
|
||||
print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Supplier").'</td><td>';
|
||||
print '<tr><td class="titlefield fieldrequired">'.$langs->trans("Supplier").'</td><td>';
|
||||
if ($rowid) {
|
||||
$supplier = new Fournisseur($db);
|
||||
$supplier->fetch($socid);
|
||||
@ -636,7 +637,7 @@ if ($id > 0 || $ref) {
|
||||
$currencycodetouse = $conf->currency;
|
||||
}
|
||||
print $form->selectMultiCurrency($currencycodetouse, "multicurrency_code", 1);
|
||||
print ' '.$langs->trans("CurrencyRate").' ';
|
||||
print ' '.$langs->trans("CurrencyRate").' ';
|
||||
print '<input class="flat" name="multicurrency_tx" size="4" value="'.vatrate(GETPOST('multicurrency_tx') ? GETPOST('multicurrency_tx') : (isset($object->fourn_multicurrency_tx) ? $object->fourn_multicurrency_tx : '')).'">';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
@ -336,11 +336,11 @@ if ($action == 'importCSV' && !empty($user->rights->stock->mouvement->creer)) {
|
||||
continue;
|
||||
}
|
||||
//var_dump($data);
|
||||
$tmp_id_sw = (int) $data[$i][0]['val'];
|
||||
$tmp_id_tw = (int) $data[$i][1]['val'];
|
||||
$tmp_id_product = (int) $data[$i][2]['val'];
|
||||
$tmp_qty = price2num((float) $data[$i][3]['val'], 'MS');
|
||||
$tmp_batch = dol_escape_htmltag($data[$i][4]['val']);
|
||||
$tmp_id_sw = $data[$i][0]['val'];
|
||||
$tmp_id_tw = $data[$i][1]['val'];
|
||||
$tmp_id_product = $data[$i][2]['val'];
|
||||
$tmp_qty = $data[$i][3]['val'];
|
||||
$tmp_batch = $data[$i][4]['val'];
|
||||
|
||||
if (!is_numeric($tmp_id_product)) {
|
||||
$result = fetchref($productstatic, $tmp_id_product);
|
||||
@ -604,11 +604,11 @@ print '</td>';
|
||||
if (isModEnabled('productbatch')) {
|
||||
print '<td>';
|
||||
print img_picto($langs->trans("LotSerial"), 'lot', 'class="paddingright"');
|
||||
print '<input type="text" name="batch" class="flat maxwidth50" value="'.$batch.'">';
|
||||
print '<input type="text" name="batch" class="flat maxwidth50" value="'.dol_escape_htmltag($batch).'">';
|
||||
print '</td>';
|
||||
}
|
||||
// Qty
|
||||
print '<td class="center"><input type="text" class="flat maxwidth50" name="qty" value="'.$qty.'"></td>';
|
||||
print '<td class="center"><input type="text" class="flat maxwidth50" name="qty" value="'.price2num((float) $qty, 'MS').'"></td>';
|
||||
// Button to add line
|
||||
print '<td class="right"><input type="submit" class="button" name="addline" value="'.dol_escape_htmltag($titletoadd).'"></td>';
|
||||
|
||||
@ -641,14 +641,14 @@ foreach ($listofdata as $key => $val) {
|
||||
print $warehousestatict->getNomUrl(1);
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
print $productstatic->getNomUrl(1).' - '.$productstatic->label;
|
||||
print $productstatic->getNomUrl(1).' - '.dol_escape_htmltag($productstatic->label);
|
||||
print '</td>';
|
||||
if (isModEnabled('productbatch')) {
|
||||
print '<td>';
|
||||
print $val['batch'];
|
||||
print dol_escape_htmltag($val['batch']);
|
||||
print '</td>';
|
||||
}
|
||||
print '<td class="center">'.$val['qty'].'</td>';
|
||||
print '<td class="center">'.price2num((float) $val['qty'], 'MS').'</td>';
|
||||
print '<td class="right"><a href="'.$_SERVER["PHP_SELF"].'?action=delline&token='.newToken().'&idline='.$val['id'].'">'.img_delete($langs->trans("Remove")).'</a></td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
@ -518,13 +518,9 @@ while ($i < ($limit ? min($num, $limit) : $num)) {
|
||||
}
|
||||
|
||||
if ($mode == 'future') {
|
||||
$prod->load_stock('warehouseopen, warehouseinternal', 0); // This call also ->load_virtual_stock()
|
||||
|
||||
//$result = $prod->load_stats_reception(0, '4');
|
||||
//print $prod->stats_commande_fournisseur['qty'].'<br>'."\n";
|
||||
//print $prod->stats_reception['qty'];
|
||||
|
||||
$stock = '<span class="opacitymedium">'.$langs->trans("FeatureNotYetAvailable").'</span>';
|
||||
$prod->load_stock('warehouseopen, warehouseinternal', 0, $dateendofday);
|
||||
$stock = $prod->stock_theorique;
|
||||
$prod->load_stock('warehouseopen, warehouseinternal', 0);
|
||||
$virtualstock = $prod->stock_theorique;
|
||||
} else {
|
||||
if ($fk_warehouse > 0) {
|
||||
|
||||
@ -106,7 +106,7 @@ if ($object->element == 'stock') {
|
||||
print '<td class="fieldrequired">'.$langs->trans("NumberOfUnit").'</td>';
|
||||
print '<td>';
|
||||
if ($object->element == 'product' || $object->element == 'stock') {
|
||||
print '<select name="mouvement" id="mouvement" class="minwidth100 valignmiddle">';
|
||||
print '<select name="mouvement" id="mouvement" class="minwidth125 valignmiddle">';
|
||||
print '<option value="0">'.$langs->trans("Add").'</option>';
|
||||
print '<option value="1"'.(GETPOST('mouvement') ? ' selected="selected"' : '').'>'.$langs->trans("Delete").'</option>';
|
||||
print '</select>';
|
||||
@ -134,7 +134,7 @@ if (!empty($conf->productbatch->enabled) &&
|
||||
) {
|
||||
print '<tr>';
|
||||
print '<td'.($object->element == 'stock' ? '' : ' class="fieldrequired"').'>'.$langs->trans("batch_number").'</td><td colspan="3">';
|
||||
print '<input type="text" name="batch_number" size="40" value="'.GETPOST("batch_number").'">';
|
||||
print '<input type="text" name="batch_number" class="minwidth300" value="'.GETPOST("batch_number").'">';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
print '<tr>';
|
||||
@ -161,7 +161,7 @@ if (!empty($conf->project->enabled)) {
|
||||
print '<td>'.$langs->trans('Project').'</td>';
|
||||
print '<td>';
|
||||
print img_picto('', 'project');
|
||||
$formproject->select_projects(-1, '', 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 0, 0, 'maxwidth300');
|
||||
$formproject->select_projects(-1, '', 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 0, 0, 'maxwidth300 widthcentpercentminusx');
|
||||
print '</td>';
|
||||
}
|
||||
print '</tr>';
|
||||
@ -171,7 +171,7 @@ $valformovementlabel = ((GETPOST("label") && (GETPOST('label') != $langs->trans(
|
||||
print '<tr>';
|
||||
print '<td>'.$langs->trans("MovementLabel").'</td>';
|
||||
print '<td>';
|
||||
print '<input type="text" name="label" class="minwidth300" value="'.$valformovementlabel.'">';
|
||||
print '<input type="text" name="label" class="minwidth400" value="'.dol_escape_htmltag($valformovementlabel).'">';
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("InventoryCode").'</td>';
|
||||
print '<td>';
|
||||
|
||||
@ -75,7 +75,7 @@ if ($object->element == 'product') {
|
||||
print img_picto('', 'stock');
|
||||
$selected = (GETPOST("dwid") ?GETPOST("dwid", 'int') : (GETPOST('id_entrepot') ?GETPOST('id_entrepot', 'int') : ($object->element == 'product' && $object->fk_default_warehouse ? $object->fk_default_warehouse : 'ifone')));
|
||||
$warehousestatus = 'warehouseopen,warehouseinternal';
|
||||
print $formproduct->selectWarehouses($selected, 'id_entrepot', $warehousestatus, 1);
|
||||
print $formproduct->selectWarehouses($selected, 'id_entrepot', $warehousestatus, 1, 0, 0, '', 0, 0, array(), 'minwidth75 maxwidth300 widthcentpercentminusx');
|
||||
print '</td>';
|
||||
}
|
||||
if ($object->element == 'stock') {
|
||||
@ -87,7 +87,7 @@ if ($object->element == 'stock') {
|
||||
}
|
||||
|
||||
print '<td class="fieldrequired">'.$langs->trans("WarehouseTarget").'</td><td>';
|
||||
print img_picto('', 'stock').$formproduct->selectWarehouses(GETPOST('id_entrepot_destination'), 'id_entrepot_destination', 'warehouseopen,warehouseinternal', 1);
|
||||
print img_picto('', 'stock').$formproduct->selectWarehouses(GETPOST('id_entrepot_destination'), 'id_entrepot_destination', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, array(), 'minwidth75 maxwidth300 widthcentpercentminusx');
|
||||
print '</td></tr>';
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("NumberOfUnit").'</td><td colspan="3"><input type="text" name="nbpiece" class="center maxwidth75" value="'.dol_escape_htmltag(GETPOST("nbpiece")).'"></td>';
|
||||
print '</tr>';
|
||||
@ -104,7 +104,7 @@ if (!empty($conf->productbatch->enabled) &&
|
||||
print '<input type="text" name="batch_number_bis" size="40" disabled="disabled" value="'.(GETPOST('batch_number') ?GETPOST('batch_number') : $pdluo->batch).'">';
|
||||
print '<input type="hidden" name="batch_number" value="'.(GETPOST('batch_number') ?GETPOST('batch_number') : $pdluo->batch).'">';
|
||||
} else {
|
||||
print '<input type="text" name="batch_number" size="40" value="'.(GETPOST('batch_number') ?GETPOST('batch_number') : $pdluo->batch).'">';
|
||||
print '<input type="text" name="batch_number" class="minwidth300" value="'.(GETPOST('batch_number') ? GETPOST('batch_number') : $pdluo->batch).'">';
|
||||
}
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
@ -128,7 +128,7 @@ $valformovementlabel = (GETPOST("label") ? GETPOST("label") : $langs->trans("Mov
|
||||
print '<tr>';
|
||||
print '<td>'.$langs->trans("MovementLabel").'</td>';
|
||||
print '<td>';
|
||||
print '<input type="text" name="label" class="minwidth300" value="'.$valformovementlabel.'">';
|
||||
print '<input type="text" name="label" class="minwidth300" value="'.dol_escape_htmltag($valformovementlabel).'">';
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("InventoryCode").'</td>';
|
||||
print '<td>';
|
||||
|
||||
@ -373,6 +373,7 @@ if ($ispaymentok) {
|
||||
}
|
||||
if (empty($user->rights->adherent)) {
|
||||
$user->rights->adherent = new stdClass();
|
||||
$user->rights->adherent->cotisation = new stdClass();
|
||||
}
|
||||
$user->rights->societe->creer = 1;
|
||||
$user->rights->facture->creer = 1;
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
* Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2018-2021 Philippe Grand <philippe.grand@atoo-net.com>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2018-2022 Frédéric France <frederic.france@netlogic.fr>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -22,12 +22,12 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/modules/recruitment/doc/doc_generic_recruitmentjobposition_odt.modules.php
|
||||
* \file htdocs/recruitment/core/modules/recruitment/doc/doc_generic_recruitmentjobposition_odt.modules.php
|
||||
* \ingroup recruitment
|
||||
* \brief File of class to build ODT documents for recruitmentjobpositions
|
||||
*/
|
||||
|
||||
dol_include_once('/recruitment/core/modules/recruitment/modules_recruitmentjobposition.php');
|
||||
require_once DOL_DOCUMENT_ROOT.'/recruitment/core/modules/recruitment/modules_recruitmentjobposition.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
@ -234,7 +234,7 @@ class doc_generic_recruitmentjobposition_odt extends ModelePDFRecruitmentJobPosi
|
||||
|
||||
$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
|
||||
|
||||
if ($conf->commande->dir_output) {
|
||||
if ($conf->recruitment->dir_output) {
|
||||
// If $object is id instead of object
|
||||
if (!is_object($object)) {
|
||||
$id = $object;
|
||||
@ -246,7 +246,7 @@ class doc_generic_recruitmentjobposition_odt extends ModelePDFRecruitmentJobPosi
|
||||
}
|
||||
}
|
||||
|
||||
$dir = $conf->commande->multidir_output[isset($object->entity) ? $object->entity : 1];
|
||||
$dir = $conf->recruitment->multidir_output[isset($object->entity) ? $object->entity : 1].'/recruitmentjobposition/';
|
||||
$objectref = dol_sanitizeFileName($object->ref);
|
||||
if (!preg_match('/specimen/i', $objectref)) {
|
||||
$dir .= "/".$objectref;
|
||||
|
||||
@ -21,41 +21,21 @@
|
||||
* \brief Page to create/edit/view recruitmentjobposition
|
||||
*/
|
||||
|
||||
//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Do not create database handler $db
|
||||
//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Do not load object $user
|
||||
//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); // Do not load object $mysoc
|
||||
//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Do not load object $langs
|
||||
//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION','1'); // Do not check injection attack on GET parameters
|
||||
//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION','1'); // Do not check injection attack on POST parameters
|
||||
//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK','1'); // Do not check CSRF attack (test on referer + on token if option MAIN_SECURITY_CSRF_WITH_TOKEN is on).
|
||||
//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL','1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on)
|
||||
//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK','1'); // Do not check style html tag into posted data
|
||||
//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1'); // If there is no need to load and show top and left menu
|
||||
//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't need to load the html.form.class.php
|
||||
//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); // Do not load ajax.lib.php library
|
||||
//if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session). This include the NOIPCHECK too.
|
||||
//if (! defined('NOIPCHECK')) define('NOIPCHECK','1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip
|
||||
//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT','auto'); // Force lang to a particular value
|
||||
//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE','aloginmodule'); // Force authentication handler
|
||||
//if (! defined("NOREDIRECTBYMAINTOLOGIN")) define('NOREDIRECTBYMAINTOLOGIN',1); // The main.inc.php does not make a redirect if not logged, instead show simple error message
|
||||
//if (! defined("FORCECSP")) define('FORCECSP','none'); // Disable all Content Security Policies
|
||||
|
||||
|
||||
// Load Dolibarr environment
|
||||
require_once '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
dol_include_once('/recruitment/class/recruitmentjobposition.class.php');
|
||||
dol_include_once('/recruitment/lib/recruitment_recruitmentjobposition.lib.php');
|
||||
require_once DOL_DOCUMENT_ROOT.'/recruitment/class/recruitmentjobposition.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/recruitment/lib/recruitment_recruitmentjobposition.lib.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("recruitment", "other"));
|
||||
|
||||
// Get parameters
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$confirm = GETPOST('confirm', 'alpha');
|
||||
$cancel = GETPOST('cancel', 'aZ09');
|
||||
|
||||
@ -28,8 +28,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||
dol_include_once('/recruitment/class/recruitmentjobposition.class.php');
|
||||
dol_include_once('/recruitment/lib/recruitment_recruitmentjobposition.lib.php');
|
||||
require_once DOL_DOCUMENT_ROOT.'/recruitment/class/recruitmentjobposition.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/recruitment/lib/recruitment_recruitmentjobposition.lib.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("recruitment", "companies", "other", "mails"));
|
||||
|
||||
@ -655,6 +655,10 @@ if ($conf->global->TAKEPOS_ENABLE_SUMUP) {
|
||||
}
|
||||
}
|
||||
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $invoice, $action); // Note that $action and $object may have been modified by hook
|
||||
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||
|
||||
$class = ($i == 3) ? "calcbutton3" : "calcbutton2";
|
||||
foreach ($action_buttons as $button) {
|
||||
$newclass = $class.($button["class"] ? " ".$button["class"] : "");
|
||||
|
||||
@ -1642,6 +1642,7 @@ if ($action == 'create' || $action == 'adduserldap') {
|
||||
//$s=picto_from_langcode($object->default_lang);
|
||||
//print ($s?$s.' ':'');
|
||||
$labellang = ($object->lang ? $langs->trans('Language_'.$object->lang) : '');
|
||||
print picto_from_langcode($object->lang, 'class="paddingrightonly saturatemedium opacitylow"');
|
||||
print $labellang;
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
@ -2073,6 +2073,8 @@ class User extends CommonObject
|
||||
$adh->phone = $this->office_phone;
|
||||
$adh->phone_mobile = $this->user_mobile;
|
||||
|
||||
$adh->default_lang = $this->lang;
|
||||
|
||||
$adh->user_id = $this->id;
|
||||
$adh->user_login = $this->login;
|
||||
|
||||
@ -2117,6 +2119,8 @@ class User extends CommonObject
|
||||
$tmpobj->phone_mobile = $this->user_mobile;
|
||||
$tmpobj->fax = $this->office_fax;
|
||||
|
||||
$tmpobj->default_lang = $this->lang;
|
||||
|
||||
$tmpobj->address = $this->address;
|
||||
$tmpobj->town = $this->town;
|
||||
$tmpobj->zip = $this->zip;
|
||||
|
||||
@ -2741,8 +2741,12 @@ if (!GETPOST('hide_websitemenu')) {
|
||||
|
||||
print '<input type="submit" class="button bordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("CloneSite")).'" name="createfromclone">';
|
||||
|
||||
//print '<input type="submit" class="buttonDelete bordertransp" name="deletesite" value="'.$langs->trans("Delete").'"'.($atleastonepage ? ' disabled="disabled"' : '').'>';
|
||||
print '<input type="submit" class="buttonDelete bordertransp" name="deletesite" value="'.$langs->trans("Delete").'">';
|
||||
// Delete website
|
||||
if ($website->status == $website::STATUS_VALIDATED) {
|
||||
print '<input type="submit" class="buttonDelete bordertransp" name="deletesite" value="'.$langs->trans("Delete").'" disabled="disabled" title="'.dol_escape_htmltag($langs->trans("WebsiteMustBeDisabled")).'">';
|
||||
} else {
|
||||
print '<input type="submit" class="buttonDelete bordertransp" name="deletesite" value="'.$langs->trans("Delete").'"'.($atleastonepage ? ' disabled="disabled"' : '').'>';
|
||||
}
|
||||
|
||||
// Regenerate all pages
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=regeneratesite&token='.newToken().'&website='.urlencode($website->ref).'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("RegenerateWebsiteContent")).'"><span class="far fa-hdd"></span></a>';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user