Beispiel #1
0
 /**
  * Inits iterator for list
  *
  * @param		RM_List_Object		$object
  * @param 		hash<name:value>	$args
  * 				query		RM_Db_Query			Query
  * 				table		string				Table name
  * 				what		string
  * 				no_blank	bool
  * 				factory		RM_Store_iFactory
  * @return 		RM_List_Object
  */
 public function initQuery(RM_List_Object $object, array $args = NULL, array $aliases = NULL)
 {
     $query = isset($args['query']) ? $args['query'] : NULL;
     if (isNull($query)) {
         if ($object->base) {
             M('Db')->setCurrentConnection($object->base);
         }
         $query = M('Db')->createQuery(isset($args['table']) ? $args['table'] : $object->table_name);
         /*			if($object->restriction)
         			{
         				$binds=array();
         				if($object->binds)
         				{
         					$parts=explode(',',$object->binds);
         					foreach ($parts as $v)
         					{
         						$binds[]=M('Tools')->misc()->exec($v);
         					}
         				}
         				call_user_func_array(array($query, 'where'),array_merge(array($object->restriction),$binds));
         			}*/
         // :TODO: restriction
         if (isset($args['restriction'])) {
             foreach ($args['restriction'] as $k => $v) {
                 $query->where($k, $v);
             }
         }
         $what = isset($args['what']) ? $args['what'] : $object->what;
         if ($what && $what != '*') {
             $inSql = explode(',', $what);
             for ($i = 1, $j = 0, $outSql[0] = $inSql[0]; $i < count($inSql); $i++) {
                 if (substr_count($outSql[$j], '(') == substr_count($outSql[$j], ')')) {
                     $outSql[++$j] = '';
                 } else {
                     $outSql[$j] .= ',';
                 }
                 $outSql[$j] .= $inSql[$i];
             }
             foreach ($outSql as $k) {
                 $tmp = explode(' as ', $k);
                 $aliases[trim(count($tmp) > 1 ? $tmp[1] : $tmp[0])] = trim($tmp[0]);
             }
         }
         if (!isset($args['no_blank']) || !$args['no_blank']) {
             $object->setBlankQuery($query, $aliases);
         } else {
             $aliases = NULL;
         }
         $oldWhat = $object->what;
         $object->what = $what;
         foreach (qw2('what grp>group sort>order') as $k => $v) {
             if (is_integer($k)) {
                 $k = $v;
             }
             if ($k == 'sort') {
                 $object->setRequest('__blank__', M('Store')->requestQuery(isset($args['factory']) ? $args['factory'] : $object, $query, $aliases));
             }
             if ($object->{$k}) {
                 $query->{$v}($object->{$k});
             }
         }
         $object->what = $oldWhat;
         M('Db')->setCurrentConnection('default');
     } else {
         //			M('Debug')->stacktrace();
         $object->setBlankQuery($query, $aliases, TRUE);
     }
     $request = M('Store')->requestQuery(isset($args['factory']) ? $args['factory'] : $object, $query, $aliases);
     if (isset($args['filter'])) {
         foreach ($args['filter'] as $condition => $bind) {
             $request->filter($condition, $bind);
         }
     }
     return $request;
 }