REQUIREMENTS

  • Working from PHP 5.4 to 8.0
  • If you are using the free version 2.2.9 or below and you cannot even install it properly, short_open_tag = on in PHP.INI
  • MySQL - Any version, really

GENERAL INSTALLATION STEPS

  1. Upload the abo.zip file to the root directory of your website (or wherever the index.php is)
  2. Unzip the abo.zip file (if you do not have console access, the easiest way is to use cPanel/File Manager, right click on the file, decompress)
  3. Configure all you need, going to https://www.example.com/abo_server
  4. Erase the abo_server folder (or, better yet, password protect it, so you don't have to upload it again in case you want to modify the configuration)
  5. Rename the abo_client folder to whatever you like. You don't have to, but it's just to make it look nicer for your final customer

DETAILED INSTALLATION STEPS

Please watch the 30-seconds video, or follow the steps below.

  1. Upload the abo.zip file to the root directory of your website (or wherever the index.php is)
  2. Unzip the abo.zip file (if you do not have console access, the easiest way is to use cPanel/File Manager, right click on the file, decompress)
  3. Go to https://www.example.com/abo_server
  4. Click on DB Settings and enter DB name, username, password and charset (if different from UTF-8), and click SAVE
  5. Click on Table config and enable all of them at least for "view" (click on the switch on the top of the table), and click SAVE
  6. You are done! Click on Open Client or go directly to https://www.example.com/abo_client

HOW TO UPDATE THE CONFIGURATION

IN CASE YOU DIDN'T ERASE/CHANGE THE FOLDER NAMES

  1. Simply go to https://www.example.com/abo_server, perform your updates, and it's done, no need to recompile/upload anything!

IN CASE YOU ERASED/CHANGED THE FOLDER NAMES

  1. If you changed the name of the abo_client folder, change it back to abo_client
  2. Unzip the abo.zip file ON YOUR COMPUTER, and upload only the abo_server folder, to avoid overwriting your configuration
  3. Configure all you need, going to https://www.example.com/abo_server
  4. Erase the abo_server folder (or, better yet, password protect it, so you don't have to upload it again in case you want to modify the configuration)
  5. Rename the abo_client folder to what it was

IN CASE YOU CHANGED THE DATABASE

  1. Go to https://www.example.com/abo_server and click on Re-Scan DB
  2. If you are happy with the default behavior, you are done!
  3. Otherwise, go to the new fields and customize them. Keep in mind, if you added a table, you must go to Tables Config to enable them (view/edit/add/delete)

DETAILS OF THE CONFIGURATION

Fields configuration

Please watch a FULL CUSTOMIZATION in this walk-through tutorial, and after use the documentation as a reference.



DEFAULT VALUES

By default, ABO AutoBackOffice tries to adapt itself to the MySQL field type, and it will try both to print and to edit the field content in the best possible ways. In particular, these will be the defaults:
MySQL TypeDefault ViewDefault Edit
GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTIONThe whole text valueTextarea
BINARY, VARBINARY, BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOBFirst 20 characters, base64 encodedEncoded in base 64
TEXT, MEDIUMTEXT, LONGTEXTFirst 20 charactersHTML Editor if enabled by default, otherwise textarea
DATE, DATETIME, TIMESTAMPText representationDate/Time Picker
TIMEText representation24h format, HH:MM:SS
TINYTEXTText representationUp to 127 characters long
DECIMALText representationOnly digits and decimal point, up to the maximum length
INT, TINYINT, SMALLINT, MEDIUMINT, BIGINTText representationOnly digits, up to the maximum length
BITDecimal representationOnly digits
FLOAT, DOUBLEDecimal representationOnly digits and decimal point
CHAR, VARCHARTextual representationUp to N characters long
ENUMTextual representationCombobox, must select one of the options
SETTextual representationCombobox, must select one of the option, or none of them

Customization

Every field can be configured differently, both for view and edit mode, or you can let ABO decide the best default values according to the MySQL type.

VIEW MODE

ABO tries, by default, to print a nice-looking content according to the MySQL type. Of course, you can always force ABO to show a different kind of format. In particular, you can force these types:
View ModeWhat it shows
NothingIt will fall back to the default, depending on the MySQL type
fullTextThe complete field, in plain text. Be careful, because there is no limit: if the text is 10MB long, it will print 10MB of data!
imgThe image, at the original, full size
img-xsThe image, with the width forced to 64 pixels, with proportional height
img-sThe image, with the width forced to 128 pixels, with proportional height
img-mThe image, with the width forced to 256 pixels, with proportional height
img-lThe image, with the width forced to 512 pixels, with proportional height
base64_fullFull field encoded in base64
base64_cutThe first 20 bytes of the field, encoded in base64

EDIT MODE

Edit ModeWhat it shows
NothingIt will fall back to the default, depending on the MySQL type
TextareaTreated as text, in a HTML textarea
HTMLThe final user will be able to use a WYSIWYG editor (quilljs.com). Keep in mind that this editor encloses ALL the text in a <p> element
Uploadto upload an image. The final user will be able to either upload a new one, or select one already from the same folder on the server
FileThe user will be able to upload ANY file on the server. Be careful because of the security risks: while some common files are blocked by default (e.g. PHP), some others could harm the system!
Tinytexttext input up to 127 characters

UPLOAD DIR

The path to which the images/files are uploaded. It ALWAYS starts from the "abo_client" folder, so if your final folder is 'img/test', you should write '../img/test' (because it must go up one level, and then go into the folders). DO NOT ADD A SLASH AT THE END! It will be added automatically if/when needed, but if you do, don't worry, ABO will fix it for you :)

WIDTH / HEIGHT

The minimum/forced dimension of an uploaded image. If smaller, it will not be uploaded. If bigger, it will be resized and, when needed, cropped. The aspect ratio will ALWAYS be maintained.

STATUS

It can have 3 different values:
  • Hidden: The final user will NEVER be able to see it (usually, primary keys are hidden)
  • Read Only: The final user can only view the value, it cannot be modified
  • Writeable: The final user can read and write this value

SYNTAX CHECK

Unused at the moment.

MANDATORY

Unused at the moment.

LINK TO TABLE

If this field represents the ID of another table, here you must write otherTableName/otherIdField. Be aware that there should be a slash in between the two values, with no spaces

LOOKUP FIELD

The field in the "other" table that you want to print. For example, you have a customer table and an invoice table. In the customer table, the field name contains the name. In the invoice table, the field customerId contains the customer id. In order to print the customer name in the invoice table, put customer/id in the "Link to table" and name here, in "Link to table"

DESCRIPTION

The pretty name of the field, e.g. if in the DB it's called catSec, you can write Secondary Category here, and this will be displayed to the final customer

HELP

Any text that you want to display near this field to the final customer. IMPORTANT This will be used in the automatic doc generation too, so if you want to help both the user online, and create a richer manual, please fill this field too.

Hints

  1. SETUP A PASSWORD. The first thing you should do, is to set a password for ABO. Go to Customization and change "Login Type" to "Fixed password" and fill the corresponding fields below VIDEO
  2. HIDE THE PRIMARY KEYS. You should go through all the tables, and hide the primary key. There is a useful shortcut when you press on a table name to do it with a single click.
  3. CONFIGURE THE TABLES. Not all the tables are the same, so go to Tables config and configure each one. Some can only be viewed, some can be edited but you cannot add data, in some others you cannot delete the elements.

Special features

ABO has been written by developers for developers, and so we know very well the features that we were missing in all the other backoffice tools, and we implemented them!
  • FIELD FORMAT COPY/PASTE: Let's say a user can upload 20 pictures per item. For each picture, you should set the view type (e.g. you want to see it as a small picture), the edit mode (upload the file), maybe you want to force the minimum width and/or height... So, it takes quite some time to change all the settings. All of this, for 20 times. With ABO, you can simply do it once, COPY THE FORMAT, and then "paste" the format onto all the fields that you want. Not only that, but ABO is smart enough to hide the fields with THE SAME format (useless to paste over those, since they are already identical), and it will show the fields which are not of the same type (usually, you do not paste a format over a different type, e.g. you would never paste the format of an image upload over a, let's say, INTEGER DB type). You need to create a specific format only once, and then you can copy it over all the fields that you want: faster, and no chance of making a mistake in applying the same format! VIDEO
  • AUTOMATIC DOCUMENTATION: We all hate writing documentation, don't we? ABO comes to rescue! Simply press the Generate Automatic Doc option, and a rich PDF file will be generated for you! As per 2.2.9 version, the only available option is PDF, but we are working to provide a clean TXT export so that you can better customize it in your preferred word processor VIDEO





Enterprise

Pay once, use FOREVER
$  $
Offer expires Apr, 30th 2022
query($s); ?>

query($s); $n = 0; while ($r = $result->fetch_array(MYSQLI_ASSOC)) { $n++; if (!$r["title_$lang"]) $r["title_$lang"] = $r["title_en"]; if (!$r["article_$lang"]) $r["article_$lang"] = $r["article_en"]; $stt = strtotime($r["dateWritten"]); $dd = date("d", $stt); $mm = date("M", $stt); $yy = date("Y", $stt); ?> {$w["nothingFound"][$lang]}"; } ?>




Tags


query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { ?>
".$w["searchStringTooShort"][$lang].""; $search = "wefnkj34uf43uif4uif23yudybdyub2yud32vu2vdu2yvdyuvh232hf"; // To prevent finding anything } ?>

``


query($s); $n1 = mysqli_num_rows($result); if ($n1) { // echo "

Results for `$search` in the BLOG

"; while ($r = $result->fetch_array(MYSQLI_ASSOC)) { $link = "?pageid=blogArticle&id={$r["id"]}&$uniqId"; ?> query($s); $n2 = mysqli_num_rows($result); if ($n2) { // echo "

Results for `$search` in the FAQ

"; while ($r = $result->fetch_array(MYSQLI_ASSOC)) { $link = "?pageid=faqs&$uniqId"; ?>

query($s); $n = 0; while ($r = $result->fetch_array(MYSQLI_ASSOC)) { $inverted = ""; if ($n++ & 1) $inverted = " class='inverted' "; ?>

01/Jan/1970

query($s); if (mysqli_num_rows($result) == 0) { return; } $r = mysqli_fetch_array($result); if (!$r["title_$lang"]) $r["title_$lang"] = $r["title_en"]; if (!$r["article_$lang"]) $r["article_$lang"] = $r["article_en"]; $stt = strtotime($r["dateWritten"]); ?>





Tags


query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { ?>

query($s); while($cat = mysqli_fetch_array($result)){ ?>

    query($s); while($faq = mysqli_fetch_array($resultFaq)){ ?>



Write a message

Contact us from here

Name

Email

Message

Send messagge


query("SELECT * FROM page WHERE id='$id'")->fetch_array(MYSQLI_ASSOC); $title = $r["title_$lang"]; if (!$title) $title = $r["title_en"]; $page = $r["page_$lang"]; if (!$page) $page = $r["page_en"]; $page = replaceVariablesInText($page); $fbImg = $website."mv/media/".$r["mainImg"]; $fbTitle = strip_tags($title); $fbText = substr(strip_tags($page),0, 400); $fbUrl = $website.$_SERVER['REQUEST_URI']; $fbUrl = str_replace('//', '/', $fbUrl); $fbUrl = str_replace(':/', '://', $fbUrl); return; } } function pageAnswerContactUs() { global $conn, $w, $lang, $settings, $website; $message = @mysqli_real_escape_string($conn, $_GET["message"]); $firstname = @mysqli_real_escape_string($conn, $_GET["firstname"]); $lastname = @mysqli_real_escape_string($conn, $_GET["lastname"]); $email = @mysqli_real_escape_string($conn, $_GET["email"]); $phone = @mysqli_real_escape_string($conn, $_GET["phone"]); $s = "INSERT INTO contactUs (firstname, lastname, email, phone, message, contactUs.when) VALUES ('$firstname','$lastname','$email','$phone','$message', NOW())"; $conn->query($s); $mail = new PHPMailer(true); $mail->CharSet = 'UTF-8'; $mail->Encoding = 'base64'; $mail->IsHTML(true); try { //Server settings $mail->SMTPDebug = 0; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'restaurant-in-pattaya.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'admin@restaurant-in-pattaya.com'; // SMTP username $mail->Password = 'cas30772'; // SMTP password $mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 465; // TCP port to connect to //Recipients $mail->setFrom('admin@restaurant-in-pattaya.com', 'Casa Pascal Website'); if ($settings["emailContactUs1"]) $mail->addAddress($settings["emailContactUs1"], "Casa Pascal"); // Add a recipient if ($settings["emailContactUs2"]) $mail->addAddress($settings["emailContactUs2"], "Casa Pascal"); // Add a recipient if ($settings["emailContactUs3"]) $mail->addAddress($settings["emailContactUs3"], "Casa Pascal"); // Add a recipient $mail->addReplyTo($email, "$firstname $lastname"); //$mail->addCC('cc@example.com'); $mail->addBCC('marcovezzale@gmail.com'); // Attachments //$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name // Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = "MESSAGE from CasaPascal Website"; $res = ""; $res .= "First Name: $firstname
"; $res .= "Last Name: $lastname
"; $res .= "e-mail: $email
"; $res .= "Phone: ".printPrettyPhone($phone)." (original: $phone)
"; $res .= "Message: $message
"; $res = str_replace("\\n", "
", $res); $mail->Body = $res; $mail->send(); } catch (Exception $e) { echo ""; } pageMain(); echo ""; } function pageListPage() { global $conn, $w, $lang, $settings, $pageid, $param2, $param3, $website; $result = $conn->query("SELECT * FROM page WHERE id='$param2' AND active='Y'"); $r = $result->fetch_array(MYSQLI_ASSOC); ?>
$title"; $page = $r["page_$lang"]; if (!$page) $page = $r["page_en"]; $page = replaceVariablesInText($page); echo $page; ?>
query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { $title = $r["title_$lang"]; if (!$title) $title = $r["title_en"]; $page = $r["page_$lang"]; if (!$page) $page = $r["page_en"]; $page = replaceVariablesInText($page); ?>

" title="">

by /   format('l, F jS Y'); ?> /  
0) { $tags = explode(" ", $r["tag_$lang"]); echo "
"; for($i=0; $i
"; } ?>

BLOG

query($s); $n = 0; while ($r = $result->fetch_array(MYSQLI_ASSOC)) { $n++; if (!$r["title_$lang"]) $r["title_$lang"] = $r["title_en"]; if (!$r["article_$lang"]) $r["article_$lang"] = $r["article_en"]; $stt = strtotime($r["dateWritten"]); $dd = date("d", $stt); $mm = date("M", $stt); $yy = date("Y", $stt); ?> {$w["nothingFound"][$lang]}"; } ?>




Tags


query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { ?>

DOWNLOAD

TRY IT FREE FIRST

We trust our product so much that we ask you to DOWNLOAD THE FREE VERSION first, then, only if you like it, you can upgrade - and pay for it.

Free

Cannot get cheaper than that!
$0
  • Works from PHP 5.x to 7.x
  • NOT COMPATIBLE WITH PHP8
  • Based on the 3.1.0 version
  • Free Even For Commercial Use
  • Unlimited Installations
  • Unlimited DB/Tables/Cols
  • Totally Customizable

Professional

Pay once, use forever
$139  $99
Offer expires Apr, 30th 2022
  • Everything in the FREE
  • Works from PHP 5.x to 8.x
  • Based on the 3.2.0 version
  • Free Minor Versions Upgrades
  • PDF DB Doc Generator
  • 30% Off Major Version Upgrades
  • 24/48h Ticket Support

Enterprise

Including eMail Support
$269  $189
Offer expires Apr, 30th 2022
  • Everything in the Professional
  • Works from PHP 5.x to 8.x
  • Based on the 3.2.0 version
  • 50% Off Major Version Upgrades
  • Direct 24h eMail Support
  • Priority In Development
  • No limitations

    It's more than try before buy, it's really a FULL VERSION with no limitations for you to use, EVEN COMMERCIALLY. If you need help, you can read the FAQ, watch the YouTube videos, consult the knowledge base. Or upgrade for a small, fixed price - no recurring fee!

    FREE
  • If you need support

    Why should you pay, when the free version gives you everything already? A couple of reasons: you get support, free upgrades to all the minor versions, 30% off every major update, and you have a way to AUTOMATICALLY generate a detailed, professional report for your final customer! Don't we all hate to write documentation? With ABO, you can have it with a single click!

    $ 139
  • Top priority support

    Direct email support when you cannot wait, and 50% discount on all major updates. Plus, priority development in case you need a custom feature just for you!

    $ 269


query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { ?>


query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { ?>


'' ORDER BY willImplement, sortOrder"; $result = $conn->query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { ?>

'' ORDER BY alreadyImplemented, sortOrder"; $result = $conn->query($s); if (mysqli_num_rows($result)>0) { ?>

fetch_array(MYSQLI_ASSOC)) { ?>


Privacy Policy for Auto Back Office

At AutoBackOffice, accessible from www.autobackoffice.com, one of our main priorities is the privacy of our visitors. This Privacy Policy document contains types of information that is collected and recorded by AutoBackOffice and how we use it.

If you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us.

This Privacy Policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in AutoBackOffice. This policy is not applicable to any information collected offline or via channels other than this website.

Consent

By using our website, you hereby consent to our Privacy Policy and agree to its terms.

Information we collect

The personal information that you are asked to provide, and the reasons why you are asked to provide it, will be made clear to you at the point we ask you to provide your personal information.

If you contact us directly, we may receive additional information about you such as your name, email address, phone number, the contents of the message and/or attachments you may send us, and any other information you may choose to provide.

When you register for an Account, we may ask for your contact information, including items such as name, company name, address, email address, and telephone number.

How we use your information

We use the information we collect in various ways, including to:

  • Provide, operate, and maintain our website
  • Improve, personalize, and expand our website
  • Understand and analyze how you use our website
  • Develop new products, services, features, and functionality
  • Communicate with you, either directly or through one of our partners, including for customer service, to provide you with updates and other information relating to the website, and for marketing and promotional purposes
  • Send you emails
  • Find and prevent fraud

Log Files

AutoBackOffice follows a standard procedure of using log files. These files log visitors when they visit websites. All hosting companies do this and a part of hosting services' analytics. The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and time stamp, referring/exit pages, and possibly the number of clicks. These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users' movement on the website, and gathering demographic information.

Cookies and Web Beacons

Like any other website, AutoBackOffice uses 'cookies'. These cookies are used to store information including visitors' preferences, and the pages on the website that the visitor accessed or visited. The information is used to optimize the users' experience by customizing our web page content based on visitors' browser type and/or other information.

For more general information on cookies, please read "What Are Cookies".

Advertising Partners Privacy Policies

You may consult this list to find the Privacy Policy for each of the advertising partners of AutoBackOffice.

Third-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons that are used in their respective advertisements and links that appear on AutoBackOffice, which are sent directly to users' browser. They automatically receive your IP address when this occurs. These technologies are used to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on websites that you visit.

Note that AutoBackOffice has no access to or control over these cookies that are used by third-party advertisers.

Third Party Privacy Policies

AutoBackOffice's Privacy Policy does not apply to other advertisers or websites. Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information. It may include their practices and instructions about how to opt-out of certain options.

You can choose to disable cookies through your individual browser options. To know more detailed information about cookie management with specific web browsers, it can be found at the browsers' respective websites.

CCPA Privacy Rights (Do Not Sell My Personal Information)

Under the CCPA, among other rights, California consumers have the right to:

Request that a business that collects a consumer's personal data disclose the categories and specific pieces of personal data that a business has collected about consumers.

Request that a business delete any personal data about the consumer that a business has collected.

Request that a business that sells a consumer's personal data, not sell the consumer's personal data.

If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.

GDPR Data Protection Rights

We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:

The right to access – You have the right to request copies of your personal data. We may charge you a small fee for this service.

The right to rectification – You have the right to request that we correct any information you believe is inaccurate. You also have the right to request that we complete the information you believe is incomplete.

The right to erasure – You have the right to request that we erase your personal data, under certain conditions.

The right to restrict processing – You have the right to request that we restrict the processing of your personal data, under certain conditions.

The right to object to processing – You have the right to object to our processing of your personal data, under certain conditions.

The right to data portability – You have the right to request that we transfer the data that we have collected to another organization, or directly to you, under certain conditions.

If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us.

Children's Information

Another part of our priority is adding protection for children while using the internet. We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.

AutoBackOffice does not knowingly collect any Personal Identifiable Information from children under the age of 13. If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records.

query("SELECT * FROM page WHERE id='$id'"); $r = $result->fetch_array(MYSQLI_ASSOC); $phpPage = $r["phpPage"]; $additionalCSS = $r["additionalCSS"]; if ($r["lastViewedIp"] != $ip) { $s = "UPDATE page SET views=views+1, lastViewedIp='$ip' WHERE id='$id'"; $conn->query($s); $r["views"] = $r["views"]+1; } $title = $r["title_$lang"]; if (!$title) $title = $r["title_en"]; $page = $r["page_$lang"]; if (!$page) $page = $r["page_en"]; $page = replaceVariablesInText($page); $expired = false; // if you set the "forced" url parameter to something different than zero, it will show the page neverthless $forced = @mysqli_real_escape_string($conn, $_GET["forced"]); if (!$forced) { if (($r["active"]!='Y')||(($r["dateExpiration"]) && ($r["dateExpiration"]!="0000-00-00") && ($r["dateExpiration"]<=date("Y-m-d")))) { $title = "Sorry, page expired!"; $page = "You probably bookmarked a page that is not available anymore.
Maybe it was a menu that is not available anymore, or a seasonal offer.
We are sorry that you cannot find what you were looking for, but try to contact us, we will try our best to arrange a solution for you!"; $expired = true; } } if ($additionalCSS) { echo ""; } if ($r["active"]!='Y') { $r["mainImg"] = ""; } ?>

by /   /   F jS, Y", strtotime($r["dateStart"]));?> F jS, Y", strtotime($r["dateExpiration"]));?> / / "; } ?>  
0) { echo "
"; $tags = explode(" ", $r["tag_$lang"]); for($i=0; $i
"; } ?>


Set it up in 30 SECONDS! Watch the video!

Works everywhere: Windows, MacOS, Linux, iOs, Android...

Fully working FREE version, also for COMMERCIAL use

Ultra-fast, hand-optimized pure PHP code

We do not even ask for an email!

Give it a try, it's free

30 seconds from the download to a working version on your server!

  1. Unzip the file on your server (same level as index.php)
  2. Go to www.YourWebsite.com/abo_server
  3. Click on Configuration, enter DB name/password and save
  4. Click on Tables Config, click on View/Add/Edit and save
  5. DONE! Go to www.YourWebsite.com/abo_client and use it!

DOWNLOAD

Subscribe now to
our newsletter

Stay tuned

Your name

Your email

Have a look at all the features!

Full tutorial

From a brand new installation learn how:

  1. Customize logos, footer, PDF documentation
  2. Use a table to handle users/passwords
  3. Handle image upload/resize
  4. Link fields to different tables
  5. Correctly handle parent/child tables

DOWNLOAD


Installation

Text and video instructions to guide you through it. No more than 30 seconds, we promise!

Learn more

Open a ticket

If you paid for ABO AutoBackOffice, you are entitled to a dedicated support team!

Learn more

YouTube videos

Short videos, straight to the point! Every small detail is explained in a easy-to-follow way

Learn more

FAQs

We tried to collect the REAL questions from our customers. Sometimes, it's faster to simply look for an answer here

Learn more

You can check what will the next features be... And you can ask us to add one too!

Learn more

Like all the software, ABO contains known issues. But rest assured! We are working around the clock to fix them!

Learn more
window.location.hash = '$param2';"; } } function initAll() { global $conn, $w, $lang, $settings, $pageid, $ip, $param2, $param3, $website, $url, $id, $pageType, $uniqId, $referral; ini_set('display_errors', 1); error_reporting(-1); $uniqId = uniqid(); $ip = $_SERVER['REMOTE_ADDR']; $referral = @$_SERVER["HTTP_REFERER"]; $SERVER_NAME = 'LOCALHOST'; $DB_USERNAME = 'localtha_abo'; $DB_PASSWORD = 'abo_30672'; $DB_NAME = 'localtha_abo'; $conn = new mysqli($SERVER_NAME, $DB_USERNAME, $DB_PASSWORD, $DB_NAME); $conn->set_charset('utf8'); // load all the prettyURLs $s = "SELECT * FROM prettyurl"; $result = $conn->query($s); while ($r=$result->fetch_array(MYSQLI_ASSOC)) { if ($r["enabled"]=='N') continue; $prettyURL["pageid"][$r["url"]] = $r["pageId"]; $prettyURL["param2"][$r["url"]] = $r["param2"]; $prettyURL["param3"][$r["url"]] = $r["param3"]; $prettyURL["lang"][$r["url"]] = $r["lang"]; $prettyURLBack[$r["uglyUrl"]] = $r["url"]; $prettyURLBackParam2[$r["param2"]] = $r["url"]; } $param2 = $param3 = ""; // $url = str_replace("/marco/html/", "", $_SERVER['REQUEST_URI']); $url = str_replace("/", "", $_SERVER['REQUEST_URI']); // 20181201 in google Ads, if you enter a pretty URL it will add the tracker at the end: delete it if (strstr($url, '?gclid=')) { $url = substr($url, 0, strpos($url, '?gclid=')); } $pageType = "regular"; // if ((strstr($url, '?')) || ($url=="index.php") || $url=="") { if ((strstr($url, '?pageid=')) || ($url=="index.php") || $url=="") { // it is a regular page } else { // manually track the ThePattayaNews special link if (substr($url,0,12) == 'pattaya-news') { file_put_contents('pattayanews.txt', "$url|$ip|".time().PHP_EOL, FILE_APPEND | LOCK_EX); } $pageType = "prettyURL"; // it is a pretty URL // if there is "something else", remove it $p = strpos($url, '?'); if ($p>0) $url = substr($url, 0, $p); $pageid = @$prettyURL["pageid"]["$url"]; $param2 = @$prettyURL["param2"]["$url"]; $param3 = @$prettyURL["param3"]["$url"]; $prettyUrlLang = @$prettyURL["lang"]["$url"]; if ($prettyUrlLang) { // update the "forced" language only if it's NOT from the user changing the page $setLanguage = @mysqli_real_escape_string($conn, $_GET["setLanguage"]); if (!$setLanguage) { $lang = $prettyUrlLang; } else { // ... let it decode it from the cookie, or the default value } } if ($pageid == "") { //$url = $website; } /* print "**D*u=$url
p=$pageid 2=$param2 3=$param3**"; print "
";
  print_r($prettyURL);
  print "
"; //exit; */ } // load all the settings $s = "SELECT * FROM settings"; $result = $conn->query($s); $settings = $result->fetch_array(MYSQLI_ASSOC); // $lang COULD be set prior to this from a prettyURL if (!$lang) { $lang = @$_COOKIE["lang"]; if (strlen($lang)<1) { $lang = $settings["defaultLanguage"]; if ($lang == "") $lang = "en"; } } // load all the translation ONLY of the available languages to speed it up $s = "SELECT name FROM availableLanguages WHERE availableYN='Y'"; $result = $conn->query($s); $l1 = ""; $languages = array(); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { if ($l1) $l1 .= ","; $l1 .= $r["name"]; $languages[] = $r["name"]; } // Can be optimized: only load "en" and the current language $s = "SELECT word, $l1 FROM languages"; $result = $conn->query($s); while ($r = $result->fetch_array(MYSQLI_ASSOC)) { foreach ($languages as $currLang) { $word = strval(trim($r["word"])); $translated_word = strval(trim($r[$currLang])); (strlen($translated_word) > 0) ? $w[$word][$currLang] = $translated_word : $w[$word][$currLang] = $w[$word]["en"]; } } $s = "SELECT rightToLeft FROM availableLanguages WHERE name='$lang'"; $r = $conn->query($s)->fetch_array(MYSQLI_ASSOC)["rightToLeft"]; if ($r == 'Y') $rtl = 'rtl'; else $rtl = 'ltr'; if ($pageid) { // if it's already set, it comes from a prettyURL, so do not change it! } else { $pageid = @mysqli_real_escape_string($conn, $_GET["pageid"]); if (strlen($pageid)<1) $pageid = @mysqli_real_escape_string($conn, @$_POST["pageid"]); } $id = @mysqli_real_escape_string($conn, $_GET["id"]); if (!$id) $id = $param2; } function printHead() { global $conn, $w, $lang, $settings, $pageid, $param2, $param3, $url, $fbUrl, $fbImg, $fbText, $fbTitle, $website, $pageType; ?> "> query($s); if (mysqli_num_rows($result)>0) { $keywords = $result->fetch_array(MYSQLI_ASSOC); $keywords = $keywords["keywords"]; } else { $keywords = "Auto Back Office backoffice phpmaker substitute equivalent"; } ?>