/** * Add user counts to an organization query. * * @param AIR2_Query $q * @param char $alias * @param array $fld_defs (optional, reference) */ public static function add_counts(AIR2_Query $q, $alias = null, &$fld_defs = null) { $a = $alias ? "{$alias}." : ''; $uost = UserOrg::$STATUS_ACTIVE; $ust1 = User::$STATUS_ACTIVE; $ust2 = User::$STATUS_PUBLISHABLE; $active_users = "select user_id from user where user_status " . "= '{$ust1}' or user_status = '{$ust2}'"; $c = "select count(*) from user_org where uo_org_id = {$a}org_id " . "and uo_status = '{$uost}' and uo_user_id in ({$active_users})"; $q->addSelect("({$c}) as active_users"); if (is_array($fld_defs)) { $fld_defs[] = array('name' => 'active_users', 'type' => 'int'); } }
/** * Add conflict/error/done/etc counts to a tank. Optionally pass in which * types to select, rather than them all. * * @param AIR2_Query $q * @param char $alias * @param array $fld_defs (optional, reference) * @param array $types (optional) */ public static function add_counts($q, $alias, &$fld_defs = null, $types = null) { // code => subselect-alias $type_counts = array('*' => 'count_total', TankSource::$STATUS_NEW => 'count_new', TankSource::$STATUS_CONFLICT => 'count_conflict', TankSource::$STATUS_RESOLVED => 'count_resolved', TankSource::$STATUS_LOCKED => 'count_locked', TankSource::$STATUS_DONE => 'count_done', TankSource::$STATUS_ERROR => 'count_error'); if ($types) { $less_types = array(); foreach ($types as $t) { $less_types[$t] = $type_counts[$t]; } $type_counts = $less_types; } // add subselects $sub = "select count(*) from tank_source where tsrc_tank_id = {$alias}.tank_id"; foreach ($type_counts as $code => $name) { if ($code == '*') { $q->addSelect("({$sub}) as {$name}"); } else { $q->addSelect("({$sub} and tsrc_status = '{$code}') as {$name}"); } if (is_array($fld_defs)) { $fld_defs[] = array('name' => $name, 'type' => 'int'); } } }
/** * Add sent/recieved counts to an inquiry query. * * @param AIR2_Query $q * @param char $alias * @param array $fld_defs (optional, reference) */ public static function add_counts(AIR2_Query $q, $alias = '', &$fld_defs = null) { if ($alias) { $alias = "{$alias}."; } $sent_count = "(select count(*) from src_inquiry where si_inq_id = {$alias}inq_id) as sent_count"; $recv_count = "(select count(*) from src_response_set where srs_inq_id = {$alias}inq_id) as recv_count"; $q->addSelect($sent_count); $q->addSelect($recv_count); if (is_array($fld_defs)) { $fld_defs[] = array('name' => 'sent_count', 'type' => 'int'); $fld_defs[] = array('name' => 'recv_count', 'type' => 'int'); } }