Pommo_Sql::groupSQL PHP Method

groupSQL() public static method

accepts a group object
public static groupSQL ( $group, $tally = false, $status = 1, $filter = false )
    public static function groupSQL($group, $tally = false, $status = 1, $filter = false)
    {
        // used to prevent against group include/exclude recursion
        static $groups;
        if (!isset($groups[$group['id']])) {
            $groups[$group['id']] = TRUE;
        }
        global $pommo;
        $dbo =& Pommo::$_dbo;
        $rules = Pommo_Sql::sortRules($group['rules']);
        $ands = Pommo_Sql::getSubQueries(Pommo_Sql::sortLogic($rules['and']));
        $ors = empty($rules['or']) ? array() : Pommo_Sql::getSubQueries(Pommo_Sql::sortLogic($rules['or']));
        $sql = $tally ? 'SELECT count(subscriber_id) ' : 'SELECT subscriber_id ';
        $sql .= "\n            FROM {$dbo->table['subscribers']}\n            WHERE status=" . intval($status);
        $q = FALSE;
        if (!empty($ands)) {
            $sql .= " AND (\n";
            foreach ($ands as $k => $s) {
                if ($k != 0) {
                    $sql .= "\n AND ";
                }
                $sql .= $s;
            }
            foreach ($ors as $s) {
                $sql .= "\n OR {$s}";
            }
            $sql .= "\n)";
            $q = TRUE;
        }
        foreach ($rules['exclude'] as $gid) {
            if (!isset($groups[$gid])) {
                $sql .= "\nAND subscriber_id NOT IN (\n";
                $sql .= Pommo_Sql::groupSQL(current(Pommo_Groups::get(array('id' => $gid))));
                $sql .= "\n)";
            }
            $q = TRUE;
        }
        foreach ($rules['include'] as $gid) {
            if (!isset($groups[$gid])) {
                $sql .= "\n" . ($q ? 'OR' : 'AND') . " subscriber_id IN (\n";
                $sql .= Pommo_Sql::groupSQL(current(Pommo_Groups::get(array('id' => $gid))));
                $sql .= "\n)";
            }
            $q = TRUE;
        }
        // If a filter/search is requested, perform a match
        if (is_array($filter) && !empty($filter['field']) && !empty($filter['string'])) {
            // make MySQL LIKE() compliant
            $filter['string'] = mysql_real_escape_string(addcslashes($filter['string'], '%_'));
            $sql .= is_numeric($filter['field']) ? "\n AND subscriber_id in (select subscriber_id from {$dbo->table['subscriber_data']} WHERE field_id = " . (int) $filter['field'] . " AND value LIKE '%{$filter['string']}%')" : "\n AND " . mysql_real_escape_string($filter['field']) . " LIKE '%{$filter['string']}%'";
        }
        return $sql;
    }

Usage Example

コード例 #1
0
ファイル: Pommo_Sql.php プロジェクト: soonick/poMMo
 public static function groupSQL($group, $tally = false, $status = 1, $filter = false)
 {
     // used to prevent against group include/exclude recursion
     static $groups;
     if (!isset($groups[$group['id']])) {
         $groups[$group['id']] = TRUE;
     }
     global $pommo;
     $dbo =& Pommo::$_dbo;
     $rules = Pommo_Sql::sortRules($group['rules']);
     $ands = Pommo_Sql::getSubQueries(Pommo_Sql::sortLogic($rules['and']));
     $ors = empty($rules['or']) ? array() : Pommo_Sql::getSubQueries(Pommo_Sql::sortLogic($rules['or']));
     $sql = $tally ? 'SELECT count(subscriber_id) ' : 'SELECT subscriber_id ';
     $sql .= "\n            FROM {$dbo->table['subscribers']}\n            WHERE status=" . intval($status);
     $q = FALSE;
     if (!empty($ands)) {
         $sql .= " AND (\n";
         foreach ($ands as $k => $s) {
             if ($k != 0) {
                 $sql .= "\n AND ";
             }
             $sql .= $s;
         }
         foreach ($ors as $s) {
             $sql .= "\n OR {$s}";
         }
         $sql .= "\n)";
         $q = TRUE;
     }
     foreach ($rules['exclude'] as $gid) {
         if (!isset($groups[$gid])) {
             $sql .= "\nAND subscriber_id NOT IN (\n";
             $sql .= Pommo_Sql::groupSQL(current(Pommo_Groups::get(array('id' => $gid))));
             $sql .= "\n)";
         }
         $q = TRUE;
     }
     foreach ($rules['include'] as $gid) {
         if (!isset($groups[$gid])) {
             $sql .= "\n" . ($q ? 'OR' : 'AND') . " subscriber_id IN (\n";
             $sql .= Pommo_Sql::groupSQL(current(Pommo_Groups::get(array('id' => $gid))));
             $sql .= "\n)";
         }
         $q = TRUE;
     }
     // If a filter/search is requested, perform a match
     if (is_array($filter) && !empty($filter['field']) && !empty($filter['string'])) {
         // make MySQL LIKE() compliant
         $filter['string'] = mysql_real_escape_string(addcslashes($filter['string'], '%_'));
         $sql .= is_numeric($filter['field']) ? "\n AND subscriber_id in (select subscriber_id from {$dbo->table['subscriber_data']} WHERE field_id = " . (int) $filter['field'] . " AND value LIKE '%{$filter['string']}%')" : "\n AND " . mysql_real_escape_string($filter['field']) . " LIKE '%{$filter['string']}%'";
     }
     return $sql;
 }
All Usage Examples Of Pommo_Sql::groupSQL