Merge branch 'develop' of github.com:Dolibarr/dolibarr into dev_new_rank_contract_line_20512

This commit is contained in:
Florian HENRY 2022-10-09 14:12:39 +02:00
commit e2e4e63bd1
286 changed files with 84760 additions and 579 deletions

View File

@ -15,9 +15,10 @@
<exclude-pattern type="relative">htdocs/install/doctemplates/websites</exclude-pattern>
<exclude-pattern type="relative">htdocs/conf.php</exclude-pattern>
<exclude-pattern type="relative">*/nltechno*</exclude-pattern>
<exclude-pattern type="relative">*/htdocs/includes</exclude-pattern>
<exclude-pattern type="relative">source</exclude-pattern>
<exclude-pattern type="relative">.git</exclude-pattern>
<exclude-pattern>htdocs/includes</exclude-pattern>
<exclude-pattern>htdocs/install/doctemplates/websites</exclude-pattern>
<!-- List of all tests -->

View File

@ -121,9 +121,11 @@ main()
# Search of all jpg/jpeg/png in $INPUT
# We remove images from $OUTPUT if $OUTPUT is a subdirectory of $INPUT
echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v $OUTPUT"
echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v '/documents/' | grep -v $OUTPUT"
#echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/'"
IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v '/documents/' | grep -v $OUTPUT)
#IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/')
if [ "$QUIET" == "0" ]; then
echo --- Optimizing $INPUT ---
echo

View File

@ -235,7 +235,7 @@ $param = '';
if (GETPOST('cancel', 'alpha')) {
$action = 'list'; $massaction = '';
}
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunlettering' && $massaction != 'predeletebookkeepingwriting') {
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto' && $massaction != 'preunletteringmanual' && $massaction != 'predeletebookkeepingwriting') {
$massaction = '';
}
@ -487,43 +487,60 @@ if (empty($reshook)) {
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->hasRight('accounting', 'mouvements', 'supprimer')) {
$db->begin();
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
$lettering = new Lettering($db);
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
if ($nb_lettering < 0) {
setEventMessages('', $lettering->errors, 'errors');
$error++;
}
}
$nbok = 0;
foreach ($toselect as $toselectid) {
$result = $object->fetch($toselectid);
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
$result = $object->deleteMvtNum($object->piece_num);
if ($result > 0) {
$nbok++;
} else {
if (!$error) {
foreach ($toselect as $toselectid) {
$result = $object->fetch($toselectid);
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
$result = $object->deleteMvtNum($object->piece_num);
if ($result > 0) {
$nbok++;
} else {
setEventMessages($object->error, $object->errors, 'errors');
$error++;
break;
}
} elseif ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
$error++;
break;
}
} elseif ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
$error++;
break;
}
}
// Message for elements well deleted
if ($nbok > 1) {
setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs');
} elseif ($nbok > 0) {
setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs');
} elseif (!$error) {
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
}
if (!$error) {
$db->commit();
// Message for elements well deleted
if ($nbok > 1) {
setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs');
} elseif ($nbok > 0) {
setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs');
} else {
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
}
header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
exit;
} else {
$db->rollback();
}
}
// others mass actions
if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
if ($massaction == 'lettering') {
if ($massaction == 'letteringauto') {
$lettering = new Lettering($db);
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
if ($nb_lettering < 0) {
@ -544,7 +561,17 @@ if (empty($reshook)) {
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
} elseif ($action == 'unlettering' && $confirm == "yes") {
} elseif ($massaction == 'letteringmanual') {
$lettering = new Lettering($db);
$result = $lettering->updateLettering($toselect);
if ($result < 0) {
setEventMessages('', $lettering->errors, 'errors');
} else {
setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs');
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
} elseif ($action == 'unletteringauto' && $confirm == "yes") {
$lettering = new Lettering($db);
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
if ($nb_lettering < 0) {
@ -565,6 +592,16 @@ if (empty($reshook)) {
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
} elseif ($action == 'unletteringmanual' && $confirm == "yes") {
$lettering = new Lettering($db);
$nb_lettering = $lettering->deleteLettering($toselect);
if ($result < 0) {
setEventMessages('', $lettering->errors, 'errors');
} else {
setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs');
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
}
}
}
@ -846,16 +883,16 @@ if ($limit > 0 && $limit != $conf->liste_limit) {
// List of mass actions available
$arrayofmassactions = array();
/*
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->rights->accounting->mouvements->creer) {
$arrayofmassactions['lettering'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('Lettering');
$arrayofmassactions['preunlettering'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('Unlettering');
$arrayofmassactions['letteringauto'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringAuto');
$arrayofmassactions['preunletteringauto'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringAuto');
$arrayofmassactions['letteringmanual'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringManual');
$arrayofmassactions['preunletteringmanual'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringManual');
}
*/
if ($user->hasRight('accounting', 'mouvements', 'supprimer')) {
$arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
}
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunlettering', 'predeletebookkeepingwriting'))) {
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) {
$arrayofmassactions = array();
}
$massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
@ -905,8 +942,10 @@ if (empty($reshook)) {
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
if ($massaction == 'preunlettering') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnlettering"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unlettering", null, '', 0, 200, 500, 1);
if ($massaction == 'preunletteringauto') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringAuto"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringauto", null, '', 0, 200, 500, 1);
} elseif ($massaction == 'preunletteringmanual') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringManual"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringmanual", null, '', 0, 200, 500, 1);
} elseif ($massaction == 'predeletebookkeepingwriting') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1);
}

View File

@ -209,7 +209,7 @@ if (GETPOST('cancel', 'alpha')) {
$action = 'list';
$massaction = '';
}
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunlettering' && $massaction != 'predeletebookkeepingwriting') {
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto' && $massaction != 'preunletteringmanual' && $massaction != 'predeletebookkeepingwriting') {
$massaction = '';
}
@ -402,43 +402,60 @@ if (empty($reshook)) {
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->hasRight('accounting', 'mouvements', 'supprimer')) {
$db->begin();
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
$lettering = new Lettering($db);
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
if ($nb_lettering < 0) {
setEventMessages('', $lettering->errors, 'errors');
$error++;
}
}
$nbok = 0;
foreach ($toselect as $toselectid) {
$result = $object->fetch($toselectid);
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
$result = $object->deleteMvtNum($object->piece_num);
if ($result > 0) {
$nbok++;
} else {
if (!$error) {
foreach ($toselect as $toselectid) {
$result = $object->fetch($toselectid);
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
$result = $object->deleteMvtNum($object->piece_num);
if ($result > 0) {
$nbok++;
} else {
setEventMessages($object->error, $object->errors, 'errors');
$error++;
break;
}
} elseif ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
$error++;
break;
}
} elseif ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
$error++;
break;
}
}
// Message for elements well deleted
if ($nbok > 1) {
setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs');
} elseif ($nbok > 0) {
setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs');
} elseif (!$error) {
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
}
if (!$error) {
$db->commit();
// Message for elements well deleted
if ($nbok > 1) {
setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs');
} elseif ($nbok > 0) {
setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs');
} elseif (!$error) {
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
}
header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
exit;
} else {
$db->rollback();
}
}
// others mass actions
if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
if ($massaction == 'lettering') {
if ($massaction == 'letteringauto') {
$lettering = new Lettering($db);
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
if ($nb_lettering < 0) {
@ -459,7 +476,17 @@ if (empty($reshook)) {
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
} elseif ($action == 'unlettering' && $confirm == "yes") {
} elseif ($massaction == 'letteringmanual') {
$lettering = new Lettering($db);
$result = $lettering->updateLettering($toselect);
if ($result < 0) {
setEventMessages('', $lettering->errors, 'errors');
} else {
setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs');
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
} elseif ($action == 'unletteringauto' && $confirm == "yes") {
$lettering = new Lettering($db);
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
if ($nb_lettering < 0) {
@ -480,6 +507,16 @@ if (empty($reshook)) {
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
} elseif ($action == 'unletteringmanual' && $confirm == "yes") {
$lettering = new Lettering($db);
$nb_lettering = $lettering->deleteLettering($toselect);
if ($result < 0) {
setEventMessages('', $lettering->errors, 'errors');
} else {
setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs');
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
exit();
}
}
}
}
@ -580,13 +617,15 @@ print $formconfirm;
// List of mass actions available
$arrayofmassactions = array();
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
$arrayofmassactions['lettering'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('Lettering');
$arrayofmassactions['preunlettering'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('Unlettering');
$arrayofmassactions['letteringauto'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringAuto');
$arrayofmassactions['preunletteringauto'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringAuto');
$arrayofmassactions['letteringmanual'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringManual');
$arrayofmassactions['preunletteringmanual'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringManual');
}
if ($user->hasRight('accounting', 'mouvements', 'supprimer')) {
$arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
}
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunlettering', 'predeletebookkeepingwriting'))) {
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) {
$arrayofmassactions = array();
}
$massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
@ -626,8 +665,10 @@ if ($limit > 0 && $limit != $conf->liste_limit) {
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
if ($massaction == 'preunlettering') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnlettering"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unlettering", null, '', 0, 200, 500, 1);
if ($massaction == 'preunletteringauto') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringAuto"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringauto", null, '', 0, 200, 500, 1);
} elseif ($massaction == 'preunletteringmanual') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringManual"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringmanual", null, '', 0, 200, 500, 1);
} elseif ($massaction == 'predeletebookkeepingwriting') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1);
}

View File

@ -456,7 +456,7 @@ class AccountingJournal extends CommonObject
$sql .= " SELECT DISTINCT fk_docdet";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping";
$sql .= " WHERE doc_type = 'asset'";
$sql .= ")";
$sql .= ") ";
}*/
$sql .= "SELECT ad.fk_asset AS rowid, a.ref AS asset_ref, a.label AS asset_label, a.acquisition_value_ht AS asset_acquisition_value_ht";

View File

@ -33,11 +33,52 @@ include_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
*/
class Lettering extends BookKeeping
{
/**
* @var BookKeeping[] Bookkeeping cached
*/
public static $bookkeeping_cached = array();
public static $doc_type_infos = array(
'customer_invoice' => array(
'payment_table' => 'paiement',
'payment_table_fk_bank' => 'fk_bank',
'doc_payment_table' => 'paiement_facture',
'doc_payment_table_fk_payment' => 'fk_paiement',
'doc_payment_table_fk_doc' => 'fk_facture',
'linked_info' => array(
array(
'table' => 'paiement_facture',
'fk_doc' => 'fk_facture',
'fk_link' => 'fk_paiement',
'prefix' => 'p',
),
array(
'table' => 'societe_remise_except',
'fk_doc' => 'fk_facture_source',
'fk_link' => 'fk_facture',
'prefix' => 'a',
'is_fk_link_is_also_fk_doc' => true,
),
),
),
'supplier_invoice' => array(
'payment_table' => 'paiementfourn',
'payment_table_fk_bank' => 'fk_bank',
'doc_payment_table' => 'paiementfourn_facturefourn',
'doc_payment_table_fk_payment' => 'fk_paiementfourn',
'doc_payment_table_fk_doc' => 'fk_facturefourn',
'linked_info' => array(
array(
'table' => 'paiementfourn_facturefourn',
'fk_doc' => 'fk_facturefourn',
'fk_link' => 'fk_paiementfourn',
'prefix' => 'p',
),
array(
'table' => 'societe_remise_except',
'fk_doc' => 'fk_invoice_supplier_source',
'fk_link' => 'fk_invoice_supplier',
'prefix' => 'a',
'is_fk_link_is_also_fk_doc' => true,
),
),
),
);
/**
* letteringThirdparty
@ -250,26 +291,17 @@ class Lettering extends BookKeeping
$lettre = 'AAA';
$sql = "SELECT DISTINCT ab2.lettering_code";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping As ab";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu ON bu.fk_bank = ab.fk_doc";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu2 ON bu2.url_id = bu.url_id";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab2 ON ab2.fk_doc = bu2.fk_bank";
$sql .= " WHERE ab.rowid IN (" . $this->db->sanitize(implode(',', $ids)) . ")";
$sql .= " AND ab.doc_type = 'bank'";
$sql .= " AND ab2.doc_type = 'bank'";
$sql .= " AND bu.type = 'company'";
$sql .= " AND bu2.type = 'company'";
$sql .= " AND ab.subledger_account != ''";
$sql .= " AND ab2.subledger_account != ''";
$sql .= " AND ab.lettering_code IS NULL";
$sql .= " AND ab2.lettering_code != ''";
$sql .= " ORDER BY ab2.lettering_code DESC";
$sql .= " LIMIT 1 ";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab2 ON ab2.subledger_account = ab.subledger_account";
$sql .= " WHERE ab.rowid IN (" . $this->db->sanitize(implode(',', $ids)) . ")";
$sql .= " AND ab2.lettering_code != ''";
$sql .= " ORDER BY ab2.lettering_code DESC";
$sql .= " LIMIT 1 ";
$resqla = $this->db->query($sql);
if ($resqla) {
$obj = $this->db->fetch_object($resqla);
$lettre = (empty($obj->lettering_code) ? 'AAA' : $obj->lettering_code);
$lettre = (empty($obj->lettering_code) ? $lettre : $obj->lettering_code);
if (!empty($obj->lettering_code)) {
$lettre++;
}
@ -301,7 +333,7 @@ class Lettering extends BookKeeping
if (!$error) {
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET";
$sql .= " lettering_code='".$this->db->escape($lettre)."'";
$sql .= " , date_lettering = '".$this->db->idate($now)."'"; // todo correct date it's false
$sql .= ", date_lettering = '".$this->db->idate($now)."'"; // todo correct date it's false
$sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).") AND lettering_code IS NULL AND subledger_account != ''";
dol_syslog(get_class($this)."::update", LOG_DEBUG);
@ -336,7 +368,7 @@ class Lettering extends BookKeeping
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET";
$sql .= " lettering_code = NULL";
$sql .= " , date_lettering = NULL";
$sql .= ", date_lettering = NULL";
$sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).")";
$sql .= " AND subledger_account != ''";
@ -374,16 +406,7 @@ class Lettering extends BookKeeping
$errors = array();
$nb_lettering = 0;
$result = $this->bookkeepingLettering($bookkeeping_ids, 'customer_invoice', $unlettering);
if ($result < 0) {
$error++;
$errors = array_merge($errors, $this->errors);
$nb_lettering += abs($result) - 2;
} else {
$nb_lettering += $result;
}
$result = $this->bookkeepingLettering($bookkeeping_ids, 'supplier_invoice', $unlettering);
$result = $this->bookkeepingLettering($bookkeeping_ids, $unlettering);
if ($result < 0) {
$error++;
$errors = array_merge($errors, $this->errors);
@ -404,11 +427,10 @@ class Lettering extends BookKeeping
* Lettering bookkeeping lines
*
* @param array $bookkeeping_ids Lettering specific list of bookkeeping id
* @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice')
* @param bool $unlettering Do unlettering
* @return int <0 if error (nb lettered = result -1), 0 if noting to lettering, >0 if OK (nb lettered)
*/
public function bookkeepingLettering($bookkeeping_ids, $type = 'customer_invoice', $unlettering = false)
public function bookkeepingLettering($bookkeeping_ids, $unlettering = false)
{
global $langs;
@ -416,11 +438,14 @@ class Lettering extends BookKeeping
// Clean parameters
$bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array();
$type = trim($type);
$error = 0;
$nb_lettering = 0;
$grouped_lines = $this->getLinkedLines($bookkeeping_ids, $type);
$grouped_lines = $this->getLinkedLines($bookkeeping_ids);
if (!is_array($grouped_lines)) {
return -2;
}
foreach ($grouped_lines as $lines) {
$group_error = 0;
$total = 0;
@ -478,52 +503,214 @@ class Lettering extends BookKeeping
/**
* Lettering bookkeeping lines
*
* @param array $bookkeeping_ids Lettering specific list of bookkeeping id
* @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice')
* @return array|int <0 if error otherwise all linked lines by block
* @param array $bookkeeping_ids Lettering specific list of bookkeeping id
* @param bool $only_has_subledger_account Get only lines who have subledger account
* @return array|int <0 if error otherwise all linked lines by block
*/
public function getLinkedLines($bookkeeping_ids, $type = 'customer_invoice')
public function getLinkedLines($bookkeeping_ids, $only_has_subledger_account = true)
{
global $conf, $langs;
$this->errors = array();
// Clean parameters
$bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array();
$type = trim($type);
if ($type == 'customer_invoice') {
$doc_type = 'customer_invoice';
$bank_url_type = 'payment';
$payment_element = 'paiement_facture';
$fk_payment_element = 'fk_paiement';
$fk_element = 'fk_facture';
$account_number = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER;
} elseif ($type == 'supplier_invoice') {
$doc_type = 'supplier_invoice';
$bank_url_type = 'payment_supplier';
$payment_element = 'paiementfourn_facturefourn';
$fk_payment_element = 'fk_paiementfourn';
$fk_element = 'fk_facturefourn';
$account_number = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER;
} else {
// Get all bookkeeping lines
$sql = "SELECT DISTINCT ab.doc_type, ab.fk_doc";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
$sql .= " WHERE ab.entity IN (" . getEntity('accountancy') . ")";
$sql .= " AND ab.fk_doc > 0";
if (!empty($bookkeeping_ids)) {
// Get all bookkeeping lines of piece number
$sql .= " AND EXISTS (";
$sql .= " SELECT rowid";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS pn";
$sql .= " WHERE pn.entity IN (" . getEntity('accountancy') . ")";
$sql .= " AND pn.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")";
$sql .= " AND pn.piece_num = ab.piece_num";
$sql .= " )";
}
if ($only_has_subledger_account) $sql .= " AND ab.subledger_account != ''";
dol_syslog(__METHOD__ . " - Get all bookkeeping lines", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
}
$bookkeeping_lines_by_type = array();
while ($obj = $this->db->fetch_object($resql)) {
$bookkeeping_lines_by_type[$obj->doc_type][$obj->fk_doc] = $obj->fk_doc;
}
$this->db->free($resql);
if (empty($bookkeeping_lines_by_type)) {
return array();
}
if (!empty($bookkeeping_lines_by_type['bank'])) {
$new_bookkeeping_lines_by_type = $this->getDocTypeAndFkDocFromBankLines($bookkeeping_lines_by_type['bank']);
if (!is_array($new_bookkeeping_lines_by_type)) {
return -1;
}
foreach ($new_bookkeeping_lines_by_type as $doc_type => $fk_docs) {
foreach ($fk_docs as $fk_doc) {
$bookkeeping_lines_by_type[$doc_type][$fk_doc] = $fk_doc;
}
}
}
$grouped_lines = array();
foreach (self::$doc_type_infos as $doc_type => $doc_type_info) {
if (!is_array($bookkeeping_lines_by_type[$doc_type])) {
continue;
}
// Get all document ids grouped
$doc_grouped = $this->getLinkedDocumentByGroup($bookkeeping_lines_by_type[$doc_type], $doc_type);
if (!is_array($doc_grouped)) {
return -1;
}
// Group all lines by document/piece number
foreach ($doc_grouped as $doc_ids) {
$bank_ids = $this->getBankLinesFromFkDocAndDocType($doc_ids, $doc_type);
if (!is_array($bank_ids)) {
return -1;
}
// Get all bookkeeping lines linked
$sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.debit, ab.credit, ab.lettering_code";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
$sql .= " WHERE ab.entity IN (" . getEntity('accountancy') . ")";
$sql .= " AND (";
if (!empty($bank_ids)) {
$sql .= " EXISTS (";
$sql .= " SELECT bpn.rowid";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS bpn";
$sql .= " WHERE bpn.entity IN (" . getEntity('accountancy') . ")";
$sql .= " AND bpn.doc_type = 'bank'";
$sql .= " AND bpn.fk_doc IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")";
$sql .= " AND bpn ON bpn.piece_num = ab.piece_num";
$sql .= " ) OR ";
}
$sql .= " EXISTS (";
$sql .= " SELECT dpn.rowid";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS dpn";
$sql .= " WHERE dpn.entity IN (" . getEntity('accountancy') . ")";
$sql .= " AND dpn.doc_type = '" . $this->db->escape($doc_type) . "'";
$sql .= " AND dpn.fk_doc IN (" . $this->db->sanitize(implode(',', $doc_ids)) . ")";
$sql .= " AND dpn.piece_num = ab.piece_num";
$sql .= " )";
$sql .= ")";
if ($only_has_subledger_account) $sql .= " AND ab.subledger_account != ''";
dol_syslog(__METHOD__ . " - Get all bookkeeping lines linked", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
}
$group = array();
while ($obj = $this->db->fetch_object($resql)) {
$group[$obj->rowid] = array(
'id' => $obj->rowid,
'piece_num' => $obj->piece_num,
'debit' => $obj->debit,
'credit' => $obj->credit,
'lettering_code' => $obj->lettering_code,
);
}
$this->db->free($resql);
if (!empty($group)) $grouped_lines[] = $group;
}
}
return $grouped_lines;
}
/**
* Get all fk_doc by doc_type from list of bank ids
*
* @param array $bank_ids List of bank ids
* @return array|int <0 if error otherwise all fk_doc by doc_type
*/
public function getDocTypeAndFkDocFromBankLines($bank_ids)
{
dol_syslog(__METHOD__ . " - bank_ids=".json_encode($bank_ids), LOG_DEBUG);
// Clean parameters
$bank_ids = is_array($bank_ids) ? $bank_ids : array();
if (empty($bank_ids)) {
return array();
}
$bookkeeping_lines_by_type = array();
foreach (self::$doc_type_infos as $doc_type => $doc_type_info) {
// Get all fk_doc by doc_type from bank ids
$sql = "SELECT DISTINCT dp." . $doc_type_info['doc_payment_table_fk_doc'] . " AS fk_doc";
$sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid";
$sql .= " WHERE p." . $doc_type_info['payment_table_fk_bank'] . " IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")";
$sql .= " AND dp." . $doc_type_info['doc_payment_table_fk_doc'] . " > 0";
dol_syslog(__METHOD__ . " - Get all fk_doc by doc_type from list of bank ids for '" . $doc_type . "'", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
}
while ($obj = $this->db->fetch_object($resql)) {
$bookkeeping_lines_by_type[$doc_type][$obj->fk_doc] = $obj->fk_doc;
}
$this->db->free($resql);
}
return $bookkeeping_lines_by_type;
}
/**
* Get all bank ids from list of document ids of a type
*
* @param array $document_ids List of document id
* @param string $doc_type Type of document ('customer_invoice' or 'supplier_invoice', ...)
* @return array|int <0 if error otherwise all all bank ids from list of document ids of a type
*/
public function getBankLinesFromFkDocAndDocType($document_ids, $doc_type)
{
global $langs;
dol_syslog(__METHOD__ . " - bank_ids=".json_encode($document_ids) . ", doc_type=$doc_type", LOG_DEBUG);
// Clean parameters
$document_ids = is_array($document_ids) ? $document_ids : array();
$doc_type = trim($doc_type);
if (empty($document_ids)) {
return array();
}
if (!is_array(self::$doc_type_infos[$doc_type])) {
$langs->load('errors');
$this->errors[] = $langs->trans('ErrorBadParameters');
return -1;
}
$payment_ids = array();
$doc_type_info = self::$doc_type_infos[$doc_type];
$bank_ids = array();
// Get all payment id from bank lines
$sql = "SELECT DISTINCT bu.url_id AS payment_id";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu ON bu.fk_bank = ab.fk_doc";
$sql .= " WHERE ab.doc_type = 'bank'";
// $sql .= " AND ab.subledger_account != ''";
// $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
$sql .= " AND bu.type = '" . $this->db->escape($bank_url_type) . "'";
if (!empty($bookkeeping_ids)) $sql .= " AND ab.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")";
// Get all fk_doc by doc_type from bank ids
$sql = "SELECT DISTINCT p." . $doc_type_info['payment_table_fk_bank'] . " AS fk_doc";
$sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid";
$sql .= " WHERE dp." . $doc_type_info['doc_payment_table_fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")";
$sql .= " AND p." . $doc_type_info['payment_table_fk_bank'] . " > 0";
dol_syslog(__METHOD__ . " - Get all payment id from bank lines", LOG_DEBUG);
dol_syslog(__METHOD__ . " - Get all bank ids from list of document ids of a type '" . $doc_type . "'", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
@ -531,218 +718,137 @@ class Lettering extends BookKeeping
}
while ($obj = $this->db->fetch_object($resql)) {
$payment_ids[$obj->payment_id] = $obj->payment_id;
$bank_ids[$obj->fk_doc] = $obj->fk_doc;
}
$this->db->free($resql);
// Get all payment id from payment lines
$sql = "SELECT DISTINCT pe.$fk_payment_element AS payment_id";
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "$payment_element AS pe ON pe.$fk_element = ab.fk_doc";
$sql .= " WHERE ab.doc_type = '" . $this->db->escape($doc_type) . "'";
// $sql .= " AND ab.subledger_account != ''";
// $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
$sql .= " AND pe.$fk_payment_element IS NOT NULL";
if (!empty($bookkeeping_ids)) $sql .= " AND ab.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")";
dol_syslog(__METHOD__ . " - Get all payment id from bank lines", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
}
while ($obj = $this->db->fetch_object($resql)) {
$payment_ids[$obj->payment_id] = $obj->payment_id;
}
$this->db->free($resql);
if (empty($payment_ids)) {
return array();
}
// Get all payments linked by group
$payment_by_group = $this->getLinkedPaymentByGroup($payment_ids, $type);
$groups = array();
foreach ($payment_by_group as $payment_list) {
$lines = array();
// Get bank lines
$sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.lettering_code, ab.debit, ab.credit";
$sql .= " FROM " . MAIN_DB_PREFIX . "bank_url AS bu";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab ON ab.fk_doc = bu.fk_bank";
$sql .= " WHERE bu.url_id IN (" . $this->db->sanitize(implode(',', $payment_list)) . ")";
$sql .= " AND bu.type = '" . $this->db->escape($bank_url_type) . "'";
$sql .= " AND ab.doc_type = 'bank'";
$sql .= " AND ab.subledger_account != ''";
$sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
dol_syslog(__METHOD__ . " - Get bank lines", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
}
while ($obj = $this->db->fetch_object($resql)) {
$lines[$obj->rowid] = array('id' => $obj->rowid, 'piece_num' => $obj->piece_num, 'lettering_code' => $obj->lettering_code, 'debit' => $obj->debit, 'credit' => $obj->credit);
}
$this->db->free($resql);
// Get payment lines
$sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.lettering_code, ab.debit, ab.credit";
$sql .= " FROM " . MAIN_DB_PREFIX . "$payment_element AS pe";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab ON ab.fk_doc = pe.$fk_element";
$sql .= " WHERE pe.$fk_payment_element IN (" . $this->db->sanitize(implode(',', $payment_list)) . ")";
$sql .= " AND ab.doc_type = '" . $this->db->escape($doc_type) . "'";
$sql .= " AND ab.subledger_account != ''";
$sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
dol_syslog(__METHOD__ . " - Get payment lines", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
}
while ($obj = $this->db->fetch_object($resql)) {
$lines[$obj->rowid] = array('id' => $obj->rowid, 'piece_num' => $obj->piece_num, 'lettering_code' => $obj->lettering_code, 'debit' => $obj->debit, 'credit' => $obj->credit);
}
$this->db->free($resql);
if (!empty($lines)) {
$groups[] = $lines;
}
}
return $groups;
return $bank_ids;
}
/**
* Linked payment by group
* Get all linked document ids by group and type
*
* @param array $payment_ids list of payment id
* @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice')
* @return array|int <0 if error otherwise all linked lines by block
* @param array $document_ids List of document id
* @param string $doc_type Type of document ('customer_invoice' or 'supplier_invoice', ...)
* @return array|int <0 if error otherwise all linked document ids by group and type [ [ 'doc_type' => [ doc_id, ... ], ... ], ... ]
*/
public function getLinkedPaymentByGroup($payment_ids, $type)
public function getLinkedDocumentByGroup($document_ids, $doc_type)
{
global $langs;
// Clean parameters
$payment_ids = is_array($payment_ids) ? $payment_ids : array();
$type = trim($type);
$document_ids = is_array($document_ids) ? $document_ids : array();
$doc_type = trim($doc_type);
if (empty($payment_ids)) {
if (empty($document_ids)) {
return array();
}
if ($type == 'customer_invoice') {
$payment_element = 'paiement_facture';
$fk_payment_element = 'fk_paiement';
$fk_element = 'fk_facture';
} elseif ($type == 'supplier_invoice') {
$payment_element = 'paiementfourn_facturefourn';
$fk_payment_element = 'fk_paiementfourn';
$fk_element = 'fk_facturefourn';
} else {
if (!is_array(self::$doc_type_infos[$doc_type])) {
$langs->load('errors');
$this->errors[] = $langs->trans('ErrorBadParameters');
return -1;
}
// Get payment lines
$sql = "SELECT DISTINCT pe2.$fk_payment_element, pe2.$fk_element";
$sql .= " FROM " . MAIN_DB_PREFIX . "$payment_element AS pe";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "$payment_element AS pe2 ON pe2.$fk_element = pe.$fk_element";
$sql .= " WHERE pe.$fk_payment_element IN (" . $this->db->sanitize(implode(',', $payment_ids)) . ")";
$doc_type_info = self::$doc_type_infos[$doc_type];
dol_syslog(__METHOD__ . " - Get payment lines", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
// Get document lines
$current_document_ids = array();
$link_by_element = array();
$element_by_link = array();
foreach ($doc_type_info['linked_info'] as $linked_info) {
$sql = "SELECT DISTINCT tl2." . $linked_info['fk_link'] . " AS fk_link, tl2." . $linked_info['fk_doc'] . " AS fk_doc";
$sql .= " FROM " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl";
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl2 ON tl2." . $linked_info['fk_link'] . " = tl." . $linked_info['fk_link'];
$sql .= " WHERE tl." . $linked_info['fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")";
dol_syslog(__METHOD__ . " - Get document lines", LOG_DEBUG);
$resql = $this->db->query($sql);
if (!$resql) {
$this->errors[] = "Error " . $this->db->lasterror();
return -1;
}
$is_fk_link_is_also_fk_doc = !empty($linked_info['is_fk_link_is_also_fk_doc']);
while ($obj = $this->db->fetch_object($resql)) {
$current_document_ids[$obj->fk_doc] = $obj->fk_doc;
$link_key = $linked_info['prefix'] . $obj->fk_link;
$element_by_link[$link_key][$obj->fk_doc] = $obj->fk_doc;
$link_by_element[$obj->fk_doc][$link_key] = $link_key;
if ($is_fk_link_is_also_fk_doc) {
$element_by_link[$link_key][$obj->fk_link] = $obj->fk_link;
$link_by_element[$obj->fk_link][$link_key] = $link_key;
}
}
$this->db->free($resql);
}
$current_payment_ids = array();
$payment_by_element = array();
$element_by_payment = array();
while ($obj = $this->db->fetch_object($resql)) {
$current_payment_ids[$obj->$fk_payment_element] = $obj->$fk_payment_element;
$element_by_payment[$obj->$fk_payment_element][$obj->$fk_element] = $obj->$fk_element;
$payment_by_element[$obj->$fk_element][$obj->$fk_payment_element] = $obj->$fk_payment_element;
}
$this->db->free($resql);
if (count(array_diff($payment_ids, $current_payment_ids))) {
return $this->getLinkedPaymentByGroup($current_payment_ids, $type);
if (count(array_diff($document_ids, $current_document_ids))) {
return $this->getLinkedDocumentByGroup($current_document_ids, $doc_type);
}
return $this->getGroupElements($payment_by_element, $element_by_payment);
return $this->getGroupElements($link_by_element, $element_by_link);
}
/**
* Get payment ids grouped by payment id and element id in common
* Get element ids grouped by link or element in common
*
* @param array $payment_by_element List of payment ids by element id
* @param array $element_by_payment List of element ids by payment id
* @param int $element_id Element Id (used for recursive function)
* @param array $current_group Current group (used for recursive function)
* @return array List of payment ids grouped by payment id and element id in common
* @param array $link_by_element List of payment ids by link key
* @param array $element_by_link List of element ids by link key
* @param string $link_key Link key (used for recursive function)
* @param array $current_group Current group (used for recursive function)
* @return array List of element ids grouped by link or element in common
*/
public function getGroupElements(&$payment_by_element, &$element_by_payment, $element_id = 0, &$current_group = array())
public function getGroupElements(&$link_by_element, &$element_by_link, $link_key = '', &$current_group = array())
{
$grouped_payments = array();
if ($element_id > 0 && !isset($payment_by_element[$element_id])) {
// Return if specific element id not found
return $grouped_payments;
$grouped_elements = array();
if (!empty($link_key) && !isset($element_by_link[$link_key])) {
// Return if specific link key not found
return $grouped_elements;
}
$save_payment_by_element = null;
$save_element_by_payment = null;
if ($element_id == 0) {
if (empty($link_key)) {
// Save list when is the begin of recursive function
$save_payment_by_element = $payment_by_element;
$save_element_by_payment = $element_by_payment;
$save_link_by_element = $link_by_element;
$save_element_by_link = $element_by_link;
}
do {
// Get current element id, get this payment id list and delete the entry
$current_element_id = $element_id > 0 ? $element_id : array_keys($payment_by_element)[0];
$payment_ids = $payment_by_element[$current_element_id];
unset($payment_by_element[$current_element_id]);
$current_link_key = !empty($link_key) ? $link_key : array_keys($element_by_link)[0];
$element_ids = $element_by_link[$current_link_key];
unset($element_by_link[$current_link_key]);
foreach ($payment_ids as $payment_id) {
// Continue if payment id in not found
if (!isset($element_by_payment[$payment_id])) continue;
foreach ($element_ids as $element_id) {
// Continue if element id in not found
if (!isset($link_by_element[$element_id])) continue;
// Set the payment in the current group
$current_group[$payment_id] = $payment_id;
// Set the element in the current group
$current_group[$element_id] = $element_id;
// Get current element ids, get this payment id list and delete the entry
$element_ids = $element_by_payment[$payment_id];
unset($element_by_payment[$payment_id]);
// Get current link keys, get this element id list and delete the entry
$link_keys = $link_by_element[$element_id];
unset($link_by_element[$element_id]);
// Set payment id on the current group for each element id of the payment
foreach ($element_ids as $id) {
$this->getGroupElements($payment_by_element, $element_by_payment, $id, $current_group);
// Set element id on the current group for each link key of the element
foreach ($link_keys as $key) {
$this->getGroupElements($link_by_element, $element_by_link, $key, $current_group);
}
}
if ($element_id == 0) {
if (empty($link_key)) {
// Save current group and reset the current group when is the begin of recursive function
$grouped_payments[] = $current_group;
$grouped_elements[] = $current_group;
$current_group = array();
}
} while (!empty($payment_by_element) && $element_id == 0);
} while (!empty($element_by_link) && empty($link_key));
if ($element_id == 0) {
if (empty($link_key)) {
// Restore list when is the begin of recursive function
$payment_by_element = $save_payment_by_element;
$element_by_payment = $save_element_by_payment;
$link_by_element = $save_link_by_element;
$element_by_link = $save_element_by_link;
}
return $grouped_payments;
return $grouped_elements;
}
}

View File

@ -379,7 +379,7 @@ if ($action == 'writebookkeeping') {
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
$lettering_static = new Lettering($db);
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id), 'supplier_invoice');
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id));
}
}
}

View File

@ -393,7 +393,7 @@ if ($action == 'writebookkeeping') {
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
$lettering_static = new Lettering($db);
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id), 'customer_invoice');
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id));
}
}
}

View File

@ -694,6 +694,7 @@ class Categorie extends CommonObject
* @param CommonObject $obj Object to link to category
* @param string $type Type of category ('product', ...). Use '' to take $obj->element.
* @return int 1 : OK, -1 : erreur SQL, -2 : id not defined, -3 : Already linked
* @see del_type()
*/
public function add_type($obj, $type = '')
{
@ -785,8 +786,8 @@ class Categorie extends CommonObject
*
* @param CommonObject $obj Object
* @param string $type Type of category ('customer', 'supplier', 'contact', 'product', 'member')
*
* @return int 1 if OK, -1 if KO
* @see add_type()
*/
public function del_type($obj, $type)
{

View File

@ -3611,7 +3611,7 @@ class Facture extends CommonInvoice
global $mysoc, $conf, $langs;
dol_syslog(get_class($this)."::addline id=$this->id,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc,type=$type, fk_unit=$fk_unit", LOG_DEBUG);
dol_syslog(get_class($this)."::addline id=$this->id, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, fk_product=$fk_product, remise_percent=$remise_percent, date_start=$date_start, date_end=$date_end, ventil=$ventil, info_bits=$info_bits, fk_remise_except=$fk_remise_except, price_base_type=$price_base_type, pu_ttc=$pu_ttc, type=$type, fk_unit=$fk_unit, desc=".dol_trunc($desc, 25), LOG_DEBUG);
if ($this->statut == self::STATUS_DRAFT) {
include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';

View File

@ -79,7 +79,7 @@ if (GETPOST('sendit', 'alpha') && !empty($conf->global->MAIN_UPLOAD_DOC) && !emp
}
$allowoverwrite = (GETPOST('overwritefile', 'int') ? 1 : 0);
if (!empty($upload_dirold) && !empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (!empty($upload_dirold) && getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$result = dol_add_file_process($upload_dirold, $allowoverwrite, 1, 'userfile', GETPOST('savingdocmask', 'alpha'), null, '', $generatethumbs, $object);
} elseif (!empty($upload_dir)) {
$result = dol_add_file_process($upload_dir, $allowoverwrite, 1, 'userfile', GETPOST('savingdocmask', 'alpha'), null, '', $generatethumbs, $object);

View File

@ -4350,7 +4350,7 @@ abstract class CommonObject
* @param int $status Status to set
* @param int $elementId Id of element to force (use this->id by default if null)
* @param string $elementType Type of element to force (use this->table_element by default)
* @param string $trigkey Trigger key to use for trigger. Use '' means automatic but it not recommended and is deprecated.
* @param string $trigkey Trigger key to use for trigger. Use '' means automatic but it is not recommended and is deprecated.
* @param string $fieldstatus Name of status field in this->table_element
* @return int <0 if KO, >0 if OK
*/
@ -4400,41 +4400,49 @@ abstract class CommonObject
if ($status == 1 && in_array($elementTable, array('inventory'))) {
$sql .= ", date_validation = '".$this->db->idate(dol_now())."'";
}
$sql .= " WHERE rowid=".((int) $elementId);
$sql .= " WHERE rowid = ".((int) $elementId);
$sql .= " AND ".$fieldstatus." <> ".((int) $status); // We avoid update if status already correct
dol_syslog(get_class($this)."::setStatut", LOG_DEBUG);
if ($this->db->query($sql)) {
$resql = $this->db->query($sql);
if ($resql) {
$error = 0;
// Try autoset of trigkey
if (empty($trigkey)) {
if ($this->element == 'supplier_proposal' && $status == 2) {
$trigkey = 'SUPPLIER_PROPOSAL_SIGN'; // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
}
if ($this->element == 'supplier_proposal' && $status == 3) {
$trigkey = 'SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
}
if ($this->element == 'supplier_proposal' && $status == 4) {
$trigkey = 'SUPPLIER_PROPOSAL_CLOSE'; // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
}
if ($this->element == 'fichinter' && $status == 3) {
$trigkey = 'FICHINTER_CLASSIFY_DONE';
}
if ($this->element == 'fichinter' && $status == 2) {
$trigkey = 'FICHINTER_CLASSIFY_BILLED';
}
if ($this->element == 'fichinter' && $status == 1) {
$trigkey = 'FICHINTER_CLASSIFY_UNBILLED';
}
}
$nb_rows_affected = $this->db->affected_rows($resql); // should be 1 or 0 if status was already correct
if ($trigkey) {
// Call trigger
$result = $this->call_trigger($trigkey, $user);
if ($result < 0) {
$error++;
if ($nb_rows_affected >= 0) {
if (empty($trigkey)) {
// Try to guess trigkey (for backward compatibility, now we should have trigkey defined into the call of setStatus)
if ($this->element == 'supplier_proposal' && $status == 2) {
$trigkey = 'SUPPLIER_PROPOSAL_SIGN'; // 2 = SupplierProposal::STATUS_SIGNED. Can't use constant into this generic class
}
if ($this->element == 'supplier_proposal' && $status == 3) {
$trigkey = 'SUPPLIER_PROPOSAL_REFUSE'; // 3 = SupplierProposal::STATUS_REFUSED. Can't use constant into this generic class
}
if ($this->element == 'supplier_proposal' && $status == 4) {
$trigkey = 'SUPPLIER_PROPOSAL_CLOSE'; // 4 = SupplierProposal::STATUS_CLOSED. Can't use constant into this generic class
}
if ($this->element == 'fichinter' && $status == 3) {
$trigkey = 'FICHINTER_CLASSIFY_DONE';
}
if ($this->element == 'fichinter' && $status == 2) {
$trigkey = 'FICHINTER_CLASSIFY_BILLED';
}
if ($this->element == 'fichinter' && $status == 1) {
$trigkey = 'FICHINTER_CLASSIFY_UNBILLED';
}
}
// End call triggers
if ($trigkey) {
// Call trigger
$result = $this->call_trigger($trigkey, $user);
if ($result < 0) {
$error++;
}
// End call triggers
}
} else {
// The status was probably already good. We do nothing more, no triggers.
}
if (!$error) {
@ -8575,7 +8583,7 @@ abstract class CommonObject
// For backward compatibility
if ($modulepart == 'product') {
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$dir = $sdir.'/'.get_exdir($this->id, 2, 0, 0, $this, $modulepart).$this->id."/photos/";
$pdir = '/'.get_exdir($this->id, 2, 0, 0, $this, $modulepart).$this->id."/photos/";
}
@ -8597,7 +8605,7 @@ abstract class CommonObject
$filearray = dol_dir_list($dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder) == 'desc' ?SORT_DESC:SORT_ASC), 1);
/*if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) // For backward compatiblity, we scan also old dirs
/*if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) // For backward compatiblity, we scan also old dirs
{
$filearrayold=dol_dir_list($dirold,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
$filearray=array_merge($filearray, $filearrayold);

View File

@ -879,7 +879,7 @@ class FormFile
$fulllink = $urlwithroot.'/document.php'.($paramlink ? '?'.$paramlink : '');
$out .= img_picto($langs->trans("FileSharedViaALink"), 'globe').' ';
$out .= '<a href="'.$fulllink.'" target="_blank" rel="noopener">'.img_picto($langs->trans("FileSharedViaALink"), 'globe').'</a> ';
$out .= '<input type="text" class="quatrevingtpercentminusx width75 nopadding small" id="downloadlink'.$file['rowid'].'" name="downloadexternallink" title="'.dol_escape_htmltag($langs->trans("FileSharedViaALink")).'" value="'.dol_escape_htmltag($fulllink).'">';
$out .= ajax_autoselect('downloadlink'.$file['rowid']);
} else {
@ -1146,7 +1146,7 @@ class FormFile
}
}
// For backward compatiblity, we detect file stored into an old path
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO) && $filearray[0]['level1name'] == 'photos') {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO') && $filearray[0]['level1name'] == 'photos') {
$relativepath = preg_replace('/^.*\/produit\//', '', $filearray[0]['path']).'/';
}
@ -1407,7 +1407,7 @@ class FormFile
$fulllink = $urlwithroot.'/document.php'.($paramlink ? '?'.$paramlink : '');
print img_picto($langs->trans("FileSharedViaALink"), 'globe').' ';
print '<a href="'.$fulllink.'" target="_blank" rel="noopener">'.img_picto($langs->trans("FileSharedViaALink"), 'globe').'</a> ';
print '<input type="text" class="quatrevingtpercent minwidth200imp nopadding small" id="downloadlink'.$filearray[$key]['rowid'].'" name="downloadexternallink" title="'.dol_escape_htmltag($langs->trans("FileSharedViaALink")).'" value="'.dol_escape_htmltag($fulllink).'">';
} else {
//print '<span class="opacitymedium">'.$langs->trans("FileNotShared").'</span>';

View File

@ -1395,8 +1395,6 @@ class FormMail extends Form
$defaultmessage = $outputlangs->transnoentities("PredefinedMailContentSendFichInter");
} elseif ($type_template == 'actioncomm_send') {
$defaultmessage = $outputlangs->transnoentities("PredefinedMailContentSendActionComm");
} elseif ($type_template == 'thirdparty') {
$defaultmessage = $outputlangs->transnoentities("PredefinedMailContentThirdparty");
} elseif (!empty($type_template)) {
$defaultmessage = $outputlangs->transnoentities("PredefinedMailContentGeneric");
}

View File

@ -662,13 +662,14 @@ function ajax_object_onoff($object, $code, $field, $text_on, $text_off, $input =
// Set constant
$("#set_'.$code.'_'.$object->id.'").click(function() {
console.log("Click managed by ajax_object_onoff");
$.get( "'.DOL_URL_ROOT.'/core/ajax/objectonoff.php", {
action: \'set\',
field: \''.$field.'\',
value: \'1\',
element: \''.$object->element.'\',
id: \''.$object->id.'\',
token: \''.newToken().'\'
token: \''.currentToken().'\'
},
function() {
$("#set_'.$code.'_'.$object->id.'").hide();
@ -693,13 +694,14 @@ function ajax_object_onoff($object, $code, $field, $text_on, $text_off, $input =
// Del constant
$("#del_'.$code.'_'.$object->id.'").click(function() {
console.log("Click managed by ajax_object_onoff");
$.get( "'.DOL_URL_ROOT.'/core/ajax/objectonoff.php", {
action: \'set\',
field: \''.$field.'\',
value: \'0\',
element: \''.$object->element.'\',
id: \''.$object->id.'\',
token: \''.newToken().'\'
token: \''.currentToken().'\'
},
function() {
$("#del_'.$code.'_'.$object->id.'").hide();

View File

@ -319,7 +319,7 @@ function completeFileArrayWithDatabaseInfo(&$filearray, $relativedir)
// TODO Remove this when PRODUCT_USE_OLD_PATH_FOR_PHOTO will be removed
global $modulepart;
if ($modulepart == 'produit' && !empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if ($modulepart == 'produit' && getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
global $object;
if (!empty($object->id)) {
if (isModEnabled("product")) {
@ -2033,6 +2033,7 @@ function dol_convert_file($fileinput, $ext = 'png', $fileoutput = '', $page = ''
* @param string $mode 'gz' or 'bz' or 'zip'
* @param string $errorstring Error string
* @return int <0 if KO, >0 if OK
* @see dol_uncompress(), dol_compress_dir()
*/
function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring = null)
{
@ -2159,6 +2160,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring
* @param string $inputfile File to uncompress
* @param string $outputdir Target dir name
* @return array array('error'=>'Error code') or array() if no error
* @see dol_compress_file(), dol_compress_dir()
*/
function dol_uncompress($inputfile, $outputdir)
{
@ -2282,10 +2284,14 @@ function dol_uncompress($inputfile, $outputdir)
* @param string $mode 'zip'
* @param string $excludefiles A regex pattern. For example: '/\.log$|\/temp\//'
* @param string $rootdirinzip Add a root dir level in zip file
* @param string $newmask Mask for new file (0 by default means $conf->global->MAIN_UMASK). Example: '0666'
* @return int <0 if KO, >0 if OK
* @see dol_uncompress(), dol_compress_file()
*/
function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '', $rootdirinzip = '')
function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '', $rootdirinzip = '', $newmask = 0)
{
global $conf;
$foundhandler = 0;
dol_syslog("Try to zip dir ".$inputdir." into ".$outputfile." mode=".$mode);
@ -2315,6 +2321,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles =
}
else*/
//if (class_exists('ZipArchive') && !empty($conf->global->MAIN_USE_ZIPARCHIVE_FOR_ZIP_COMPRESS))
if (class_exists('ZipArchive')) {
$foundhandler = 1;
@ -2359,6 +2366,16 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles =
// Zip archive will be created only after closing object
$zip->close();
if (empty($newmask) && !empty($conf->global->MAIN_UMASK)) {
$newmask = $conf->global->MAIN_UMASK;
}
if (empty($newmask)) { // This should no happen
dol_syslog("Warning: dol_copy called with empty value for newmask and no default value defined", LOG_WARNING);
$newmask = '0664';
}
@chmod($outputfile, octdec($newmask));
return 1;
}
}
@ -2374,7 +2391,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles =
$langs->load("errors");
dol_syslog("Failed to open file ".$outputfile, LOG_ERR);
dol_syslog($e->getMessage(), LOG_ERR);
$errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputfile);
$errormsg = $langs->trans("ErrorFailedToBuildArchive", $outputfile).' - '.$e->getMessage();
return -1;
}
}

View File

@ -3987,7 +3987,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
'salary', 'shipment', 'state', 'supplier_invoice', 'supplier_invoicea', 'supplier_invoicer', 'supplier_invoiced',
'technic', 'ticket',
'error', 'warning',
'recent', 'reception', 'recruitmentcandidature', 'recruitmentjobposition', 'resource', 'recurring','rss',
'recent', 'reception', 'recruitmentcandidature', 'recruitmentjobposition', 'replacement', 'resource', 'recurring','rss',
'shapes', 'square', 'stop-circle', 'supplier', 'supplier_proposal', 'supplier_order', 'supplier_invoice',
'timespent', 'title_setup', 'title_accountancy', 'title_bank', 'title_hrm', 'title_agenda',
'uncheck', 'user-cog', 'user-injured', 'user-md', 'vat', 'website', 'workstation', 'webhook', 'world', 'private',
@ -4033,7 +4033,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
'partnership'=>'handshake', 'payment'=>'money-check-alt', 'payment_vat'=>'money-check-alt', 'phoning'=>'phone', 'phoning_mobile'=>'mobile-alt', 'phoning_fax'=>'fax', 'previous'=>'arrow-alt-circle-left', 'printer'=>'print', 'product'=>'cube', 'puce'=>'angle-right',
'recent' => 'question', 'reception'=>'dolly', 'recruitmentjobposition'=>'id-card-alt', 'recruitmentcandidature'=>'id-badge',
'resize'=>'crop', 'supplier_order'=>'dol-order_supplier', 'supplier_proposal'=>'file-signature',
'refresh'=>'redo', 'region'=>'map-marked', 'resource'=>'laptop-house', 'recurring'=>'history',
'refresh'=>'redo', 'region'=>'map-marked', 'replacement'=>'exchange-alt', 'resource'=>'laptop-house', 'recurring'=>'history',
'service'=>'concierge-bell',
'state'=>'map-marked-alt', 'security'=>'key', 'salary'=>'wallet', 'shipment'=>'dolly', 'stock'=>'box-open', 'stats' => 'chart-bar', 'split'=>'code-branch', 'stripe'=>'stripe-s',
'supplier'=>'building', 'technic'=>'cogs',
@ -6581,7 +6581,7 @@ function get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart = '
$path = '';
$arrayforoldpath = array('cheque', 'category', 'holiday', 'supplier_invoice', 'invoice_supplier', 'mailing', 'supplier_payment');
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$arrayforoldpath[] = 'product';
}
if (!empty($level) && in_array($modulepart, $arrayforoldpath)) {
@ -8618,8 +8618,6 @@ function verifCond($strToEvaluate)
//print $strToEvaluate."<br>\n";
$rights = true;
if (isset($strToEvaluate) && $strToEvaluate !== '') {
//$str = 'if(!('.$strToEvaluate.')) $rights = false;';
//dol_eval($str, 0, 1, '2'); // The dol_eval must contains all the global $xxx used into a condition
//var_dump($strToEvaluate);
$rep = dol_eval($strToEvaluate, 1, 1, '1'); // The dol_eval must contains all the global $xxx for all variables $xxx found into the string condition
$rights = $rep && (!is_string($rep) || strpos($rep, 'Bad string syntax to evaluate') === false);
@ -8635,7 +8633,7 @@ function verifCond($strToEvaluate)
* @param string $s String to evaluate
* @param int $returnvalue 0=No return (used to execute eval($a=something)). 1=Value of eval is returned (used to eval($something)).
* @param int $hideerrors 1=Hide errors
* @param string $onlysimplestring 0=Accept all chars, 1=Accept only simple string with char 'a-z0-9\s^$_+-.*\/>&|=!?():"\',/';', 2=Accept also ';[]'
* @param string $onlysimplestring '0' (used for computed property of extrafields)=Accept all chars, '1' (most common use)=Accept only simple string with char 'a-z0-9\s^$_+-.*>&|=!?():"\',/@';', '2' (not used)=Accept also ';[]'
* @return mixed Nothing or return result of eval
*/
function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1')
@ -8653,8 +8651,8 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1'
// Test on dangerous char (used for RCE), we allow only characters to make PHP variable testing
if ($onlysimplestring == '1') {
// We must accept: '1 && getDolGlobalInt("doesnotexist1") && $conf->global->MAIN_FEATURES_LEVEL'
// We must accept: '$conf->barcode->enabled && preg_match(\'/^(AAA|BBB)/\',$leftmenu)'
// We must accept: '$user->rights->cabinetmed->read && $object->canvas=="patient@cabinetmed"'
// We must accept: '$conf->barcode->enabled || preg_match(\'/^AAA/\',$leftmenu)'
// We must accept: '$user->rights->cabinetmed->read && !$object->canvas=="patient@cabinetmed"'
if (preg_match('/[^a-z0-9\s'.preg_quote('^$_+-.*>&|=!?():"\',/@', '/').']/i', $s)) {
if ($returnvalue) {
return 'Bad string syntax to evaluate (found chars that are not chars for simplestring): '.$s;
@ -8662,7 +8660,8 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1'
dol_syslog('Bad string syntax to evaluate (found chars that are not chars for simplestring): '.$s);
return '';
}
// TODO We can exclude all () that is not '($db)' and 'getDolGlobalInt(' and 'getDolGlobalString(' and 'preg_match('
// TODO
// We can exclude all parenthesis ( that are not '($db' and 'getDolGlobalInt(' and 'getDolGlobalString(' and 'preg_match(' and 'isModEnabled('
// ...
}
} elseif ($onlysimplestring == '2') {

View File

@ -71,6 +71,8 @@ function facture_prepare_head($object)
} else {
dol_print_error($db);
}
$langs->load("banks");
$head[$h][0] = DOL_URL_ROOT.'/compta/facture/prelevement.php?facid='.urlencode($object->id);
$head[$h][1] = $langs->trans('StandingOrders');
if ($nbStandingOrders > 0) {

View File

@ -76,7 +76,7 @@ function product_prepare_head($object)
// Multilangs
if (getDolGlobalInt('MAIN_MULTILANGS')) {
$head[$h][0] = DOL_URL_ROOT."/product/traduction.php?id=".$object->id;
$head[$h][1] = $langs->trans("Translation");
$head[$h][1] = $langs->trans("Translations");
$head[$h][2] = 'translation';
$h++;
}
@ -183,7 +183,7 @@ function product_prepare_head($object)
$upload_dir = $conf->service->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref);
}
$nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$'));
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
if (isModEnabled("product") && ($object->type == Product::TYPE_PRODUCT)) {
$upload_dir = $conf->product->multidir_output[$object->entity].'/'.get_exdir($object->id, 2, 0, 0, $object, 'product').$object->id.'/photos';
}
@ -253,6 +253,24 @@ function productlot_prepare_head($object)
$head[$h][2] = 'documents';
$h++;
// Notes
if (empty($conf->global->MAIN_DISABLE_NOTES_TAB)) {
$nbNote = 0;
if (!empty($object->note_private)) {
$nbNote++;
}
if (!empty($object->note_public)) {
$nbNote++;
}
$head[$h][0] = DOL_URL_ROOT .'/product/stock/productlot_note.php?id=' . $object->id;
$head[$h][1] = $langs->trans('Notes');
if ($nbNote > 0) {
$head[$h][1] .= '<span class="badge marginleftonlyshort">' . $nbNote . '</span>';
}
$head[$h][2] = 'note';
$h++;
}
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab

View File

@ -180,7 +180,7 @@ function delivery_prepare_head($object)
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
$upload_dir = $conf->expedition->dir_output."/sending/".dol_sanitizeFileName($object->ref);
$upload_dir = $conf->expedition->dir_output."/sending/".dol_sanitizeFileName($tmpobject->ref);
$nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$'));
$nbLinks = Link::count($db, $tmpobject->element, $tmpobject->id);
$head[$h][0] = DOL_URL_ROOT.'/expedition/document.php?id='.$tmpobject->id;

View File

@ -592,7 +592,7 @@ function showWebsiteTemplates(Website $website)
print '<tr><td colspan="'.$colspan.'">';
print '<table class="nobordernopadding" width="100%"><tr><td><div class="center">';
print '<table class="nobordernopadding centpercent"><tr><td><div class="center">';
if (count($dirthemes)) {
$i = 0;
@ -603,11 +603,10 @@ function showWebsiteTemplates(Website $website)
$handle = opendir($dirtheme);
if (is_resource($handle)) {
while (($subdir = readdir($handle)) !== false) {
if (is_file($dirtheme."/".$subdir) && substr($subdir, 0, 1) <> '.'
&& substr($subdir, 0, 3) <> 'CVS' && preg_match('/\.zip$/i', $subdir)) {
$subdirwithoutzip = preg_replace('/\.zip$/i', '', $subdir);
if (is_file($dirtheme."/".$subdir) && substr($subdir, 0, 1) <> '.' && substr($subdir, 0, 3) <> 'CVS' && preg_match('/\.zip$/i', $subdir)) {
$subdirwithoutzip = preg_replace('/\.zip$/i', '', $subdir);
// Disable not stable themes (dir ends with _exp or _dev)
// Disable not stable themes (dir ends with _exp or _dev)
if ($conf->global->MAIN_FEATURES_LEVEL < 2 && preg_match('/_dev$/i', $subdir)) {
continue;
}
@ -615,38 +614,41 @@ function showWebsiteTemplates(Website $website)
continue;
}
print '<div class="inline-block" style="margin-top: 10px; margin-bottom: 10px; margin-right: 20px; margin-left: 20px;">';
print '<div class="inline-block" style="margin-top: 10px; margin-bottom: 10px; margin-right: 20px; margin-left: 20px;">';
$file = $dirtheme."/".$subdirwithoutzip.".jpg";
$url = DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg";
$templatedir = $dirtheme."/".$subdir;
$file = $dirtheme."/".$subdirwithoutzip.".jpg";
$url = DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg";
if (!file_exists($file)) {
$url = DOL_URL_ROOT.'/public/theme/common/nophoto.png';
}
$originalfile = basename($file);
$entity = $conf->entity;
$modulepart = 'doctemplateswebsite';
$cache = '';
$title = $file;
$originalfile = basename($file);
$entity = $conf->entity;
$modulepart = 'doctemplateswebsite';
$cache = '';
$title = $file;
$ret = '';
$urladvanced = getAdvancedPreviewUrl($modulepart, $originalfile, 1, '&entity='.$entity);
$ret = '';
$urladvanced = getAdvancedPreviewUrl($modulepart, $originalfile, 1, '&entity='.$entity);
if (!empty($urladvanced)) {
$ret .= '<a class="'.$urladvanced['css'].'" target="'.$urladvanced['target'].'" mime="'.$urladvanced['mime'].'" href="'.$urladvanced['url'].'">';
} else {
$ret .= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.$entity.'&file='.urlencode($originalfile).'&cache='.$cache.'">';
$ret .= '<a href="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.urlencode($modulepart).'&entity='.((int) $entity).'&file='.urlencode($originalfile).'&cache='.((int) $cache).'">';
}
print $ret;
print '<img class="img-skinthumb shadow" src="'.$url.'" border="0" alt="'.$title.'" title="'.$title.'" style="margin-bottom: 5px;">';
print '</a>';
print $ret;
print '<img class="img-skinthumb shadow" src="'.$url.'" border="0" alt="'.$title.'" title="'.$title.'" style="margin-bottom: 5px;">';
print '</a>';
print '<br>';
print $subdir.' ('.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).')';
print '<br><a href="'.$_SERVER["PHP_SELF"].'?action=importsiteconfirm&token='.newToken().'&website='.urlencode($website->ref).'&templateuserfile='.urlencode($subdir).'" class="button">'.$langs->trans("Load").'</a>';
print '</div>';
print '<br>';
print $subdir;
print '<br>';
print '<span class="opacitymedium">'.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).' - '.dol_print_date(dol_filemtime($templatedir), 'dayhour', 'tzuserrel').'</span>';
print '<br><a href="'.$_SERVER["PHP_SELF"].'?action=importsiteconfirm&token='.newToken().'&website='.urlencode($website->ref).'&templateuserfile='.urlencode($subdir).'" class="button">'.$langs->trans("Load").'</a>';
print '</div>';
$i++;
$i++;
}
}
}

View File

@ -241,7 +241,7 @@ class pdf_standard_asset extends ModelePDFAsset
if (empty($object->lines[$i]->fk_product)) continue;
//var_dump($objphoto->ref);exit;
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/";
$pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
} else {

View File

@ -253,7 +253,7 @@ class pdf_eratosthene extends ModelePDFCommandes
$objphoto->fetch($object->lines[$i]->fk_product);
//var_dump($objphoto->ref);exit;
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/";
$pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
} else {

View File

@ -238,7 +238,7 @@ class pdf_storm extends ModelePDFDeliveryOrder
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/";
$pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
} else {

View File

@ -210,7 +210,7 @@ class pdf_espadon extends ModelePdfExpedition
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
} else {

View File

@ -235,7 +235,7 @@ class pdf_rouget extends ModelePdfExpedition
$objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
} else {

View File

@ -285,7 +285,7 @@ class pdf_sponge extends ModelePDFFactures
$objphoto->fetch($object->lines[$i]->fk_product);
//var_dump($objphoto->ref);exit;
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/";
$pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
} else {

View File

@ -203,6 +203,7 @@ class modWebsite extends DolibarrModules
dol_mkdir($destroot);
// Copy templates in zip format (old)
$docs = dol_dir_list($srcroot, 'files', 0, 'website_.*(\.zip|\.jpg)$');
foreach ($docs as $cursorfile) {
$src = $srcroot.'/'.$cursorfile['name'];
@ -217,6 +218,24 @@ class modWebsite extends DolibarrModules
}
}
// Copy templates in dir format (recommended)
$docs = dol_dir_list($srcroot, 'directories', 0, 'website_.*$');
foreach ($docs as $cursorfile) {
$src = $srcroot.'/'.$cursorfile['name'];
$dest = $destroot.'/'.$cursorfile['name'];
// Compress it
global $errormsg;
$errormsg = '';
$result = dol_compress_dir($src, $dest.'.zip', 'zip');
if ($result < 0) {
$error++;
$this->error = ($errormsg ? $errormsg : $langs->trans('ErrorFailToCreateZip', $dest));
$this->errors[] = ($errormsg ? $errormsg : $langs->trans('ErrorFailToCreateZip', $dest));
}
}
if ($error) {
return 0;
}

View File

@ -262,7 +262,7 @@ class pdf_azur extends ModelePDFPropales
$objphoto->fetch($object->lines[$i]->fk_product);
//var_dump($objphoto->ref);exit;
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/";
$pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
} else {
@ -814,7 +814,7 @@ class pdf_azur extends ModelePDFPropales
if (count($filetomerge->lines) > 0) {
foreach ($filetomerge->lines as $linefile) {
if (!empty($linefile->id) && !empty($linefile->file_name)) {
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
if (isModEnabled("product")) {
$filetomerge_dir = $conf->product->multidir_output[$entity_product_file].'/'.get_exdir($product->id, 2, 0, 0, $product, 'product').$product->id."/photos";
} elseif (isModEnabled("service")) {

View File

@ -249,7 +249,7 @@ class pdf_cyan extends ModelePDFPropales
$objphoto->fetch($object->lines[$i]->fk_product);
//var_dump($objphoto->ref);exit;
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/";
$pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
} else {
@ -939,7 +939,7 @@ class pdf_cyan extends ModelePDFPropales
if (count($filetomerge->lines) > 0) {
foreach ($filetomerge->lines as $linefile) {
if (!empty($linefile->id) && !empty($linefile->file_name)) {
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
if (isModEnabled("product")) {
$filetomerge_dir = $conf->product->multidir_output[$entity_product_file].'/'.get_exdir($product->id, 2, 0, 0, $product, 'product').$product->id."/photos";
} elseif (isModEnabled("service")) {

View File

@ -152,7 +152,7 @@ class pdf_squille extends ModelePdfReception
$objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
} else {

View File

@ -219,7 +219,7 @@ class pdf_eagle extends ModelePdfStockTransfer
$objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
} else {

View File

@ -227,7 +227,7 @@ class pdf_eagle_proforma extends ModelePDFCommandes
$objphoto->fetch($object->lines[$i]->fk_product);
//var_dump($objphoto->ref);exit;
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir[0] = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$objphoto->id."/photos/";
$pdir[1] = get_exdir(0, 0, 0, 0, $objphoto, 'product').dol_sanitizeFileName($objphoto->ref).'/';
} else {

View File

@ -230,7 +230,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders
$objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
} else {

View File

@ -245,7 +245,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
$objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir = get_exdir($objphoto->id, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
} else {

View File

@ -241,7 +241,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
$objphoto = new Product($this->db);
$objphoto->fetch($object->lines[$i]->fk_product);
if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) {
if (getDolGlobalInt('PRODUCT_USE_OLD_PATH_FOR_PHOTO')) {
$pdir = get_exdir($object->lines[$i]->fk_product, 2, 0, 0, $objphoto, 'product').$object->lines[$i]->fk_product."/photos/";
$dir = $conf->product->dir_output.'/'.$pdir;
} else {

View File

@ -364,9 +364,9 @@ if ($action == 'create') {
}
$morehtmlref .= '</div>';
$morehtmlright = $langs->trans("StatusReceipt").' : '.$object->getLibStatut(6).'<br><br class="small">';
$morehtmlstatus = $langs->trans("StatusReceipt").' : '.$object->getLibStatut(6).'<br><br class="small">';
dol_banner_tab($expedition, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
dol_banner_tab($expedition, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus);
print '<div class="fichecenter">';

View File

@ -2141,8 +2141,9 @@ class Expedition extends CommonObject
}
}
if ($shipments_match_order) {
dol_syslog("Qty for the ".count($order->lines)." lines of order have same value for shipments with status Expedition::STATUS_CLOSED=".self::STATUS_CLOSED.', so we close order');
$order->cloture($user);
dol_syslog("Qty for the ".count($order->lines)." lines of the origin order is same than qty for lines in the shipment we close (shipments_match_order is true), with new status Expedition::STATUS_CLOSED=".self::STATUS_CLOSED.', so we close order');
// We close the order
$order->cloture($user); // Note this may also create an invoice if module workflow ask it
}
}

View File

@ -700,7 +700,7 @@ class Export
// Export of compute field does not work. $obj contains $obj->alias_field and formula may contains $obj->field
// Also the formula may contains objects of class that are not loaded.
$computestring = $this->array_export_special[$indice][$key];
//$tmp = dol_eval($computestring, 1, 0);
//$tmp = dol_eval($computestring, 1, 0, '1');
//$obj->$alias = $tmp;
$this->error = "ERROPNOTSUPPORTED. Operation ".$computestring." not supported. Export of 'computed' extrafields is not yet supported, please remove field.";

View File

@ -0,0 +1 @@
This template has been developed by DoliCloud (https://www.dolicloud.com) for Dolibarr ERP CRM.

View File

@ -0,0 +1,2 @@
# Some properties for Dolibarr web site CMS
param=value

View File

@ -0,0 +1,2 @@
# Order allow,deny
# Deny from all

View File

@ -0,0 +1 @@
This template has been developed by DoliCloud (https://www.dolicloud.com) for Dolibarr ERP CRM.

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page180.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page180.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page181.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page181.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page179.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page179.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page182.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page182.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page183.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page183.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page184.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page184.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page185.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page185.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page186.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page186.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page187.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page187.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page188.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page188.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page189.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page189.tpl.php';
?>

View File

@ -0,0 +1,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="format-detection" content="telephone=no">
<link rel="stylesheet" id="font-wasesome-css" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" />
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

View File

@ -0,0 +1,11 @@
<?php
// BEGIN PHP File generated to provide an index.php as Home Page or alias redirector - DO NOT MODIFY - It is just a generated wrapper.
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Load master if not already loaded
if (!empty($_GET['pageref']) || !empty($_GET['pagealiasalt']) || !empty($_GET['pageid'])) {
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
redirectToContainer($_GET['pageref'], $_GET['pagealiasalt'], $_GET['pageid']);
}
include_once './page189.tpl.php'
// END PHP ?>

View File

@ -0,0 +1,13 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__);
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once __DIR__.'/master.inc.php'; } // Load env if not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
header('Cache-Control: max-age=3600, public, must-revalidate');
header('Content-type: application/javascript');
// END PHP ?>
/* JS content (all pages) */
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "js");
// END PHP ?>

View File

@ -0,0 +1,13 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__);
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once __DIR__.'/master.inc.php'; } // Load env if not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
header('Cache-Control: max-age=3600, public, must-revalidate');
header('Content-type: application/manifest+json');
// END PHP ?>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "manifest");
// END PHP

View File

@ -0,0 +1,7 @@
<?php
// File generated to link to the master file - DO NOT MODIFY - It is just an include
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
if (! defined('USEEXTERNALSERVER')) define('USEEXTERNALSERVER', 1);
require_once '/home/ldestailleur/git/dolibarr_dev/htdocs/master.inc.php';
}
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page190.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page190.tpl.php';
?>

View File

@ -0,0 +1,99 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Blog</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="blog" />
<meta name="title" content="Blog" />
<meta name="description" content="Blog" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="179" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-blog">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">The latest news...</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionnews" contenteditable="true" class="section-50 section-md-50 section-md-bottom-50">
<div><br><div class="text-align: center">
<!--<h2>The latest news...</h2><br><br><br> -->
<?php
$weblangs->load("main");
$fuser = new User($db);
$arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'status'=>1, 'lang'=>'null,'.$websitepage->lang));
foreach($arrayofblogs as $blog)
{
print '<div class="row justify-content-sm-center row-40">';
print '<div class="container blog-box d-xl-inline-block margin-lr-30" style="padding: 20px; box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); transition: .3s all ease;">';
print '<a class="centpercent" href="'.$blog->pageurl.'.php">';
print '<div class="post-boxed-img-wrap"><img src="'.($blog->image ? 'viewimage.php?modulepart=medias&file='.str_replace('template-corporate', $website->ref, $blog->image) : 'medias/image/'.$website->ref.'/calendar.svg"').'" alt="" width="120"></div>';
print '<div class="post-boxed-caption">';
print '<div class="post-boxed-title font-weight-bold">'.$blog->title.'</div>';
print '<ul class="list-inline list-inline-dashed text-uppercase">';
print '<li>'.dol_print_date($blog->date_creation, 'daytext', 'tzserver', $weblangs).'</li>';
$fuser->fetch($blog->fk_user_creat);
print '<li><span>by<span> <span class="text-primary">'.$fuser->firstname.'</span></span></li>';
print '</ul>';
print '<span class="nohover">'.$blog->description.'</span>';
print '</div>';
//includeContainer($blog->pageurl);
print '</a>';
print '</div>';
print '</div>';
}
?>
</div></div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 179);
// END PHP ?>

View File

@ -0,0 +1,84 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Our company is now on Dolibarr ERP CRM</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Our company is now on Dolibarr ERP CRM" />
<meta name="description" content="Our company has moved on Dolibarr ERP CRM. This is an important step in improving all of our services." />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="180" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-blog-our-company-is-now-on-dolibarr">
<?php includeContainer('header'); ?>
<?php print getStructuredData('blogpost', $websitepage); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s" style="font-size: 2em"><?php echo $websitepage->title; ?></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<div class="container" contenteditable="true">
<br><br><br>
Like several thousands of companies, our company (<?php echo $mysoc->name ?>) has moved all its information system to <a href="https://www.dolibarr.org">Dolibarr ERP CRM</a>. More than 20 applications have been replaced by only one, easier to use and fully integrated.
This is an important step in improving all of our services.
<br><br><br>
<figure>
<img src="/viewimage.php?modulepart=medias&file=image/template-corporate/background_dolibarr.webp">
<br><br>
<figcaption style="opacity: 0.5; text-align: center;">Screenshot of our new Open Source solution</figcaption>
</figure>
<br><br><br><br><br><br>
</div>
<?php includeContainer('footer'); ?>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 180);
// END PHP ?>

View File

@ -0,0 +1,85 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Our new web site has been launched</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Our new web site has been launched" />
<meta name="description" content="Our new website, based on Dolibarr CMS, has been launched. Modern and directly integrated with the internal management tools of the company, many new online services for our customers will be able to see the day..." />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="181" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-blog-our-new-web-site-has-been-launched">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s" style="font-size: 2em"><?php echo $websitepage->title; ?></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<div class="container">
<br><br><br><br><br><br>
Our new website, based on Dolibarr CMS, has been launched. <br>
Now it is modern and directly integrated with the internal management tools of the company. Many new online services will be available for our customers...
<br><br><br>
<figure>
<img src="/viewimage.php?modulepart=medias&file=image/template-corporate/background_rough-horn.webp">
<br><br>
<figcaption style="opacity: 0.5; text-align: center;">Theme of our new web site</figcaption>
</figure>
<br><br><br><br><br><br>
</div>
<?php includeContainer('footer'); ?>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 181);
// END PHP ?>

View File

@ -0,0 +1,129 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Careers</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="career" />
<meta name="title" content="Careers" />
<meta name="description" content="Our job opportunities" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="182" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-careers">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Job opportunities</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div style="margin: 50px"><div class="text-align: center">
<br>
<h2 style="margin-left: 10px; margin-right: 10px">We are recruiting the following profiles...</h2><br><br>
<section id="sectionnews" contenteditable="false" class="section-50 section-md-50 section-md-bottom-50">
<?php
include_once DOL_DOCUMENT_ROOT.'/recruitment/class/recruitmentjobposition.class.php';
$jobposition = new RecruitmentJobPosition($db);
$fuser = new User($db);
$arrayofrecord = $jobposition->fetchAll('DESC', 'date_creation', 5, 0, array('status'=>'1,3,9'));
$weblangs->load("main");
foreach($arrayofrecord as $jobrecord)
{
print '<div class="row justify-content-sm-center row-40">';
print '<div class="container blog-box d-xl-inline-block" style="box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); transition: .3s all ease;">';
//print '<a href="/public/recruitment/view.php?id='.$jobrecord->id.'.php">';
//print '<div class="post-boxed-img-wrap"><img src="'.($blog->image ? 'viewimage.php?modulepart=medias&file='.$blog->image : 'medias/image/'.$website->ref.'/calendar.svg"').'" alt="" width="120"></div>';
print '<div class="post-boxed-caption">';
print '<div class="post-boxed-title font-weight-bold">'.$jobrecord->label.'</div>';
print '<ul class="list-inline list-inline-dashed">';
print '<li><span class="text-primary">'.dol_print_date($jobrecord->date_creation, 'daytext', 'tzserver', $weblangs).'</span></li>';
//$fuser->fetch($jobrecord->fk_user_recruitment);
//print '<li><span>par<span> <span class="text-primary">'.$fuser->firstname.'</span></span></li>';
//print '<li><span>Contact:<span> <span class="text-primary">Laurent Destailleur - job@nltechno.com</span></span></li>';
print '</ul>';
print '</div>';
print '<div class="left" style="line-height: 1.5em; margin-top: 30px; margin-left: 20px; margin-right: 20px">';
//includeContainer($blog->pageurl);
if ($jobrecord->status == RecruitmentJobPosition::STATUS_RECRUITED) {
$langs->load('recruitment');
print info_admin($langs->trans("JobClosedTextCandidateFound"), 0, 0, 0, 'warning');
print '<br>';
}
if ($jobrecord->status == RecruitmentJobPosition::STATUS_CANCELED) {
$langs->load('recruitment');
print info_admin($langs->trans("JobClosedTextCanceled"), 0, 0, 0, 'warning');
print '<br>';
}
print '<span class="nohover">'.$jobrecord->description.'</span>';
print '<br><br><span>Contact:<span> <span class="text-primary">Laurent Destailleur - '.$jobrecord->email_recruiter.'</span></span>';
print '</div>';
//print '</a>';
print '</div>';
print '</div>';
}
?>
</section>
</div></div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 182);
// END PHP ?>

View File

@ -0,0 +1,84 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="fr">
<head>
<title>Carrière</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="career" />
<meta name="title" content="Carrière" />
<meta name="description" content="Nos opportunités professionnelles" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="183" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-carriere">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Offres d'emploi</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div style="margin: 50px"><div class="text-align: center">
<br>
<br>
<br>
Nous n'avons pas d'offres d'emploi ouvertes en ce moment...<br>
<br>
<br>
<br>
<br>
</div></div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 183);
// END PHP ?>

View File

@ -0,0 +1,78 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Clients Testimonials</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="testimonials, use cases, success story" />
<meta name="title" content="Clients Testimonials" />
<meta name="description" content="Client Testimonials" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="184" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-clients-testimonials">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Testimonials</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<div class="center">
<br><br>
<h1 class="text-center">What they say <span class="text-thin">about us</span></h1>
<br><br><br><br>
Send us your testimonial (by email to <a href="mailto:<?php echo $mysoc->email; ?>"><?php echo $mysoc->email; ?></a>)
<br><br><br><br>
<br><br>
</div>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 184);
// END PHP ?>

View File

@ -0,0 +1,84 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Contact</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="Contact" />
<meta name="title" content="Contact" />
<meta name="description" content="Privacy Policies" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="185" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-contact">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Contact</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div style="margin: 50px; text-align: center">
<h2>Contact us:</h2> <br> <br>
<span class="fa fa-envelope-o"></span> <?php echo $mysoc->email ?><br>
<span class="fa fa-address-card-o"></span> <?php echo $mysoc->getFullAddress() ?><br>
</div>
</section>
<!-- Google MAPS -->
<center><div class="mapouter"><div class="gmap_canvas"><iframe width="600" height="500" id="gmap_canvas" src="https://maps.google.com/maps?q=<?php echo urlencode($mysoc->getFullAddress()); ?>&t=&z=13&ie=UTF8&iwloc=&output=embed" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe>
</div>
<style>.mapouter{text-align:right;height:500px;width:600px;}.gmap_canvas {overflow:hidden;background:none!important;height:500px;width:600px;}</style>
</div></center>
<br><br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 185);
// END PHP ?>

View File

@ -0,0 +1,91 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>FAQ</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="faq" />
<meta name="title" content="FAQ" />
<meta name="description" content="Frequently Asked Questions" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="186" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-faq">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">FAQs</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div class="container">
<div class="text-align: center"><br><br><h2>Frequently Asked Questions</h2></div>
<br>
<br>
<br>
<h4>How can I contact you ?</h4><br>
You can contact us by using <a href="contact.php">this page</a>.
<br>
<br>
<br>
<h4>What is your privacy policy ?</h4><br>
You may find information about our privacy policy on <a href="privacy-policies.php">this page</a>.
<br><br><br><br>
</div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 186);
// END PHP ?>

View File

@ -0,0 +1,132 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Footer</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Footer" />
<meta name="description" content="Footer" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="187" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-footer">
<!-- At least 2 div required to avoid ckeditor to insert a p -->
<div class="dolcontenteditable" contenteditable="true">
<footer class="page-foot bg-cape-cod context-dark">
<section id="sectionfooter" contenteditable="true" class="section-40">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-sm-9 col-md-12 col-xl-12">
<div class="row row-50">
<div class="col-md-6 col-lg-4 col-xl-4">
<h4 class="text-small-16 text-uppercase footer-title">Product and Services</h4>
<div class="row" style="padding-right: 20px">
<div class="col-6">
<ul class="list-marked-variant-2">
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="product-p.php">Product P</a></li>
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="service-s.php">Service S</a></li>
</ul>
</div>
<div class="col-6">
<ul class="list-marked-variant-2">
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="pricing.php">Prices</a></li>
</ul>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 col-xl-4">
<h4 class="text-small-16 text-uppercase footer-title">Quick links</h4>
<div class="row" style="padding-right: 20px">
<div class="col-6">
<ul class="list-marked-variant-2">
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="home.php">Home</a></li>
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="blog.php">Blog</a></li>
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="search.php">Search</a></li>
</ul>
</div>
<div class="col-6">
<ul class="list-marked-variant-2">
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="contact.php">Contacts</a></li>
<li><span class="fa fa-chevron-right marginrightonly"></span><a href="privacy-policies.php">Privacy policies</a></li>
</ul>
<?php // echo $website->componentSelectLang('auto', $weblangs, 'margin-top-10'); ?>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4 col-xl-4">
<h4 class="text-small-16 text-uppercase footer-title">Contact us</h4>
<address class="contact-info text-left">
<div class="unit unit-horizontal unit-spacing-md align-items-center">
<div class="unit-left"><span class="icon text-white fa fa-phone"></span></div>
<div class="unit-body"><a class="link-white" href="callto:<?php echo $mysoc->phone; ?>"><?php echo $mysoc->phone; ?></a></div>
</div>
<div class="unit unit-horizontal unit-spacing-md align-items-center">
<div class="unit-left"><span class="icon text-white fa fa-envelope-o"></span></div>
<div class="unit-body"><a class="link-white" href="mailto:<?php echo $mysoc->email; ?>"><?php echo $mysoc->email; ?></a></div>
</div>
<div class="unit unit-horizontal unit-spacing-md">
<div class="unit-left"><span class="icon text-white fa fa-address-card-o"></span></div>
<div class="unit-body"><span class="link-white"><?php echo $mysoc->getFullAddress(1, '<br>', 1); ?></span></div>
</div>
</address>
<div class="group-sm group-middle">
<p class="font-italic text-white">Follow Us:</p>
<ul class="list-inline">
<?php foreach($mysoc->socialnetworks as $key => $value) {
print '<li><a class="icon icon-xxs-smallest" href="'.(preg_match('/^http/', $value) ? $value : 'https://www.'.$key.'.com/'.$value).'"><span class="fab fa-'.$key.'" style="margin-left: 5px; font-size: 1.6em"></span></a></li>';
} ?>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div class="center">
Website generated and powered by <a href="https://www.dolibarr.org" target="CRM and ERP for freelances, association and companies">Dolibarr ERP & CRM</a>
</div>
</section>
</footer>
<!--<a href="#" id="ui-to-top" class="ui-to-top"><span class="fa fa-angle-up" style="color: #fff; font-size: 1.9em;"></span></a>-->
</div>
<script src="/document.php?modulepart=medias&file=js/template-corporate/script.js"></script>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 187);
// END PHP ?>

View File

@ -0,0 +1,134 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Header and Top Menu</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Header and Top Menu" />
<meta name="description" content="Header with menu" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="188" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-header">
<!-- JQuery + Other js libs -->
<script src="/document.php?modulepart=medias&file=js/template-corporate/extlib.min.js"></script>
<div class="dolcontenteditable dolsticky" contenteditable="true"><div class="div-page-head">
<header class="page-head">
<div class="rd-navbar-wrap" style="height: 106px;">
<nav class="rd-navbar rd-navbar-corporate-dark rd-navbar-original rd-navbar-static"
data-layout="rd-navbar-fixed" data-sm-layout="rd-navbar-fixed" data-md-device-layout="rd-navbar-fixed"
data-md-layout="rd-navbar-static" data-lg-layout="rd-navbar-static" data-xl-layout="rd-navbar-static" data-xxl-layout="rd-navbar-static"
data-lg-device-layout="rd-navbar-static" data-xl-device-layout="rd-navbar-static" data-xxl-device-layout="rd-navbar-static"
data-stick-up-clone="false" data-md-stick-up-offset="53px" data-lg-stick-up-offset="53px" data-md-stick-up="true" data-lg-stick-up="true">
<div class="rd-navbar-inner">
<div class="rd-navbar-group rd-navbar-search-wrap toggle-original-elements">
<div class="rd-navbar-panel">
<button class="rd-navbar-toggle" data-custom-toggle=".rd-navbar-nav-wrap" data-custom-toggle-disable-on-blur="true"><span></span></button><a class="rd-navbar-brand brand" href="home.php">
<img src="/viewimage.php?modulepart=mycompany&file=logos/<?php echo getImageFileNameForSize($mysoc->logo_squarred ? $mysoc->logo_squarred : $mysoc->logo, '_small') ?>" alt="" height="34"></a>
</div>
<div class="rd-navbar-nav-wrap">
<div class="rd-navbar-nav-inner">
<div class="rd-navbar-search toggle-original-elements">
<form class="rd-search" action="search.php" method="POST" data-search-live="rd-search-results-live">
<input type="hidden" name="token" value="<?php echo newToken(); ?>" />
<div class="form-wrap">
<input class="form-input" id="rd-search-form-input" type="text" name="s" autocomplete="off" placeholder="Search...">
<div class="rd-search-results-live cleared" id="rd-search-results-live"></div>
</div>
<button class="rd-search-submit buttonwithnoborder" type="submit"><span class="icon icon-xs icon-dusty-gray fa fa-search"></span></button>
</form>
<button class="buttonwithnoborder" data-rd-navbar-toggle=".rd-navbar-search, .rd-navbar-search-wrap">
<span class="icon icon-xs icon-dusty-gray fa fa-search"></span>
</button>
</div>
<!-- Tree with menu -->
<ul class="rd-navbar-nav">
<li class="active"><a href="/">Home</a></li>
<li class="rd-navbar--has-megamenu rd-navbar-submenu"><a href="#">Products | Services</a>
<ul class="rd-navbar-megamenu rd-navbar-open-right">
<li>
<h4 class="rd-megamenu-header">Products and Services</h4>
<ul class="rd-navbar-list">
<li><a href="product-p.php">Product P</a></li>
<li><a href="service-s.php">Service S</a></li>
</ul>
</li>
<li>
<h4 class="rd-megamenu-header">Pricing</h4>
<ul class="rd-navbar-list">
<li><a href="pricing.php">Pricing</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="blog.php">Blog</a></li>
<li class="rd-navbar--has-megamenu rd-navbar-submenu"><a href="#">Our company</a>
<ul class="rd-navbar-megamenu rd-navbar-open-right">
<li>
<h4 class="rd-megamenu-header">Our business</h4>
<ul class="rd-navbar-list">
<li><a href="clients-testimonials.php">Clients testimonials</a></li>
<li><a href="partners.php">Partners</a></li>
</ul>
</li>
<li>
<h4 class="rd-megamenu-header">Human Resources</h4>
<ul class="rd-navbar-list">
<li><a href="our-team.php">Our team</a></li>
<li><a href="careers.php">Careers</a></li>
</ul>
</li>
<li>
<h4 class="rd-megamenu-header">Other</h4>
<ul class="rd-navbar-list">
<li><a href="faq.php">FAQ</a></li>
<li><a href="search.php">Search</a></li>
<li><a href="contact.php">Contact us</a></li>
<li><a href="privacy-policies.php">Privacy policies</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="contact.php">Contacts</a></li>
</ul>
</div>
</div>
</div>
</div>
</nav>
</div>
</header>
</div></div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 188);
// END PHP ?>

View File

@ -0,0 +1,576 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Home</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Home" />
<meta name="description" content="Welcome" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="189" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-home">
<div class="page">
<?php includeContainer('header'); ?>
<!-- top images -->
<section id="sectionimage" contenteditable="true">
<div class="swiper-container swiper-slider swiper-variant-1 bg-black swiper-container-horizontal" data-loop="false" data-autoplay="5500" data-swipe="true" data-simulate-touch="true">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" data-slide-bg="medias/image/template-corporate/background_rough-horn.webp" style="background-image: url('medias/image/template-corporate/background_rough-horn.webp'); background-size: cover; width: 1905px;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s"><span class="text-thin">Boost your business</span>
</div>
<div data-caption-animate="fadeInUp" data-caption-delay="450s" class="fadeInUp animated">
<p class="text-big-19 text-white d-none d-md-inline-block">We provide powerful solutions for all businesses</p>
</div>
<div class="button-block fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="550s"><a class="btn btn-primary maincolorbisbackground" href="contact.php">Contact us</a></div>
</div>
</div>
</div>
</div>
</div>
<div class="swiper-slide swiper-slide-next" data-slide-bg="medias/image/template-corporate/background_sunset.webp" style="background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover; width: 1905px;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10 col-xl-12">
<div class="text-white text-uppercase jumbotron-custom border-modern not-animated" data-caption-animate="fadeInUp" data-caption-delay="0s">&nbsp;Best prices on the market&nbsp;
</div>
<div data-caption-animate="fadeInUp" data-caption-delay="450s" class="not-animated">
<p class="text-big-19 text-white d-none d-md-inline-block">Our optimized processes allows us to provide you very competitive prices</p>
</div>
<div class="button-block not-animated" data-caption-animate="fadeInUp" data-caption-delay="550s"><a class="btn btn-primary" href="contact.php">Contact us</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="swiper-scrollbar d-xl-none"><div class="swiper-scrollbar-drag" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms; width: 0px;"></div></div>
<div class="swiper-nav-wrap d-none d-xl-block">
<div class="swiper-button-prev swiper-button-disabled"><span class="icon text-white fa fa-chevron-right fa-2x"></span></div>
<div class="swiper-button-next"><span class="icon text-white fa fa-chevron-right fa-2x"></span></div>
</div>
</div>
</section>
<!--<script>
CKEDITOR.disableAutoInline = true;
CKEDITOR.inline( 'sectionimage' , { toolbar: ['Bold','Italic'] } );
</script>
-->
<!--Products box-->
<section id="sectioniconbox" contenteditable="true">
<div class="row no-gutters justify-content-sm-center justify-content-md-start row-40 row-sm-0">
<div class="col-sm-10 col-md-6 height-fill">
<div class="icon-box icon-box-top-line icon-box-hover">
<div class="box-top">
<div class="box-icon"><img width="50px" src="medias/image/template-corporate/briefcase.png"></div>
<div class="box-header">
<h3><a href="our-team.php">A competent team</a></h3>
</div>
</div>
<div class="box-body">
<p class="text-black">Our sales representative are also technicians.</p>
</div>
</div>
</div>
<div class="col-sm-10 col-md-6 height-fill">
<div class="icon-box icon-box-top-line icon-box-hover">
<div class="box-top">
<div class="box-icon"><img width="50px" src="medias/image/template-corporate/package.png"></div>
<div class="box-header">
<h3><a href="pricing.php">The best prices of market</a></h3>
</div>
</div>
<div class="box-body">
<p class="text-black">Take a look at our offers...</p>
</div>
</div>
</div>
<div class="col-sm-10 col-md-6 height-fill">
<div class="icon-box icon-box-hover">
<div class="box-top">
<div class="box-icon"><img width="50px" src="medias/image/template-corporate/light-bulb.png"></div>
<div class="box-header">
<h3><a href="clients-testimonials.php">A high level of satisfaction</a></h3>
</div>
</div>
<div class="box-body">
<p class="text-black">Our customer-supplier relationship is very appreciated by our customers</p>
</div>
</div>
</div>
<div class="col-sm-10 col-md-6 height-fill">
<div class="icon-box icon-box-hover">
<div class="box-top">
<div class="box-icon"><img width="50px" src="medias/image/template-corporate/organization.png"></div>
<div class="box-header">
<h3><a href="/contact.php">After Sale service</a></h3>
</div>
</div>
<div class="box-body">
<p class="text-black">We continue to follow and assist you after the sale. Contact us at any time.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Looking for our sevices -->
<section id="sectionfirstclass" contenteditable="true" class="section-with-counters bg-accent text-center">
<div class="container bg-cape-cod context-dark section-60 section-lg-90">
<h2 class="text-rolling-stone font-weight-bold text-uppercase">Looking for</h2>
<h1 class="section-title"><span class="text-thin">a high quality</span> service?</h1>
<p class="text-black">With a lot of experience, hiring us is a security for your business!</p>
<div class="row list-md-dashed row-40">
<div class="col-md-4">
<div class="h1 small counter-bold counter maincolorbis">11</div>
<div class="counter-title text-black font-weight-bold text-uppercase">Years of Experience</div>
</div>
<div class="col-md-4">
<div class="h1 small counter-bold counter maincolorbis">
<?php $sql = "SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX."user where statut = 1"; $resql = $db->query($sql); $obj = $db->fetch_object($resql); print $obj->nb; ?>
</div>
<div class="counter-title text-black font-weight-bold text-uppercase">Experts</div>
</div>
<div class="col-md-4">
<div class="h1 small counter-bold counter maincolorbis">
<?php $sql = "SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX."societe where client in (1,3)"; $resql = $db->query($sql); $obj = $db->fetch_object($resql); print $obj->nb; ?>
</div>
<div class="counter-title text-black font-weight-bold text-uppercase">Trusted Clients</div>
</div>
</div>
<div class="button-block inset-sm-left-60 inset-sm-right-60">
<div class="d-md-flex justify-content-md-center align-items-md-center"><a class="btn btn-rect btn-primary d-block d-md-inline-block" href="contact.php">Contact us</a>
<span class="font-italic text-black inset-md-left-20 inset-md-right-20 d-block d-md-inline-block text-big-18">&nbsp; or &nbsp;</span>
<a class="btn btn-rect btn-white-outline d-block d-md-inline-block maincolorbisbackground" href="pricing.php" style="min-width:236px;">See our pricing</a></div>
</div>
</div>
</section>
<!-- Our plans -->
<section id="sectionplans" contenteditable="true" class="section-67 section-md-top-75 section-md-bottom-75">
<div class="container">
<div id="carousel-plans-month" class="" data-interval="0" style="margin-top:50px">
<!-- begin .carousel-inner -->
<div class="pricing-plan-slider" role="listbox">
<!-- begin .item -->
<div class="item active">
<!-- begin .container -->
<div class="container">
<h1 class="text-center">our <span class="text-thin">plans</span></h1>
<!-- begin .row -->
<div class="plan-list flex-box row spacer-bottom-sm flexwrap_inherit">
<!-- begin .plan-item -->
<div class="col-lg-15 col-md-4 col-sm-6 col-xs-12 box">
<div class="plan-tile">
<div class="plan-box-header"></div>
<div class="plan-title">FREE</div>
<div class="plan-tag">The best choice for personal use</div>
<div class="plan-feat"><span class="summaryplan">The service 1 for free</div>
<div class="plan-pricer">
<span class="plan-price" id="monthly_plan_37"><span><sup></sup>0<sup></sup></span>/ month</span>
</div>
<div class="plan-features">
<span class="plan-features-title">Available features are :</span> </span>
<ul class="list-unstyled">
<li>
<i class="fa fa-check"></i>
Service 1
</li>
</ul>
</div>
<div class="plan-btn plan-picker">
<a href="plan-a.php" class="btn btn-rect btn-primary d-block d-md-inline-block" id="plana">Subcribe</a>
</div>
</div>
</div>
<!-- end .plan-item -->
<!-- begin .plan-item -->
<div class="col-lg-15 col-md-4 col-sm-6 col-xs-12 box ">
<div class="plan-tile">
<div class="plan-box-header"></div>
<div class="plan-title">STARTER</div>
<div class="plan-tag">For small companiess</div>
<div class="plan-feat">The service 1 and product 1 at low price</div>
<div class="plan-pricer">
<span class="plan-price" id="starter"><span><sup></sup>29<sup></sup></span>/ month</span>
</div>
<div class="plan-features">
<span class="plan-features-title">Available features are :</span> </span>
<ul class="list-unstyled">
<li>
<i class="fa fa-check"></i>
Service 1
</li>
<li>
<i class="fa fa-check"></i>
Product 1
</li>
</ul>
</div>
<div class="plan-btn plan-picker">
<a href="plan-b.php" class="btn btn-rect btn-primary d-block d-md-inline-block" id="planb">Subscribe</a>
</div>
</div>
</div>
<!-- end .plan-item -->
<!-- Most popular plan box -->
<div class="col-lg-15 col-md-4 col-sm-6 col-xs-12 box most-popular-plan-box2 most-popular-plan-box ">
<div class="plan-tile">
<div class="plan-box-header" id="default"></div>
<div class="plan-title">PREMIUM</div>
<div class="plan-tag">For large companies</div>
<div class="plan-feat">The full option package for a one shot price
</div>
<div class="plan-pricer">
<span class="plan-price planPremiumPrice" id="premium"><span><sup></sup>2499<sup></sup></span></span>
</div>
<div class="plan-features">
<span class="plan-features-title">Available features are :</span>
<ul class="list-unstyled">
<li>
<i class="fa fa-check"></i>
Service 1 </li>
<li id="higherFeature" class="hide">
<i class="fa fa-check"></i>
Service 2 </li>
<li>
<i class="fa fa-check"></i>
Product 1 </li>
</ul>
</div>
<div class="plan-btn plan-picker">
<a href="planc.php" class="btn btn-rect btn-primary d-block d-md-inline-block maincolorbisbackground" id="planc">Buy</a>
</div>
</div>
</div>
<!-- Ends // Most Popular Plan Box -->
</div>
<!-- end .row -->
</div>
<!-- end .container -->
</div>
<!-- end .item -->
</div>
<!-- end .row -->
<!-- end .carousel -->
</div>
</div>
</section>
<!-- Our team -->
<section id="sectionteam" contenteditable="true" class="section-66 section-md-top-100 section-md-bottom-75">
<div class="container">
<h1 class="text-center">our <span class="text-thin">team</span></h1>
<div class="row justify-content-sm-center">
<div class="col-md-8 col-xl-12">
<div class="owl-carousel owl-carousel-center owl-nav-modern owl-style-minimal owl-style-minimal-inverse text-center" data-items="1" data-md-items="2" data-xl-items="3" data-stage-padding="15" data-loop="false" data-margin="15" data-mouse-drag="false" data-nav="true" data-dots="true">
<div class="owl-item text-center">
<div class="thumbnail-variant-5">
<div class="thumbnail-variant-5-img-wrap"><img class="img-circle" src="medias/image/template-corporate/alberteinstein.jpg" width="129" height="129" alt=""></div>
<h2>Albert Einstein</h2>
<div>CEO</div>
<div class="divider-fullwidth bg-porcelain"></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-phone"></span><a class="link-black" href="callto:#">+555 123 456</a></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-envelope-o"></span><a class="link-black" href="mailto:#">email@example.com</a></div>
</div>
</div>
<div class="owl-item text-center">
<div class="thumbnail-variant-5">
<div class="thumbnail-variant-5-img-wrap"><img class="img-circle" src="medias/image/template-corporate/pierrecurie.jpg" width="129" height="129" alt=""></div>
<h2>Pierre Curie</h2>
<div>CTO</div>
<div class="divider-fullwidth bg-porcelain"></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-phone"></span><a class="link-black" href="callto:#">+555 123 456</a></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-envelope-o"></span><a class="link-black" href="mailto:#">email@example.com</a></div>
</div>
</div>
<div class="owl-item text-center">
<div class="thumbnail-variant-5">
<div class="thumbnail-variant-5-img-wrap"><img class="img-circle" src="medias/image/template-corporate/mariecurie.jpg" width="129" height="129" alt=""></div>
<h2>Marie Curie</h2>
<div>Bookkeeper</div>
<div class="divider-fullwidth bg-porcelain"></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-phone"></span><a class="link-black" href="callto:#">+555 123 456</a></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-envelope-o"></span><a class="link-black" href="mailto:#">email@example.com</a></div>
</div>
</div>
<div class="owl-item text-center">
<div class="thumbnail-variant-5">
<div class="thumbnail-variant-5-img-wrap"><img class="img-circle" src="medias/image/template-corporate/daviddoe.png" width="129" height="129" alt=""></div>
<h2>John Doe</h2>
<div>Project leader</div>
<div class="divider-fullwidth bg-porcelain"></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-phone"></span><a class="link-black" href="callto:#">+555 123 456</a></div>
<div class="link-group"><span class="icon icon-xxs icon-primary fa fa-envelope-o"></span><a class="link-black" href="mailto:#">email@example.com</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Contact form -->
<section id="sectionformcontact" contenteditable="true" class="section-67 section-md-top-50 section-md-bottom-50 section-md-bottom-100 section-with-counters">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-10 col-lg-10 col-xl-12">
<div class="panel bg-accent bg-default-outline-btn text-center" style="padding: 50px 15px;">
<h1>Request <span class="text-thin">a callback</span></h1>
<form class="formcontact" method="POST" action="request-callback.php">
<div class="inline-block valignmiddle">
<input class="form-input" placeholder="Name" id="index-request-name" type="text" name="name" required>
</div>
<div class="inline-block valignmiddle">
<input class="form-input" placeholder="Phone Number" id="index-request-phone" type="text" name="phone" required>
</div>
<div class="inline-block valignmiddle">
<input class="form-input" placeholder="Email" id="index-request-email" type="text" name="email" required>
</div>
<div class="inline-block valignmiddle">
<button class="btn btn-rect btn-primary d-block d-md-inline-block maincolorbisbackground" type="submit">Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
<!-- Testimonies -->
<section id="sectiontestimonies" contenteditable="true" class="maincolorbackground context-dark">
<div class="container">
<div class="row justify-content-sm-center justify-content-lg-start">
<div class="col-sm-10 col-lg-12 text-left section-60 section-md-60">
<div>
<h1 class="text-center text-lg-left">successful <span class="text-thin">cases</span></h1>
<div class="carousel-testimonials-home">
<div class="inset-xl-right-50">
<div class="slick-slider slick-slider slick-carousel-round-image slick-images" id="child-carousel" data-for=".carousel-parent" data-arrows="false" data-loop="false"
data-dots="false" data-swipe="true" data-items="1" data-sm-items="3" data-md-items="3" data-lg-items="3" data-xl-items="4" data-slide-to-scroll="1" data-center-mode="false" data-center-padding="0">
<div class="itemphotouser">
<div class="imp-wrap"><img class="photouser" src="medias/image/template-corporate/alberteinstein.jpg" alt="" width="99" height="99"/>
</div>
</div>
<div class="itemphotouser">
<div class="imp-wrap"><img class="photouser" src="medias/image/template-corporate/pierrecurie.jpg" alt="" width="99" height="99"/>
</div>
</div>
<div class="itemphotouser">
<div class="imp-wrap"><img class="photouser" src="medias/image/template-corporate/mariecurie.jpg" alt="" width="99" height="99"/>
</div>
</div>
<div class="itemphotouser">
<div class="imp-wrap"><img class="photouser" src="medias/image/template-corporate/daviddoe.png" alt="" width="99" height="99"/>
</div>
</div>
</div>
</div>
<div class="slick-slider carousel-parent slick-dots-variant-1" data-arrows="false" data-loop="false" data-dots="true"
data-swipe="true" data-child="#child-carousel" data-for="#child-carousel" data-items="1" data-sm-items="1" data-md-items="1" data-lg-items="1" data-xl-items="1" data-slide-to-scroll="1" data-center-mode="false">
<div class="inset-left-10 inset-right-10 inset-">
<div class="inset-xl-right-85">
<blockquote class="quote-left">
<div class="row align-items-sm-end row-20">
<div class="col-sm-6">
<div class="quote-name">
<cite>Albert Einstein</cite>
</div>
<div class="text-dusty-gray">Scientist, www.emc2.org</div>
</div>
<div class="col-sm-6 text-center">
<div class="quote-desc row d-flex">
<div class="col-sm-6">
<div class="quote-desc-text maincolorbis">-20%</div>
<div class="text-medium text-dusty-gray text-uppercase">Expenses</div>
</div>
</div>
</div>
</div>
<div class="divider-fullwidth"></div>
<div>
<span class="fa fa-quote-left"><!-- Keep this comment --></span>
<q>They did everything, with almost no time or effort for me. The best part was that I could trust their team to represent our company professionally with our clients.</q>
<span class="fa fa-quote-right"><!-- Keep this comment --></span>
</div>
</blockquote>
</div>
</div>
<div class="inset-left-10 inset-right-10 inset-">
<div class="inset-xl-right-85">
<blockquote class="quote-left">
<div class="row row-20">
<div class="col-sm-6">
<div class="quote-name">
<cite>Pierre Curie</cite>
</div>
<div class="text-dusty-gray">CEO “Cyclonic”</div>
</div>
<div class="col-sm-6 text-center">
<div class="quote-desc row d-flex">
<div class="col-sm-6">
<div class="quote-desc-text maincolorbis">-30%</div>
<div class="text-medium text-dusty-gray text-uppercase">Expenses</div>
</div>
</div>
</div>
</div>
<div class="divider-fullwidth"></div>
<div>
<span class="fa fa-quote-left"><!-- Keep this comment --></span>
<q>Their course gave me the confidence to implement new techniques in my work. I learn “how” to write “what” and “why” also became much clearer.</q>
<span class="fa fa-quote-right"><!-- Keep this comment --></span>
</div>
</blockquote>
</div>
</div>
<div class="inset-left-10 inset-right-10 inset-">
<div class="inset-xl-right-85">
<blockquote class="quote-left">
<div class="row row-20">
<div class="col-sm-6">
<div class="quote-name">
<cite>Marie Curie</cite>
</div>
<div class="text-dusty-gray">CTO "Cyclonic"</div>
</div>
<div class="col-sm-6 text-center">
<div class="quote-desc row d-flex">
<div class="col-sm-6">
<div class="quote-desc-text maincolorbis">+22%</div>
<div class="text-medium text-dusty-gray text-uppercase">Turnover</div>
</div>
</div>
</div>
</div>
<div class="divider-fullwidth"></div>
<div>
<span class="fa fa-quote-left"><!-- Keep this comment --></span>
<q>We were skeptical to work with a consultant to optimize our sales emails, but they were highly recommended by many other startups we knew. They helped us to reach our objective of 20% turnover increase, in 4 monthes.</q>
<span class="fa fa-quote-right"><!-- Keep this comment --></span>
</div>
</blockquote>
</div>
</div>
<div class="inset-left-10 inset-right-10 inset-">
<div class="inset-xl-right-85">
<blockquote class="quote-left">
<div class="row row-20">
<div class="col-sm-6">
<div class="quote-name">
<cite>John Doe</cite>
</div>
<div class="text-dusty-gray">Sale representative</div>
</div>
<div class="col-sm-6 text-center">
<div class="quote-desc row d-flex">
<div class="col-sm-6">
<div class="quote-desc-text maincolorbis">+40%</div>
<div class="text-medium text-dusty-gray text-uppercase">Quotes</div>
</div>
</div>
</div>
</div>
<div class="divider-fullwidth"></div>
<div>
<span class="fa fa-quote-left"><!-- Keep this comment --></span>
<q>Their work on our website and Internet marketing has made a significant different to our business. Weve seen a +40% increase in quote requests from our website.</q>
<span class="fa fa-quote-right"><!-- Keep this comment --></span>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- News -->
<section id="sectionnews" contenteditable="true" class="section-50 section-md-90 section-md-bottom-100">
<div class="container text-center">
<h1>Latest <span class="text-thin">News</span></h1>
<div class="row justify-content-sm-center row-40">
<?php
$MAXNEWS = 3;
$arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, array('type_container'=>'blogpost', 'status'=>1, 'lang'=>'null,'.$websitepage->lang));
foreach($arrayofblogs as $blog)
{
?>
<div class="col-sm-8 col-md-7 col-lg-4">
<div class="post-boxed d-xl-inline-block">
<a href="<?php echo $blog->pageurl ?>.php">
<div class="post-boxed-img-wrap"><img src="<?php echo ($blog->image ? 'viewimage.php?modulepart=medias&file='.str_replace('template-corporate', $website->ref, $blog->image) : 'medias/image/'.$website->ref.'/calendar.png"'); ?>" alt="" height="80"></div>
<div class="post-boxed-caption">
<div class="post-boxed-title font-weight-bold"><?php echo $blog->title ?></div>
<ul class="list-inline list-inline-dashed text-uppercase">
<li><?php $weblangs->load("main"); echo dol_print_date($blog->date_creation, 'daytext', 'tzuser', $weblangs); ?></li>
<li><span>by<span> <span class="text-primary"><?php echo ($blog->author_alias ? $blog->author_alias : 'anonymous'); ?></span></span></li>
</ul>
</div>
</a>
</div>
</div>
<?php
}
?>
</div>
</div>
</section>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 189);
// END PHP ?>

View File

@ -0,0 +1,115 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Our team</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="team" />
<meta name="title" content="Our team" />
<meta name="description" content="Our team" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="190" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-our-team">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Our team</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionteam" contenteditable="true" class="section-50 section-md-50 section-md-bottom-50">
<div class="container"><div class="text-align: center"><br>
<h2>The crew...</h2><br> <br><br>
<?php
include_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
$websitepage = new WebsitePage($db);
$fuser = new User($db);
$arrayofusers = array();
$MAXNB=10;
$sql='SELECT rowid FROM '.MAIN_DB_PREFIX.'user WHERE statut = 1 and fk_soc IS NULL ORDER BY fk_user DESC LIMIT '.$MAXNB;
$resql = $db->query($sql);
if (! $resql) dol_print_error($db);
while ($obj = $db->fetch_object($resql))
{
$arrayofusers[]=$obj->rowid;
}
print '<div class="row justify-content-sm-center row-40">';
foreach($arrayofusers as $id)
{
$fuser->fetch($id);
print '<div class="col-sm-8 col-md-7 col-lg-4">';
print '<div class="container blog-box d-xl-inline-block" style="padding: 20px; box-shadow: -1px 0px 10px 0px rgba(65, 65, 65, 0.12); transition: .3s all ease;">';
print '<div class="post-boxed-img-wrap" style="height: 164px">';
if ($fuser->photo) print Form::showphoto('userphoto', $fuser, 100, 0, 0, 'photowithmargin', '', 0);
//print '<img class="img-circle" src="/viewimage.php?modulepart=userphoto&amp;file='.$fuser->photo.'" width="129" height="129" alt="">';
else print '<img class="img-circle" src="/viewimage.php?modulepart=medias&amp;file=image/template-corporate/daviddoe.png" width="129" height="129" alt="">';
print '</div>';
print '<div class="post-boxed-caption">';
print '<div class="post-boxed-title font-weight-bold">'.$fuser->firstname.'</div>';
print '<ul class="list-inline list-inline-dashed text-uppercase">';
//print '<li>September 24, 2018</li>';
if ($fuser->job) print '<li><span class="text-primary">'.$fuser->job.'</span></li>';
else print '<li></li>';
print '</ul>';
print '</div>';
print '</div>';
print '</div>';
}
print '</div>';
?>
</div></div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 190);
// END PHP ?>

View File

@ -0,0 +1,110 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Partners</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="partners" />
<meta name="title" content="Partners" />
<meta name="description" content="Partners" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="191" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-partners">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Partners</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div style="margin: 50px"><div class="text-align: center">
<br><h2>Our partners...</h2>
<br>
<br>
<br>
<div class="row justify-content-sm-center row-40">
<div class="col-sm-8 col-md-2 col-lg-2">
<div>
<img src="/viewimage.php?modulepart=medias&file=image/template-corporate/dolibarr_256x256.png" height="64px"><br>
<div class="floatatbottom"><a href="https://www.dolibarr.org" target="_new">Dolibarr ERP CRM</a></div>
</div>
</div>
<div class="col-sm-4 col-md-2 col-lg-2">
<div>
<img src="/viewimage.php?modulepart=medias&file=image/template-corporate/php.png" height="64px"><br>
<div class="floatatbottom"><a href="http://www.php.net" target="_new">PHP</a></div>
</div>
</div>
<div class="col-sm-4 col-md-2 col-lg-2">
<div>
<img src="/viewimage.php?modulepart=medias&file=image/template-corporate/apache.png" height="64px"><br>
<div class="floatatbottom"><a href="https://www.apache.org" target="_new">Apache</a></div>
</div>
</div>
<div class="col-sm-4 col-md-2 col-lg-2">
<div>
<img src="/viewimage.php?modulepart=medias&file=image/template-corporate/mariadb.png" height="64px"><br>
<div class="floatatbottom"><a href="https://www.mariadb.org" target="_new">MariaDB</a></div>
</div>
</div>
</div>
<br>
<br>
<br>
<br>
</div></div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 191);
// END PHP ?>

View File

@ -0,0 +1,186 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Pricing</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="pricing" />
<meta name="title" content="Pricing" />
<meta name="description" content="All the prices of our offers" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="192" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-pricing">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Our plans</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Our plans -->
<section id="sectionplans" contenteditable="true" class="section-67 section-md-top-50 section-md-bottom-75">
<div class="container">
<div id="carousel-plans-month" class="" data-interval="0" style="margin-top:50px">
<!-- begin .carousel-inner -->
<div class="pricing-plan-slider" role="listbox">
<!-- begin .item -->
<div class="item active">
<!-- begin .container -->
<div class="container">
<!-- begin .row -->
<div class="plan-list flex-box row spacer-bottom-sm flexwrap_inherit">
<!-- begin .plan-item -->
<div class="col-lg-15 col-md-4 col-sm-6 col-xs-12 box">
<div class="plan-tile">
<div class="plan-box-header"></div>
<div class="plan-title">FREE</div>
<div class="plan-tag">The best choice for personal use</div>
<div class="plan-feat"><span class="summaryplan">The service 1 for free</div>
<div class="plan-pricer">
<span class="plan-price" id="monthly_plan_37"><span><sup></sup>0<sup></sup></span>/ month</span>
</div>
<div class="plan-features">
<span class="plan-features-title">Available features are :</span> </span>
<ul class="list-unstyled">
<li>
<i class="fa fa-check"></i>
Service 1
</li>
</ul>
</div>
<div class="plan-btn plan-picker">
<a href="plan-a.php" class="btn btn-rect btn-primary d-block d-md-inline-block" id="plana">Subcribe</a>
</div>
</div>
</div>
<!-- end .plan-item -->
<!-- begin .plan-item -->
<div class="col-lg-15 col-md-4 col-sm-6 col-xs-12 box ">
<div class="plan-tile">
<div class="plan-box-header"></div>
<div class="plan-title">STARTER</div>
<div class="plan-tag">For small companiess</div>
<div class="plan-feat">The service 1 and product 1 at low price</div>
<div class="plan-pricer">
<span class="plan-price" id="starter"><span><sup></sup>29<sup></sup></span>/ month</span>
</div>
<div class="plan-features">
<span class="plan-features-title">Available features are :</span> </span>
<ul class="list-unstyled">
<li>
<i class="fa fa-check"></i>
Service 1
</li>
<li>
<i class="fa fa-check"></i>
Product 1
</li>
</ul>
</div>
<div class="plan-btn plan-picker">
<a href="plan-b.php" class="btn btn-rect btn-primary d-block d-md-inline-block" id="planb">Subscribe</a>
</div>
</div>
</div>
<!-- end .plan-item -->
<!-- Most popular plan box -->
<div class="col-lg-15 col-md-4 col-sm-6 col-xs-12 box most-popular-plan-box2 most-popular-plan-box ">
<div class="plan-tile">
<div class="plan-box-header" id="default"></div>
<div class="plan-title">PREMIUM</div>
<div class="plan-tag">For large companies</div>
<div class="plan-feat">The full option package for a one shot price
</div>
<div class="plan-pricer">
<span class="plan-price planPremiumPrice" id="premium"><span><sup></sup>2499<sup></sup></span></span>
</div>
<div class="plan-features">
<span class="plan-features-title">Available features are :</span>
<ul class="list-unstyled">
<li>
<i class="fa fa-check"></i>
Service 1 </li>
<li id="higherFeature" class="hide">
<i class="fa fa-check"></i>
Service 2 </li>
<li>
<i class="fa fa-check"></i>
Product 1 </li>
</ul>
</div>
<div class="plan-btn plan-picker">
<a href="planc.php" class="btn btn-rect btn-primary d-block d-md-inline-block maincolorbisbackground" id="planc">Buy</a>
</div>
</div>
</div>
<!-- Ends // Most Popular Plan Box -->
</div>
<!-- end .row -->
</div>
<!-- end .container -->
</div>
<!-- end .item -->
</div>
<!-- end .row -->
<!-- end .carousel -->
</div>
</div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 192);
// END PHP ?>

View File

@ -0,0 +1,100 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Privacy Policies</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="Privacy policies, GDPR" />
<meta name="title" content="Privacy Policies" />
<meta name="description" content="Privacy Policies" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="193" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-privacy-policies">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Privacy Policy</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<br><br><br>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr" style="margin-top: 50px">
<div class="container">
<p style = "text-align: justify;"> <h2> Information collected and used </h2> <br> </p>
<p style = "text-align: justify;"> * Your customer information (email, phone, business name, first and last name of contact, address, postal code, country and VAT number) are stored when you become a customer. This information allows us to bill you. </ P>
<p style = "text-align: justify;"> * If you paid using our online service, we also store the last 4 digits of your card. The full details of your credit card is stored by our payment provider Stripe (the world leader in online payment).</p>
<p style = "text-align: justify;"> * You have the option to request the deletion of your data and the above information at any time (except data required y fiscal tracking rules, like your invoices). </p>
<p style = "text-align: justify;"> * The Privacy Policies and GDPR referral contact for our services is: <?php echo $conf->global->MAIN_INFO_GDPR; ?> </p>
<p style = "text-align: justify;"> <br> </p>
<p style = "text-align: justify;"> <h2> Data Storage and Backups </h2> <br> </p>
<p style = "text-align: justify;"> * The storage of collected data (see 'Information collected and used') is done in a database. </p>
<p style = "text-align: justify;"> * We made one backup every week. Only 4 weeks are kept. <br> </p>
<p style = "text-align: justify;"> <br> </p>
<p style = "text-align: justify;"> <h2> Subcontractor </h2> <br> </p>
<p style = "text-align: justify;"> * Our services relies on the following subcontractors and service: <br>
** The host of computer servers, which is ABC company. These servers are hosted in US. No customer information is communicated to this subcontractor who only provides the hardware and network layer, the installation and operation being carried out by us directly. <br>
** The online payment service <a href="https://www.stripe.com">Stripe</a>, which is used, to ensure regular payment of subscription or your invoices paid online. </p>
<p style = "text-align: justify;"> <br> </p>
<p style = "text-align: justify;"> <h2> Software Protection </h2> <br> </p>
<p style = "text-align: justify;"> * Our services runs on Linux Ubuntu systems and software. They benefit from regular security updates when the operating system editor (Ubuntu Canonical) publishes them. <br> </p>
<p style = "text-align: justify;"> * Our services are accessible in HTTPS (HTTP encrypted) only, encrypted with SHA256 certificates.<br> </p>
<p style = "text-align: justify;"> * Our technical platform are protected by various solutions. <br> </p>
<p style = "text-align: justify;"> <br> </p>
<p style = "text-align: justify;"> <h2> Data theft </h2> <br> </p>
<p style = "text-align: justify;"> * In case of suspicion of a theft of the data we have collected (see first point 'Information collected and used'), customers will be informed by email, at email corresponding to their customer account <br> </p>
<p style="text-align: justify;"> </p>
</div>
</section>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 193);
// END PHP ?>

View File

@ -0,0 +1,84 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Product P</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Product P" />
<meta name="description" content="Product P" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="194" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-product-p">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Product P</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div style="margin: 50px"><div class="text-align: center">
<br>
<br>
<br>
This is a description page of our product P...<br>
<br>
<br>
<br>
<br>
</div></div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 194);
// END PHP ?>

View File

@ -0,0 +1,112 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Search Page</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Search Page" />
<meta name="description" content="Search Page" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="195" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-search">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Search</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<br><br><br>
<center>
<div style="width: 60%">
<form class="rd-search" action="search.php" method="POST">
<input type="hidden" name="token" value="<?php echo newToken(); ?>" />
<div class="form-wrap">
<input class="form-input" id="rd-search-form-input" type="text" name="s" autocomplete="off" placeholder="Search..." value="<?php echo dol_escape_htmltag(GETPOST('s', 'alphanohtml')); ?>">
<div class="rd-search-results-live cleared" id="rd-search-results-live"></div>
</div>
<button class="rd-search-submit buttonwithnoborder" type="submit"><span class="icon icon-xs icon-dusty-gray fa fa-search"></span></button>
</form>
</div>
<br>
<?php
$weblangs->load("main");
if (function_exists('getPagesFromSearchCriterias'))
{
if (GETPOSTISSET('s'))
{
$listofpages = getPagesFromSearchCriterias('page', 'meta', GETPOST('s', 'alphanohtml'));
if ($listofpages['code'] == 'OK')
{
foreach($listofpages['list'] as $websitepagefound)
{
print '<div class="rowsearchresult"><a href="'.$websitepagefound->ref.'.php">'.$websitepagefound->title.'</a> - '.$websitepagefound->description.'</div>';
}
}
else
{
// If error, show message
print $listofpages['message'];
}
}
}
else
{
print $weblangs->trans("FeatureNotYetAvailable");
}
?>
<br><br><br><br><br><br>
</center>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 195);
// END PHP ?>

View File

@ -0,0 +1,82 @@
<?php // BEGIN PHP
$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;
if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) {
$pathdepth = count(explode('/', $_SERVER['SCRIPT_NAME'])) - 2;
require_once ($pathdepth ? str_repeat('../', $pathdepth) : './').'master.inc.php';
} // Not already loaded
require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';
ob_start();
// END PHP ?>
<html lang="en">
<head>
<title>Service S</title>
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="" />
<meta name="title" content="Service S" />
<meta name="description" content="Service S" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="196" />
<?php if ($website->use_manifest) { print '<link rel="manifest" href="/manifest.json.php" />'."\n"; } ?>
<!-- Include link to CSS file -->
<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />
<!-- Include link to JS file -->
<script async src="/javascript.js.php"></script>
<!-- Include HTML header from common file -->
<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>
<!-- Include HTML header from page header block -->
</head>
<!-- File generated by Dolibarr website module editor -->
<body id="bodywebsite" class="bodywebsite bodywebpage-service-s">
<div class="page">
<?php includeContainer('header'); ?>
<section id="sectionimage" contenteditable="true">
<div class="">
<div class="swiper-wrapper text-center" style="transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;">
<div class="swiper-slide swiper-slide-active" style="height: 200px; background-image: url('medias/image/template-corporate/background_sunset.webp'); background-size: cover;">
<div class="swiper-slide-caption">
<div class="container">
<div class="row justify-content-sm-center">
<div class="col-md-11 col-lg-10">
<div class="text-white text-uppercase jumbotron-custom border-modern fadeInUp animated" data-caption-animate="fadeInUp" data-caption-delay="0s">Service S</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section id="sectionfooterdolibarr" contenteditable="true" class="footerdolibarr">
<div style="margin: 50px"><div class="text-align: center">
<br>
<br>
<br>
This is a description page of our service S...<br>
<br>
<br>
<br>
<br>
</div></div>
</section>
<br><br>
<?php includeContainer('footer'); ?>
</div>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 196);
// END PHP ?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page191.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page191.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page192.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page192.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page193.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page193.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page194.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page194.tpl.php';
?>

View File

@ -0,0 +1,4 @@
# Robot file. Generated with Dolibarr
User-agent: *
Allow: /public/
Disallow: /administrator/

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page195.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page195.tpl.php';
?>

View File

@ -0,0 +1,5 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page196.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page196.tpl.php';
?>

View File

@ -0,0 +1,4 @@
<?php
// File generated to wrap the alias page - DO NOT MODIFY - It is just a wrapper to real page
global $dolibarr_main_data_root;
if (empty($dolibarr_main_data_root)) require './page126.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page126.tpl.php';

View File

@ -0,0 +1,278 @@
<?php
// BEGIN PHP File wrapper.php - DO NOT MODIFY - It is just a copy of file website/samples/wrapper.php
$websitekey = basename(__DIR__);
if (strpos($_SERVER["PHP_SELF"], 'website/samples/wrapper.php')) {
die("Sample file for website module. Can be called directly.");
}
if (!defined('USEDOLIBARRSERVER') && !defined('USEDOLIBARREDITOR')) {
require_once './master.inc.php';
} // Load master if not already loaded
include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
$encoding = '';
// Parameters to download files
$hashp = GETPOST('hashp', 'aZ09');
$modulepart = GETPOST('modulepart', 'aZ09');
$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity;
$original_file = GETPOST("file", "alpha");
$l = GETPOST('l', 'aZ09');
$limit = GETPOST('limit', 'int');
// Parameters for RSS
$rss = GETPOST('rss', 'aZ09');
if ($rss) {
$original_file = 'blog.rss';
}
// If we have a hash public (hashp), we guess the original_file.
if (!empty($hashp)) {
include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
$ecmfile = new EcmFiles($db);
$result = $ecmfile->fetch(0, '', '', '', $hashp);
if ($result > 0) {
$tmp = explode('/', $ecmfile->filepath, 2); // $ecmfile->filepath is relative to document directory
// filepath can be 'users/X' or 'X/propale/PR11111'
if (is_numeric($tmp[0])) { // If first tmp is numeric, it is subdir of company for multicompany, we take next part.
$tmp = explode('/', $tmp[1], 2);
}
$moduleparttocheck = $tmp[0]; // moduleparttocheck is first part of path
if ($modulepart) { // Not required, so often not defined, for link using public hashp parameter.
if ($moduleparttocheck == $modulepart) {
// We remove first level of directory
$original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir
//var_dump($original_file); exit;
} else {
print 'Bad link. File is from another module part.';
}
} else {
$modulepart = $moduleparttocheck;
$original_file = (($tmp[1] ? $tmp[1].'/' : '').$ecmfile->filename); // this is relative to module dir
}
} else {
print "ErrorFileNotFoundWithSharedLink";
exit;
}
}
// Define attachment (attachment=true to force choice popup 'open'/'save as')
$attachment = true;
if (preg_match('/\.(html|htm)$/i', $original_file)) {
$attachment = false;
}
if (isset($_GET["attachment"])) {
$attachment = (GETPOST("attachment", 'alphanohtml') ? true : false);
}
if (!empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS_WEBSITE)) {
$attachment = false;
}
// Define mime type
$type = 'application/octet-stream';
if (GETPOSTISSET('type')) {
$type = GETPOST('type', 'alpha');
} else {
$type = dol_mimetype($original_file);
}
// Security: Delete string ../ into $original_file
$original_file = str_replace("../", "/", $original_file);
// Cache or not
if (GETPOST("cache", 'aZ09') || image_format_supported($original_file) >= 0) {
// Important: Following code is to avoid page request by browser and PHP CPU at
// each Dolibarr page access.
header('Cache-Control: max-age=3600, public, must-revalidate');
header('Pragma: cache'); // This is to avoid having Pragma: no-cache
}
$refname = basename(dirname($original_file)."/");
// Get RSS news
if ($rss) {
$format = 'rss';
$type = '';
$cachedelay = 0;
$filename = $original_file;
$dir_temp = $conf->website->dir_temp;
include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
$website = new Website($db);
$websitepage = new WebsitePage($db);
$website->fetch('', $websitekey);
$filters = array('type_container'=>'blogpost', 'status'=>1);
if ($l) {
$filters['lang'] = $l;
}
$MAXNEWS = ($limit ? $limit : 20);
$arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters);
$eventarray = array();
if (is_array($arrayofblogs)) {
foreach ($arrayofblogs as $blog) {
$blog->fullpageurl = $website->virtualhost.'/'.$blog->pageurl.'.php';
$eventarray[] = $blog;
}
}
require_once DOL_DOCUMENT_ROOT."/core/lib/xcal.lib.php";
require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
dol_syslog("build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG);
// Clean parameters
if (!$filename) {
$extension = 'rss';
$filename = $format.'.'.$extension;
}
// Create dir and define output file (definitive and temporary)
$result = dol_mkdir($dir_temp);
$outputfile = $dir_temp.'/'.$filename;
$result = 0;
$buildfile = true;
if ($cachedelay) {
$nowgmt = dol_now();
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
if (dol_filemtime($outputfile) > ($nowgmt - $cachedelay)) {
dol_syslog("build_exportfile file ".$outputfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay."). Build is canceled");
$buildfile = false;
}
}
if ($buildfile) {
$outputlangs = new Translate('', $conf);
$outputlangs->setDefaultLang($l);
$outputlangs->loadLangs(array("main", "other"));
$title = $desc = $outputlangs->transnoentities('LatestBlogPosts');
// Create temp file
$outputfiletmp = tempnam($dir_temp, 'tmp'); // Temporary file (allow call of function by different threads
@chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK));
// Write file
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
if ($result >= 0) {
if (dol_move($outputfiletmp, $outputfile, 0, 1)) {
$result = 1;
} else {
$error = 'Failed to rename '.$outputfiletmp.' into '.$outputfile;
dol_syslog("build_exportfile ".$error, LOG_ERR);
dol_delete_file($outputfiletmp, 0, 1);
print $error;
exit(-1);
}
} else {
dol_syslog("build_exportfile build_xxxfile function fails to for format=".$format." outputfiletmp=".$outputfile, LOG_ERR);
dol_delete_file($outputfiletmp, 0, 1);
$langs->load("errors");
print $langs->trans("ErrorFailToCreateFile", $outputfile);
exit(-1);
}
}
if ($result >= 0) {
$attachment = false;
if (isset($_GET["attachment"])) {
$attachment = $_GET["attachment"];
}
//$attachment = false;
$contenttype = 'application/rss+xml';
if (isset($_GET["contenttype"])) {
$contenttype = $_GET["contenttype"];
}
//$contenttype='text/plain';
$outputencoding = 'UTF-8';
if ($contenttype) {
header('Content-Type: '.$contenttype.($outputencoding ? '; charset='.$outputencoding : ''));
}
if ($attachment) {
header('Content-Disposition: attachment; filename="'.$filename.'"');
}
// Ajout directives pour resoudre bug IE
//header('Cache-Control: Public, must-revalidate');
//header('Pragma: public');
if ($cachedelay) {
header('Cache-Control: max-age='.$cachedelay.', private, must-revalidate');
} else {
header('Cache-Control: private, must-revalidate');
}
// Clean parameters
$outputfile = $dir_temp.'/'.$filename;
$result = readfile($outputfile);
if (!$result) {
print 'File '.$outputfile.' was empty.';
}
// header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=agenda&file='.urlencode($filename));
exit;
}
} elseif ($modulepart == "mycompany" && preg_match('/^\/?logos\//', $original_file)) {
// Get logos
readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file));
} else {
// Find the subdirectory name as the reference
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
$check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, $refname);
$accessallowed = empty($check_access['accessallowed']) ? '' : $check_access['accessallowed'];
$sqlprotectagainstexternals = empty($check_access['sqlprotectagainstexternals']) ? '' : $check_access['sqlprotectagainstexternals'];
$fullpath_original_file = empty($check_access['original_file']) ? '' : $check_access['original_file']; // $fullpath_original_file is now a full path name
if ($hashp) {
$accessallowed = 1; // When using hashp, link is public so we force $accessallowed
$sqlprotectagainstexternals = '';
}
// Security:
// Limit access if permissions are wrong
if (!$accessallowed) {
print 'Access forbidden';
exit;
}
clearstatcache();
$filename = basename($fullpath_original_file);
// Output file on browser
dol_syslog("wrapper.php download $fullpath_original_file filename=$filename content-type=$type");
$fullpath_original_file_osencoded = dol_osencode($fullpath_original_file); // New file name encoded in OS encoding charset
// This test if file exists should be useless. We keep it to find bug more easily
if (!file_exists($fullpath_original_file_osencoded)) {
print "ErrorFileDoesNotExists: ".$original_file;
exit;
}
// Permissions are ok and file found, so we return it
//top_httphead($type);
header('Content-Type: '.$type);
header('Content-Description: File Transfer');
if ($encoding) {
header('Content-Encoding: '.$encoding);
}
// Add MIME Content-Disposition from RFC 2183 (inline=automatically displayed, attachment=need user action to open)
if ($attachment) {
header('Content-Disposition: attachment; filename="'.$filename.'"');
} else {
header('Content-Disposition: inline; filename="'.$filename.'"');
}
header('Content-Length: '.dol_filesize($fullpath_original_file));
readfile($fullpath_original_file_osencoded);
}
if (is_object($db)) {
$db->close();
}
// END PHP

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Some files were not shown because too many files have changed in this diff Show More