Changeset 536 for trunk/Common/Form


Ignore:
Timestamp:
May 18, 2013, 6:51:10 PM (12 years ago)
Author:
chronos
Message:
  • Opraveno: Položky nabídky ve Správě dat se opakovaně všechny načítaly z databáze pro každou skupinu.
  • Opraveno: Nyní funguje také rychlé filtrování tabulek ve Správě dat dle sloupců s typem OneToMany.
  • Upraveno: Optimalizace načítání textových názvů položek typu OneToMany. Dříve se načítaly samostatným SQL dotazem pro každý řádek zvlášť. Nyní se načítají jako jeden SELECT.
  • Přidáno: Modul TimeMeasure pro měření a zobrazování časových grafů veličin.
Location:
trunk/Common/Form
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Common/Form/Form.php

    r529 r536  
    99  var $Definition;
    1010  var $Values;
     11  var $ValuesFilter;
    1112  var $OnSubmit;
    1213  var $Database;
     
    1819    $this->Definition = array();
    1920    $this->Values = array();   
     21    $this->ValuesFilter = array();   
    2022    $this->OnSubmit = '';
    2123  }
     
    4951      $Edit = $this->FormManager->Type->ExecuteTypeEvent($UseType, 'OnView',
    5052        array('Value' => $this->Values[$Index], 'Name' => $Index,
    51         'Type' => $Item['Type'], 'Values' => $this->Values));
     53        'Type' => $Item['Type'], 'Values' => $this->Values,             
     54        'Filter' => $this->ValuesFilter[$Index]));
    5255      if(array_key_exists('Suffix', $Item)) $Edit .= ' '.$Item['Suffix'];
    5356      if(!$this->FormManager->Type->IsHidden($UseType))
     
    116119
    117120  function LoadValuesFromDatabase($Id)
    118   {
    119     $DbResult = $this->Database->query('SELECT T.* FROM '.$this->Definition['Table'].' AS T WHERE T.Id='.$Id);
     121  {   
     122    foreach($this->Definition['Items'] as $Index => $Item)
     123    if(!array_key_exists($Item['Type'], $this->FormManager->FormTypes) or
     124    (array_key_exists($Item['Type'], $this->FormManager->FormTypes) and
     125    ($this->FormManager->FormTypes[$Item['Type']]['Type'] != 'ManyToOne')))
     126    {
     127      if(!array_key_exists($Index, $this->Values) and isset($Item['Default'])) $this->Values[$Index] = $Item['Default'];
     128        if(array_key_exists($Item['Type'], $this->FormManager->FormTypes))
     129        {           
     130          if(!array_key_exists($Item['Type'], $this->FormManager->Type->TypeDefinitionList))
     131            $this->FormManager->Type->RegisterType($Item['Type'], '',
     132              $this->FormManager->FormTypes[$Item['Type']]);
     133          if($this->FormManager->FormTypes[$Item['Type']]['Type'] == 'Reference')
     134            $UseType = 'OneToMany';
     135          else if($this->FormManager->FormTypes[$Item['Type']]['Type'] == 'Enumeration')
     136            $UseType = 'Enumeration';
     137        } else $UseType = $Item['Type'];
     138      $Columns[] = $this->FormManager->Type->ExecuteTypeEvent($UseType, 'OnFilterNameQuery',
     139        array('Name' => $Index, 'Type' => $Item['Type']));
     140    }
     141    $Columns = implode(',', $Columns);
     142    $DbResult = $this->Database->query('SELECT '.$Columns.' FROM `'.$this->Definition['Table'].'` AS `T` WHERE `T`.`Id`='.$Id);
    120143    $DbRow = $DbResult->fetch_array();
    121144    foreach($this->Definition['Items'] as $Index => $Item)
     
    138161            array('Value' => $DbRow[$Index], 'Name' => $Index,
    139162            'Type' => $Item['Type'], 'Values' => $this->Values));
     163        $this->ValuesFilter[$Index] = $DbRow[$Index.'_Filter'];
    140164    }
    141165  }
  • trunk/Common/Form/Types/Base.php

    r501 r536  
    4444    return(addslashes($Value));
    4545  }
     46 
     47  function OnFilterName($Item)
     48  {
     49    return('`'.$Item['Name'].'`');
     50  }
     51
     52  function OnFilterNameQuery($Item)
     53  {
     54    return('`'.$Item['Name'].'`, `'.$Item['Name'].'` AS `'.$Item['Name'].'_Filter`');
     55  }
    4656}
    4757
  • trunk/Common/Form/Types/OneToMany.php

    r531 r536  
    1212    if($Item['Value'] != '')
    1313    {
    14       if(array_key_exists('View', $Type['Parameters'])) $Table = $Type['Parameters']['View'];
     14      /*if(array_key_exists('View', $Type['Parameters'])) $Table = $Type['Parameters']['View'];
    1515        else $Table = $Type['Parameters']['Table'];
    1616      $DbResult = $this->Database->query('SELECT '.$Type['Parameters']['Name'].
    17         ' AS `Name` FROM '.$Table.' WHERE `'.
     17        ' AS `Name` FROM `'.$Table.'` WHERE `'.
    1818        $Type['Parameters']['Id'].'`='.$Item['Value']);
    1919      $DbRow = $DbResult->fetch_assoc();
    2020      $Output = '<a href="?t='.$Type['Parameters']['Table'].'&amp;a='.
    21         'view'.'&amp;i='.$Item['Value'].'">'.$DbRow['Name'].'</a>';
    22     } else $Output = '';
     21        'view'.'&amp;i='.$Item['Value'].'">'.$DbRow['Name'].'</a>';*/
     22      $Output = '<a href="?t='.$Type['Parameters']['Table'].'&amp;a='.
     23        'view'.'&amp;i='.$Item['Value'].'">'.$Item['Filter'].'</a>';
     24    } else $Output = '';   
    2325    return($Output);
    2426  }
     
    6062      else return($Item['Value']);
    6163  }
     64 
     65  function OnFilterName($Item)
     66  {
     67    return('`'.$Item['Name'].'_Filter`');
     68  }
     69   
     70  function OnFilterNameQuery($Item)
     71  {
     72    $Type = $this->FormManager->Type->TypeDefinitionList[$Item['Type']];
     73    //if($Item['Value'] != '')
     74    //{
     75      if(array_key_exists('View', $Type['Parameters'])) $Table = $Type['Parameters']['View'];
     76        else $Table = $Type['Parameters']['Table'];
     77      $Output = '`'.$Item['Name'].'`, (SELECT '.$Type['Parameters']['Name'].
     78        ' AS `Name` FROM `'.$Table.'` WHERE `'.
     79        $Type['Parameters']['Id'].'`=`'.$Item['Name'].'`) AS `'.$Item['Name'].'_Filter`';
     80    //} else $Output = '`'.$Item['Name'].'`, `'.$Item['Name'].'` AS `'.$Item['Name'].'_Filter`';
     81    return($Output);   
     82  }
    6283}
    6384
Note: See TracChangeset for help on using the changeset viewer.