Ejemplo n.º 1
0
 /**
  * select resource accessible for customers using
  * records (user_id, resource_id, resource_type, login, email)
  * @return Am_Query
  */
 function getResourcesForMembers($types = null)
 {
     if ($types && !is_array($types)) {
         $types = (array) $types;
     }
     $qfree = new Am_Query($this, 'rfree');
     $qfree->crossJoin('?_user', 'u')->clearFields()->addField('u.user_id')->addField('rfree.resource_id')->addField('rfree.resource_type')->addField('u.login')->addField('u.email')->addWhere("rfree.fn = 'free'");
     $q = $this->_getBaseQuery();
     $q->clearFields();
     $q->addField('DISTINCT c.user_id')->addField('r.resource_id')->addField('r.resource_type')->addField('u.login')->addField('u.email')->leftJoin('?_user', 'u', 'u.user_id=c.user_id')->addOrder('user_id')->addWhere("r.fn <> 'free'")->addUnion($qfree);
     if ($types) {
         $q->addWhere('r.resource_type IN (?a)', $types);
     }
     return $q;
 }
Ejemplo n.º 2
0
 /**
  * select resource accessible for customers using
  * records (user_id, resource_id, resource_type, login, email)
  * @return Am_Query
  */
 function getResourcesForMembers($types = null, $condition = "1=1")
 {
     if ($types && !is_array($types)) {
         $types = (array) $types;
     }
     $qfree = new Am_Query($this, 'rfree');
     $qfree->crossJoin('?_user', 'u')->clearFields()->addField('u.user_id')->addField('rfree.resource_id')->addField('rfree.resource_type')->addField('u.login')->addField('u.email')->addField("rfree.fn", 'fn')->addField("rfree.id", 'fn_id')->groupBy('user_id, resource_id, resource_type', 'u')->addWhere("rfree.fn IN ('free', 'free_without_login')")->addWhere("(\n                            (rfree.start_days IS NULL AND rfree.stop_days IS NULL) \n                            OR\n                            (CEIL((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(u.added))/86400) BETWEEN IFNULL(rfree.start_days,0) AND IFNULL(rfree.stop_days, 90000)) \n                            OR\n                            (CEIL((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(u.added))/86400) >= IFNULL(rfree.start_days,0) AND rfree.stop_days = -1) \n                       )");
     if ($types) {
         $qfree->addWhere('rfree.resource_type IN (?a) AND ' . $condition, $types);
     }
     $q = $this->_getBaseQuery();
     $q->clearFields();
     $q->clearOrder();
     $q->addField('DISTINCT c.user_id')->addField('r.resource_id')->addField('r.resource_type')->addField('u.login')->addField('u.email')->addField("r.fn", 'fn')->addField("r.id", 'fn_id')->leftJoin('?_user', 'u', 'u.user_id=c.user_id')->addOrder('user_id')->addOrderRaw("(SELECT _sort_order\n                 FROM ( SELECT sort_order as _sort_order, \n                        resource_type as _resource_type, \n                        resource_id as _resource_id\n                      FROM ?_resource_access_sort ras) AS _ras\n                 WHERE _resource_id=resource_id AND _resource_type=resource_type LIMIT 1),\n                 resource_id, resource_type")->groupBy('user_id, resource_id, resource_type', 'c')->addWhere("r.fn NOT IN ('free', 'free_without_login')")->addUnion($qfree);
     if ($types) {
         $q->addWhere('r.resource_type IN (?a) AND ' . $condition, $types);
     }
     return $q;
 }