Файл: lib/p.history.lib.php
Строк: 210
<?php
 /** Модуль управления историей проверок
 * @author [Eugene]
 * @copyright 2011
 * @url http://forwebm.net
 */
 if (!@defined('W_ENGINED_L')) exit('Can`t access to this file data!');
 //-------------------------------------------------------------------------------------
 /** история */
 class w_historyparamslisten extends w_defext {      
  protected 
   $control,
   $url,
   $table,
   $urltoshowblock,
   $tablenamesh;
   
  /** идентификаторы параметров */ 
  public static $params_idents = array(
   //тиц
   'id_cy_value' => array(
    'color'       => '0D8ECF', //цвет графика
    'color_hover' => 'FF0F00', //цвет активного
    'selected'    => '1'       //по умолчанию включено отображение подстказки
   ),
   //yaca
   'id_yaca_dir_value' => array(
    'color'       => '',
    'color_hover' => 'FF0F00',
    'selected'    => '0',
    'hidden'      => '1'
   ),
   //dmoz
   'id_dmoz_dir_value' => array(
    'color'       => '',
    'color_hover' => 'FF0F00',
    'selected'    => '0',
    'hidden'      => '1'
   )   
  ); 
  
  function __construct(w_Control_obj $control, $tablenamesh='chhistory') {
   parent::__construct();
   $this->control = $control;
   $this->tablenamesh = $tablenamesh;
   $this->table = $this->control->tables_list[$tablenamesh]; 
   $this->urltoshowblock = false;      
  }//__construct
  
  /** создание по URL */
  public static function CreateFromURL(w_Control_obj $control, $url, $tablenamesh='chhistory') {
   $history = new w_historyparamslisten($control, $tablenamesh);
   if (!$history->SetURL($url)) { unset($history); return false; }
   return $history;    
  }//CreateFromURL
  
  /** проверка идентификатора */
  static function ValidIdentifier($identname) { return isset(self::$params_idents[$identname]); }
  
  /** получение имени идентификатора */
  function GetIdentifierName($identname) {
   $result = (!$identname) ? false : $this->control->GetText($identname.':paramname');
   return (!$result) ? 'Unknow parameter' : $result;       
  }//GetIdentifierName
  
  /** получение всех идентификаторов из строки
  * @str - string   
  * @return array or false 
  */
  static function GetAllIdentifiers($str) {
   return ($str && @preg_match_all('/[([a-z_-]*?)]/isU', $str, $arr) && @is_array($arr[1])) ? $arr[1] : false; 
  }//GetAllIdentifiers
  
  /** установка url */
  function SetURL($url) { return $this->url = trim($this->strtolower($this->control->CorrectSymplyString($url))); }
  function SetShowURL($url) { $this->urltoshowblock = $url; }  
  
  /** url */
  function GetURL() { return $this->url; }
  
  /** чтение параметров сайта
  * @readType - int type, 0 - with max elements, 1 - first, 2 - last  
  */
  function ReadURLParamsAndBuildList($readType=0) {
   switch ($readType) {
    case  1: $order = "iditem"; break;
    case  2: $order = "iditem DESC"; break;
    default: $order = "(CHAR_LENGTH(valuesid) - CHAR_LENGTH(REPLACE(valuesid,'[',''))) div CHAR_LENGTH('[') DESC"; break;
   }      
   $res = $this->control->db->GetLineArray($this->control->db->mPost(
    "select valuesid from {$this->table} where urlident='{$this->url}' order by $order limit 1"
   ));
   return (!$res) ? false : self::GetAllIdentifiers($res['valuesid']);       
  }//ReadURLParamsAndBuildList
  
  /** генерация настроек графика (линейного)
  * @foritems - array or false
  * @ignoreitems - array or false   
  */
  function GenerateLineCharSettengsXML($foritems=false/*, $ignoreitems=false*/) {
   if ($foritems === false) { $foritems = $this->ReadURLParamsAndBuildList(); }
   $xml = '<settings><font>Tahoma</font><hide_bullets_count>18</hide_bullets_count><data_type>csv</data_type><background><alpha>90</alpha><border_alpha>10</border_alpha></background><plot_area><margins><left>50</left><right>40</right><bottom>65</bottom></margins></plot_area><grid><x><alpha>10</alpha><approx_count>9</approx_count></x><y_left><tick_length>0</tick_length><alpha>10</alpha></y_left></grid><axes><x><width>1</width><color>0D8ECF</color></x><y_left><width>1</width><color>0D8ECF</color></y_left></axes><values><x><rotate>90</rotate></x></values><indicator><color>0D8ECF</color><x_balloon_text_color>FFFFFF</x_balloon_text_color><line_alpha>50</line_alpha><selection_color>0D8ECF</selection_color><selection_alpha>20</selection_alpha></indicator><legend><values><enabled>1</enabled><width>60</width><align>left</align></values></legend><zoom_out_button><text>'.$this->control->GetText('showallitemslabel', false, 'Show All').'</text><text_color_hover>FF0F00</text_color_hover></zoom_out_button><help><button><color>FCD202</color><text_color>000000</text_color><text_color_hover>FF0F00</text_color_hover></button><balloon><text>'.$this->control->GetText('graphhelpidentuse').'</text><color>FCD202</color><text_color>000000</text_color></balloon></help><graphs>';
   //add graphs
   $item_id = 0;
   foreach ($foritems as $item) {
       //if ($ignoreitems && @in_array($item, $ignoreitems)) { continue; }
       
    $info = (!isset(self::$params_idents[$item])) ? array(
     'color'       => '',
     'color_hover' => 'FF0F00',
     'selected'    => '1'   
    ) : self::$params_idents[$item];
    
       if (!$info) { continue; }       
    $xml .= '<graph gid="'.$item_id.'"><title>'.$this->GetIdentifierName($item).'</title>';    
    //get all params
    foreach ($info as $name => $value) {
     $xml .= ('<'.$name.'>'.$value.'</'.$name.'>');         
    }    
    $xml .= '</graph>';
    $item_id++;
   }
   //next follow
   $xml .= '</graphs><labels><label lid="0"><text><![CDATA['.$this->control->GetText('grathtitlelabelid', array(($this->urltoshowblock) ? " <font color="#0000FF"><u>{$this->urltoshowblock}</u></font>" : '')).']]></text><y>25</y><text_size>13</text_size><align>center</align></label></labels></settings>';
   return $xml;       
  }//GenerateLineCharSettengsXML
  
  /** генерация значений графика (линейного)
  * @foritems - array or false  
  */
  function GenerateLineChartDataCSV($foritems=false, $limit=0) {
   if ($foritems === false) { $foritems = $this->ReadURLParamsAndBuildList(); }
   //select for all items current url
   $list = $this->control->db->mPost(
    "select valuesid,datecreate from {$this->table} where urlident='{$this->url}' order by datecreate".
    (($limit > 0) ? " limit $limit" : "")    
   );
   //parse
   $csv = '';
   while ($row = $this->control->db->GetLineArray($list)) {
    $str = (!$row['valuesid']) ? '' : @stripcslashes($row['valuesid']);
    $csv .= (($csv) ? ("n".$row['datecreate']) : $row['datecreate']);    
    foreach ($foritems as $item) {
     $val = $this->control->ReadOption($item, $str);
     $csv .= ';'.(($val === false) ? '' : $val);        
    }    
   }
   //correct if, no data found
   if (!$csv) {
       $csv = '?';       
    foreach ($foritems as $item) { $csv .= ';';    }    
   }   
   return $csv;       
  }//GenerateLineChartDataCSV
  
  /** создание новых записей истории
  * @items - array(
  *  'идентификатор' => значение
  * )
  * 
  * @date - string - дата проверки, если false - текущая дата
  * @updateifexists - bool - обновлять или нет завись, если такая дата уже существует
  */
  function WriteNewHistoryData($items, $date=false, $updateifexists=false) {
   if (!$items) { return false; }    
   if (!$date) { $date = $this->GetThisDate(); } elseif ($this->strpos($date, ':') !== false) {
    $date2 = $date;
    $date  = $this->StrFetch($date2, " ");
    if (!$date) { $date = $this->GetThisDate(); }
   }    
   //date is ok, check exists
   $row = $this->control->db->GetLineArray($this->control->db->mPost(
    "select iditem from {$this->table} where datecreate='$date' and urlident='{$this->url}' limit 1"
   ));
   if ($row && !$updateifexists) { return false; }
   //items for save
   $items_write = array('valuesid' => '');
   if (!$row) {
    $items_write['datecreate'] = $date; 
    $items_write['urlident']   = $this->url;    
   }
   //combine
   foreach ($items as $name => $value) {
    $items_write['valuesid'] = $this->control->WriteOption($name, $value, $items_write['valuesid']);    
   }
   //update, insert        
   if ($row) {
    $this->control->db->UPDATEAction($this->tablenamesh, $items_write, "iditem='{$row['iditem']}'", "1", true); 
   } else {
    $this->control->db->INSERTAction($this->tablenamesh, $items_write, true);
   }
   return true;    
  }//WriteNewHistoryData    
    
 }//w_historyparamslisten 
 //-------------------------------------------------------------------------------------
 /* Copyright (с) 2011 forwebm.net */
?>