Merge branch 'develop' of https://github.com/Dolibarr/dolibarr into NEW---Shipping-address-to-invoice

This commit is contained in:
Anthony Berton 2022-11-21 08:26:24 +01:00
commit cb20ac6567
39 changed files with 954 additions and 2803 deletions

View File

@ -9,9 +9,8 @@ For users:
---------------
NEW: Minimal PHP version is now PHP 7.0 instead of PHP 5.6
NEW: #21750 Added "Get lines and Post lines from BOM" at the REST Service
NEW: #21780 Add pid field to Cronjob class and store PID on job execution
NEW: #19680 Add option PRODUCT_ALLOW_EXTERNAL_DOWNLOAD
NEW: #19680 Add option PRODUCT_ALLOW_EXTERNAL_DOWNLOAD to automatically have uploaded files shared publicly by a link
NEW: #20650 can move the checkbox column on left (experimental option)
NEW: #21000 Added columns 'alias_name' on poject, supplier invoice, supplier order, supplier proposals and taks list
NEW: #21395 Added option for dark theme mode in display - color and theme
@ -19,11 +18,9 @@ NEW: #21397 added option to auto define barcode numbers for third-parties in bar
NEW: #21399
NEW: #21442 Enhancement of module builder init
NEW: #21654 add bank account number used on invoices for debit
NEW: #21775 Template 03 manages send mails
NEW: #22048 Added notes to productlot module
NEW: #22298 Bank - Add salaries & vat in tab planned entries
NEW: #22298 Bank - Add salaries & vat in the tab of planned entries of a bank account
NEW: #22328
NEW: #22370 Modulebuilder supports 'alwayseditable' (like extrafields)
NEW: #22424
NEW: #22500 member module set up made easier
NEW: #22527 projects and thirdparties can be viewed as conversation ("Message" view), like events/agenda.
@ -57,7 +54,6 @@ NEW: Add hidden option MAIN_EMAIL_SUPPORT_ACK to restore Email ack checkbox (fea
NEW: Add IMAP port setting on email collector module
NEW: Adding JAPAN Chart-of-Account and regions/departments
NEW: Adding NIF verification for Algeria
NEW: Add 4 other templates in website module
NEW: Add link to create an element from the category page
NEW: add margin infos to takepos invoice lines
NEW: Add max size send for "backup and link to mail" option
@ -98,6 +94,7 @@ NEW: Website Can remove a website template
NEW: Website can set header "Strict-Transport-Security" in web sites.
NEW: Website Can switch status of website and page from the website toolbar
NEW: Website Templates of websites are now directories and not zip into core repo
NEW: Website Add 4 other templates in website module
NEW: Can use products categories to make inventory
NEW: Change filter type on tickets list into a multiselect combo
NEW: conf TIMESPENT_ALWAYS_UPDATE_THM, when it's on we always check current thm of user to update it in task time line
@ -129,7 +126,6 @@ NEW: manage no email with thirdparties (better for GDPR)
NEW: Manage Position (Rank) on Contract Lines
NEW: Manage VAT on all lines on purchases cycle
NEW: manage virtual stock at a future date
NEW: ModuleBuilder can generate code of class from an existing SQL table
NEW: On a bank reconciled line, we can modify the bank receipt
NEW: On a form to send an email, we show all emails of all contacts of object
NEW: Option PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT showing wh on PDF
@ -163,7 +159,6 @@ NEW: SMTP using oauth2 authentication
NEW: can substitue project title in mail template
NEW: Supplier order list - Add column private and public note
NEW: Support IP type in extrafields
NEW: support multilang in Civilities API
NEW: Table of membership types
NEW: The purge of files can purge only if older than a number of seconds
NEW: Update ActionComm type_code on email message ticket
@ -174,8 +169,11 @@ NEW: expand/collapse permissions on user permission page
For developers or integrators:
------------------------------
NEW: ModuleBuilder can generate code of class from an existing SQL table
NEW: #22370 Modulebuilder supports 'alwayseditable' (like extrafields)
NEW: #20912 Add trigger to record the event of sending an email from a project
NEW: Removed completely the need for library adodbtime
NEW: #21750 Added "Get lines and Post lines from BOM" at the REST Service
NEW: Removed completely the need for the library adodbtime
NEW: hook on agenda pages
NEW: hook to complete payment in TakePOS
NEW: hook "changeHelpURL" to modify target of the help button
@ -186,6 +184,7 @@ NEW: Add new hooks for actioncomm
NEW: conf->global->SYSLOG_FILE_ONEPERSESSION accept a string
NEW: translate for contact type API, setup/ticket API, shipping method API
NEW: All ajax pages have now a top_httphead()
NEW: support multilang in Civilities API
NEW: Add API for the partnership module
NEW: Add "Get lines and Post lines from BOM" in the API
NEW: Replace fk_categories_product with categories_product in inventory

View File

@ -53,27 +53,20 @@ if ($action == 'set') {
$error++;
}
if (!$error && $gimcdf && !file_exists($gimcdf)) {
setEventMessages($langs->trans("ErrorFileNotFound", $gimcdf), null, 'errors');
$res1 = dolibarr_set_const($db, "GEOIP_VERSION", GETPOST('geoipversion', 'aZ09'), 'chaine', 0, '', $conf->entity);
if (!($res1 > 0)) {
$error++;
}
$res2 = dolibarr_set_const($db, "GEOIPMAXMIND_COUNTRY_DATAFILE", $gimcdf, 'chaine', 0, '', $conf->entity);
if (!($res2 > 0)) {
$error++;
}
if (!$error) {
$res1 = dolibarr_set_const($db, "GEOIP_VERSION", GETPOST('geoipversion', 'aZ09'), 'chaine', 0, '', $conf->entity);
if (!($res1 > 0)) {
$error++;
}
$res2 = dolibarr_set_const($db, "GEOIPMAXMIND_COUNTRY_DATAFILE", $gimcdf, 'chaine', 0, '', $conf->entity);
if (!($res2 > 0)) {
$error++;
}
if (!$error) {
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
} else {
setEventMessages($langs->trans("Error"), null, 'errors');
}
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
} else {
//setEventMessages($langs->trans("Error"), null, 'errors');
}
}
@ -112,8 +105,8 @@ print '<td class="right"><input type="submit" class="button button-edit" value="
print "</tr>\n";
// Lib version
print '<tr class="oddeven"><td width="50%">'.$langs->trans("GeoIPLibVersion").'</td>';
print '<td colspan="2">';
print '<tr class="oddeven"><td>'.$langs->trans("GeoIPLibVersion").'</td>';
print '<td>';
$arrayofvalues = array('php' => 'Native PHP functions', '1' => 'Embedded GeoIP v1', '2' => 'Embedded GeoIP v2');
print $form->selectarray('geoipversion', $arrayofvalues, (isset($conf->global->GEOIP_VERSION) ? $conf->global->GEOIP_VERSION : '2'));
if ($conf->global->GEOIP_VERSION == 'php') {
@ -124,16 +117,29 @@ if ($conf->global->GEOIP_VERSION == 'php') {
print '<br>'.$langs->trans("Version").': '.$version;
}
}
print '</td>';
print '<td>';
print '</td></tr>';
$gimcdf = getDolGlobalString('GEOIPMAXMIND_COUNTRY_DATAFILE');
// Path to database file
print '<tr class="oddeven"><td>'.$langs->trans("PathToGeoIPMaxmindCountryDataFile").'</td>';
print '<td colspan="2">';
print '<td>';
if ($conf->global->GEOIP_VERSION == 'php') {
print 'Using geoip PHP internal functions. Value must be '.geoip_db_filename(GEOIP_COUNTRY_EDITION).' or '.geoip_db_filename(GEOIP_CITY_EDITION_REV1).' or /pathtodatafile/GeoLite2-Country.mmdb<br>';
}
print '<input type="text" class="minwidth200" name="GEOIPMAXMIND_COUNTRY_DATAFILE" value="'.dol_escape_htmltag($conf->global->GEOIPMAXMIND_COUNTRY_DATAFILE).'">';
print '<input type="text" class="minwidth200" name="GEOIPMAXMIND_COUNTRY_DATAFILE" value="'.dol_escape_htmltag(getDolGlobalString('GEOIPMAXMIND_COUNTRY_DATAFILE')).'">';
if (!file_exists($gimcdf)) {
print '<div class="error">'.$langs->trans("ErrorFileNotFound", $gimcdf).'</div>';
}
print '</td><td>';
print '<span class="opacitymedium">';
print $langs->trans("Example").'<br>';
print '/usr/local/share/GeoIP/GeoIP.dat<br>
/usr/share/GeoIP/GeoIP.dat<br>
/usr/share/GeoIP/GeoLite2-Country.mmdb';
print '</span>';
print '</td></tr>';
print '</table>';
@ -145,12 +151,16 @@ print '<br>';
print $langs->trans("NoteOnPathLocation").'<br>';
$url1 = 'http://www.maxmind.com/en/city?rId=awstats';
print $langs->trans("YouCanDownloadFreeDatFileTo", '<a href="'.$url1.'" target="_blank" rel="noopener noreferrer external">'.$url1.'</a>');
$textoshow = $langs->trans("YouCanDownloadFreeDatFileTo", '{s1}');
$textoshow = str_replace('{s1}', '<a href="'.$url1.'" target="_blank" rel="noopener noreferrer external">'.$url1.'</a>', $textoshow);
print $textoshow;
print '<br>';
$url2 = 'http://www.maxmind.com/en/city?rId=awstats';
print $langs->trans("YouCanDownloadAdvancedDatFileTo", '<a href="'.$url2.'" target="_blank" rel="noopener noreferrer external">'.$url2.'</a>');
$textoshow = $langs->trans("YouCanDownloadAdvancedDatFileTo", '{s1}');
$textoshow = str_replace('{s1}', '<a href="'.$url2.'" target="_blank" rel="noopener noreferrer external">'.$url2.'</a>', $textoshow);
print $textoshow;
if ($geoip) {
print '<br><br>';

View File

@ -542,13 +542,13 @@ print '<br>';
print '<strong>MAIN_SECURITY_CSRF_TOKEN_RENEWAL_ON_EACH_CALL</strong> = '.(empty($conf->global->MAIN_SECURITY_CSRF_TOKEN_RENEWAL_ON_EACH_CALL) ? '<span class="opacitymedium">'.$langs->trans("Undefined").' &nbsp; ('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or").' 0)</span>' : $conf->global->MAIN_SECURITY_CSRF_TOKEN_RENEWAL_ON_EACH_CALL)."<br>";
print '<br>';
print '<strong>MAIN_SECURITY_FORCECSP</strong> = '.(empty($conf->global->MAIN_SECURITY_FORCECSP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->MAIN_SECURITY_FORCECSP).' &nbsp; <span class="opacitymedium">('.$langs->trans("Example").": \"default-src 'self'; img-src *;\")</span><br>";
print '<strong>MAIN_SECURITY_FORCECSP</strong> = '.(empty($conf->global->MAIN_SECURITY_FORCECSP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->MAIN_SECURITY_FORCECSP).' &nbsp; <span class="opacitymedium">('.$langs->trans("Example").": \"frame-ancestors 'self'; default-src 'self'; img-src *;\")</span><br>";
print '<br>';
print '<strong>MAIN_SECURITY_FORCERP</strong> = '.(empty($conf->global->MAIN_SECURITY_FORCERP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->MAIN_SECURITY_FORCERP).' &nbsp; <span class="opacitymedium">('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or")." \"same-origin\")</span><br>";
print '<strong>MAIN_SECURITY_FORCERP</strong> = '.(empty($conf->global->MAIN_SECURITY_FORCERP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->MAIN_SECURITY_FORCERP).' &nbsp; <span class="opacitymedium">('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or")." \"same-origin\" so browser doesn't send any referrer when going into another web site domain)</span><br>";
print '<br>';
print '<strong>WEBSITE_MAIN_SECURITY_FORCECSP</strong> = '.(empty($conf->global->WEBSITE_MAIN_SECURITY_FORCECSP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->WEBSITE_MAIN_SECURITY_FORCECSP).' &nbsp; <span class="opacitymedium">('.$langs->trans("Example").": \"default-src 'self'; style-src: https://cdnjs.cloudflare.com https://fonts.googleapis.com; script-src: https://cdn.transifex.com https://www.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src: *;\")</span><br>";
print '<strong>WEBSITE_MAIN_SECURITY_FORCECSP</strong> = '.(empty($conf->global->WEBSITE_MAIN_SECURITY_FORCECSP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->WEBSITE_MAIN_SECURITY_FORCECSP).' &nbsp; <span class="opacitymedium">('.$langs->trans("Example").": \"frame-ancestors 'self'; default-src 'self'; style-src https://cdnjs.cloudflare.com https://fonts.googleapis.com; script-src https://cdn.transifex.com https://www.googletagmanager.com; object-src https://youtube.com; frame-src https://youtube.com; img-src *;\")</span><br>";
print '<br>';
print '<strong>WEBSITE_MAIN_SECURITY_FORCERP</strong> = '.(empty($conf->global->WEBSITE_MAIN_SECURITY_FORCERP) ? '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>' : $conf->global->WEBSITE_MAIN_SECURITY_FORCERP).' &nbsp; <span class="opacitymedium">('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or")." \"strict-origin-when-cross-origin\")</span><br>";

View File

@ -567,16 +567,17 @@ if (isModEnabled('socialnetworks')) {
if ($value['active'] && strlen($search_[$key])) {
$searchkeyinjsonformat = preg_replace('/"$/', '', preg_replace('/^"/', '', json_encode($search_[$key])));
if (in_array($db->type, array('mysql', 'mysqli'))) {
$sql .= " AND p.socialnetworks REGEXP '\"".$db->escapeforlike($db->escape($key))."\":\"[^\"]*".$db->escapeforlike($db->escape($searchkeyinjsonformat))."'";
$sql .= " AND p.socialnetworks REGEXP '\"".$db->escape($db->escapeforlike($key))."\":\"[^\"]*".$db->escape($db->escapeforlike($searchkeyinjsonformat))."'";
} elseif ($db->type == 'pgsql') {
$sql .= " AND p.socialnetworks ~ '\"".$db->escapeforlike($db->escape($key))."\":\"[^\"]*".$db->escapeforlike($db->escape($searchkeyinjsonformat))."'";
$sql .= " AND p.socialnetworks ~ '\"".$db->escape($db->escapeforlike($key))."\":\"[^\"]*".$db->escape($db->escapeforlike($searchkeyinjsonformat))."'";
} else {
// Works with all database but not reliable because search only for social network code starting with earched value
$sql .= " AND p.socialnetworks LIKE '%\"".$db->escapeforlike($db->escape($key))."\":\"".$db->escapeforlike($db->escape($searchkeyinjsonformat))."%'";
$sql .= " AND p.socialnetworks LIKE '%\"".$db->escape($db->escapeforlike($key))."\":\"".$db->escape($db->escapeforlike($searchkeyinjsonformat))."%'";
}
}
}
}
//print $sql;
if (strlen($search_email)) {
$sql .= natural_search('p.email', $search_email);
}

View File

@ -936,7 +936,7 @@ function getSocialNetworkSharingLinks()
* @param string $langcode Language code ('' or 'en', 'fr', 'es', ...)
* @param array $otherfilters Other filters
* @param int $status 0 or 1, or -1 for both
* @return string HTML content
* @return array Array with results of search
*/
function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25, $sortfield = 'date_creation', $sortorder = 'DESC', $langcode = '', $otherfilters = 'null', $status = 1)
{
@ -974,6 +974,8 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25, $so
$found = 0;
if (!$error && (empty($max) || ($found < $max)) && (preg_match('/meta/', $algo) || preg_match('/content/', $algo))) {
include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
$sql = 'SELECT wp.rowid FROM '.MAIN_DB_PREFIX.'website_page as wp';
if (is_array($otherfilters) && !empty($otherfilters['category'])) {
$sql .= ', '.MAIN_DB_PREFIX.'categorie_website_page as cwp';
@ -983,7 +985,7 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25, $so
$sql .= " AND wp.status = ".((int) $status);
}
if ($langcode) {
$sql .= " AND wp.lang ='".$db->escape($langcode)."'";
$sql .= " AND wp.lang = '".$db->escape($langcode)."'";
}
if ($type) {
$tmparrayoftype = explode(',', $type);
@ -996,11 +998,11 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25, $so
$sql .= " AND (";
$searchalgo = '';
if (preg_match('/meta/', $algo)) {
$searchalgo .= ($searchalgo ? ' OR ' : '')."wp.title LIKE '%".$db->escapeforlike($db->escape($searchstring))."%' OR wp.description LIKE '%".$db->escapeforlike($db->escape($searchstring))."%'";
$searchalgo .= ($searchalgo ? ' OR ' : '')."wp.keywords LIKE '".$db->escapeforlike($db->escape($searchstring)).",%' OR wp.keywords LIKE '% ".$db->escapeforlike($db->escape($searchstring))."%'"; // TODO Use a better way to scan keywords
$searchalgo .= ($searchalgo ? ' OR ' : '')."wp.title LIKE '%".$db->escape($db->escapeforlike($searchstring))."%' OR wp.description LIKE '%".$db->escape($db->escapeforlike($searchstring))."%'";
$searchalgo .= ($searchalgo ? ' OR ' : '')."wp.keywords LIKE '".$db->escape($db->escapeforlike($searchstring)).",%' OR wp.keywords LIKE '% ".$db->escape($db->escapeforlike($searchstring))."%'"; // TODO Use a better way to scan keywords
}
if (preg_match('/content/', $algo)) {
$searchalgo .= ($searchalgo ? ' OR ' : '')."wp.content LIKE '%".$db->escapeforlike($db->escape($searchstring))."%'";
$searchalgo .= ($searchalgo ? ' OR ' : '')."wp.content LIKE '%".$db->escape($db->escapeforlike($searchstring))."%'";
}
$sql .= $searchalgo;
if (is_array($otherfilters) && !empty($otherfilters['category'])) {
@ -1012,6 +1014,7 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25, $so
//print $sql;
$resql = $db->query($sql);
if ($resql) {
$i = 0;
while (($obj = $db->fetch_object($resql)) && ($i < $max || $max == 0)) {

View File

@ -862,8 +862,8 @@ class ImportCsv extends ModeleImports
$stringtosearch = json_encode($socialnetwork).':'.json_encode($json->$socialnetwork);
//var_dump($stringtosearch);
//var_dump($this->db->escape($stringtosearch)); // This provide a value for sql string (but not for a like)
$where[] = $key." LIKE '%".$this->db->escapeforlike($this->db->escape($stringtosearch))."%'";
$filters[] = $col." LIKE '%".$this->db->escapeforlike($this->db->escape($stringtosearch))."%'";
$where[] = $key." LIKE '%".$this->db->escape($this->db->escapeforlike($stringtosearch))."%'";
$filters[] = $col." LIKE '%".$this->db->escape($this->db->escapeforlike($stringtosearch))."%'";
//var_dump($where[1]); // This provide a value for sql string inside a like
} else {
$where[] = $key.' = '.$data[$key];

View File

@ -908,8 +908,8 @@ class ImportXlsx extends ModeleImports
$stringtosearch = json_encode($socialnetwork).':'.json_encode($json->$socialnetwork);
//var_dump($stringtosearch);
//var_dump($this->db->escape($stringtosearch)); // This provide a value for sql string (but not for a like)
$where[] = $key." LIKE '%".$this->db->escapeforlike($this->db->escape($stringtosearch))."%'";
$filters[] = $col." LIKE '%".$this->db->escapeforlike($this->db->escape($stringtosearch))."%'";
$where[] = $key." LIKE '%".$this->db->escape($this->db->escapeforlike($stringtosearch))."%'";
$filters[] = $col." LIKE '%".$this->db->escape($this->db->escapeforlike($stringtosearch))."%'";
//var_dump($where[1]); // This provide a value for sql string inside a like
} else {
$where[] = $key.' = '.$data[$key];

View File

@ -1068,6 +1068,7 @@ if ($step == 4 && $datatoimport) {
print '<div id="left" class="connectedSortable">'."\n";
// List of source fields
$var = false;
$lefti = 1;
foreach ($fieldssource as $key => $val) {
@ -1090,6 +1091,7 @@ if ($step == 4 && $datatoimport) {
print '</td><td width="50%" class="nopaddingrightimp">';
// Set the list of all possible target fields in Dolibarr.
$optionsall = array();
foreach ($fieldstarget as $code => $line) {
//var_dump($line);
@ -1141,8 +1143,7 @@ if ($step == 4 && $datatoimport) {
$entityicon = !empty($entitytoicon[$entity]) ? $entitytoicon[$entity] : $entity; // $entityicon must string name of picto of the field like 'project', 'company', 'contact', 'modulename', ...
$entitylang = $entitytolang[$entity] ? $entitytolang[$entity] : $objimport->array_import_label[0]; // $entitylang must be a translation key to describe object the field is related to, like 'Company', 'Contact', 'MyModyle', ...
//print '<td class="nowraponall" style="font-weight: normal">=> '.img_object('', $entityicon).' '.$langs->trans($entitylang).'</td>';
print '<td class="nowraponall" style="font-weight: normal">=> </td>';
print '<td class="nowraponall hideonsmartphone" style="font-weight: normal">=> </td>';
print '<td class="nowraponall" style="font-weight: normal">';
//var_dump($_SESSION['dol_array_match_file_to_database_select']);
@ -1510,7 +1511,7 @@ if ($step == 4 && $datatoimport) {
print '<tr class="oddeven"><td>';
print $obj->label;
print '</td>';
print '<td>';
print '<td class="tdoverflowmax150">';
if (empty($obj->fk_user)) {
print $langs->trans("Everybody");
} else {
@ -2338,7 +2339,7 @@ $db->close();
*/
function show_elem($fieldssource, $pos, $key, $var, $nostyle = '')
{
global $langs;
global $conf, $langs;
$height = '32px';
@ -2384,7 +2385,7 @@ function show_elem($fieldssource, $pos, $key, $var, $nostyle = '')
if (isset($fieldssource[$pos]['imported']) && $fieldssource[$pos]['imported'] == false) {
print '<td class="nowraponall boxtdunused" style="font-weight: normal">';
} else {
print '<td class="nowraponall" style="font-weight: normal">';
print '<td class="nowraponall tdoverflowmax500" style="font-weight: normal">';
}
print $langs->trans("Column").' '.num2Alpha($pos - 1).' (#'.$pos.')';
if (empty($fieldssource[$pos]['example1'])) {
@ -2396,7 +2397,12 @@ function show_elem($fieldssource, $pos, $key, $var, $nostyle = '')
if (!utf8_check($example)) {
$example = utf8_encode($example);
}
print ' - ';
if (!empty($conf->dol_optimize_smallscreen)) {
//print '<br>';
print ' - ';
} else {
print ' - ';
}
//print '<span class="opacitymedium hideonsmartphone">'.$langs->trans("ExampleOnFirstLine").': </span>';
print '<i class="opacitymedium">'.$example.'</i>';
}

View File

@ -1,7 +0,0 @@
README
======
ADOdb Date Library, part of the ADOdb abstraction library
See Wiki: https://adodb.org/dokuwiki/doku.php?id=v5:datetime:datetime_index
Download: https://github.com/ADOdb/ADOdb/blob/master/adodb-time.inc.php

File diff suppressed because it is too large Load Diff

View File

@ -1 +1,2 @@
Website generated by Dolibarr ERP CRM
This website template is an example of website for a restaurant

View File

@ -1,2 +1,8 @@
Image are provided under the Unsplash+ License
Rest of templates (HTML and PHP code) content are GPLv3
LICENSE
-------
Images are provided under the license:
Unsplash+ License
Rest of templates (HTML and PHP code) content are under license
CC-BY-SA - https://creativecommons.org/licenses/by/4.0/

View File

@ -1 +1,2 @@
Website generated by Dolibarr ERP CRM
This website template is an example of website for a restaurant

View File

@ -1,5 +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 './page169.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page169.tpl.php';
if (empty($dolibarr_main_data_root)) require './page248.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page248.tpl.php';
?>

View File

@ -1,5 +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 './page170.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page170.tpl.php';
if (empty($dolibarr_main_data_root)) require './page249.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page249.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 './page252.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page252.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 './page253.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page253.tpl.php';
?>

View File

@ -1,6 +1,6 @@
<link rel="stylesheet" id="google-fonts-css" href="//fonts.googleapis.com/css?family=Open+Sans:300,400,700" />
<link rel="stylesheet" id="font-wasesome-css" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
<link rel="stylesheet" id="font-wasesome-css" type="text/css" href="/dolibarr_dev/htdocs/theme/common/fontawesome-5/css/all.min.css?layout=classic&amp;version=17.0.0-beta">
<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

@ -1,11 +1,5 @@
<?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 './page171.tpl.php';
// END 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 './page250.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page250.tpl.php';
?>

View File

@ -8,6 +8,7 @@ header('Cache-Control: max-age=3600, public, must-revalidate');
header('Content-type: application/javascript');
// END PHP ?>
/* JS content (all pages) */
// test
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "js");
// END PHP ?>

View File

@ -1,5 +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 './page172.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page172.tpl.php';
if (empty($dolibarr_main_data_root)) require './page251.tpl.php'; else require $dolibarr_main_data_root.'/website/'.$website->ref.'/page251.tpl.php';
?>

View File

@ -1,198 +0,0 @@
<?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>About us</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="About us" />
<meta name="description" content="" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="169" />
<?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-about">
<!-- Enter here your HTML content. Add a section with an id tag and tag contenteditable="true" if you want to use the inline editor for the content -->
<section id="mysection1" contenteditable="true">
<nav class="navbar navbar-expand-lg bg-white shadow-lg">
<div class="container">
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="index.html"><?php echo $mysoc->name; ?></a>
<div class="d-lg-none">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav mx-auto">
<li class="nav-item">
<a class="nav-link" href="index.php">Home</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="about.php">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="menu.php">Menu</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact.php">Contact</a>
</li>
</ul>
</div>
<div class="d-none d-lg-block">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
</div>
</nav>
<main>
<header class="site-header site-about-header">
<div class="container">
<div class="row">
<div class="col-lg-10 col-12 mx-auto">
<h1 class="text-white">About Us</h1>
<strong class="text-white">Get to know us more</strong>
</div>
</div>
</div>
<div class="overlay"></div>
</header>
<section class="about section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-5">Team Members</h2>
</div>
<div class="col-lg-4 col-12">
<div class="team-thumb">
<img src="image/mypersonalsite/team/matthew-hamilton-tNCH0sKSZbA-unsplash.jpg" class="img-fluid team-image" alt="">
<div class="team-info">
<h4 class="mt-3 mb-0">Sophia</h4>
<p>CEO &amp; Founder</p>
</div>
</div>
</div>
<div class="col-lg-4 col-12 my-lg-0 my-4">
<div class="team-thumb">
<img src="image/mypersonalsite/team/nicolas-horn-MTZTGvDsHFY-unsplash.jpg" class="img-fluid team-image" alt="">
<h4 class="mt-3 mb-0">Benjamin W.</h4>
<p>Restaurant Manager</p>
</div>
</div>
<div class="col-lg-4 col-12">
<div class="team-thumb">
<img src="image/mypersonalsite/team/rc-cf-FMh5o5m5N9E-unsplash.jpg" class="img-fluid team-image" alt="">
<h4 class="mt-3 mb-0">Muchen Jack</h4>
<p>Senior Chef</p>
</div>
</div>
</div>
</div>
</section>
<!--
<section class="newsletter section-padding bg-white">
<div class="container">
<div class="row">
<div class="col-lg-6 col-12">
<img src="image/mypersonalsite/charles-deluvio-FdDkfYFHqe4-unsplash.jpg" class="img-fluid newsletter-image" alt="">
</div>
<div class="col-lg-6 col-12 d-flex align-items-center mt-5 mt-lg-0 mx-auto">
<div class="subscribe-form-wrap">
<h4 class="mb-0">Our Newsletter</h4>
<p>The food news every day</p>
<form class="custom-form subscribe-form mt-4" role="form">
<input type="email" name="subscribe-email" id="subscribe-email" pattern="[^ @]*@[^ @]*" class="form-control" placeholder="Your email address" required="">
<button type="submit" class="form-control mb-3" id="subscribe">Subscribe</button>
<small>By signing up, you agree to our Privacy Notice and the data policy</small>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
-->
</main>
</section>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 169);
// END PHP ?>

View File

@ -1,597 +0,0 @@
<?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 menus</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 menus" />
<meta name="description" content="" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="172" />
<?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-menu">
<!-- Enter here your HTML content. Add a section with an id tag and tag contenteditable="true" if you want to use the inline editor for the content -->
<section id="mysection1" contenteditable="true">
<nav class="navbar navbar-expand-lg bg-white shadow-lg">
<div class="container">
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="index.html"><?php echo $mysoc->name; ?></a>
<div class="d-lg-none">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav mx-auto">
<li class="nav-item">
<a class="nav-link" href="index.php">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.php">About</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="menu.php">Menu</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact.php">Contact</a>
</li>
</ul>
</div>
<div class="d-none d-lg-block">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
</div>
</nav>
<main>
<header class="site-header site-menu-header">
<div class="container">
<div class="row">
<div class="col-lg-10 col-12 mx-auto">
<h1 class="text-white">Our Menus</h1>
<strong class="text-white"
>Perfect for all Breakfast, Lunch and
Dinner</strong
>
</div>
</div>
</div>
<div class="overlay"></div>
</header>
<section class="menu section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-lg-5 mb-4">Breakfast Menu</h2>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/mypersonalsite/breakfast/brett-jordan-8xt8-HIFqc8-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Fresh Start</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>24.50</span
>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
4.4/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
128 Reviews
</p>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="/image/mypersonalsite/breakfast/lucas-swennen-1W_MyJSRLuQ-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Baked Creamy</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>16.50</span
>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
64 Reviews
</p>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/mypersonalsite/breakfast/louis-hansel-dphM2U1xq0U-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Burger Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>24.50</span
>
<del class="ms-4"
><small>$</small>36.50</del
>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
32 Reviews
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="menu section-padding bg-white">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-lg-5 mb-4">Lunch Menu</h2>
</div>
<div class="col-lg-6 col-12">
<div class="menu-thumb">
<img
src="image/mypersonalsite/lunch/louis-hansel-cH5IPjaAYyo-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Super Steak Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>32.75</span
>
<del class="ms-4"><small>$</small>55</del>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
4.2/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
66 Reviews
</p>
</div>
</div>
</div>
</div>
<div class="col-lg-6 col-12">
<div class="menu-thumb">
<img
src="image/mypersonalsite/lunch/louis-hansel-rheOvfxOlOA-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Bread &amp; Steak Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>42.50</span
>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
84 Reviews
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="menu section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-lg-5 mb-4">Dinner Menu</h2>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/mypersonalsite/dinner/farhad-ibrahimzade-ZipYER3NLhY-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Seafood Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>65.50</span
>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
4.4/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
102 Reviews
</p>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/mypersonalsite/dinner/keriliwi-c3mFafsFz2w-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Premium Steak</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>74.25</span
>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
56 Reviews
</p>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/mypersonalsite/dinner/farhad-ibrahimzade-isHUj3N0194-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Salmon Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>60</span
>
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
76 Reviews
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<footer class="site-footer section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h4 class="text-white mb-4 me-5"><?php echo $mysoc->name; ?></h4>
</div>
<div class="col-lg-4 col-md-7 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Location</h6>
<p><?php echo $mysoc->getFullAddress(); ?></p>
<a
href="https://goo.gl/maps/CJ8FfebWZHLQBA2r5"
class="custom-btn btn btn-dark mt-2"
>Directions</a
>
</div>
<div class="col-lg-4 col-md-5 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Opening Hours</h6>
<?php $days = ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"];
foreach ($days as $day){
echo "<p> $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."</p>";
}
?>
<p>
Tel:
<a href="tel: 010-02-0340" class="tel-link"
><?php echo $mysoc->phone ?></a
>
</p>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Social</h6>
<ul class="social-icon">
<?php foreach($mysoc->socialnetworks as $key => $value) {
print '<li> <a class="btn btn-perso2 btn-floating m-1" href="'. (preg_match('/^http/', $value) ? $value : 'https://www.'.$key.'.com/'.$value).'"><span class="fab fa-'.$key.'"></i></a> </li>';
} ?>
</ul>
<p class="copyright-text tooplate-mt60">
Copyright © <?php echo $mysoc->name; ?>
</p>
</div>
</div>
<!-- row ending -->
</div>
<!-- container ending -->
</footer>
</section>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 172);
// END PHP ?>

View File

@ -0,0 +1,113 @@
<?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>About us</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="About us" />
<meta name="description" content="" />
<meta name="generator" content="Dolibarr 17.0.0-beta (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="248" />
<?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-about">
<!-- Enter here your HTML content. Add a section with an id tag and tag contenteditable="true" if you want to use the inline editor for the content -->
<?php includeContainer('header'); ?>
<section id="mysection1" contenteditable="true">
<main>
<header class="site-header site-about-header">
<div class="container">
<div class="row">
<div class="col-lg-10 col-12 mx-auto">
<h1 class="text-white">About Us</h1>
<strong class="text-white">Get to know us more</strong>
</div>
</div>
</div>
<div class="overlay"></div>
</header>
<section class="about section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-5">Team Members</h2>
</div>
<div class="col-lg-4 col-12">
<div class="team-thumb">
<img src="image/aaab/team/matthew-hamilton-tNCH0sKSZbA-unsplash.jpg" class="img-fluid team-image" alt="">
<div class="team-info">
<h4 class="mt-3 mb-0">Sophia</h4>
<p>CEO &amp; Founder</p>
</div>
</div>
</div>
<div class="col-lg-4 col-12 my-lg-0 my-4">
<div class="team-thumb">
<img src="image/aaab/team/nicolas-horn-MTZTGvDsHFY-unsplash.jpg" class="img-fluid team-image" alt="">
<h4 class="mt-3 mb-0">Benjamin W.</h4>
<p>Restaurant Manager</p>
</div>
</div>
<div class="col-lg-4 col-12">
<div class="team-thumb">
<img src="image/aaab/team/rc-cf-FMh5o5m5N9E-unsplash.jpg" class="img-fluid team-image" alt="">
<h4 class="mt-3 mb-0">Muchen Jack</h4>
<p>Senior Chef</p>
</div>
</div>
</div>
</div>
</section>
</main>
</section>
<?php includeContainer('footer'); ?>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 248);
// END PHP ?>

View File

@ -18,8 +18,8 @@ ob_start();
<meta name="keywords" content="" />
<meta name="title" content="Contact us" />
<meta name="description" content="" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="170" />
<meta name="generator" content="Dolibarr 17.0.0-beta (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="249" />
<?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" />
@ -34,7 +34,7 @@ ob_start();
<body id="bodywebsite" class="bodywebsite bodywebpage-contact">
<!-- Enter here your HTML content. Add a section with an id tag and tag contenteditable="true" if you want to use the inline editor for the content -->
<?php
if (GETPOST('action') == 'sendmail') {
if (GETPOST('action') == 'sendmail') {
include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
$from = GETPOST('email', 'alpha');
$to = $mysoc->email;
@ -51,67 +51,12 @@ ob_start();
}
}
?>
<?php includeContainer('header'); ?>
<section id="mysection1" contenteditable="true">
<nav class="navbar navbar-expand-lg bg-white shadow-lg">
<div class="container">
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="index.html"><?php echo $mysoc->name; ?></a>
<div class="d-lg-none">
<a href="#reservation"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav mx-auto">
<li class="nav-item">
<a class="nav-link" href="index.php">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.php">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="menu.php">Menu</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="contact.php">Contact</a>
</li>
</ul>
</div>
<div class="d-none d-lg-block">
<a href="#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
</div>
</nav>
<main>
<main>
<header class="site-header site-contact-header">
<div class="container">
<div class="row">
@ -128,7 +73,7 @@ ob_start();
<div class="overlay"></div>
</header>
<a id="reservation"></a>
<a id="reservation"></a><br>
<section class="contact section-padding">
<div class="container">
@ -144,6 +89,9 @@ ob_start();
method="post"
role="form"
>
<input type="hidden" name="action" value="sendmail">
<input type="hidden" name="toekn" value="<?php echo newToken(); ?>">
<div class="col-lg-6 col-6">
<label for="contact-name" class="form-label"
>Full Name</label
@ -163,7 +111,7 @@ ob_start();
<label
for="contact-phone"
class="form-label"
>Phone Number</label
><?php echo $weblangs->trans("Phone"); ?></label
>
<input
@ -178,7 +126,7 @@ ob_start();
<label
for="contact-email"
class="form-label"
>Email</label
><?php echo $weblangs->trans("Email"); ?></label
>
<input
@ -194,7 +142,7 @@ ob_start();
<label
for="contact-message"
class="form-label"
>Message</label
><?php echo $weblangs->trans("Message"); ?></label
>
<textarea
@ -208,7 +156,7 @@ ob_start();
<div class="col-lg-5 col-12 ms-auto">
<button type="submit" class="form-control">
Send
<?php echo $weblangs->trans("Send"); ?>
</button>
</div>
</form>
@ -234,89 +182,25 @@ ob_start();
</div>
</div>
<div class="col-12">
<h4 class="mt-5 mb-4">
<div class="col-12" id="divaddress">
<br><br>
<h4 class="mt-5 mb-4 center">
<?php echo $mysoc->getFullAddress() ?>
</h4>
<div class="google-map pt-3">
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d90596.06698695973!2d-0.7089680200547398!3d44.79859846268479!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd54d8fb00b62b4d%3A0x963d0840e2fa1f97!2sPessac%20Centre!5e0!3m2!1sen!2sfr!4v1659970475018!5m2!1sen!2sfr"
width="100%"
height="300"
style="border: 0"
allowfullscreen=""
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
></iframe>
<!-- 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>
</div>
</div>
</div>
</section>
</main>
<footer class="site-footer section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h4 class="text-white mb-4 me-5"><?php echo $mysoc->name; ?></h4>
</div>
<div class="col-lg-4 col-md-7 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Location</h6>
<p><?php echo $mysoc->getFullAddress(); ?></p>
<a
href="https://goo.gl/maps/CJ8FfebWZHLQBA2r5"
class="custom-btn btn btn-dark mt-2"
>Directions</a
>
</div>
<div class="col-lg-4 col-md-5 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Opening Hours</h6>
<?php $days = ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"];
foreach ($days as $day){
echo "<p> $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."</p>";
}
?>
<p>
Tel:
<a href="tel: 010-02-0340" class="tel-link"
><?php echo $mysoc->phone ?></a
>
</p>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Social</h6>
<ul class="social-icon">
<?php foreach($mysoc->socialnetworks as $key => $value) {
print '<li> <a class="btn btn-perso2 btn-floating m-1" href="'. (preg_match('/^http/', $value) ? $value : 'https://www.'.$key.'.com/'.$value).'"><span class="fab fa-'.$key.'"></i></a> </li>';
} ?>
</ul>
<p class="copyright-text tooplate-mt60">
Copyright © <?php echo $mysoc->name; ?>
</p>
</div>
</div>
<!-- row ending -->
</div>
<!-- container ending -->
</footer>
<!-- Modal -->
<div
@ -346,7 +230,7 @@ ob_start();
<form
class="booking-form row"
role="form"
action="index.php"
action="contact.php"
method="POST"
>
<input type="hidden" name="token" value="<?php echo newToken(); ?>" />
@ -473,8 +357,12 @@ ob_start();
</section>
<?php includeContainer('footer'); ?>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 170);
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 249);
// END PHP ?>

View File

@ -18,8 +18,8 @@ ob_start();
<meta name="keywords" content="" />
<meta name="title" content="index" />
<meta name="description" content="" />
<meta name="generator" content="Dolibarr 17.0.0-alpha (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="171" />
<meta name="generator" content="Dolibarr 17.0.0-beta (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="250" />
<?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" />
@ -34,68 +34,10 @@ ob_start();
<body id="bodywebsite" class="bodywebsite bodywebpage-index">
<!-- Enter here your HTML content. Add a section with an id tag and tag contenteditable="true" if you want to use the inline editor for the content -->
<?php includeContainer('header'); ?>
<section id="mysection1" contenteditable="true">
<nav class="navbar navbar-expand-lg bg-white shadow-lg">
<div class="container">
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="index.html"><?php echo $mysoc->name; ?></a>
<div class="d-lg-none">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav mx-auto">
<li class="nav-item">
<a class="nav-link active" href="index.php"
>Home</a
>
</li>
<li class="nav-item">
<a class="nav-link" href="about.php">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="menu.php">Menu</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact.php">Contact</a>
</li>
</ul>
</div>
<div class="d-none d-lg-block">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
>
Reservation
</a>
</div>
</div>
</nav>
<main>
<section class="hero">
<div class="container">
@ -106,16 +48,9 @@ ob_start();
Delicious Steaks
</h1>
<div
class="c-reviews my-3 d-flex flex-wrap align-items-center"
>
<div class="c-reviews my-3 d-flex flex-wrap align-items-center">
<div
class="d-flex flex-wrap align-items-center"
>
<h4 class="text-white mb-0 me-3">
4.7/5
</h4>
class="d-flex flex-wrap align-items-center">
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
@ -132,11 +67,6 @@ ob_start();
<i class="bi-star reviews-icon"></i>
</div>
</div>
<p class="text-white w-100">
From <strong>1,206+</strong> Customer
Reviews
</p>
</div>
</div>
</div>
@ -151,7 +81,7 @@ ob_start();
<div class="carousel-item active">
<div class="carousel-image-wrap">
<img
src="image/mypersonalsite/slide/jay-wennington-N_Y88TWmGwA-unsplash.jpg"
src="image/aaab/slide/jay-wennington-N_Y88TWmGwA-unsplash.jpg"
class="img-fluid carousel-image"
alt=""
/>
@ -167,7 +97,7 @@ ob_start();
<div class="carousel-item">
<div class="carousel-image-wrap">
<img
src="image/mypersonalsite/slide/jason-leung-O67LZfeyYBk-unsplash.jpg"
src="image/aaab/slide/jason-leung-O67LZfeyYBk-unsplash.jpg"
class="img-fluid carousel-image"
alt=""
/>
@ -183,41 +113,13 @@ ob_start();
>26.50<small></small></span
>
</div>
<div
class="d-flex flex-wrap align-items-center"
>
<h5
class="reviews-text mb-0 me-3"
>
3.8/5
</h5>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star reviews-icon"
></i>
<i
class="bi-star reviews-icon"
></i>
</div>
</div>
</div>
</div>
<div class="carousel-item">
<div class="carousel-image-wrap">
<img
src="image/mypersonalsite/slide/ivan-torres-MQUqbmszGGM-unsplash.jpg"
src="image/aaab/slide/ivan-torres-MQUqbmszGGM-unsplash.jpg"
class="img-fluid carousel-image"
alt=""
/>
@ -235,34 +137,6 @@ ob_start();
>18.25<small></small></span
>
</div>
<div
class="d-flex flex-wrap align-items-center"
>
<h5
class="reviews-text mb-0 me-3"
>
4.2/5
</h5>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star-fill reviews-icon"
></i>
<i
class="bi-star reviews-icon"
></i>
</div>
</div>
</div>
</div>
</div>
@ -299,22 +173,6 @@ ob_start();
</div>
</div>
<div class="video-wrap">
<video
autoplay=""
loop=""
muted=""
class="custom-video"
poster=""
>
<source
src="image/mypersonalsite/video/production_ID_3769033.mp4"
type="video/mp4"
/>
Your browser does not support the video tag.
</video>
</div>
<div class="overlay"></div>
</section>
@ -331,7 +189,7 @@ ob_start();
<div class="menu-thumb">
<div class="menu-image-wrap">
<img
src="image/mypersonalsite/breakfast/brett-jordan-8xt8-HIFqc8-unsplash.jpg"
src="image/aaab/breakfast/brett-jordan-8xt8-HIFqc8-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
@ -354,10 +212,6 @@ ob_start();
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
4.3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
@ -373,10 +227,6 @@ ob_start();
></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
102 Reviews
</p>
</div>
</div>
</div>
@ -386,7 +236,7 @@ ob_start();
<div class="menu-thumb">
<div class="menu-image-wrap">
<img
src="image/mypersonalsite/lunch/farhad-ibrahimzade-MGKqxm6u2bc-unsplash.jpg"
src="image/aaab/lunch/farhad-ibrahimzade-MGKqxm6u2bc-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
@ -409,10 +259,6 @@ ob_start();
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
@ -426,10 +272,6 @@ ob_start();
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
50 Reviews
</p>
</div>
</div>
</div>
@ -439,7 +281,7 @@ ob_start();
<div class="menu-thumb">
<div class="menu-image-wrap">
<img
src="image/mypersonalsite/dinner/keriliwi-c3mFafsFz2w-unsplash.jpg"
src="image/aaab/dinner/keriliwi-c3mFafsFz2w-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
@ -462,10 +304,6 @@ ob_start();
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
@ -479,10 +317,6 @@ ob_start();
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
86 Reviews
</p>
</div>
</div>
</div>
@ -492,7 +326,7 @@ ob_start();
<div class="menu-thumb">
<div class="menu-image-wrap">
<img
src="image/mypersonalsite/dinner/farhad-ibrahimzade-ZipYER3NLhY-unsplash.jpg"
src="image/aaab/dinner/farhad-ibrahimzade-ZipYER3NLhY-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
@ -515,10 +349,6 @@ ob_start();
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
@ -532,10 +362,6 @@ ob_start();
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
44 Reviews
</p>
</div>
</div>
</div>
@ -545,7 +371,7 @@ ob_start();
<div class="menu-thumb">
<div class="menu-image-wrap">
<img
src="image/mypersonalsite/breakfast/louis-hansel-dphM2U1xq0U-unsplash.jpg"
src="image/aaab/breakfast/louis-hansel-dphM2U1xq0U-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
@ -568,10 +394,6 @@ ob_start();
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
4.3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
@ -587,10 +409,6 @@ ob_start();
></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
102 Reviews
</p>
</div>
</div>
</div>
@ -600,7 +418,7 @@ ob_start();
<div class="menu-thumb">
<div class="menu-image-wrap">
<img
src="image/mypersonalsite/lunch/farhad-ibrahimzade-D5c9ZciQy_I-unsplash.jpg"
src="image/aaab/lunch/farhad-ibrahimzade-D5c9ZciQy_I-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
@ -623,10 +441,6 @@ ob_start();
<div
class="d-flex flex-wrap align-items-center w-100 mt-2"
>
<h6 class="reviews-text mb-0 me-3">
3/5
</h6>
<div class="reviews-stars">
<i
class="bi-star-fill reviews-icon"
@ -640,10 +454,6 @@ ob_start();
<i class="bi-star reviews-icon"></i>
<i class="bi-star reviews-icon"></i>
</div>
<p class="reviews-text mb-0 ms-4">
64 Reviews
</p>
</div>
</div>
</div>
@ -653,68 +463,13 @@ ob_start();
</section>
</main>
<footer class="site-footer section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h4 class="text-white mb-4 me-5"><?php echo $mysoc->name; ?></h4>
</div>
<div class="col-lg-4 col-md-7 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Location</h6>
<p><?php echo $mysoc->getFullAddress(); ?></p>
<a
href="https://goo.gl/maps/CJ8FfebWZHLQBA2r5"
class="custom-btn btn btn-dark mt-2"
>Directions</a
>
</div>
<div class="col-lg-4 col-md-5 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Opening Hours</h6>
<?php $days = ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"];
foreach ($days as $day){
echo "<p> $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."</p>";
}
?>
<p>
Tel:
<a href="tel: 010-02-0340" class="tel-link"
><?php echo $mysoc->phone ?></a
>
</p>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Social</h6>
<ul class="social-icon">
<?php foreach($mysoc->socialnetworks as $key => $value) {
print '<li> <a class="btn btn-perso2 btn-floating m-1" href="'. (preg_match('/^http/', $value) ? $value : 'https://www.'.$key.'.com/'.$value).'"><span class="fab fa-'.$key.'"></i></a> </li>';
} ?>
</ul>
<p class="copyright-text tooplate-mt60">
Copyright © <?php echo $mysoc->name; ?>
</p>
</div>
</div>
<!-- row ending -->
</div>
<!-- container ending -->
</footer>
</section>
<?php includeContainer('footer'); ?>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 171);
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 250);
// END PHP ?>

View File

@ -0,0 +1,273 @@
<?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 menus</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 menus" />
<meta name="description" content="" />
<meta name="generator" content="Dolibarr 17.0.0-beta (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="251" />
<?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-menu">
<!-- Enter here your HTML content. Add a section with an id tag and tag contenteditable="true" if you want to use the inline editor for the content -->
<?php includeContainer('header'); ?>
<section id="mysection1" contenteditable="true">
<main>
<header class="site-header site-menu-header">
<div class="container">
<div class="row">
<div class="col-lg-10 col-12 mx-auto">
<h1 class="text-white">Our Menus</h1>
<strong class="text-white"
>Perfect for all Breakfast, Lunch and
Dinner</strong
>
</div>
</div>
</div>
<div class="overlay"></div>
</header>
<section class="menu section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-lg-5 mb-4">Breakfast Menu</h2>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/aaab/breakfast/brett-jordan-8xt8-HIFqc8-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Fresh Start</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>24.50</span
>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="/image/aaab/breakfast/lucas-swennen-1W_MyJSRLuQ-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Baked Creamy</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>16.50</span
>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/aaab/breakfast/louis-hansel-dphM2U1xq0U-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Burger Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>24.50</span
>
<del class="ms-4"
><small>$</small>36.50</del
>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="menu section-padding bg-white">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-lg-5 mb-4">Lunch Menu</h2>
</div>
<div class="col-lg-6 col-12">
<div class="menu-thumb">
<img
src="image/aaab/lunch/louis-hansel-cH5IPjaAYyo-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Super Steak Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>32.75</span
>
<del class="ms-4"><small>$</small>55</del>
</div>
</div>
</div>
<div class="col-lg-6 col-12">
<div class="menu-thumb">
<img
src="image/aaab/lunch/louis-hansel-rheOvfxOlOA-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Bread &amp; Steak Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>42.50</span
>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="menu section-padding">
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="mb-lg-5 mb-4">Dinner Menu</h2>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/aaab/dinner/farhad-ibrahimzade-ZipYER3NLhY-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Seafood Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>65.50</span
>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/aaab/dinner/keriliwi-c3mFafsFz2w-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Premium Steak</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>74.25</span
>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="menu-thumb">
<img
src="image/aaab/dinner/farhad-ibrahimzade-isHUj3N0194-unsplash.jpg"
class="img-fluid menu-image"
alt=""
/>
<div
class="menu-info d-flex flex-wrap align-items-center"
>
<h4 class="mb-0">Salmon Set</h4>
<span
class="price-tag bg-white shadow-lg ms-4"
><small>$</small>60</span
>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
</section>
<?php includeContainer('footer'); ?>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 251);
// END PHP ?>

View File

@ -0,0 +1,93 @@
<?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="" />
<meta name="generator" content="Dolibarr 17.0.0-beta (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="252" />
<?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">
<!-- Enter here your HTML content. Add a section with an id tag and tag contenteditable="true" if you want to use the inline editor for the content -->
<section id="footer" contenteditable="true">
<!-- Footer -->
<footer class="site-footer section-padding">
<div class="container">
<div class="row">
<div class="col-lg-4 col-md-7 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3"><?php echo $weblangs->trans("Location"); ?></h6>
<p><?php echo $mysoc->getFullAddress(); ?></p>
<a href="contact.php#divaddress" class="custom-btn btn btn-dark mt-2"><?php echo $weblangs->trans("Map"); ?></a>
</div>
<div class="col-lg-4 col-md-5 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Opening Hours</h6>
<?php $days = ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"];
foreach ($days as $day){
echo "<p> $day : " .getDolGlobalString("MAIN_INFO_OPENINGHOURS_$day") ."</p>";
}
?>
<p>
Tel:
<a href="tel: <?php echo $mysoc->phone ?>" class="tel-link"
><?php echo $mysoc->phone ?></a
>
</p>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 tooplate-mt30">
<h6 class="text-white mb-lg-4 mb-3">Social</h6>
<ul class="social-icon">
<?php foreach($mysoc->socialnetworks as $key => $value) {
print '<li> <a class="btn btn-perso2 btn-floating m-1" href="'. (preg_match('/^http/', $value) ? $value : 'https://www.'.$key.'.com/'.$value).'"><span class="fab fa-'.$key.'"></i></a> </li>';
} ?>
</ul>
<p class="copyright-text tooplate-mt60">
Copyright © <?php echo $mysoc->name; ?>
</p>
</div>
</div>
<!-- row ending -->
</div>
<!-- container ending -->
</footer>
</section>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 252);
// END PHP ?>

View File

@ -0,0 +1,98 @@
<?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</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" />
<meta name="description" content="" />
<meta name="generator" content="Dolibarr 17.0.0-beta (https://www.dolibarr.org)" />
<meta name="dolibarr:pageid" content="253" />
<?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">
<section id="header" contenteditable="true">
<nav class="navbar navbar-expand-lg bg-white shadow-lg">
<div class="container">
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="index.html"><?php echo $mysoc->name; ?></a>
<div class="d-lg-none">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
><?php $langs->trans("Reservation"); ?></a>
</div>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav mx-auto">
<li class="nav-item">
<a class="nav-link<?php echo ($websitepage->ref == 'index' ? ' active' : ''); ?>" href="index.php"><?php echo $weblangs->trans("Home"); ?></a>
</li>
<li class="nav-item">
<a class="nav-link<?php echo ($websitepage->ref == 'about' ? ' active' : ''); ?>" href="about.php"><?php echo $weblangs->trans("About"); ?></a>
</li>
<li class="nav-item">
<a class="nav-link<?php echo ($websitepage->ref == 'menu' ? ' active' : ''); ?>" href="menu.php"><?php echo $weblangs->trans("Menu"); ?></a>
</li>
<li class="nav-item">
<a class="nav-link<?php echo ($websitepage->ref == 'contact' ? ' active' : ''); ?>" href="contact.php"><?php echo $weblangs->trans("Contact"); ?></a>
</li>
</ul>
</div>
<div class="d-none d-lg-block">
<a href="contact.php#reservation"
type="button"
class="custom-btn btn btn-danger"
data-bs-toggle="modal"
data-bs-target="#BookingModal"
><?php echo $weblangs->trans("Reservation"); ?></a>
</div>
</div>
</nav>
</section>
</body>
</html>
<?php // BEGIN PHP
$tmp = ob_get_contents(); ob_end_clean(); dolWebsiteOutput($tmp, "html", 253);
// END PHP ?>

View File

@ -11,44 +11,6 @@ header('Content-type: text/css');
// END PHP ?>
@charset "UTF-8";
.bodywebsite {
/*!
* Bootstrap v5.2.1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
/* rtl:begin:ignore */
/* rtl:end:ignore */
/* rtl:begin:ignore */
/* rtl:end:ignore */
/* rtl:begin:ignore */
/* rtl:end:ignore */
/* rtl:begin:ignore */
/* rtl:end:ignore */
/* rtl:begin:ignore */
/* rtl:end:ignore */
/* rtl:options: {
"autoRename": true,
"stringMap":[ {
"name" : "prev-next",
"search" : "prev",
"replace" : "next"
} ]
} */
/* rtl:begin:remove */
/* rtl:end:remove */
/*# sourceMappingURL=bootstrap.css.map */;
}
.bodywebsite :root {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
@ -143,6 +105,10 @@ header('Content-type: text/css');
-webkit-tap-highlight-color: transparent;
}
.bodywebsite .center {
text-align: center;
}
.bodywebsite hr {
margin: 1rem 0;
color: inherit;
@ -8367,6 +8333,7 @@ header('Content-type: text/css');
.bodywebsite .m-1 {
margin: 0.25rem !important;
padding-left: 0px !important;
}
.bodywebsite .m-2 {
@ -12596,8 +12563,8 @@ body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; }
}
.bodywebsite .section-padding {
padding-top: 8rem;
padding-bottom: 8rem;
padding-top: 6rem;
padding-bottom: 6rem;
}
.bodywebsite b,
@ -13019,8 +12986,8 @@ body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; }
background-repeat: no-repeat;
background-position: center;
background-size: cover;
padding-top: 7rem;
padding-bottom: 7rem;
padding-top: 3rem;
padding-bottom: 3rem;
position: relative;
}

File diff suppressed because one or more lines are too long

View File

@ -57,7 +57,7 @@ create table llx_product
fk_user_modif integer, -- user making last change
tosell tinyint DEFAULT 1, -- Product you sell
tobuy tinyint DEFAULT 1, -- Product you buy
onportal tinyint DEFAULT 0, -- If it is a product you sell and you want to sell it on portal (module website must be on)
onportal tinyint DEFAULT 0, -- If it is a product you sell and you want to sell it from internal portal (module 'portal')
tobatch tinyint DEFAULT 0 NOT NULL, -- Is it a product that need a batch management (eat-by or lot management)
sell_or_eat_by_mandatory tinyint DEFAULT 0 NOT NULL, -- Make sell-by or eat-by date mandatory
batch_mask varchar(32) DEFAULT NULL, -- If the product has batch feature, you may want to use a batch mask per product

View File

@ -1881,7 +1881,7 @@ SuppliersInvoiceNumberingModel=Vendor invoices numbering models
IfSetToYesDontForgetPermission=If set to a non null value, don't forget to provide permissions to groups or users allowed for the second approval
##### GeoIPMaxmind #####
GeoIPMaxmindSetup=GeoIP Maxmind module setup
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.<br>Examples:<br>/usr/local/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoIP.dat<br>/usr/share/GeoIP/GeoLite2-Country.mmdb
PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation
NoteOnPathLocation=Note that your ip to country data file must be inside a directory your PHP can read (Check your PHP open_basedir setup and filesystem permissions).
YouCanDownloadFreeDatFileTo=You can download a <b>free demo version</b> of the Maxmind GeoIP country file at %s.
YouCanDownloadAdvancedDatFileTo=You can also download a more <b>complete version, with updates,</b> of the Maxmind GeoIP country file at %s.

View File

@ -153,3 +153,5 @@ PreviousContainer=Previous page/container
WebsiteMustBeDisabled=The website must have the status "%s"
WebpageMustBeDisabled=The web page must have the status "%s"
SetWebsiteOnlineBefore=When website is offline, all pages are offline. Change status of website first.
Booking=Booking
Reservation=Reservation

View File

@ -1484,7 +1484,7 @@ function top_httphead($contenttype = 'text/html', $forcenocache = 0)
// Referrer-Policy
// Say if we must provide the referrer when we jump onto another web page.
// Default browser are 'strict-origin-when-cross-origin', we want more so we use 'same-origin' so we don't send any referrer when going into another web site
// Default browser are 'strict-origin-when-cross-origin' (only domain is sent on other domain switching), we want more so we use 'same-origin' so browser doesn't send any referrer when going into another web site domain.
if (!defined('MAIN_SECURITY_FORCERP')) {
$referrerpolicy = getDolGlobalString('MAIN_SECURITY_FORCERP', "same-origin");

View File

@ -1709,6 +1709,7 @@ select.widthcentpercentminusxx, span.widthcentpercentminusxx:not(.select2-select
select.minwidth100imp, select.minwidth100, select.minwidth200, select.minwidth200imp, select.minwidth300 {
width: calc(100% - 40px) !important;
min-width: 100px;
display: inline-block;
}
select.widthcentpercentminusxx, span.widthcentpercentminusxx:not(.select2-selection), input.widthcentpercentminusxx {

View File

@ -151,10 +151,10 @@ class Website extends CommonObject
/**
* Create object into database
*
* @param User $user User that creates
* @param bool $notrigger false=launch triggers after, true=disable triggers
* @param User $user User that creates
* @param bool $notrigger false=launch triggers after, true=disable triggers
*
* @return int <0 if KO, Id of created object if OK
* @return int <0 if KO, 0 if already exists, ID of created object if OK
*/
public function create(User $user, $notrigger = false)
{
@ -282,8 +282,11 @@ class Website extends CommonObject
// Commit or rollback
if ($error) {
$this->db->rollback();
return -1 * $error;
if ($this->db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
return 0;
} else {
return -1 * $error;
}
} else {
$this->db->commit();

View File

@ -694,7 +694,10 @@ if ($action == 'addsite' && $usercanedit) {
$tmpobject->virtualhost = GETPOST('virtualhost', 'alpha');
$result = $tmpobject->create($user);
if ($result <= 0) {
if ($result == 0) {
$error++;
setEventMessages($langs->trans("ErrorLabelAlreadyExists"), null, 'errors');
} elseif ($result < 0) {
$error++;
setEventMessages($tmpobject->error, $tmpobject->errors, 'errors');
}
@ -3678,7 +3681,7 @@ if ($action == 'editcss') {
// Manifest.json
print '<tr><td class="tdtop">';
$htmlhelp = $langs->trans("Example").' :<br>';
$htmlhelp .= dol_htmlentitiesbr($manifestjsoncontentdefault);
$htmlhelp .= '<small>'.dol_htmlentitiesbr($manifestjsoncontentdefault).'</small>';
print $form->textwithpicto($langs->trans('WEBSITE_MANIFEST_JSON'), $htmlhelp, 1, 'help', '', 0, 2, 'manifestjsontooltip');
print '</td><td>';
print $langs->trans("UseManifest").': '.$form->selectyesno('use_manifest', $website->use_manifest, 1).'<br>';

View File

@ -0,0 +1,178 @@
<?php
/* Copyright (C) 2010 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
* or see https://www.gnu.org/
*/
/**
* \file test/phpunit/WebsiteTest.php
* \ingroup test
* \brief PHPUnit test
* \remarks To run this script as CLI: phpunit filename.php
*/
global $conf,$user,$langs,$db;
//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
//require_once 'PHPUnit/Autoload.php';
if (! defined('NOREQUIRESOC')) {
define('NOREQUIRESOC', '1');
}
if (! defined('NOCSRFCHECK')) {
define('NOCSRFCHECK', '1');
}
if (! defined('NOTOKENRENEWAL')) {
define('NOTOKENRENEWAL', '1');
}
if (! defined('NOREQUIREMENU')) {
define('NOREQUIREMENU', '1'); // If there is no menu to show
}
if (! defined('NOREQUIREHTML')) {
define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php
}
if (! defined('NOREQUIREAJAX')) {
define('NOREQUIREAJAX', '1');
}
if (! defined("NOLOGIN")) {
define("NOLOGIN", '1'); // If this page is public (can be called outside logged session)
}
if (! defined("NOSESSION")) {
define("NOSESSION", '1');
}
require_once dirname(__FILE__).'/../../htdocs/main.inc.php';
require_once dirname(__FILE__).'/../../htdocs/core/lib/website.lib.php';
if (empty($user->id)) {
print "Load permissions for admin user nb 1\n";
$user->fetch(1);
$user->getrights();
}
$conf->global->MAIN_DISABLE_ALL_MAILS=1;
/**
* Class for PHPUnit tests
*
* @backupGlobals disabled
* @backupStaticAttributes enabled
* @remarks backupGlobals must be disabled to have db,conf,user and lang not erased.
*/
class WebsiteTest extends PHPUnit\Framework\TestCase
{
protected $savconf;
protected $savuser;
protected $savlangs;
protected $savdb;
/**
* Constructor
* We save global variables into local variables
*
* @return SecurityTest
*/
public function __construct()
{
parent::__construct();
//$this->sharedFixture
global $conf,$user,$langs,$db;
$this->savconf=$conf;
$this->savuser=$user;
$this->savlangs=$langs;
$this->savdb=$db;
print __METHOD__." db->type=".$db->type." user->id=".$user->id;
//print " - db ".$db->db;
print "\n";
}
/**
* setUpBeforeClass
*
* @return void
*/
public static function setUpBeforeClass()
{
global $conf,$user,$langs,$db;
$db->begin(); // This is to have all actions inside a transaction even if test launched without suite.
print __METHOD__."\n";
}
/**
* tearDownAfterClass
*
* @return void
*/
public static function tearDownAfterClass()
{
global $conf,$user,$langs,$db;
$db->rollback();
print __METHOD__."\n";
}
/**
* Init phpunit tests
*
* @return void
*/
protected function setUp()
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
print __METHOD__."\n";
}
/**
* End phpunit tests
*
* @return void
*/
protected function tearDown()
{
print __METHOD__."\n";
}
/**
* testGetPagesFromSearchCriterias
*
* @return void
*/
public function testGetPagesFromSearchCriterias()
{
global $db;
$s = "123') OR 1=1-- \' xxx";
/*
var_dump($s);
var_dump($db->escapeforlike($s));
var_dump($db->escape($db->escapeforlike($s)));
*/
$res = getPagesFromSearchCriterias('page,blogpost', 'meta,content', $s, 2, 'date_creation', 'DESC', 'en');
//var_dump($res);
print __METHOD__." message=".$res['code']."\n";
// We must found no line (so code should be KO). If we found somethiing, it means there is a SQL injection of the 1=1
$this->assertEquals($res['code'], 'KO');
}
}