Demo Login:
Email: admin@eshop.sk
Password: fMS7}*8q0[
Project Tree
- ajax
- api
- classes
- css
- fonts
- images
- includes
- js
- lang
- plugins
- template
- .htaccess
- config.php
- index.php
classes/DB.class.php (PDO)
Can be MySQLi...
class DB
{
private $connection = null;
private $statement = null;
public function __construct($type, $hostname, $username, $password, $database, $port = NULL) {
try {
$this->connection = new \PDO("$type:host=" . $hostname . ";port=" . $port . ";dbname=" . $database, $username, $password, array(\PDO::ATTR_PERSISTENT => true));
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(\PDOException $e) {
echo "ERROR " . $e->getMessage() . "<\br />";
die();
}
$this->connection->exec("SET NAMES 'utf8'");
$this->connection->exec("SET CHARACTER SET utf8");
$this->connection->exec("SET CHARACTER_SET_CONNECTION=utf8");
}
public function prepare($sql) {
$this->statement = $this->connection->prepare($sql);
}
public function bindParam($parameter, $variable, $data_type = null, $length = 0) {
if (is_null($data_type)) {
switch (true) {
case is_int($variable):
$data_type = \PDO::PARAM_INT;
break;
case is_bool($variable):
$data_type = \PDO::PARAM_BOOL;
break;
case is_null($variable):
$data_type = \PDO::PARAM_NULL;
break;
default:
$data_type = \PDO::PARAM_STR;
}
}
if ($length) {
$this->statement->bindParam($parameter, $variable, $data_type, $length);
} else {
$this->statement->bindParam($parameter, $variable, $data_type);
}
}
public function execute() {
$this->connection->beginTransaction();
try {
if ($this->statement && $this->statement->execute()) {
$data = array();
while ($row = $this->statement->fetch(\PDO::FETCH_ASSOC)) {
$data[] = $row;
}
$result = new \stdClass();
$result->row = (isset($data[0])) ? $data[0] : array();
$result->rows = $data;
$result->num_rows = $this->statement->rowCount();
}
} catch(\PDOException $e) {
throw new \Exception('Error: ' . $e->getMessage() . ' Error Code : ' . $e->getCode());
}
$this->connection->commit();
}
public function query($sql, $params = array()) {
$this->statement = $this->connection->prepare($sql);
$x = 1;
if (count($params)) {
foreach($params as $param) {
$this->statement->bindParam($x, $param);
$x++;
}
}
$result = false;
try {
if ($this->statement && $this->statement->execute($params)) {
$data = array();
if (strpos($sql, 'INSERT INTO') !== false or strpos($sql, 'UPDATE') !== false or strpos($sql, 'DELETE') !== false) {
} else {
while ($row = $this->statement->fetch(\PDO::FETCH_ASSOC)) {
$data[] = $row;
}
$result = new \stdClass();
$result->row = (isset($data[0]) ? $data[0] : array());
$result->rows = $data;
$result->num_rows = $this->statement->rowCount();
}
}
} catch (\PDOException $e) {
throw new \Exception('Error: ' . $e->getMessage() . ' Error Code : ' . $e->getCode() . ' <\br />' . $sql);
}
if ($result) {
return $result;
} else {
$result = new \stdClass();
$result->row = array();
$result->rows = array();
$result->num_rows = 0;
return $result;
}
}
public function insertMultiple($tableName, $data) {
//Will contain SQL snippets.
$rowsSQL = array();
//Will contain the values that we need to bind.
$toBind = array();
//Get a list of column names to use in the SQL statement.
$columnNames = array_keys($data[0]);
//Loop through our $data array.
foreach($data as $arrayIndex => $row){
$params = array();
foreach($row as $columnName => $columnValue){
$param = ":" . $columnName . $arrayIndex;
$params[] = $param;
$toBind[$param] = $columnValue;
}
$rowsSQL[] = "(" . implode(", ", $params) . ")";
}
//Construct our SQL statement
$sql = "INSERT INTO `$tableName` (" . implode(", ", $columnNames) . ") VALUES " . implode(", ", $rowsSQL);
//Prepare our PDO statement.
$pdoStatement = $this->connection->prepare($sql);
//Bind our values.
foreach($toBind as $param => $val){
$pdoStatement->bindParam($param, $val);
}
//Execute our statement (i.e. insert the data).
return $pdoStatement->execute();
}
public function countAffected() {
if ($this->statement) {
return $this->statement->rowCount();
} else {
return 0;
}
}
public function getLastId() {
return $this->connection->lastInsertId();
}
public function isConnected() {
if ($this->connection) {
return true;
} else {
return false;
}
}
public function __destruct() {
$this->connection = null;
}
}
classes/Products.class.php
For managing product info, stock, etc.
class Products
{
protected $_db;
public $dataid;
public $stat;
private $itemId;
private $imageFolder;
private $error = array();
public function __construct($db) {
$this->_db = $db;
$this->dataid = rand();
$this->stat = '';
$this->imageFolder = DIR_IMAGES_PRODUCTS;
}
public function manage($manage = null, $itemId = 0, $name, $title, $description, $lang, $status, $category, $VAT, $SKU, $rank, $picture, $sidePicture) {
$validator = new GUMP();
// Select Item
if ($itemId != 0) {
$query = $this->_db->query("SELECT * FROM `product` WHERE `id` = ? AND `server_id` = ?", array($itemId, $_SESSION['server']));
$rowItem = $query->row;
$queryImage = $this->_db->query("SELECT * FROM `product_image` WHERE `product_id` = '".$rowItem['id']."'");
$rowImage = $queryImage->row;
}
// Manage Array values
if ($name != "") {
foreach ($name as $key => $value) {
$nameValues[$key] = trim($value);
}
}
if ($title != "") {
foreach ($title as $key => $value) {
$titleValues[$key] = trim($value);
}
}
if ($description != "") {
foreach ($description as $key => $value) {
$descriptionValues[$key] = trim(stripFroala($value));
}
}
if ($lang != "") {
foreach ($lang as $key => $value) {
$langValues[$key] = trim($value);
}
}
// Category
$validCategory = $this->_db->query("SELECT * FROM `category` WHERE `status` = 'active' AND `server_id` = ?", array($_SESSION['server']));
$numItems = $validCategory->num_rows;
$i = 0;
$categoryContain = '';
foreach ($validCategory->rows as $categoryId) {
if(++$i === $numItems) {
$categoryContain .= "'".$categoryId['id']."'";
} else {
$categoryContain .= "'".$categoryId['id']."' ";
}
}
// VAT
$validVAT = $this->_db->query("SELECT * FROM `vat` WHERE `server_id` = ?", array($_SESSION['server']));
$numItems = $validVAT->num_rows;
$i = 0;
$VATContain = '';
foreach ($validVAT->rows as $VATId) {
if(++$i === $numItems) {
$VATContain .= "'".$VATId['id']."'";
} else {
$VATContain .= "'".$VATId['id']."' ";
}
}
// Validate Inputs
$_POST = array(
'status' => $status,
'VAT' => $VAT,
);
$_POST = $validator->sanitize($_POST);
$rules = array(
'status' => "required|contains,'active' 'inactive' 'deleted'",
'VAT' => "required|contains,'0' $VATContain"
);
$filters = array(
'status' => 'trim',
'VAT' => 'trim'
);
$_POST = $validator->filter($_POST, $filters);
$validated = $validator->validate($_POST, $rules);
if ($validated === true) {
} else {
foreach ($validator->get_errors_array() as $errors) {
$this->setError($errors);
}
$this->stat = 'error';
}
// Validate Names
$error_names = "";
foreach ($nameValues as $key => $value) {
if ($value == "") {
$error_names = ERROR_MISSED_NAMES;
}
}
if ($error_names != "") {
$this->setError($error_names);
$this->stat = 'error';
}
// Validate Lang
$errorLang = "";
foreach ($langValues as $key => $value) {
$validLang = $this->_db->query("SELECT * FROM `lang` WHERE `lang` = ? AND `active` = '1' AND `server_id` = ?", array($langValues[$key], $_SESSION['server']));
if ($validLang->num_rows <= 0) {
$errorLang = ERROR_INVALID_LANG;
}
}
if ($errorLang != "") {
$this->setError($errorLang);
$this->stat = 'error';
}
// Success
if ($this->stat != 'error') {
$category = json_encode($category);
if ($manage == 'insert') {
// Create Item
$this->_db->query("INSERT INTO `product` (`status`, `rank`, `category_id`, `vat_id`, `sku`, `server_id`) VALUES (?, ?, ?, ?, ?, ?)", array($status, $rank, $category, $VAT, $SKU, $_SESSION['server']));
$lastId = $this->_db->getLastId();
$this->itemId = $lastId; // for reload
for ($i = 0; $i < count($langValues); $i++) {
$this->_db->query("INSERT INTO `product_info` (`product_id`, `name`, `title`, `description`, `lang`) VALUES ('".$lastId."', ?, ?, ?, ?)", array($nameValues[$i], $titleValues[$i], $descriptionValues[$i], $langValues[$i]));
}
$salt = time().getToken(32);
$generate = substr(hash('md5', $salt), 0, 32);
$query = $this->_db->query("SELECT * FROM `product` WHERE `id` = ? AND `server_id` = ?", array($lastId, $_SESSION['server']));
$rowItemHash = $query->row;
if ($rowItemHash['hash'] == '') {
$targetDir = DIR_BASE."images/$this->imageFolder/".$generate."/";
$this->_db->query("UPDATE `product` SET `hash` = ? WHERE `id` = ? AND `server_id` = ?", array($generate, $lastId, $_SESSION['server']));
} else {
$targetDir = DIR_BASE."images/$this->imageFolder/".$rowItemHash['hash']."/";
}
if (!is_dir(DIR_BASE."images/$this->imageFolder/")) {
mkdir(DIR_BASE."images/$this->imageFolder/", 0755, true);
}
if (!is_dir($targetDir)) {
mkdir($targetDir, 0755);
}
// End INSERT
} else {
// Update Item
$this->_db->query("UPDATE `product` SET `status` = ?, `rank` = ?, `category_id` = ?, `vat_id` = ?, `sku` = ? WHERE `id` = '".$rowItem['id']."' AND `server_id` = ?", array($status, $rank, $category, $VAT, $SKU, $_SESSION['server']));
// Check Languages, if new => Insert
$item_info_lang = $this->_db->query("SELECT * FROM `product_info` WHERE `product_id` = '".$rowItem['id']."'");
if (count($lang) > $item_info_lang->num_rows) {
$l = 0;
$query_lang = $this->_db->query("SELECT * FROM `lang` WHERE `active` = '1' AND `server_id` = ?", array($_SESSION['server']));
foreach ($query_lang->rows as $row_lang) {
$l++;
$query = $this->_db->query("SELECT * FROM `product_info` WHERE `product_id` = '".$rowItem['id']."' AND `lang` = '".$row_lang['lang']."'");
if ($query->num_rows <= 0) {
$new_lang = $row_lang['lang'];
$this->_db->query("INSERT INTO `product_info` (`product_id`, `lang`) VALUES ('".$rowItem['id']."', '".$new_lang."')");
}
}
}
for ($i = 0; $i < count($langValues); $i++) {
$this->_db->query("UPDATE `product_info` SET `name` = ?, `title` = ?, `description` = ? WHERE `product_id` = '".$rowItem['id']."' AND `lang` = ?", array($nameValues[$i], $titleValues[$i], $descriptionValues[$i], $langValues[$i]));
}
// End UPDATE
}
}
if ($this->stat != 'error') {
$this->stat = 'success';
}
}
public function updateStock($stockId, $stockRank, $size, $stock, $canOrder, $stockPrice, $stockActionPrice) {
// Manage Array values
if ($stockId != "") {
foreach ($stockId as $key => $value) {
$stockId[$key] = trim($value);
}
}
if ($size != "") {
foreach ($size as $key => $value) {
$size[$key] = trim($value);
}
}
if ($stock != "") {
foreach ($stock as $key => $value) {
$stock[$key] = trim($value);
}
}
// Validate Size
$errorSize = "";
if ($size != '') {
foreach ($size as $key => $value) {
if ($value == '') {
$errorSize = ERROR_BAD_ITEM_SIZE;
}
}
}
if ($errorSize != "") {
$this->setError($errorSize);
$this->stat = 'error';
}
// Validate Stock values
$errorStock = "";
if ($stock != '') {
foreach ($stock as $key => $value) {
if (!is_numeric($value)) {
$errorStock = ERROR_BAD_STOCK_VALUE;
}
}
}
if ($errorStock != "") {
$this->setError($errorStock);
$this->stat = 'error';
}
// Success
if ($this->stat != 'error') {
if ($stockId != '') {
foreach ($stockId as $key => $id) {
$this->_db->query("UPDATE `product_stock` SET `size` = ?, `stock` = ?, `can_order` = ?, `price` = ?, `action_price` = ? WHERE `id` = ?", array($size[$key], $stock[$key], $canOrder[$key], $stockPrice[$key], $stockActionPrice[$key], $id));
}
}
$this->stat = 'success';
}
}
public function newStock($id) {
$rank = $this->_db->query("SELECT `product_id` FROM `product_stock` WHERE `product_id` = ?", array($id));
$rank = $rank->num_rows + 1;
if ( $this->_db->query("INSERT INTO `product_stock` (`product_id`, `size`, `stock`, `can_order`, `rank`) VALUES ('".$id."', '0', '0', '1', '$rank')") ) {
return true;
} else {
return false;
}
}
public function deleteStock($id, $stockId) {
$query = $this->_db->query("SELECT `id` FROM `product_stock` WHERE `id` = ?", array($stockId));
if ($query->num_rows != 0) {
if ( $this->_db->query("DELETE FROM `product_stock` WHERE `id` = ?", array($stockId)) ) {
return true;
} else {
return false;
}
} else {
return false;
}
}
public function deleteImage($id, $image) {
$query = $this->_db->query("SELECT * FROM `product` WHERE `id` = ? AND `server_id` = ?", array($id, $_SESSION['server']));
$rowItem = $query->row;
$query = $this->_db->query("SELECT `id` FROM `product_image` WHERE `hash` = ?", array($image));
if ($query->num_rows != 0) {
$mask = DIR_BASE."images/".$this->imageFolder."/".$rowItem['hash']."/".$image."*.*";
array_map('unlink', glob($mask));
$this->_db->query("DELETE FROM `product_image` WHERE `product_id` = ? AND `hash` = ?", array($id, $image));
return true;
} else {
return false;
}
}
public function newLocation() {
return URL_SECURE.URL_SECURE_PRODUCTS.'/'.URL_SECURE_EDIT.'/'.$this->itemId;
}
public function setError($val) {
$this->error[] = $val;
}
public function getErrors() {
return $this->error;
}
}
config.php
// Brand
define("BRAND_NAME", "OceanWeb");
define("BRAND_NAME_WORDING", BRAND_NAME."<\span>©\span>");
define("BRANND_NO_REPLY_EMAIL", "info@oceanweb.sk");
define("SITE_DESCRIPTION", "");
if (isset($_SERVER['HTTPS'])) {
$protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
} else {
$protocol = 'http';
}
if ($_SERVER['HTTP_HOST'] == 'localhost' or $_SERVER['HTTP_HOST'] == '127.0.0.1') {
// DB
define('DB_TYPE', 'mysql');
define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'root');
define('DB_DATABASE', 'ocean');
define('DB_PORT', '3306');
// URL
define('URL_MAIN', $protocol.'://'.$_SERVER['HTTP_HOST'].'/OCEAN/');
define('URL_SECURE', $protocol.'://'.$_SERVER['HTTP_HOST'].'/OCEAN/');
define('URL_AJAX', 'ajax');
define('DIR_BASE_FILEUPLOADER', 'OCEAN/');
} else {
// DB
define('DB_TYPE', 'mysql');
define('DB_HOSTNAME', '***');
define('DB_USERNAME', '***');
define('DB_PASSWORD', '***');
define('DB_DATABASE', '***');
define('DB_PORT', '3306');
// URL
define('URL_MAIN', $protocol.'://'.$_SERVER['HTTP_HOST'].'/');
define('URL_SECURE', $protocol.'://'.$_SERVER['HTTP_HOST'].'/');
define('URL_AJAX', 'ajax');
define('DIR_BASE_FILEUPLOADER', '');
}
// DIR
define('DIR_BASE', __DIR__.'/');
define('DIR_INCLUDES', DIR_BASE.'includes/');
define('DIR_TEMP', DIR_BASE.'template/');
define('DIR_PLUGINS', DIR_BASE.'plugins/');
define('DIR_INVOICES', DIR_BASE.'invoices/');
define('DIR_CLASSES', DIR_BASE.'classes/');
define('DIR_LANG', DIR_BASE.'lang/');
define('VIEW_HEADER', DIR_INCLUDES.'header.php');
define('VIEW_NAVIGATION', DIR_INCLUDES.'navigation.php');
define('VIEW_FOOTER', DIR_INCLUDES.'footer.php');
// DIR Images
define('DIR_IMAGES_ARTICLES', 'articles');
define('DIR_IMAGES_GALLERIES', 'galleries');
define('DIR_IMAGES_PRODUCTS', 'products');
define('DIR_IMAGES_PROPERTIES', 'properties');
define('DIR_IMAGES_CATEGORIES', 'categories');
define('DIR_IMAGES_RULES', 'rules');
define('DIR_IMAGES_PROMO_ACTIONS', 'promo-actions');
// Units
define('KB', 1024);
define('MB', 1048576);
define('GB', 1073741824);
define('TB', 1099511627776);
// URLs for HTACCESS
// Main
define("URL_HOME", "home");
define("URL_SECURE_LOGIN", "login");
define("URL_SECURE_ORDERS", "orders");
define("URL_SECURE_PRODUCTS", "products");
define('URL_SECURE_CUSTOMERS', 'customers');
define('URL_SECURE_SHIPPING', 'shipping');
define('URL_SECURE_PAYMENT_METHOD', 'payment-method');
define("URL_SECURE_ARTICLES", "articles");
define("URL_SECURE_CATEGORIES", "categories");
define("URL_SECURE_ACCOUNT", "account");
define('URL_SECURE_WEBSITE', 'website');
define("URL_SECURE_INFORMATIONS", "informations");
define('URL_SECURE_GALLERIES', 'galleries');
define("URL_SECURE_DISCOUNT_COUPONS", "discount-coupons");
define('URL_SECURE_ADMINS', 'administrators');
define('URL_SECURE_PROPERTIES', 'properties');
define('URL_SECURE_PAGES', 'pages');
define('URL_SECURE_POLLS', 'polls');
define('URL_SECURE_NEWSLETTER', 'newsletter');
define('URL_SECURE_TAXES', 'taxes');
define('URL_SECURE_REWARD_POINTS', 'reward-points');
define('URL_SECURE_REALITY_IMPORT', 'reality-import');
define('URL_SECURE_CONTACT_DATABASE', 'contact-database');
define('URL_SECURE_RULES', 'rules');
define('URL_SECURE_CUSTOMER_GROUPS', 'customer-groups');
define('URL_SECURE_PROMO_ACTIONS', 'promo-actions');
define('URL_SECURE_COUNTRIES', 'countries');
define("URL_SECURE_LOGOUT", "logout");
define("URL_SECURE_CREATE", "create");
define("URL_SECURE_EDIT", "edit");
define("URL_SECURE_DELETE", "delete");
define('URL_SECURE_GENERATE', 'generate');
define('URL_SECURE_NEW', 'new');
define('URL_SECURE_PRINT', 'print.php');
define('URL_SECURE_INVOICE', 'invoice.php');
define('URL_SECURE_ZIP', 'zip.php');
define('URL_SECURE_INSTANT_DESIGN_TOOL', 'instant_design_tool.php');
includes/startup.php
// Check Version
if (version_compare(phpversion(), '5.5.0', '<') == true) {
exit('PHP5.5+ Required');
}
// Magic Quotes Fix
if (ini_get('magic_quotes_gpc')) {
function clean($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
$data[clean($key)] = clean($value);
}
} else {
$data = stripslashes($data);
}
return $data;
}
$_GET = clean($_GET);
$_POST = clean($_POST);
$_COOKIE = clean($_COOKIE);
}
// Datetime fix
if (!ini_get('date.timezone')) {
date_default_timezone_set('UTC');
}
// Autoload
spl_autoload_register(function($class) {
require_once DIR_CLASSES.$class.'.class.php';
});
// Database
$db = new DB(DB_TYPE, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT);
// Char set
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');
// Session
session_start();
// Functions
require_once (DIR_INCLUDES.'functions.php');
// Get lang
$lang = 'sk';
if (is_file(DIR_LANG.$lang.'.php')) {
require_once (DIR_LANG.$lang.'.php');
} else {
return die('Error: Cannot load language file.');
}
index.php
require_once ('config.php');
require_once (DIR_INCLUDES.'startup.php');
$validate = new Validate();
$user = new User($db);
if (isLoggedIn()) {
// Server query $rowServer, User query $row, Modules $modules, Addons $addons
require_once (DIR_INCLUDES.'initial_user.php');
$orders = new Orders($db, $row['lang']);
// Page, Sub Page, Id
if (empty($_GET['page'])) {
$page = URL_HOME;
} else {
$page = $_GET['page'];
}
$sub_page = $_GET['sub_page'] ?? '';
$id_get = $_GET['id'] ?? '';
// Log Out
if ($page == URL_SECURE_LOGOUT) {
$_SESSION = array();
session_unset();
session_destroy();
header('Location: '.URL_SECURE);
exit;
}
// Invalid Module
if ($page != URL_HOME and in_array($page, $modules) == false) {
header('Location:'. URL_SECURE);
exit;
}
} else {
$page = URL_SECURE_LOGIN;
}
// Complete Page
require_once (VIEW_HEADER);
require_once (VIEW_NAVIGATION);
if (is_file(DIR_TEMP.$page.'/index.php')) {
require_once (DIR_TEMP.$page.'/index.php');
} else {
require_once (DIR_INCLUDES.'404.php');
}
require_once (VIEW_FOOTER);