for admin.oceanweb.sk

Demo Login:

Email: admin@eshop.sk
Password: fMS7}*8q0[

Project Tree

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>©");
        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);