Пример #1
0
 /**
  * Filters a subtable
  *
  * @param Piwik_DataTable_Row  $row
  * @return mixed
  */
 public function filterSubTable(Piwik_DataTable_Row $row)
 {
     if (!$this->enableRecursive) {
         return;
     }
     if ($row->isSubtableLoaded()) {
         $subTable = Piwik_DataTable_Manager::getInstance()->getTable($row->getIdSubDataTable());
         $this->filter($subTable);
     }
 }
Пример #2
0
 public function filterSubTable(Piwik_DataTable_Row $row)
 {
     if (!$this->enableRecursive) {
         return;
     }
     try {
         $subTable = Piwik_DataTable_Manager::getInstance()->getTable($row->getIdSubDataTable());
         $this->filter($subTable);
     } catch (Exception $e) {
         // case idSubTable == null, or if the table is not loaded in memory
     }
 }
Пример #3
0
 /**
  * Simple test of the DataTable_Row
  * 
  * @group Core
  * @group DataTable
  */
 public function testRow()
 {
     $columns = array('test_column' => 145, 00 => new Piwik_Timer(), 'super' => array('this column has an array value, amazing'));
     $metadata = array('logo' => 'piwik.png', 'super' => array('this column has an array value, amazing'));
     $arrayRow = array(Piwik_DataTable_Row::COLUMNS => $columns, Piwik_DataTable_Row::METADATA => $metadata, 'fake useless key' => 38959, 43905724897.0 => 'value');
     $row = new Piwik_DataTable_Row($arrayRow);
     $this->assertEquals($columns, $row->getColumns());
     $this->assertEquals($metadata, $row->getMetadata());
     $this->assertNull($row->getIdSubDataTable());
 }
Пример #4
0
 /**
  * Helper function to test if two rows are equal.
  * 
  * Two rows are equal 
  * - if they have exactly the same columns / metadata
  * - if they have a subDataTable associated, then we check that both of them are the same.
  * 
  * @param Piwik_DataTable_Row row1 to compare
  * @param Piwik_DataTable_Row row2 to compare
  * 
  * @return bool
  */
 public static function isEqual(Piwik_DataTable_Row $row1, Piwik_DataTable_Row $row2)
 {
     //same columns
     $cols1 = $row1->getColumns();
     $cols2 = $row2->getColumns();
     $diff1 = array_udiff($cols1, $cols2, array(__CLASS__, 'compareElements'));
     $diff2 = array_udiff($cols2, $cols1, array(__CLASS__, 'compareElements'));
     if ($diff1 != $diff2) {
         return false;
     }
     $dets1 = $row1->getMetadata();
     $dets2 = $row2->getMetadata();
     ksort($dets1);
     ksort($dets2);
     if ($dets1 != $dets2) {
         return false;
     }
     // either both are null
     // or both have a value
     if (!(is_null($row1->getIdSubDataTable()) && is_null($row2->getIdSubDataTable()))) {
         $subtable1 = Piwik_DataTable_Manager::getInstance()->getTable($row1->getIdSubDataTable());
         $subtable2 = Piwik_DataTable_Manager::getInstance()->getTable($row2->getIdSubDataTable());
         if (!Piwik_DataTable::isEqual($subtable1, $subtable2)) {
             return false;
         }
     }
     return true;
 }
Пример #5
0
 /**
  * Helper function to test if two rows are equal.
  * 
  * Two rows are equal 
  * - if they have exactly the same columns / details
  * - if they have a subDataTable associated, then we check that both of them are the same.
  * 
  * @param Piwik_DataTable_Row row1 to compare
  * @param Piwik_DataTable_Row row2 to compare
  * 
  * @return bool
  */
 public static function isEqual(Piwik_DataTable_Row $row1, Piwik_DataTable_Row $row2)
 {
     //same columns
     $cols1 = $row1->getColumns();
     $cols2 = $row2->getColumns();
     uksort($cols1, 'strnatcasecmp');
     uksort($cols2, 'strnatcasecmp');
     if ($cols1 != $cols2) {
         return false;
     }
     $dets1 = $row1->getDetails();
     $dets2 = $row2->getDetails();
     ksort($dets1);
     ksort($dets2);
     // same details
     if ($dets1 != $dets2) {
         return false;
     }
     // either both are null
     // or both have a value
     if (!(is_null($row1->getIdSubDataTable()) && is_null($row2->getIdSubDataTable()))) {
         $subtable1 = Piwik_DataTable_Manager::getInstance()->getTable($row1->getIdSubDataTable());
         $subtable2 = Piwik_DataTable_Manager::getInstance()->getTable($row2->getIdSubDataTable());
         if (!Piwik_DataTable::isEqual($subtable1, $subtable2)) {
             return false;
         }
     }
     return true;
 }