public function findWhere($keys, $values)
 {
     $tag = "EntityDAO: findWhere()";
     Log::notice("{$tag}: ({$keys}, {$values})");
     $blueprint = $this->blueprint;
     $timezone_offset = $this->timezone_offset_select;
     $blueprintKey = $this->tableName();
     $query = new EntityQuery($blueprint, $timezone_offset);
     if (!is_array($keys) && !is_array($values)) {
         // convert non-array arguments into single element arrays
         $keys = array($keys);
         $values = array($values);
     } else {
         if (is_array($keys) && !is_array($values) || count($keys) != count($values)) {
             throw new Exception("Length of (key,value) arguments do not match");
         }
     }
     try {
         for ($i = 0; $i < count($keys); $i++) {
             $key = $keys[$i];
             $value = $values[$i];
             $field = $blueprint->get($key);
             switch ($field->getDataType()) {
                 case "int":
                     $query->where("{$blueprintKey}.{$key}={$value}");
                     break;
                 case "datetime":
                 case "time":
                     $query->where("{$blueprintKey}.{$key}=CONVERT_TZ('{$value}', '{$timezone_offset}', '" . BPTimezone::UTC . "')");
                     break;
                 default:
                     $query->where("{$blueprintKey}.{$key}='{$value}'");
                     break;
             }
         }
     } catch (Exception $e) {
         Log::error("{$tag}: Field [{$key}] is not defined by [" . $blueprint->getKey() . "]");
         throw $e;
     }
     try {
         $sql = new DatabaseQuery($query->toString());
         $sql->doQuery();
         $matches = array();
         $num_rows = $sql->get_num_rows();
         Log::debug("{$tag}: Found {$num_rows} matches");
         for ($i = 0; $i < $sql->get_num_rows(); $i++) {
             $row = $sql->get_next_row();
             $entity = new Entity($blueprint);
             $entity->setId($row->id);
             $entity->setModified($row->modified);
             foreach ($blueprint->fields() as $field) {
                 $key = $field->getKey();
                 $value = $row->{$key};
                 if ($field->isForeignKey()) {
                     $foreignValueColumn = str_replace(".", "_", $field->getForeignValue());
                     $foreignValue = $row->{$foreignValueColumn};
                     $entity->setForeignValue($key, $foreignValue);
                 }
                 switch ($field->getDataType()) {
                     case "binary":
                         if (get_magic_quotes_gpc()) {
                             $value = stripslashes($str);
                         }
                         $lengthKey = $key . "_length";
                         $length = $row->{$lengthKey};
                         $entity->length($key, $length);
                         break;
                 }
                 $entity->set($key, $value);
             }
             $matches[] = $entity;
         }
         return $matches;
     } catch (Exception $e) {
         Log::error("{$tag}: [" . $sql->err_code . "] " . $sql->err_message);
         throw $e;
     }
 }
 private static function prepareData(Blueprint $blueprint, $where = NULL, array $filters = NULL)
 {
     $tag = "EntityExporter::prepareData()";
     Log::notice("{$tag}");
     /*
     // BUILD QUERY
     */
     $query = new EntityQuery($blueprint);
     // WHERE
     if ($where != NULL) {
         $query->where($where);
     }
     // FILTERS
     if ($filters != NULL) {
         foreach ($filters as $key => $value) {
             if (ereg("^filter_(.+)_(.+)", $key, $regs)) {
                 $filter_field = $regs[1];
                 $filter_type = $regs[2];
                 $field = $blueprint->get($filter_field);
                 switch ($field->getDataType()) {
                     case "string":
                         switch ($filter_type) {
                             case "like":
                                 $query->where("{$filter_field} LIKE '%{$value}%'");
                                 break;
                             case "equals":
                                 $query->where("{$filter_field}='{$value}'");
                                 break;
                         }
                         break;
                     case "int":
                         switch ($filter_type) {
                             case "equals":
                                 $query->where("{$filter_field}={$value}");
                                 break;
                             case "min":
                                 $query->where("{$filter_field}>={$value}");
                                 break;
                             case "max":
                                 $query->where("{$filter_field}<={$value}");
                         }
                         break;
                     case "decimal":
                         switch ($filter_type) {
                             case "equals":
                                 $query->where("{$filter_field}='{$value}'");
                                 break;
                             case "min":
                                 $query->where("{$filter_field}>='{$value}'");
                                 break;
                             case "max":
                                 $query->where("{$filter_field}<='{$value}'");
                         }
                         break;
                     case "date":
                     case "datetime":
                         switch ($filter_type) {
                             case "equals":
                                 $query->where("{$filter_field}='{$value}'");
                                 break;
                             case "min":
                                 $query->where("{$filter_field}>='{$value}'");
                                 break;
                             case "max":
                                 $query->where("{$filter_field}<='{$value}'");
                         }
                         break;
                     case "enum":
                         switch ($filter_type) {
                             case "like":
                                 $query->where("{$filter_field} LIKE '%{$value}%'");
                                 break;
                             case "equals":
                                 $query->where("{$filter_field}='{$value}'");
                                 break;
                         }
                         break;
                 }
                 // END: switch($field->getDataType())
             }
             // END: if(ereg("^filter_(.+)_(.+)", $key, $regs))
         }
         // END: foreach($filters as $key=>$value)
     }
     // END: if($filters != NULL)
     // Execute Query
     $sql = new DatabaseQuery($query->toString());
     try {
         $sql->doQuery();
         $num_rows = $sql->get_num_rows();
         Log::debug("{$tag}: Exporting {$num_rows} rows");
         return $sql;
     } catch (Exception $e) {
         Log::error("{$tag}: [" . $sql->err_code . "] " . $sql->err_message);
         throw $e;
     }
 }
예제 #3
0
    echo "time = " . $access->get("time") . "<br/>";
    echo "<br/>";
    echo "<strong>Forcing update in session timezone: {$session_timezone_offset}</strong><br/><br/>";
    // Update the Access (force Session timezone)
    unset($accessDAO);
    $accessDAO = new EntityDAO($accessBP, $session_timezone_offset);
    $access->set("time", date("Y-m-d H:i:s"));
    $access->set("description", "Updated Timezone (with forced session timezone) Test");
    $accessDAO->update($access);
    echo "Updated Access with id {$access_id}<br/>";
    echo "<br/>";
    unset($access);
    // Load Access with EntityQuery
    $accessQuery = new EntityQuery($accessBP);
    $accessQuery->where("Access.id={$access_id}");
    echo "QUERY:<br/>" . $accessQuery->toString() . "<br/><br/>";
    $sql = new DatabaseQuery($accessQuery->toString());
    $sql->doQuery();
    echo "Selected Access with id {$access_id}<br/>";
    $row = $sql->get_next_row();
    $modified = $row->modified;
    $time = $row->time;
    echo "modified = {$modified}<br/>";
    echo "time = {$time}<br/>";
    echo "<br/>";
    unset($row);
    unset($sql);
    unset($accessQuery);
} catch (Exception $e) {
    echo "Caught: " . $e->getMessage() . "<br/><br/>";
}