diff --git a/public_html/versions/classes/versions.class.php b/public_html/versions/classes/versions.class.php new file mode 100644 index 0000000000000000000000000000000000000000..a8446fe32d3598cee9174bc297dd5ad3275686a6 --- /dev/null +++ b/public_html/versions/classes/versions.class.php @@ -0,0 +1,190 @@ +<?php + +/** + * version data handler for the deployment tool + * + * @author hahn + */ +class versions { + //put your code here + + public $sProject = false; + public $sPhase = false; + public $sPlace = false; + public $sVariable = false; + public $sData = false; + + /** + * filename of + * @var type + */ + private $_dbfile = false; + + private $_sCreate = ' + CREATE TABLE "versions" ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , + `time` DATETIME, + `project` TEXT, + `phase` TEXT, + `place` TEXT, + `host` TEXT, + `variable` TEXT, + `data` TEXT, + UNIQUE (project, phase, place, host, variable) ON CONFLICT REPLACE + );' + ; + + // ---------------------------------------------------------------------- + // CONSTRUCTOR + // ---------------------------------------------------------------------- + + + public function __construct(){ + + // cache dir is hardcoded to versions directory :-/ + $this->_dbfile = __DIR__ . '/../data/versioncache.db'; + + if (!file_exists($this->_dbfile)) { + $this->_createDb(); + if (!file_exists($this->_dbfile)) { + die("ERROR: unable to create sqlite database " . $this->_dbfile); + } + } + } + + // ---------------------------------------------------------------------- + // PRIVATE + // ---------------------------------------------------------------------- + + /** + * create sqlite database - called in constructor if the file does not exist + */ + private function _createDb() { + echo "try to create file $this->_dbfile ...<br>\n"; + return $this->_makeQuery($this->_sCreate); + } + + /** + * execute a sql statement + * @param string $sSql sql statement + * @return database object + */ + private function _makeQuery($sSql) { + // $this->_log(__FUNCTION__."($sSql)"); + echo "DEBUG: executing SQL<pre>$sSql</pre>"; + $db = new PDO("sqlite:" . $this->_dbfile); + $result = $db->query($sSql); + $db = NULL; + return $result; + } + + + // ---------------------------------------------------------------------- + // PUBLIC GETTER + // ---------------------------------------------------------------------- + + public function getVersion(){ + if (!$this->sProject || !$this->sPhase || !$this->sPlace ){ + die("ERROR: you need to set a project, phase and place. use the setProject() method to do so."); + } + $aReturn=array(); + $sSql="select * from `versions` + WHERE + project='" . $this->sProject . "' + AND phase='" . $this->sPhase . "' + AND place='" . $this->sPlace . "' + AND host='" . $this->sHost . "' + "; + foreach ($this->_makeQuery($sSql) as $row) { + for ($i = 0; $i <= count($row); $i++) { + unset($row[$i]); + } + $aReturn[] = $row; + } + return $aReturn; + } + + public function whereiam(){ + return array( + 'project'=>$this->sProject, + 'phase'=>$this->sPhase, + 'place'=>$this->sPlace, + 'host'=>$this->sHost, + ); + } + + + // ---------------------------------------------------------------------- + // PUBLIC SETTER + // ---------------------------------------------------------------------- + + public function setProject($sProject, $sPhase=false, $sPlace=false, $sHost=false){ + $this->sProject=$sProject; + $this->setPhase($sPhase, $sPlace, $sHost); + return $this->sProject; + } + + public function setPhase($sPhase, $sPlace=false, $sHost=false){ + if (!$this->sProject){ + die("ERROR: you need to set a project. Use the setProject() method to do so."); + return false; + } + $this->sPhase=$sPhase; + $this->setPlace($sPlace, $sHost); + return $this->sPhase; + } + + public function setPlace($sPlace, $sHost=false){ + if (!$this->sProject || !$this->sPhase){ + die("ERROR: you need to set a project and phase. Use the setProject() method to do so."); + return false; + } + if($sPlace!=='queue' && $sPlace!=='puppet' && $sPlace!=='installed'){ + die("ERROR: you set a wrong place [$sPlace]"); + } + $this->sPlace=$sPlace; + $this->setHost($sHost); + return $this->sPlace; + } + + public function setHost($sHost=false){ + if (!$this->sProject || !$this->sPhase || !$this->sPlace){ + die("ERROR: you need to set a project, phase and place. Use the setProject() method to do so."); + return false; + } + if($sHost && $this->sPlace!=='installed'){ + die("ERROR: a host can be set on place [installed] only."); + } + if(!$sHost && $this->sPlace==='installed'){ + die("ERROR: on place [installed] a host MUST be set."); + } + $this->sHost=$sHost; + return $this->sHost; + } + + /** + * update a version + * @return boolean + */ + public function updateVersion($sVersioninfos){ + if (!$this->sProject || !$this->sPhase || !$this->sPlace ){ + die("ERROR: you need to set a project, phase and place. use the setProject() method to do so."); + } + $sSql=" + INSERT into `versions` + (`time`, `project`, `phase`, `place`, `host`, `variable`, `data` ) + VALUES + ( + '" . date("Y-m-d H:i:s") . "', + '" . $this->sProject . "', + '" . $this->sPhase . "', + '" . $this->sPlace . "', + '" . $this->sHost . "', + 'version', + '" . $sVersioninfos . "' + ); + "; + return $this->_makeQuery($sSql); + } + +} diff --git a/public_html/versions/index.php b/public_html/versions/index.php new file mode 100644 index 0000000000000000000000000000000000000000..22efa83c32469b52660c573693bb13c0eb6d791e --- /dev/null +++ b/public_html/versions/index.php @@ -0,0 +1,26 @@ +<?php +echo '<pre>'.print_r($_GET, 1).'</pre>'; + +require './classes/versions.class.php'; + +$oVersion=new versions(); + +$sProject='ci'; +$sPhase='preview'; +$sPlace='installed'; +$sHost='preview02.ci'; + +$oVersion->setProject($sProject, $sPhase, $sPlace, $sHost); +print_r($oVersion->whereiam()); + +/* +if ($oVersion->updateVersion('{ "revision": "000" }')){ + print_r($oVersion->getVersion()); +} else { + echo "insert failed. :-("; +} +*/ + +print_r($oVersion->getVersion()); + +// $oVersion-> \ No newline at end of file