public static function buildUserListCriteria(&$criteria, &$params_list, $is_module = false, $mid = 'main_id') { if (empty($params_list)) { return null; } $conditions = $values = $joins = array(); if ($is_module) { $m = 'm'; $m2 = 'u'; $mid = 'm.id'; $midi18n = $mid; $join = null; $join_id = null; $join_idi18n = null; $join_i18n = 'user_i18n'; $join_private_data = 'user_pd'; } else { $m = 'u'; $m2 = $m; $mid = array('l' . $m, $mid); $midi18n = implode('.', $mid); $join = 'user'; $join_id = $join . '_id'; $join_idi18n = $join . '_idi18n'; $join_i18n = $join . '_i18n'; $join_private_data = $join . '_pd'; } $nb_id = 0; $nb_name = 0; if ($is_module) { $nb_id = self::buildConditionItem($conditions, $values, $joins, $params_list, 'List', $mid, array('id', 'users'), $join_id); } else { $nb_id = self::buildConditionItem($conditions, $values, $joins, $params_list, 'MultiId', $mid, 'users', $join_id); } $has_id = $nb_id == 1; if (!$has_id) { if ($is_module) { self::buildConditionItem($conditions, $values, $joins, $params_list, 'Array', array($m, 'u', 'activities'), 'act', $join); self::buildConditionItem($conditions, $values, $joins, $params_list, 'Georef', $join, 'geom', $join); $nb_name = self::buildConditionItem($conditions, $values, $joins, $params_list, 'Mstring', array(array($midi18n, 'ui.search_name'), array($midi18n, 'upd.search_username')), 'utfnam', array(array($join_idi18n, $join_i18n), array($join_idi18n, $join_private_data)), array('User', 'UserPrivateData')); if ($nb_name === 'no_result') { return $nb_name; } elseif ($nb_name[0]['nb_result'] == 0) { $nb_id += $nb_name[1]['nb_result']; } elseif ($nb_name[1]['nb_result'] == 0) { $nb_id += $nb_name[0]['nb_result']; } } // friends $user_groups = c2cTools::getArrayElement($params_list, 'friends'); if (!is_null($user_groups)) { $user_groups = explode(' ', $user_groups); $user_ids = array(); $friend_ids = array(); $first_group = true; foreach ($user_groups as $user_group) { $user_group_ids = explode('-', $user_group); $user_ids = array_merge($user_ids, $user_group_ids); $conditions_temp = array("a.type = 'uo'"); $values_temp = array(); self::buildListCondition($conditions_temp, $values_temp, 'lu.main_id', $user_group); $where = implode(' AND ', $conditions_temp); $friends = Doctrine_Query::create()->select('DISTINCT a.main_id')->from('Association a')->leftJoin('a.MainMainAssociation lu')->where($where, $values_temp)->execute(array(), Doctrine::FETCH_ARRAY); if (count($friends)) { $friend_group_ids = array(); foreach ($friends as $friend) { $friend_group_ids[] = $friend['main_id']; } $friend_group_ids = array_unique($friend_group_ids); if ($first_group) { $friend_ids = $friend_group_ids; } else { $friend_ids = array_intersect($friend_ids, $friend_group_ids); } } $first_group = false; } if (count($friend_ids)) { $friend_ids = array_diff($friend_ids, $user_ids); } if (count($friend_ids)) { $params_list['friends'] = implode('-', $friend_ids); if ($is_module) { self::buildConditionItem($conditions, $values, $joins, $params_list, 'List', $mid, 'friends', $join_id); } else { self::buildConditionItem($conditions, $values, $joins, $params_list, 'MultiId', $mid, 'friends', $join_id); } } else { return 'no_result'; } } self::buildConditionItem($conditions, $values, $joins, $params_list, 'Around', $m2 . '.geom', 'uarnd', $join); $nb_name = self::buildConditionItem($conditions, $values, $joins, $params_list, 'String', array($midi18n, 'ui.search_name'), $is_module ? array('unam', 'name') : 'unam', array($join_idi18n, $join_i18n), 'User'); if ($nb_name === 'no_result') { return $nb_name; } $nb_id += $nb_name; self::buildConditionItem($conditions, $values, $joins, $params_list, 'String', array($midi18n, 'upd.search_username'), 'ufnam', array($join_idi18n, $join_private_data), 'UserPrivateData'); if ($nb_name === 'no_result') { return $nb_name; } $nb_id += $nb_name; self::buildConditionItem($conditions, $values, $joins, $params_list, 'Array', array($m, 'u', 'activities'), 'uact', $join); self::buildConditionItem($conditions, $values, $joins, $params_list, 'List', $m . '.category', 'ucat', $join); self::buildConditionItem($conditions, $values, $joins, $params_list, 'List', 'ui.culture', 'ucult', $join_i18n); // article criteria $nb_name = Article::buildArticleListCriteria($criteria, $params_list, false, 'u', 'linked_id'); if ($nb_name === 'no_result') { return $nb_name; } if (isset($criteria[2]['join_uarticle'])) { $joins['join_user'] = true; if (!$is_module) { $joins['post_user'] = true; } } } if (!empty($conditions)) { $criteria[0] = array_merge($criteria[0], $conditions); $criteria[1] = array_merge($criteria[1], $values); } if (!empty($joins)) { $joins['join_user'] = true; } if ($is_module && $nb_id) { $joins['nb_id'] = $nb_id; } $criteria[2] += $joins; return null; }
public static function buildAreaCriteria(&$criteria, &$params_list, $m = 'm', $m2 = null, $join = null, $use_around = true) { $conditions = $values = $joins = $joins_order = array(); // orderby criteria $orderby_list = c2cTools::getRequestParameterArray(array('orderby', 'orderby2', 'orderby3')); self::buildOrderCondition($joins_order, $orderby_list, array('range'), 'range'); self::buildOrderCondition($joins_order, $orderby_list, array('admin'), 'admin'); self::buildOrderCondition($joins_order, $orderby_list, array('country'), 'country'); self::buildOrderCondition($joins_order, $orderby_list, array('valley'), 'valley'); $criteria[3] += $joins_order; if (empty($params_list)) { return null; } if (c2cTools::getArrayElement($params_list, 'areas')) { self::buildConditionItem($conditions, $values, $joins, $params_list, 'MultiId', array('g', 'linked_id'), 'areas', 'area_id'); } if (c2cTools::getArrayElement($params_list, 'bbox')) { self::buildConditionItem($conditions, $values, $joins, $params_list, 'Bbox', 'm.geom', 'bbox', null); } elseif ($use_around && c2cTools::getArrayElement($params_list, 'around')) { if (empty($m2)) { $m2 = $m; } self::buildConditionItem($conditions, $values, $joins, $params_list, 'Around', $m2 . '.geom', 'around', $join); } if (!empty($conditions)) { $criteria[0] = array_merge($criteria[0], $conditions); $criteria[1] = array_merge($criteria[1], $values); } $criteria[2] += $joins; $criteria[3] += $joins_order; }