diff --git a/lib/classes/task/period/outofdate.class.php b/lib/classes/task/period/outofdate.class.php index 8f5b5e61ca..c3127763cf 100644 --- a/lib/classes/task/period/outofdate.class.php +++ b/lib/classes/task/period/outofdate.class.php @@ -2,7 +2,7 @@ /* * This file is part of Phraseanet * - * (c) 2005-2012 Alchemy + * (c) 2005-2010 Alchemy * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -17,24 +17,24 @@ class task_period_outofdate extends task_abstract { - // ==================================================================== - // getName : must return the name for this kind of task - // MANDATORY - // ==================================================================== - public function getName() - { - return(_('Documents perimes')); - } + // ==================================================================== + // getName : must return the name for this kind of task + // MANDATORY + // ==================================================================== + public function getName() + { + return(_('Documents perimes')); + } - // ==================================================================== - // graphic2xml : must return the xml (text) version of the form - // ==================================================================== - public function graphic2xml($oldxml) - { + // ==================================================================== + // graphic2xml : must return the xml (text) version of the form + // ==================================================================== + public function graphic2xml($oldxml) + { // global $parm; - $request = http_request::getInstance(); + $request = http_request::getInstance(); - $parm2 = $request->get_parms( + $parm2 = $request->get_parms( "sbas_id" , "period" , 'field1' @@ -49,820 +49,892 @@ class task_period_outofdate extends task_abstract , 'coll1' , 'status2' , 'coll2' - ); - $dom = new DOMDocument(); - $dom->preserveWhiteSpace = false; - $dom->formatOutput = true; - if ($dom->loadXML($oldxml)) { - $xmlchanged = false; - // foreach($parm2 as $pname=>$pvalue) - foreach (array( - "str:sbas_id", - "str:period", - 'str:field1', - 'str:fieldDs1', - 'str:fieldDv1', - 'str:field2', - 'str:fieldDs2', - 'str:fieldDv2', - 'str:status0', - 'str:coll0', - 'str:status1', - 'str:coll1', - 'str:status2', - 'str:coll2' - ) as $pname) { - $ptype = substr($pname, 0, 3); - $pname = substr($pname, 4); - $pvalue = $parm2[$pname]; - if (($ns = $dom->getElementsByTagName($pname)->item(0))) { - // le champ existait dans le xml, on supprime son ancienne valeur (tout le contenu) - while (($n = $ns->firstChild)) - $ns->removeChild($n); - } else { - // le champ n'existait pas dans le xml, on le cree - $dom->documentElement->appendChild($dom->createTextNode("\t")); - $ns = $dom->documentElement->appendChild($dom->createElement($pname)); - $dom->documentElement->appendChild($dom->createTextNode("\n")); - } - // on fixe sa valeur - switch ($ptype) { - case "str": - $ns->appendChild($dom->createTextNode($pvalue)); - break; - case "boo": - $ns->appendChild($dom->createTextNode($pvalue ? '1' : '0')); - break; - } - $xmlchanged = true; - } + ); + $dom = new DOMDocument(); + $dom->preserveWhiteSpace = false; + $dom->formatOutput = true; + if($dom->loadXML($oldxml)) + { + $xmlchanged = false; + // foreach($parm2 as $pname=>$pvalue) + foreach(array( + "str:sbas_id", + "str:period", + 'str:field1', + 'str:fieldDs1', + 'str:fieldDv1', + 'str:field2', + 'str:fieldDs2', + 'str:fieldDv2', + 'str:status0', + 'str:coll0', + 'str:status1', + 'str:coll1', + 'str:status2', + 'str:coll2' + ) as $pname) + { + $ptype = substr($pname, 0, 3); + $pname = substr($pname, 4); + $pvalue = $parm2[$pname]; + if(($ns = $dom->getElementsByTagName($pname)->item(0))) + { + // le champ existait dans le xml, on supprime son ancienne valeur (tout le contenu) + while(($n = $ns->firstChild)) + $ns->removeChild($n); } - - return($dom->saveXML()); + else + { + // le champ n'existait pas dans le xml, on le cree + $dom->documentElement->appendChild($dom->createTextNode("\t")); + $ns = $dom->documentElement->appendChild($dom->createElement($pname)); + $dom->documentElement->appendChild($dom->createTextNode("\n")); + } + // on fixe sa valeur + switch($ptype) + { + case "str": + $ns->appendChild($dom->createTextNode($pvalue)); + break; + case "boo": + $ns->appendChild($dom->createTextNode($pvalue ? '1' : '0')); + break; + } + $xmlchanged = true; + } } - // ==================================================================== - // xml2graphic : must fill the graphic form (using js) from xml - // ==================================================================== - public function xml2graphic($xml, $form) + return($dom->saveXML()); + } + + // ==================================================================== + // xml2graphic : must fill the graphic form (using js) from xml + // ==================================================================== + public function xml2graphic($xml, $form) + { + if(($sxml = simplexml_load_string($xml))) // in fact XML IS always valid here... { - if (($sxml = simplexml_load_string($xml))) { // in fact XML IS always valid here... - // ... but we could check for safe values - if ((int) ($sxml->period) < 10) - $sxml->period = 10; - elseif ((int) ($sxml->period) > 1440) // 1 jour - $sxml->period = 1440; + // ... but we could check for safe values + if((int) ($sxml->period) < 10) + $sxml->period = 10; + elseif((int) ($sxml->period) > 1440) // 1 jour + $sxml->period = 1440; - if ((string) ($sxml->delay) == '') - $sxml->delay = 0; - ?> - - - - - + + + + + var html = ""; + for(i in data.collections) + html += "\n"; + for(fld=0; fld<=2; fld++) + $("#coll"+fld).html(html); + + var html = ""; + for(i in data.status_bits) + html += "\n"; + for(fld=0; fld<=2; fld++) + $("#status"+fld).html(html); + } + }); + + return; + } + + + + limits[fieldname].max) + v = limits[fieldname].max; + textinput.value = v; + } + setDirty(); + } + + function chgxmlck(checkinput, fieldname) + { + setDirty(); + } + + function chgxmlpopup(popupinput, fieldname) + { + setDirty(); + } + + function chgsbas(sbaspopup) + { + loadsbas(sbaspopup.value); + setDirty(); + } + + function loadsbas(sbas) + { + $.ajax({ url:"/admin/taskfacility.php" + , data: {taskid:get_task_id() ?>, bid:sbas, type:"json", cls:"outofdate"} + , dataType:'json' + , type:"POST" + , async:false + , success:function(data) + { + $(".popfield").empty().append(''); + for(i in data.date_fields) + $(".popfield").append(''); + + $(".popcoll").empty().append(''); + for(i in data.collections) + $(".popcoll").append(''); + + $(".popstatus").empty().append(''); + for(i in data.status_bits) + { + $(".popstatus").append(''); + $(".popstatus").append(''); + } + } + }); + } + */ + ?> + + + get_session(); + $user = User_Adapter::getInstance($session->get_usr_id(), $appbox); + ob_start(); + + $sbas_list = $user->ACL()->get_granted_sbas(array('bas_manage')); + ?> +
+  :  + + - +   +
+
+ +  :  + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
  - + +   + +
+ +   +
+   + +
+ +   +
+   +
+  : + + + + + + +
+  :
+
+ + + + + +
+
+
+
+
cmd
+
+  :  - -
-
+ return $out; + } - - - - - - - - - - - - - - - - - - - - - -
-   - -   - - -
- -   -
-   - - -
- -   -
-   -
-  : - - - - - - -
-  :
-
- - - - - -
- -
-
-
cmd
-
- array("set"=>false, "values"=>array(), "usage"=>" : usage du truc") + ); - return $out; - } - // ==================================================================== - // $argt : command line args specifics to this task (optional) - // ==================================================================== - public $argt = array( - // "--truc" => array("set"=>false, "values"=>array(), "usage"=>" : usage du truc") - ); + // ====================================================================================================== + // ===== help() : text displayed if --help (optional) + // ====================================================================================================== + function help() + { + return(_("task::outofdate:deplacement de docs suivant valeurs de champs 'date'")); + } - // ====================================================================================================== - // ===== help() : text displayed if --help (optional) - // ====================================================================================================== - function help() + // ====================================================================================================== + // ===== run() : le code d'execution de la tache proprement dite + // ====================================================================================================== + + protected $sxTaskSettings = null; // les settings de la tache en simplexml + private $connbas = null; // cnx a la base + private $msg = ""; + private $sbas_id; + + protected function run2() + { + $ret = ''; + $conn = connection::getPDOConnection(); + + $this->sxTaskSettings = simplexml_load_string($this->settings); + + $this->sbas_id = (int) ($this->sxTaskSettings->sbas_id); + + $this->connbas = connection::getPDOConnection($this->sbas_id); + + $this->running = true; + $this->tmask = array(); + $this->tmaskgrp = array(); + $this->period = 60; + + + // ici la tache tourne tant qu'elle est active + $last_exec = 0; + $loop = 0; + while($this->running) { - return(_("task::outofdate:deplacement de docs suivant valeurs de champs 'date'")); - } - // ====================================================================================================== - // ===== run() : le code d'execution de la tache proprement dite - // ====================================================================================================== + if(!$conn->ping()) + { + $this->log(("Warning : abox connection lost, restarting in 10 min.")); + for($i=0; $i<60 * 10; $i++) + sleep(1); + $this->running = false; - protected $sxTaskSettings = null; // les settings de la tache en simplexml - private $connbas = null; // cnx a la base - private $msg = ""; - private $sbas_id; + return(self::STATUS_TORESTART); + } - protected function run2() - { - $ret = ''; - $conn = connection::getPDOConnection(); + try + { + $connbas = connection::getPDOConnection($this->sbas_id); + if(!$connbas->ping()) + throw new Exception('Mysql has gone away'); + } + catch(Exception $e) + { + $this->log(("dbox connection lost, restarting in 10 min.")); + for($i=0; $i<60 * 10; $i++) + sleep(1); + $this->running = false; - $this->sxTaskSettings = simplexml_load_string($this->settings); + return(self::STATUS_TORESTART); + } - $this->sbas_id = (int) ($this->sxTaskSettings->sbas_id); + $this->set_last_exec_time(); - $this->connbas = connection::getPDOConnection($this->sbas_id); + $databox = databox::get_instance($this->sbas_id); - $this->running = true; - $this->tmask = array(); - $this->tmaskgrp = array(); - $this->period = 60; + $sql = "SELECT * FROM task2 WHERE task_id = :task_id"; + $stmt = $conn->prepare($sql); + $stmt->execute(array(':task_id' => $this->get_task_id())); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + if($row) + { + if($row['status'] == 'tostop') + { + $ret = self::STATUS_STOPPED; + ; + $this->running = false; + } + else + { + if(($this->sxTaskSettings = simplexml_load_string($row['settings']))) + { + $period = (int) ($this->sxTaskSettings->period); + if($period <= 0 || $period >= 24 * 60) + $period = 60; + } + else + { + $period = 60; + } + $this->connbas = connection::getPDOConnection($this->sbas_id); - // ici la tache tourne tant qu'elle est active - $last_exec = 0; - $loop = 0; - while ($this->running) { - if ( ! $conn->ping()) { - $this->log(("Warning : abox connection lost, restarting in 10 min.")); - for ($i = 0; $i < 60 * 10; $i ++ ) - sleep(1); + $duration = time(); + + $r = $this->doRecords(); + + switch($r) + { + case 'WAIT': + $ret = self::STATUS_STOPPED; + $this->running = false; + break; + case 'BAD': + $ret = self::STATUS_STOPPED; + $this->running = false; + break; + case 'NORECSTODO': + $duration = time() - $duration; + if($duration < $period) + { + sleep($period - $duration); + $conn = connection::getPDOConnection(); + } + break; + case 'MAXRECSDONE': + case 'MAXMEMORY': + case 'MAXLOOP': + if($row['status'] == self::STATUS_STARTED && $this->get_runner() !== self::RUNNER_MANUAL) + { + $ret = self::STATUS_TORESTART; $this->running = false; - - return(self::RETURNSTATUS_TORESTART); - } - - try { - $connbas = connection::getPDOConnection($this->sbas_id); - if ( ! $connbas->ping()) - throw new Exception('Mysql has gone away'); - } catch (Exception $e) { - $this->log(("dbox connection lost, restarting in 10 min.")); - for ($i = 0; $i < 60 * 10; $i ++ ) - sleep(1); + } + break; + default: + if($row['status'] == self::STATUS_STARTED) + { + $ret = self::STATUS_STOPPED; $this->running = false; - - return(self::RETURNSTATUS_TORESTART); - } - - $this->set_last_exec_time(); - - $databox = databox::get_instance($this->sbas_id); - - $sql = "SELECT * FROM task2 WHERE task_id = :task_id"; - $stmt = $conn->prepare($sql); - $stmt->execute(array(':task_id' => $this->get_task_id())); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $stmt->closeCursor(); - - if ($row) { - if ($row['status'] == 'tostop') { - $ret = self::RETURNSTATUS_STOPPED; - ; - $this->running = false; - } else { - if (($this->sxTaskSettings = simplexml_load_string($row['settings']))) { - $period = (int) ($this->sxTaskSettings->period); - if ($period <= 0 || $period >= 24 * 60) - $period = 60; - } - else { - $period = 60; - } - $this->connbas = connection::getPDOConnection($this->sbas_id); - - $duration = time(); - - $r = $this->doRecords(); - - switch ($r) { - case 'WAIT': - $ret = self::RETURNSTATUS_STOPPED; - $this->running = false; - break; - case 'BAD': - $ret = self::RETURNSTATUS_STOPPED; - $this->running = false; - break; - case 'NORECSTODO': - $duration = time() - $duration; - if ($duration < $period) { - sleep($period - $duration); - $conn = connection::getPDOConnection(); - } - break; - case 'MAXRECSDONE': - case 'MAXMEMORY': - case 'MAXLOOP': - if ($row['status'] == self::STATUS_STARTED && $this->get_runner() !== self::RUNNER_MANUAL) { - $ret = self::RETURNSTATUS_TORESTART; - $this->running = false; - } - break; - default: - if ($row['status'] == self::STATUS_STARTED) { - $ret = self::RETURNSTATUS_STOPPED; - $this->running = false; - } - break; - } - } - } else { - $ret = 'stopped'; - $this->running = false; - } - $loop ++; + } + break; + } } + } + else + { + $ret = self::STATUS_STOPPED; + $this->running = false; + } + $loop++; + } + } - $this->return_value = $ret; + function doRecords() + { + $ndone = 0; + $ret = 'NORECSTODO'; - return($ret); + $tsql = $this->calcSQL($this->sxTaskSettings); + + $nchanged = 0; + foreach($tsql as $xsql) + { + try + { + $stmt = $this->connbas->prepare($xsql['sql']); + if($stmt->execute($xsql['params'])) + { + $n = $stmt->rowCount(); + $stmt->closeCursor(); + + $nchanged += $n; + if($n > 0) + $this->log(sprintf("SQL='%s' ; parms=%s - %s changes", $xsql['sql'], var_export($xsql['params']), $n)); + } + else + { + $this->log(sprintf("ERROR SQL='%s' ; parms=%s", $xsql['sql'], var_export($xsql['params'], true))); + } + } + catch (ErrorException $e) + { + $this->log(sprintf("ERROR SQL='%s' ; parms=%s", $xsql['sql'], var_export($xsql['params'], true))); + } } - function doRecords() + $ret = ($nchanged > 0 ? $nchanged : 'NORECSTODO'); + + return($ret); + } + + + private function calcSQL($sxTaskSettings) + { + $ret = array(); + + $this->sxTaskSettings = $sxTaskSettings; + + $date1 = $date2 = NULL; + $field1 = $field2 = ''; + + // test : DATE 1 + if(($field1 = trim($this->sxTaskSettings->field1)) != '') { - $ndone = 0; - $ret = 'NORECSTODO'; - - $tsql = $this->calcSQL($this->sxTaskSettings); - - $nchanged = 0; - foreach ($tsql as $xsql) { - try { - $stmt = $this->connbas->prepare($xsql['sql']); - if ($stmt->execute($xsql['params'])) { - $n = $stmt->rowCount(); - $stmt->closeCursor(); - - $nchanged += $n; - if ($n > 0) - $this->log(sprintf("SQL='%s' ; parms=%s - %s changes", $xsql['sql'], var_export($xsql['params']), $n)); - } - else { - $this->log(sprintf("ERROR SQL='%s' ; parms=%s", $xsql['sql'], var_export($xsql['params'], true))); - } - } catch (ErrorException $e) { - $this->log(sprintf("ERROR SQL='%s' ; parms=%s", $xsql['sql'], var_export($xsql['params'], true))); - } - } - - $ret = ($nchanged > 0 ? $nchanged : 'NORECSTODO'); - - return($ret); + $date1 = time(); + if(($delta = (int) ($this->sxTaskSettings->fieldDv1)) > 0) + { + if($this->sxTaskSettings->fieldDs1 == '-') + $date1 += 86400 * $delta; + else + $date1 -= 86400 * $delta; + } + $date1 = date("YmdHis", $date1); + } + // test : DATE 2 + if(($field2 = trim($this->sxTaskSettings->field2)) != '') + { + $date2 = time(); + if(($delta = (int) ($this->sxTaskSettings->fieldDv2)) > 0) + { + if($this->sxTaskSettings->fieldDs2 == '-') + $date2 += 86400 * $delta; + else + $date2 -= 86400 * $delta; + } + $date2 = date("YmdHis", $date2); } - private function calcSQL($sxTaskSettings) + + $sqlset = $params = $tmp_params = array(); + for($i = 0; $i <= 2; $i++) { - $ret = array(); - - $this->sxTaskSettings = $sxTaskSettings; - - $date1 = $date2 = NULL; - $field1 = $field2 = ''; - - // test : DATE 1 - if (($field1 = trim($this->sxTaskSettings->field1)) != '') { - $date1 = time(); - if (($delta = (int) ($this->sxTaskSettings->fieldDv1)) > 0) { - if ($this->sxTaskSettings->fieldDs1 == '-') - $date1 += 86400 * $delta; - else - $date1 -= 86400 * $delta; - } - $date1 = date("YmdHis", $date1); + $sqlwhere[$i] = ''; + $sqlset[$i] = ''; + $x = 'status' . $i; + @list($tostat, $statval) = explode('_', (string) ($this->sxTaskSettings->{$x})); + if($tostat >= 4 && $tostat <= 63) + { + if($statval == '0') + { + $sqlset[$i] = 'status=status & ~(1<<' . $tostat . ')'; + $sqlwhere[$i] .= '(status & (1<<' . $tostat . ') = 0)'; } - // test : DATE 2 - if (($field2 = trim($this->sxTaskSettings->field2)) != '') { - $date2 = time(); - if (($delta = (int) ($this->sxTaskSettings->fieldDv2)) > 0) { - if ($this->sxTaskSettings->fieldDs2 == '-') - $date2 += 86400 * $delta; - else - $date2 -= 86400 * $delta; - } - $date2 = date("YmdHis", $date2); + elseif($statval == '1') + { + $sqlset[$i] = 'status=status|(1<<' . $tostat . ')'; + $sqlwhere[$i] .= '(status & (1<<' . $tostat . ') != 0)'; } + } + $x = 'coll' . $i; + if(($tocoll = (string) ($this->sxTaskSettings->{$x})) != '') + { + $sqlset[$i] .= ( $sqlset[$i] ? ', ' : '') . ('coll_id = :coll_id_set' . $i); + $sqlwhere[$i] .= ( $sqlwhere[$i] ? ' AND ' : '') . '(coll_id = :coll_id_where' . $i . ')'; + $tmp_params[':coll_id_set' . $i] = $tocoll; + $tmp_params[':coll_id_where' . $i] = $tocoll; + } + } + if($date1 && $sqlset[0]) + { + $params = array(); + $params[':name1'] = $field1; + $params[':date1'] = $date1; + $params[':coll_id_set0'] = $tmp_params[':coll_id_set0']; - $sqlset = $params = $tmp_params = array(); - for ($i = 0; $i <= 2; $i ++ ) { - $sqlwhere[$i] = ''; - $sqlset[$i] = ''; - $x = 'status' . $i; - @list($tostat, $statval) = explode('_', (string) ($this->sxTaskSettings->{$x})); - if ($tostat >= 4 && $tostat <= 63) { - if ($statval == '0') { - $sqlset[$i] = 'status=status & ~(1<<' . $tostat . ')'; - $sqlwhere[$i] .= '(status & (1<<' . $tostat . ') = 0)'; - } elseif ($statval == '1') { - $sqlset[$i] = 'status=status|(1<<' . $tostat . ')'; - $sqlwhere[$i] .= '(status & (1<<' . $tostat . ') != 0)'; - } - } - $x = 'coll' . $i; - if (($tocoll = (string) ($this->sxTaskSettings->{$x})) != '') { - $sqlset[$i] .= ( $sqlset[$i] ? ', ' : '') . ('coll_id = :coll_id_set' . $i); - $sqlwhere[$i] .= ( $sqlwhere[$i] ? ' AND ' : '') . '(coll_id = :coll_id_where' . $i . ')'; - $tmp_params[':coll_id_set' . $i] = $tocoll; - $tmp_params[':coll_id_where' . $i] = $tocoll; - } + $w = 'p1.name = :name1 AND :date1 <= p1.value'; + if($sqlwhere[1] && $sqlwhere[2]) + { + $w .= ' AND ((' . $sqlwhere[1] . ') OR (' . $sqlwhere[2] . '))'; + $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; + $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; + } + else + { + if($sqlwhere[1]) + { + $w .= ' AND ' . $sqlwhere[1]; + $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; } + elseif($sqlwhere[2]) + { + $w .= ' AND ' . $sqlwhere[2]; + $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; + } + } - if ($date1 && $sqlset[0]) { - $params = array(); - $params[':name1'] = $field1; - $params[':date1'] = $date1; - $params[':coll_id_set0'] = $tmp_params[':coll_id_set0']; - - $w = 'p1.name = :name1 AND :date1 <= p1.value'; - if ($sqlwhere[1] && $sqlwhere[2]) { - $w .= ' AND ((' . $sqlwhere[1] . ') OR (' . $sqlwhere[2] . '))'; - $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; - $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; - } else { - if ($sqlwhere[1]) { - $w .= ' AND ' . $sqlwhere[1]; - $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; - } elseif ($sqlwhere[2]) { - $w .= ' AND ' . $sqlwhere[2]; - $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; - } - } - - $sql = "UPDATE prop AS p1 INNER JOIN record USING(record_id) + $sql = "UPDATE prop AS p1 INNER JOIN record USING(record_id) SET " . $sqlset[0] . - " WHERE " . $w; + " WHERE " . $w; - $ret[] = array('sql' => $sql, 'params' => $params); + $ret[] = array('sql'=>$sql, 'params'=>$params); + } + + + if($date1 && $date2) + { + $params = array(); + $params[':name1'] = $field1; + $params[':name2'] = $field2; + $params[':date1'] = $date1; + $params[':date2'] = $date2; + $params[':coll_id_set1'] = $tmp_params[':coll_id_set1']; + + $w = 'p1.name = :name1 AND p2.name = :name2 AND :date1 > p1.value AND :date2 <= p2.value'; + if($sqlwhere[0] && $sqlwhere[2]) + { + $w .= ' AND ((' . $sqlwhere[0] . ') OR (' . $sqlwhere[2] . '))'; + $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; + $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; + } + else + { + if($sqlwhere[0]) + { + $w .= ' AND ' . $sqlwhere[0]; + $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; } + elseif($sqlwhere[2]) + { + $w .= ' AND ' . $sqlwhere[2]; + $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; + } + } - - if ($date1 && $date2) { - $params = array(); - $params[':name1'] = $field1; - $params[':name2'] = $field2; - $params[':date1'] = $date1; - $params[':date2'] = $date2; - $params[':coll_id_set1'] = $tmp_params[':coll_id_set1']; - - $w = 'p1.name = :name1 AND p2.name = :name2 AND :date1 > p1.value AND :date2 <= p2.value'; - if ($sqlwhere[0] && $sqlwhere[2]) { - $w .= ' AND ((' . $sqlwhere[0] . ') OR (' . $sqlwhere[2] . '))'; - $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; - $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; - } else { - if ($sqlwhere[0]) { - $w .= ' AND ' . $sqlwhere[0]; - $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; - } elseif ($sqlwhere[2]) { - $w .= ' AND ' . $sqlwhere[2]; - $params[':coll_id_where2'] = $tmp_params[':coll_id_where2']; - } - } - - $sql = "UPDATE (prop AS p1 INNER JOIN prop AS p2 USING(record_id)) + $sql = "UPDATE (prop AS p1 INNER JOIN prop AS p2 USING(record_id)) INNER JOIN record USING(record_id) SET " . $sqlset[1] . - " WHERE " . $w; + " WHERE " . $w; - $ret[] = array('sql' => $sql, 'params' => $params); + $ret[] = array('sql'=>$sql, 'params'=>$params); + } + + + if($date2 && $sqlset[2]) + { + $params = array(); + $params[':name2'] = $field2; + $params[':date2'] = $date2; + $params[':coll_id_set2'] = $tmp_params[':coll_id_set2']; + + $w = 'p2.name = :name2 AND :date2 > p2.value'; + if($sqlwhere[0] && $sqlwhere[1]) + { + $w .= ' AND ((' . $sqlwhere[0] . ') OR (' . $sqlwhere[1] . '))'; + $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; + $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; + } + else + { + if($sqlwhere[0]) + { + $w .= ' AND ' . $sqlwhere[0]; + $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; } + elseif($sqlwhere[1]) + { + $w .= ' AND ' . $sqlwhere[1]; + $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; + } + } + + $sql = "UPDATE prop AS p2 INNER JOIN record USING(record_id) + SET " . $sqlset[2] . + " WHERE " . $w; + + $ret[] = array('sql'=>$sql, 'params'=>$params); + } + + return($ret); + } - if ($date2 && $sqlset[2]) { - $params = array(); - $params[':name2'] = $field2; - $params[':date2'] = $date2; - $params[':coll_id_set2'] = $tmp_params[':coll_id_set2']; - $w = 'p2.name = :name2 AND :date2 > p2.value'; - if ($sqlwhere[0] && $sqlwhere[1]) { - $w .= ' AND ((' . $sqlwhere[0] . ') OR (' . $sqlwhere[1] . '))'; - $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; - $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; - } else { - if ($sqlwhere[0]) { - $w .= ' AND ' . $sqlwhere[0]; - $params[':coll_id_where0'] = $tmp_params[':coll_id_where0']; - } elseif ($sqlwhere[1]) { - $w .= ' AND ' . $sqlwhere[1]; - $params[':coll_id_where1'] = $tmp_params[':coll_id_where1']; - } + public function facility() + { + $ret = NULL; + + $request = http_request::getInstance(); + $parm2 = $request->get_parms( + 'ACT', 'bid' + ); + + phrasea::headers(200, true, 'application/json', 'UTF-8', false); + $ret = NULL; + switch($parm2['ACT']) + { + case 'CALCSQL': + $xml = $this->graphic2xml(''); + $sxml = simplexml_load_string($xml); + $ret = $this->calcSQL($sxml); + break; + case 'GETBASE': + $ret = array('date_fields' => array(), 'status_bits' => array(), 'collections' => array()); + + if($parm2['bid'] != '') + { + $sbas_id = (int) $parm2['bid']; + try + { + $databox = databox::get_instance($sbas_id); + $meta_struct = $databox->get_meta_structure(); + + foreach($meta_struct as $meta) + { + if(mb_strtolower($meta->get_type()) == 'date') + $ret['date_fields'][] = $meta->get_name(); } - $sql = "UPDATE prop AS p2 INNER JOIN record USING(record_id) - SET " . $sqlset[2] . - " WHERE " . $w; + $status = $databox->get_statusbits(); + foreach($status as $n => $stat) + { + $labelon = $stat['labelon'] ? $stat['labelon'] : ($n . '-ON'); + $labeloff = $stat['labeloff'] ? $stat['labeloff'] : ($n . '-OFF'); + $ret['status_bits'][] = array('n' => $n, 'value' => 0, 'label' => $labeloff); + $ret['status_bits'][] = array('n' => $n, 'value' => 1, 'label' => $labelon); + } - $ret[] = array('sql' => $sql, 'params' => $params); + foreach($databox->get_collections() as $collection) + $ret['collections'][] = array('id' => $collection->get_coll_id(), 'name' => $collection->get_name()); + } + catch(Exception $e) + { + + } } - - return($ret); - } - - public function facility() - { - $ret = NULL; - - $request = http_request::getInstance(); - $parm2 = $request->get_parms( - 'ACT', 'bid' - ); - - phrasea::headers(200, true, 'application/json', 'UTF-8', false); - $ret = NULL; - switch ($parm2['ACT']) { - case 'CALCSQL': - $xml = $this->graphic2xml(''); - $sxml = simplexml_load_string($xml); - $ret = $this->calcSQL($sxml); - break; - case 'GETBASE': - $ret = array('date_fields' => array(), 'status_bits' => array(), 'collections' => array()); - - if ($parm2['bid'] != '') { - $sbas_id = (int) $parm2['bid']; - try { - $databox = databox::get_instance($sbas_id); - $meta_struct = $databox->get_meta_structure(); - - foreach ($meta_struct as $meta) { - if (mb_strtolower($meta->get_type()) == 'date') - $ret['date_fields'][] = $meta->get_name(); - } - - $status = $databox->get_statusbits(); - foreach ($status as $n => $stat) { - $labelon = $stat['labelon'] ? $stat['labelon'] : ($n . '-ON'); - $labeloff = $stat['labeloff'] ? $stat['labeloff'] : ($n . '-OFF'); - $ret['status_bits'][] = array('n' => $n, 'value' => 0, 'label' => $labeloff); - $ret['status_bits'][] = array('n' => $n, 'value' => 1, 'label' => $labelon); - } - - foreach ($databox->get_collections() as $collection) - $ret['collections'][] = array('id' => $collection->get_coll_id(), 'name' => $collection->get_name()); - } catch (Exception $e) { - - } - } - break; - } - print(json_encode($ret)); + break; } + print(json_encode($ret)); + } } + ?>