tangra logo
   
[ class tree: tangra_lib ] [ index: tangra_lib ] [ all elements ]
 

Source for file tangra_module_release_dbc.class.php

Documentation is available at tangra_module_release_dbc.class.php

  1. <?php
  2.  
  3. // $Id$
  4.  
  5. /**
  6.  * Contains class Tangra_Module_Release_DBC
  7.  *
  8.  * @package  tangra_lib
  9.  * @subpackage  modules_manager
  10.  */
  11.  
  12.  
  13. /**
  14.  *
  15.  */
  16. require_once(TANGRA_MAIN_DIR.'interfaces/i_db_storable.class.php');
  17.  
  18. /**
  19.  *
  20.  */
  21. require_once('tangra_module_release.class.php');
  22.  
  23.  
  24. /**
  25.  * Tangra module release DBC
  26.  *
  27.  * @package  tangra_lib
  28.  * @subpackage  modules_manager
  29.  */
  30.     /**
  31.      * Saves the record
  32.      *
  33.      * @param DB_Connection $dbc 
  34.      * @return integer On success returns module ID, on failure - false
  35.      */
  36.     public function save(DB_Connection $dbc{
  37.         $ret false;
  38.  
  39.         if ($this->get_id()) {
  40.             $ret $this->update($dbc);
  41.         else {
  42.             $ret $this->insert($dbc);
  43.             $this->set_id($ret);
  44.  
  45.         }
  46.  
  47.         return $ret;
  48.     }
  49.  
  50.  
  51.     /**
  52.      * Loads record by id
  53.      *
  54.      * @param DB_Connection $dbc 
  55.      * @param integer $id 
  56.      * @return integer On success returns module ID, on failure - false
  57.      */
  58.     public function load_by_id(DB_Connection $dbc$id{
  59.         $ret false;
  60.  
  61.  
  62.         $sql "select module, ".
  63.                         "version, ".
  64.                         "description, ".
  65.                         "maintainer, ".
  66.                         "url, ".
  67.                         "requires_tangra_lib_version, ".
  68.                         "requires_php_version, ".
  69.                         "online, ".
  70.                         "release_date, ".
  71.                         "changes ".
  72.                     "from tmod_releases ".
  73.                     "where id = $id";
  74.         $rez $dbc->execute($sql);
  75.  
  76.         if (!$rez->is_eof()) {
  77.             $rez_obj $rez->fetch_object();
  78.  
  79.             $this->set_id($id);
  80.             $this->set_module($rez_obj->MODULE);
  81.             $this->set_version(stripslashes($rez_obj->VERSION));
  82.             $this->set_description(stripslashes($rez_obj->DESCRIPTION));
  83.             $this->set_maintainer(stripslashes($rez_obj->MAINTAINER));
  84.             $this->set_url(stripslashes($rez_obj->URL));
  85.             $this->set_requires_tangra_lib_version(stripslashes($rez_obj->REQUIRES_TANGRA_LIB_VERSION));
  86.             $this->set_requires_php_version(stripslashes($rez_obj->REQUIRES_PHP_VERSION));
  87.             $this->set_online($rez_obj->ONLINE);
  88.             $this->set_release_date($rez_obj->RELEASE_DATE);
  89.             $this->set_changes(stripslashes($rez_obj->CHANGES));
  90.  
  91.             $ret $id;
  92.         }
  93.  
  94.         return $ret;
  95.     }
  96.  
  97.  
  98.     /**
  99.      * Inserts record
  100.      *
  101.      * @param DB_Connection $dbc 
  102.      * @return integer On success returns module ID, on failure - false
  103.      * @internal
  104.      */
  105.     protected function insert(DB_Connection $dbc{
  106.         $ret false;
  107.  
  108.         $id $dbc->generate_id('tmod_releases_seq');
  109.  
  110.         $module $this->get_module();
  111.         $version $this->get_version();
  112.         $description addslashes($this->get_description());
  113.         $maintainer addslashes($this->get_maintainer());
  114.         $url addslashes($this->get_url());
  115.         $requires_tangra_lib_version addslashes($this->get_requires_tangra_lib_version());
  116.         $requires_php_version addslashes($this->get_requires_php_version());
  117.         $online $this->get_online(0;
  118.         $release_date $this->get_release_date();
  119.         $changes addslashes($this->get_changes());
  120.  
  121.         if ($id{
  122.             $sql "insert into tmod_releases (id, ".
  123.                                             "module, ".
  124.                                             "version, ".
  125.                                             "description, ".
  126.                                             "maintainer, ".
  127.                                             "url, ".
  128.                                             "requires_tangra_lib_version, ".
  129.                                             "requires_php_version, ".
  130.                                             "online, ".
  131.                                             "release_date, ".
  132.                                             "changes ".
  133.                                           ") ".
  134.                                 "values ".
  135.                                           "($id,".
  136.                                           "$module".
  137.                                           "'$version', ".
  138.                                           "'$description', ".
  139.                                           "'$maintainer', ".
  140.                                           "'$url', ".
  141.                                           "'$requires_tangra_lib_version', ".
  142.                                           "'$requires_php_version', ".
  143.                                           "'$online', ".
  144.                                           "'$release_date', ".
  145.                                           "'$changes'".
  146.                                           ")";
  147.             $dbc->execute($sql);
  148.             $ret $id;
  149.         else {
  150.             throw new TE_Exception('ID not generated - tmod_releases_seq');
  151.         }
  152.  
  153.         return $ret;
  154.     }
  155.  
  156.  
  157.     /**
  158.      * Updates record
  159.      *
  160.      * @param DB_Connection $dbc 
  161.      * @return integer On success returns module ID, on failure - false
  162.      * @internal
  163.      */
  164.     protected function update(DB_Connection $dbc{
  165.         $id $this->get_id();
  166.  
  167.         $module $this->get_module();
  168.         $version $this->get_version();
  169.         $description addslashes($this->get_description());
  170.         $maintainer addslashes($this->get_maintainer());
  171.         $url addslashes($this->get_url());
  172.         $requires_tangra_lib_version addslashes($this->get_requires_tangra_lib_version());
  173.         $requires_php_version addslashes($this->get_requires_php_version());
  174.         $online $this->get_online(0;
  175.         $release_date $this->get_release_date();
  176.         $changes addslashes($this->get_changes());
  177.  
  178.         $sql "update tmod_releases set ".
  179.                                   "version = '$version', ".
  180.                                   "description = '$description', ".
  181.                                   "maintainer = '$maintainer', ".
  182.                                   "url = '$url', ".
  183.                                   "requires_tangra_lib_version = '$requires_tangra_lib_version', ".
  184.                                   "requires_php_version = '$requires_php_version', ".
  185.                                   "online = $online".
  186.                                   "release_date = '$release_date', ".
  187.                                   "changes = '$changes".
  188.                     "where id = ".$id;
  189.  
  190.         $dbc->execute($sql);
  191.         $ret $id;
  192.  
  193.  
  194.         return $ret;
  195.     }
  196.  
  197.  
  198.     /**
  199.      * Gets SQL for grid
  200.      *
  201.      * @return string SQL statement
  202.      */
  203.     public static function get_sql_for_grid({
  204.         $sql "select id, version from tmod_releases order by version desc";
  205.  
  206.         return $sql;
  207.     }
  208.  
  209.  
  210.     /**
  211.      * Gets count SQL for grid
  212.      *
  213.      * @return string SQL statement
  214.      */
  215.     public static function get_sql_count_for_grid({
  216.         $sql "select count(id) as total_rows from tmod_releases";
  217.  
  218.         return $sql;
  219.     }
  220.  
  221.  
  222.     /**
  223.      * Checks if it is unique version
  224.      *
  225.      * @param DB_Connection $dbc 
  226.      * @param string $version 
  227.      * @param integer $module_id Module ID
  228.      * @param integer $id ID of current release
  229.      * @return boolean 
  230.      */
  231.     public static function is_unique_version(DB_Connection $dbc$version$module_id$id 0{
  232.         tangra_if_not_int_throw_e($id);
  233.         tangra_if_not_int_throw_e($module_id);
  234.         $version addslashes($version);
  235.  
  236.         $sql "select id from tmod_releases where module = $module_id and version = '$version' and id <> $id";
  237.         $rez $dbc->execute($sql);
  238.  
  239.         return $rez->is_eod();
  240.     }
  241.  
  242.  
  243.     /**
  244.      * Loads all releases for module
  245.      *
  246.      * @param DB_Connection $dbc 
  247.      * @param integer $module Module ID
  248.      * @return array Array of Tangra_Module_Release_DBC objects
  249.      */
  250.     public static function load_all_for_module(DB_Connection $dbc$module{
  251.         tangra_if_not_int_throw_e($module);
  252.         $sql "select id from tmod_releases where module = $module order by id desc";
  253.  
  254.         $ret array();
  255.  
  256.         $rez $dbc->execute($sql);
  257.         while ($rez_obj $rez->fetch_object()) {
  258.             $tmp new Tangra_Module_Release_DBC();
  259.             $tmp->load_by_id($dbc$rez_obj->ID);
  260.             $ret[clone $tmp;
  261.         }
  262.  
  263.         return $ret;
  264.     }
  265.  
  266.  
  267.     /**
  268.      * Loads all online releases for module
  269.      *
  270.      * @param DB_Connection $dbc 
  271.      * @param integer $module Module ID
  272.      * @return array Array of Tangra_Module_Release_DBC objects
  273.      */
  274.     public static function load_all_online_for_module(DB_Connection $dbc$module{
  275.         tangra_if_not_int_throw_e($module);
  276.         $sql "select id from tmod_releases where module = $module and online = 1 order by id desc";
  277.  
  278.         $ret array();
  279.  
  280.         $rez $dbc->execute($sql);
  281.         while ($rez_obj $rez->fetch_object()) {
  282.             $tmp new Tangra_Module_Release_DBC();
  283.             $tmp->load_by_id($dbc$rez_obj->ID);
  284.             $ret[clone $tmp;
  285.         }
  286.  
  287.         return $ret;
  288.     }
  289.  
  290.  
  291.     /**
  292.      * Loads previos online release
  293.      *
  294.      * @param DB_Connection $dbc 
  295.      * @param integer $current_release_id Current release ID
  296.      * @param integer $module_id Module ID
  297.      * @return Tangra_Module_Release_DBC On success return object of type Tangra_Module_Release_DBC, on failure - false
  298.      */
  299.     public static function load_previous_online_release(DB_Connection $dbc$current_release_id$module_id{
  300.         tangra_if_not_int_throw_e($current_release_id);
  301.         tangra_if_not_int_throw_e($module_id);
  302.         $ret false;
  303.  
  304.         $sql "select id from tmod_releases where module = $module_id and id < $current_release_id order by id desc";
  305.         $rez $dbc->execute($sql);
  306.         if (!$rez->is_eod()) {
  307.             $rez_obj $rez->fetch_object();
  308.             $ret new Tangra_Module_Release_DBC();
  309.             $ret->load_by_id($dbc$rez_obj->ID);
  310.         }
  311.  
  312.         return $ret;
  313.     }
  314.  
  315.  
  316.     /**
  317.      * Deletes record
  318.      *
  319.      * @param DB_Connection $dbc 
  320.      * @param integer $release_id ID of the release record
  321.      */
  322.     public static function delete(DB_Connection $dbc$release_id{
  323.         tangra_if_not_int_throw_e($release_id);
  324.  
  325.         $sql "delete from tmod_releases where id = $release_id";
  326.         $dbc->execute($sql);
  327.     }
  328.  
  329. // TODO - following to be removed (?)
  330. //    public static function load_last_online_release(DB_Connection $dbc, $module_id) {
  331. //        $ret = false;
  332. //
  333. //        $sql = "select id from tmod_releases where module = $module_id order by id desc";
  334. //        $rez = $dbc->execute($sql);
  335. //
  336. //        if (!$rez->is_eod()) {
  337. //            $rez_obj = $rez->fetch_object();
  338. //            $ret = new Tangra_Module_Release_DBC();
  339. //            $ret->load_by_id($dbc, $rez_obj->ID);
  340. //        }
  341. //
  342. //        return $ret;
  343. //    }
  344.  
  345.  
  346.     /**
  347.      * Loads highest online release for module
  348.      *
  349.      * @param DB_Connection $dbc 
  350.      * @param integer $module_id Module ID
  351.      * @return Tangra_Module_Release_DBC On success return object of type Tangra_Module_Release_DBC, on failure - false
  352.      */
  353.     public static function load_highest_online_release(DB_Connection $dbc$module_id{
  354.         $ret false;
  355.  
  356.         $sql "select id, version from tmod_releases where module = $module_id order by id desc";
  357.         $rez $dbc->execute($sql);
  358.  
  359.         $versions array();
  360.         while($rez_obj $rez->fetch_object()) {
  361.             $versions[$rez_obj->VERSION$rez_obj->ID;
  362.         }
  363.  
  364.         if ($versions{
  365.             if (count($versions1{
  366.                 uasort($versions'version_compare');
  367.                 $sorted_desc array_reverse($versions);
  368.  
  369.                 reset($sorted_desc);
  370.                 $ret new Tangra_Module_Release_DBC();
  371.                 $ret->load_by_id($dbccurrent($sorted_desc));
  372.             else {
  373.                 $ret new Tangra_Module_Release_DBC();
  374.                 $ret->load_by_id($dbccurrent($versions));
  375.             }
  376.         }
  377.  
  378.         return $ret;
  379.     }
  380.  
  381.  
  382.     /**
  383.      * Loads release by module ID and version
  384.      *
  385.      * @param DB_Connection $dbc 
  386.      * @param integer $module_id Module ID
  387.      * @param string $version Version literal
  388.      * @return Tangra_Module_Release_DBC On success returns object of type Tangra_Module_Release_DBC, on failure - false
  389.      */
  390.     public function load_by_module_and_version(DB_Connection $dbc$module_id$version{
  391.         tangra_if_not_int_throw_e($module_id);
  392.         $version addslashes($version);
  393.  
  394.         $ret false;
  395.  
  396.         $sql "select id from tmod_releases where module = $module_id and version = '$version'";
  397.         $rez $dbc->execute($sql);
  398.  
  399.         if (!$rez->is_eod()) {
  400.             $rez_obj $rez->fetch_object();
  401.  
  402.             $ret $this->load_by_id($dbc$rez_obj->ID);
  403.         }
  404.  
  405.         return $ret;
  406.     }
  407.  
  408.  
  409.     /**
  410.      * Loads release by module HID and version
  411.      *
  412.      * @param DB_Connection $dbc 
  413.      * @param string $module_hid Module HID
  414.      * @param string $version Version literal
  415.      * @return Tangra_Module_Release_DBC On success returns object of type Tangra_Module_Release_DBC, on failure - false
  416.      */
  417.     public function load_by_module_hid_and_version(DB_Connection $dbc$module_hid$version{
  418.         $module_hid addslashes($module_hid);
  419.         $version addslashes($version);
  420.  
  421.         $ret false;
  422.  
  423.         $sql "select id from tmods where hid = '$module_hid'";
  424.         $rez $dbc->execute($sql);
  425.         if (!$rez->is_eod()) {
  426.             $rez_obj $rez->fetch_object();
  427.  
  428.             $ret $this->load_by_module_and_version($dbc$rez_obj->ID$version);
  429.         }
  430.  
  431.         return $ret;
  432.     }
  433.  
  434.  
  435.     /**
  436.      * Loads hids for all releases
  437.      *
  438.      * @param DB_Connection $dbc 
  439.      * @return array 
  440.      */
  441.     public static function load_all_hids_as_array(DB_Connection $dbc{
  442.         $sql "select tmods.hid as hid, tmod_releases.version as version from tmods, tmod_releases where tmod_releases.module = tmods.id";
  443.         $rez $dbc->execute($sql);
  444.         $ret array();
  445.         while ($rez_obj $rez->fetch_object()) {
  446.             $ret[$rez_obj->HID.'-'.$rez_obj->VERSIONfalse;
  447.         }
  448.  
  449.         return $ret;
  450.     }
  451.  
  452.  
  453.     public static function load_arr_latest_online(DB_Connection $dbc$count{
  454.         $sql "select tmod_releases.id, tmods.hid from tmod_releases, tmods where tmod_releases.online = 1 and tmod_releases.module = tmods.id order by id desc";
  455.         $ret array();
  456.  
  457.         $rez $dbc->execute($sql);
  458.         $c 0;
  459.         while (($rez_obj $rez->fetch_object()) && $c $count{
  460.             $tmp new Tangra_Module_Release_DBC();
  461.             $tmp->load_by_id($dbc$rez_obj->ID);
  462.             $ret[$c]['rel'clone $tmp;
  463.             $ret[$c]['mod'$rez_obj->HID;
  464.             $c++;
  465.         }
  466.  
  467.         return $ret;
  468.     }
  469. }