Inheritance: extends CommonModel
 public function preview($id)
 {
     $user_model = new UsersModel();
     $medal_model = new MedalModel();
     $user = $user_model->find($id);
     $medals = $medal_model->select_by_userid($id);
     if ($user) {
         $this->assign('medals', $medals);
         $this->assign('user', $user);
         $this->display();
     }
 }
 public function query_map($param)
 {
     $users_where = array();
     $events_where = array();
     // $param = san($param);
     if (!empty($param['where'])) {
         $users_where[] = $events_where[] = $param['where'];
     }
     $users_where[] = "type != 'ind'";
     if (!empty($param['type'])) {
         if ($param['type'] == 'excsr' || $param['type'] == 'csr') {
             //special case #1: ind events belongs to csr
             $users_where[] = "type='csr'";
             $events_where[] = "(type='csr' or type='ind')";
         } else {
             if ($param['type'] == 'csr') {
                 $users_where[] = $events_where[] = "type='csr'";
             } else {
                 if ($param['type'] == 'exngo' || $param['type'] == 'ngo') {
                     //special case #2: fund belongs to extended ngo concept
                     $users_where[] = $events_where[] = "(type='ngo' or type='fund')";
                 } else {
                     $users_where[] = $events_where[] = "type='" . $param['type'] . "'";
                 }
             }
         }
     }
     //领域限制
     if (!empty($param['field'])) {
         $events_where[] = "item_field like '%" . $param['field'] . "%'";
         $users_where[] = "work_field like '%" . $param['field'] . "%'";
     }
     //省份限制
     if (!empty($param['province'])) {
         $users_where[] = $events_where[] = "province like '%" . $param['province'] . "%'";
     }
     if (!empty($param['medal_name'])) {
         $users_where[] = "medals like '%" . x($param['medal_name']) . "%'";
     }
     if (!empty($param['medal'])) {
         $medal_model = new MedalModel();
         $user_ids = $medal_model->select_user_ids_by_medal_id($param['medal']);
         $events_where[] = "user_id in (" . implode(',', $user_ids) . ")";
         $users_where[] = "id in (" . implode(',', $user_ids) . ")";
     }
     //资源标签限制
     if (!empty($param['res_tags'])) {
         $events_where[] = "res_tags like '%" . $param['res_tag'] . "%'";
     }
     if (!empty($param['res_tags2'])) {
         $events_where[] = "res_tags like '%" . $param['res_tag2'] . "%'";
     }
     if (!empty($param['key'])) {
         $events_where[] = "(name like '%" . $param['key'] . "%' or description like '%" . $param['key'] . "%')";
         $users_where[] = "(name like '%" . $param['key'] . "%' or introduction like '%" . $param['key'] . "%')";
     }
     if (!empty($param['start_lon'])) {
         $events_where[] = "longitude > " . $param['start_lon'];
         $users_where[] = "longitude > " . $param['start_lon'];
     }
     if (!empty($param['end_lon'])) {
         $events_where[] = "longitude < " . $param['end_lon'];
         $users_where[] = "longitude < " . $param['end_lon'];
     }
     if (!empty($param['start_lat'])) {
         $events_where[] = "latitude > " . $param['start_lat'];
         $users_where[] = "latitude > " . $param['start_lat'];
     }
     if (!empty($param['end_lat'])) {
         $events_where[] = "latitude < " . $param['end_lat'];
         $users_where[] = "latitude < " . $param['end_lat'];
     }
     //进度限制
     if (!empty($param['progress'])) {
         $today = date('Y-m-d');
         switch ($param['progress']) {
             case 'planning':
                 $events_where[] = "events.begin_time>'{$today}'";
                 break;
             case 'running':
                 $events_where[] = "events.begin_time<'{$today}' and events.end_time>'{$today}'";
                 break;
             case 'finished':
                 $events_where[] = "events.end_time<'{$today}'";
                 break;
             case 'delayed':
                 $events_where[] = "events.progress=1";
                 break;
             case 'failed':
                 //尚未考虑拖延一定时间自动失败
                 $events_where[] = "events.progress=2";
                 break;
             case 'daily':
                 $events_where[] = "events.progress=3";
                 break;
         }
     }
     // if it is not expert mode, only show checked items
     if (!isset($param['expert_mode'])) {
         $events_where[] = $users_where[] = 'is_checked=1';
     }
     $events_where[] = $users_where[] = 'enabled=1';
     $order = "";
     if (!empty($param['order'])) {
         $order = ' order by ' . $param['order'];
     }
     if (isset($param['expert_mode'])) {
         $order = ' order by is_checked, create_time desc';
     }
     $limit = "";
     if (!empty($param['limit'])) {
         $limit = ' limit ' . $param['limit'];
     }
     $sql_list = array();
     if (!empty($param['user_fields'])) {
         $sql_list[] = '(select ' . $param['user_fields'] . ' from users where ' . implode(" and ", $users_where) . ')';
     }
     if (!empty($param['event_fields'])) {
         $sql_list[] = '(select ' . $param['event_fields'] . ' from events where ' . implode(" and ", $events_where) . ')';
     }
     $sql = implode(' union ', $sql_list) . $order . $limit;
     $result = $this->query($sql);
     if (!$result) {
         $result = array();
     }
     return $result;
 }
 public function list_index()
 {
     $map_data_model = D('MapData');
     $record_per_page = C('LIST_RECORD_PER_PAGE');
     if (!isset($query_param)) {
         $query_param = array();
     }
     if (isset($_GET['clear_all'])) {
         unset($_SESSION['list_queries']);
         $query_param = array();
     } else {
         $query_param = $_SESSION['list_queries'];
     }
     foreach ($_GET as $k => $v) {
         if (isset($query_param[$k]) && $v === '0') {
             unset($query_param[$k]);
         } else {
             $query_param[$k] = $v;
         }
     }
     if (!isset($query_param['model'])) {
         $query_param['model'] = 'users';
     }
     if (!isset($query_param['type'])) {
         $query_param['type'] = 'ngo';
     }
     if (isset($query_param['province']) && $this->is_province_master($query_param['province'])) {
         $is_expert_mode = true;
     } else {
         $is_expert_mode = false;
     }
     $_SESSION['list_queries'] = $query_param;
     $user_fields = "*, 'users' model";
     $event_fields = "*, 'events' model";
     if (!empty($query_param['model'])) {
         if ($query_param['model'] == 'users') {
             $query_param['user_fields'] = $user_fields;
         } else {
             if ($query_param['model'] == 'events') {
                 $query_param['event_fields'] = $event_fields;
             }
         }
     } else {
         $query_param['user_fields'] = $user_fields;
         $query_param['event_fields'] = $event_fields;
     }
     // export excel
     if (isset($_GET['export']) && $is_expert_mode) {
         $result = $map_data_model->query_map($query_param);
         if ($query_param['model'] == 'users') {
             $fields = array('name' => '名称', 'contact_name' => '联系人', 'public_email' => '电子邮箱', 'phone' => '联系电话', 'website' => '网站', 'city' => '所在城市', 'county' => '所在乡镇', 'place' => '地址', 'aim' => '机构使命', 'introduction' => '简介', 'work_field' => '服务领域', 'register_type' => '注册类型', 'register_year' => '注册年份', 'staff_fulltime' => '全职人数', 'staff_parttime' => '兼职人数', 'staff_volunteer' => '志愿者人数', 'financial_link' => '财务报告链接');
         } else {
             if ($query_param['model'] == 'events') {
                 $fields = array('name' => '名称', 'description' => '简介', 'contact_name' => '联系人', 'contact_email' => '电子邮箱', 'contact_phone' => '联系电话', 'contact_qq' => '联系qq', 'begin_time' => '开始时间', 'item_field' => '项目领域', 'city' => '所在城市', 'county' => '所在乡镇');
             }
         }
         $this->output_excel($fields, $result);
         return;
     }
     if ($is_expert_mode) {
         // if expert mode, do display unchecked items
         $query_param['expert_mode'] = 1;
     }
     $total_number = $map_data_model->query_number($query_param);
     if (isset($_GET['p'])) {
         $page = $_GET['p'];
     } else {
         $page = 1;
     }
     $limit_start = ($page - 1) * $record_per_page;
     $query_param['limit'] = $limit_start . ',' . $record_per_page;
     if ($query_param['model'] == 'users') {
         $query_param['order'] = "medal_score desc, create_time desc";
     } else {
         $query_param['order'] = "create_time desc";
     }
     import("ORG.Util.TBPage");
     $Page = new TBPage($total_number, $record_per_page);
     $page_bar = $Page->show();
     $data = $map_data_model->query_map($query_param);
     $medal_model = new MedalModel();
     $this->assign('medal_map', $medal_model->select_as_assoc_array());
     $this->assign('pager', $page_bar);
     $this->assign('params', $query_param);
     $this->assign('page', $page);
     $this->assign('total_number', $total_number);
     $this->assign('result', $data);
     $this->assign('is_expert_mode', $is_expert_mode);
     $this->display();
 }