You are here

class InstapageCmsPluginDBModel in Instapage plugin 8.3

Same name and namespace in other branches
  1. 7.3 core/models/InstapageCmsPluginDBModel.php \InstapageCmsPluginDBModel

Class responsible for communication with DB.

Hierarchy

Expanded class hierarchy of InstapageCmsPluginDBModel

File

core/models/InstapageCmsPluginDBModel.php, line 6

View source
class InstapageCmsPluginDBModel {

  /**
   * @var object Class instance.
   */
  private static $dbModel = null;

  /**
   * @var string DB prefix.
   */
  public $prefix = null;

  /**
   * @var string Charset collatation.
   */
  public $charsetCollate = null;

  /**
   * @var string Options table name.
   */
  public $optionsTable = null;

  /**
   * @var string Pages table name.
   */
  public $pagesTable = null;

  /**
   * @var Debug log table name.
   */
  public $debugTable = null;

  /**
   * Class constructor. Sets the properties based on current CMS settings.
   */
  function __construct() {
    $this->prefix = InstapageCmsPluginConnector::getSelectedConnector()
      ->getDBPrefix();
    $this->charsetCollate = InstapageCmsPluginConnector::getSelectedConnector()
      ->getCharsetCollate();
    $this->optionsTable = $this->prefix . 'instapage_options';
    $this->pagesTable = $this->prefix . 'instapage_pages';
    $this->debugTable = $this->prefix . 'instapage_debug';
  }

  /**
   * Gets the class instance.
   *
   * @return object Class instance.
   */
  public static function getInstance() {
    if (self::$dbModel === null) {
      self::$dbModel = new InstapageCmsPluginDBModel();
    }
    return self::$dbModel;
  }

  /**
   * Executes a SQL query.
   *
   * @param string $sql SQL to execute. %s can be used to output pre-formatted values. Values for %s can be passed as arguments for this function.
   * @return bool True if the query is successful. DB error is logged and false if returned otherwise.
   */
  public function query($sql) {
    $args = func_get_args();
    array_shift($args);
    if (isset($args[0]) && is_array($args[0])) {
      $args = $args[0];
    }
    return InstapageCmsPluginConnector::getSelectedConnector()
      ->query($sql, $args);
  }

  /**
   * Gets the last ID of an insert query.
   *
   * @return integer|boolean Last insert ID of false on error.
   */
  public function lastInsertId() {
    return InstapageCmsPluginConnector::getSelectedConnector()
      ->lastInsertId();
  }

  /**
   * Executes the query and returns the first row.
   *
   * @param string $sql SQL to execute. %s can be used to output pre-formatted values. Values for %s can be passed as arguments for this function.
   * @return mixed first row of results of the query.
   */
  public function getRow($sql) {
    $args = func_get_args();
    array_shift($args);
    if (isset($args[0]) && is_array($args[0])) {
      $args = $args[0];
    }
    return InstapageCmsPluginConnector::getSelectedConnector()
      ->getRow($sql, $args);
  }

  /**
   * Executes the query and returns a list of results.
   *
   * @param string $sql SQL to execute. %s can be used to output pre-formatted values. Values for %s can be passed as arguments for this function.
   * @return mixed first row of results of the query.
   */
  public static function getResults($sql) {
    $args = func_get_args();
    array_shift($args);
    if (isset($args[0]) && is_array($args[0])) {
      $args = $args[0];
    }
    return InstapageCmsPluginConnector::getSelectedConnector()
      ->getResults($sql, $args);
  }

  /**
   * Initiates Instapage plugin's DB structure.
   */
  public function initPluginTables() {
    $this
      ->initOptionsTable();
    $this
      ->initPagesTable();
    $this
      ->initDebugTable();
    $this
      ->updateDB();
  }

  /**
   * Initiates Instapage plugin's DB structure for options table.
   */
  private function initOptionsTable() {
    $sql = sprintf('SHOW TABLES LIKE \'%s\'', $this->optionsTable);
    $result = $this
      ->getRow($sql);
    if ($result) {
      return true;
    }
    $sql = sprintf('CREATE TABLE IF NOT EXISTS %s(' . 'id MEDIUMINT(9) UNSIGNED NOT NULL AUTO_INCREMENT, ' . 'plugin_hash VARCHAR(255) DEFAULT \'\', ' . 'api_keys TEXT NULL, ' . 'user_name VARCHAR(255) DEFAULT \'\', ' . 'config TEXT NULL, ' . 'metadata TEXT NULL, ' . 'UNIQUE KEY id (id)) %s', $this->optionsTable, $this->charsetCollate);
    $this
      ->query($sql);
  }

  /**
   * Initiates Instapage plugin's DB structure for pages table.
   */
  private function initPagesTable() {
    $sql = sprintf('SHOW TABLES LIKE \'%s\'', $this->pagesTable);
    $result = $this
      ->getRow($sql);
    if ($result) {
      return true;
    }
    $sql = sprintf('CREATE TABLE IF NOT EXISTS %s(' . 'id MEDIUMINT(9) UNSIGNED NOT NULL AUTO_INCREMENT, ' . 'instapage_id INT UNSIGNED NOT NULL, ' . 'slug VARCHAR(255) DEFAULT \'\' NOT NULL, ' . 'type VARCHAR(4) DEFAULT \'page\' NOT NULL, ' . 'time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, ' . 'stats_cache TEXT NULL, ' . 'stats_cache_expires INT UNSIGNED, ' . 'enterprise_url VARCHAR(255) DEFAULT \'\' NOT NULL, ' . 'UNIQUE KEY id (id)) %s', $this->pagesTable, $this->charsetCollate);
    $this
      ->query($sql);
  }

  /**
   * Initiates Instapage plugin's DB structure for debug table.
   */
  private function initDebugTable() {
    $sql = sprintf('SHOW TABLES LIKE \'%s\'', $this->debugTable);
    $result = $this
      ->getRow($sql);
    if ($result) {
      return true;
    }
    $sql = sprintf('CREATE TABLE IF NOT EXISTS %s(' . 'id MEDIUMINT(9) UNSIGNED NOT NULL AUTO_INCREMENT, ' . 'time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, ' . 'text TEXT NULL, ' . 'caller VARCHAR(255) DEFAULT \'\' NOT NULL, ' . 'name VARCHAR(255) DEFAULT \'\' NOT NULL, ' . 'UNIQUE KEY id (id)) %s', $this->debugTable, $this->charsetCollate);
    $this
      ->query($sql);
  }

  /**
   * Check current DB structure version and updates it if necessary.
   */
  private function updateDB() {
    $db_version = intval(InstapageCmsPluginHelper::getMetadata('db_version', 0), 10);
    if ($db_version < 300000010) {
      InstapageCmsPluginHelper::writeDiagnostics($db_version, 'Current db version. Doing update.');
      $sql = 'SHOW COLUMNS FROM ' . $this->optionsTable . ' LIKE %s';
      $metadata_exists = $this
        ->getRow($sql, 'metadata');
      $sql = 'SHOW COLUMNS FROM ' . $this->pagesTable . ' LIKE %s';
      $enterprise_url_exists = $this
        ->getRow($sql, 'enterprise_url');
      if (!$metadata_exists) {
        $sql = sprintf('ALTER TABLE %s ADD metadata TEXT NULL', $this->optionsTable);
        $this
          ->query($sql);
      }
      if (!$enterprise_url_exists) {
        $sql = sprintf('ALTER TABLE %s ADD enterprise_url VARCHAR(255) DEFAULT \'\' NOT NULL', $this->pagesTable);
        $this
          ->query($sql);
      }
      $sql = sprintf('ALTER TABLE %s MODIFY api_keys TEXT NULL', $this->optionsTable);
      $this
        ->query($sql);
      $sql = sprintf('ALTER TABLE %s MODIFY config TEXT NULL', $this->optionsTable);
      $this
        ->query($sql);
      $sql = sprintf('ALTER TABLE %s MODIFY slug VARCHAR(255) DEFAULT \'\' NOT NULL', $this->pagesTable);
      $this
        ->query($sql);
      $sql = sprintf('ALTER TABLE %s MODIFY time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', $this->pagesTable);
      $this
        ->query($sql);
      $sql = sprintf('ALTER TABLE %s MODIFY time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL', $this->debugTable);
      $this
        ->query($sql);
      InstapageCmsPluginHelper::updateMetadata('db_version', 300000010);
    }
  }

  /**
   * Initiates Instapage plugin's DB tables.
   */
  public function removePluginTables() {
    $this
      ->query('DROP TABLE IF EXISTS ' . $this->optionsTable);
    $this
      ->query('DROP TABLE IF EXISTS ' . $this->pagesTable);
    $this
      ->query('DROP TABLE IF EXISTS ' . $this->debugTable);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
InstapageCmsPluginDBModel::$charsetCollate public property
InstapageCmsPluginDBModel::$dbModel private static property
InstapageCmsPluginDBModel::$debugTable public property
InstapageCmsPluginDBModel::$optionsTable public property
InstapageCmsPluginDBModel::$pagesTable public property
InstapageCmsPluginDBModel::$prefix public property
InstapageCmsPluginDBModel::getInstance public static function Gets the class instance.
InstapageCmsPluginDBModel::getResults public static function Executes the query and returns a list of results.
InstapageCmsPluginDBModel::getRow public function Executes the query and returns the first row.
InstapageCmsPluginDBModel::initDebugTable private function Initiates Instapage plugin's DB structure for debug table.
InstapageCmsPluginDBModel::initOptionsTable private function Initiates Instapage plugin's DB structure for options table.
InstapageCmsPluginDBModel::initPagesTable private function Initiates Instapage plugin's DB structure for pages table.
InstapageCmsPluginDBModel::initPluginTables public function Initiates Instapage plugin's DB structure.
InstapageCmsPluginDBModel::lastInsertId public function Gets the last ID of an insert query.
InstapageCmsPluginDBModel::query public function Executes a SQL query.
InstapageCmsPluginDBModel::removePluginTables public function Initiates Instapage plugin's DB tables.
InstapageCmsPluginDBModel::updateDB private function Check current DB structure version and updates it if necessary.
InstapageCmsPluginDBModel::__construct function Class constructor. Sets the properties based on current CMS settings.