db = $db; $this->config = Zend_Registry::get('config'); $this->geonetwork(); } private function geonetwork(){ $db = Zend_Db::factory($this->config->geonetwork); Zend_Db_Table::setDefaultAdapter($db); $this->gdb = $db; } public function events(Zend_EventManager_EventCollection $events = NULL) { if ($events !== NULL) { $this->events = $events; } elseif ($this->events === NULL) { $this->events = new Zend_EventManager_EventManager(__CLASS__); } return $this->events; } public function fetchRegion($type = NULL,$filter = NULL) { if(empty($type)) { $sql = "SELECT * FROM ".$this->tbl_regions." ORDER BY id ASC"; }else{ $wheresql = array(); if(!empty($filter)) { if(isset($filter['q'])) { $wheresql[] = " rs.label LIKE '%".$filter['q']."%'"; } } $where=" where rs.langid='cn' "; if(count($wheresql)<1) $where .= ""; else $where .= " and ".join(" AND ",$wheresql); $sql = "SELECT rs.*,r.* FROM ".$this->tbl_regions." r LEFT JOIN ".$this->tbl_regionsdes." rs ON r.id=rs.iddes $where ORDER BY r.id desc"; } $rs = $this->gdb->query($sql); return $rs->fetchAll(); }//列表 public function get($id) { $sql = "SELECT * FROM ".$this->tbl_regions." WHERE id=$id"; $rs = $this->gdb->query($sql); $data = $rs->fetch(); $sql = "SELECT * FROM ".$this->tbl_regionsdes. " WHERE iddes=$id"; $rs = $this->gdb->query($sql); $data['info'] = $rs->fetchAll(); return $data; }//获取单个 public function del($id,$langid = NULL) { if(empty($langid)) { $this->gdb->exec("DELETE FROM ".$this->tbl_regionsdes." WHERE iddes=$id"); $this->gdb->exec("DELETE FROM ".$this->tbl_regions." WHERE id=$id"); return true; }else{ return $this->gdb->exec("DELETE FROM ".$this->tbl_regionsdes." WHERE iddes=$id AND langid='$langid'"); } }//shanchui public function addRegion($data,$id = '') { $results = $this->events()->trigger('addRegion.pre', $this, compact('data')); $data = $results->bottom(); if(is_string($data)) return $data; $results = $this->events()->trigger('addRegion.check', $this, compact('data','id')); $data = $results->bottom(); if(is_string($data)) return $data; include_once("helper/dbh.php"); $dbh = new dbh($this->gdb); $cache_data = $data; unset($data['info']); if(empty($id)) { $id = $dbh->insert($this->tbl_regions,$data,true); if($id > 0) { $s = true; } }else{ $s = $dbh->update($this->tbl_regions,$data,"id=$id"); } $results = $this->events()->trigger('addRegion.post', $this, compact('cache_data','id')); if($s) { return true; }else{ return "添加失败,请重试"; } }//增加 } class RegionListener implements Zend_EventManager_ListenerAggregate { private $db; //传入PDO对象. private $gdb; //geonetwork database private $id_start = 5000; private $id_end = 9999; public $tbl_regions = "regions"; public $tbl_regionsdes = "regionsdes"; function __construct($db = NULL) { if(empty($db)) { $this->db = Zend_Registry::get('db'); }else{ $this->db = $db; } $this->config = Zend_Registry::get('config'); $this->geonetwork(); } private function geonetwork(){ $db = Zend_Db::factory($this->config->geonetwork); Zend_Db_Table::setDefaultAdapter($db); $this->gdb = $db; } public function attach(Zend_EventManager_EventCollection $events) { $events->attach('addRegion.pre', array($this, 'scanField'), 100); $events->attach('addRegion.check', array($this, 'checkParam'), 80); $events->attach('addRegion.post', array($this, 'process'), 50); } public function detach(Zend_EventManager_EventCollection $events) { } //扫描字段 function scanField($e){ $data = $e->getParam('data'); if(!is_array($data)) { return false; } $data['east'] = (float)$data['east']; $data['west'] = (float)$data['west']; $data['south'] = (float)$data['south']; $data['north'] = (float)$data['north']; if(empty($data['east']) || empty($data['west']) || empty($data['south']) || empty($data['north'])) { return "请填写四至范围"; } foreach($data['info'] as $k=>$v) { if(empty($v['langid']) && empty($v['label'])) { unset($data['info'][$k]); } } return $data; }//scanField //检查参数 function checkParam($e){ $data = $e->getParam('data'); $id = $e->getParam('id'); if(empty($id)) { $sql = "SELECT * FROM ".$this->tbl_regions." WHERE north=".$data['north']." AND south=".$data['south']." AND west=".$data['west']." AND east=".$data['east']; $rs = $this->gdb->query($sql); $row = $rs->fetch(); if(!empty($row['id'])) { return "此范围已存在"; } $sql = "select max(id) as c FROM ".$this->tbl_regions." WHERE id>=".$this->id_start." AND id<".$this->id_end; $rs = $this->gdb->query($sql); $row = $rs->fetch(); if(empty($row['c'])) { $data['id'] = $this->id_start; }else{ $data['id'] = $row['c'] + 1; } } return $data; }//checkParam function process($e) { $data = $e->getParam('cache_data'); $id = $e->getParam('id'); $this->gdb->exec("DELETE FROM ".$this->tbl_regionsdes." WHERE iddes=$id"); foreach($data['info'] as $k=>$v) { $this->gdb->insert($this->tbl_regionsdes,array('iddes'=>$id,'langid'=>$v['langid'],'label'=>$v['label'])); } } }