db = \Zend_Registry::get('db'); }else{ $this->db = $db; } $this->config = \Zend_Registry::get('config'); $Listener = new FundListener(); @$this->events()->attachAggregate($Listener); $this->table = new \Helpers\Table(); } 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 fund($id = 0) { $data = $this->getFundParam(); $params = compact('data'); $results = $this->events()->trigger('submit.checkParam', $this, $params); $cache_data = $results->bottom(); if($cache_data !== true) { return $cache_data; } $results = $this->events()->trigger('submit.processData', $this, $params); $data = $results->bottom(); unset($data['submit']); $dbh = new dbh(); if(empty($id)) { $id = $dbh->insert($this->table->fund,$data,true); }else{ if(!$dbh->update($this->table->fund,$data," id=$id ",true)) { return "修改失败!请重试"; } } if(!empty($id) && is_numeric($id)) { return true; }else{ return "修改失败"; } } //获得参数 public function getFundParam(\Zend_Controller_Request_Abstract $request = NULL) { $request = new \Zend_Controller_Request_Http(); $data = array( 'title' => trim($request->getParam('title')), 'fund_id' => trim($request->getParam('fund_id')), 'fund_type' => trim($request->getParam('fund_type')), 'title_en' => trim($request->getParam('title_en')), 'fund_type_en' => trim($request->getParam('fund_type_en')), 'userid' => (int)$request->getParam('userid'), ); return $data; } //所有项目 public function fetchFunds() { $wheresql = array(); if(!empty($this->keyword)) { $wheresql[] = " ({$this->table->fund}.title LIKE '%{$this->keyword}%' OR {$this->table->fund}.fund_id LIKE '%{$this->keyword}%') "; } if(!empty($this->field)) { foreach($this->field as $k=>$v) { if(!empty($v)) { if(!is_numeric($v)) $v="'{$v}'"; $wheresql[] = " ({$this->table->fund}.{$k}={$v} ) "; }else{ if(is_numeric($v)) $wheresql[] = " ({$this->table->fund}.{$k} IS NULL OR {$this->table->fund}.{$k}=0 ) "; else $wheresql[] = " ({$this->table->fund}.{$k} IS NULL ) "; }//if(empty($v) }//foreach } if(count($wheresql)>0) { $wheresql = " WHERE ".join(" AND ",$wheresql); }else{ $wheresql = ""; } if(empty($this->order)) { $order = "{$this->table->fund}.title"; }else{ $order = "{$this->table->fund}.{$this->order}"; } $sql = "SELECT {$this->table->fund}.* FROM {$this->table->fund} $wheresql ORDER BY $order {$this->sort}"; $rs = $this->db->query($sql); return $rs->fetchAll(); } //Get references by data UUID public function fetchFundsByUUID($uuid) { $wheresql = array(); $wheresql[]=" mf.uuid='$uuid' "; if(!empty($this->keyword)) { $wheresql[] = " (f.title iLIKE '%{$this->keyword}%' OR f.fund_id iLIKE '%{$this->keyword}%') "; } if(count($wheresql)>0) { $wheresql = " WHERE ".join(" AND ",$wheresql); }else{ $wheresql = ""; } if(empty($this->order)) { $order = "f.title"; }else{ $order = "f.{$this->order} {$this->sort}"; } $sql="select distinct f.*,mf.place,mf.id as mfid from {$this->table->fund} f left join {$this->table->metadata_fund} mf on f.id=mf.fid $wheresql ORDER BY $order"; $rs=$this->db->query($sql); return $rs->fetchAll(); } //Get references with data UUID //包含mdfund的对应信息 public function fetchFundsWithUUID($uuid) { $wheresql = array(); //$wheresql[]=" mf.uuid='$uuid' "; if(!empty($this->keyword)) { $wheresql[] = " (f.title LIKE '%{$this->keyword}%' OR f.fund_id iLIKE '%{$this->keyword}%') "; } if(count($wheresql)>0) { $wheresql = " WHERE ".join(" AND ",$wheresql); }else{ $wheresql = ""; } if(empty($this->order)) { $order = "f.title"; }else{ $order = "f.{$this->order} {$this->sort}"; } $sql="select distinct f.*,mf.place,mf.id as mfid from {$this->table->fund} f left join (select * from {$this->table->metadata_fund} where uuid='$uuid') mf on f.id=mf.fid $wheresql ORDER BY $order"; $rs=$this->db->query($sql); return $rs->fetchAll(); } //数据相关的项目(已和数据进行关联) public function fetchDataFunds() { $wheresql = array(); if(!empty($this->keyword)) { $wheresql[] = " ({$this->table->fund}.title LIKE '%{$this->keyword}%' OR {$this->table->fund}.fund_id LIKE '%{$this->keyword}%') "; } if(!empty($this->field)) { foreach($this->field as $k=>$v) { if(!empty($v)) { if(!is_numeric($v)) $v="'{$v}'"; $wheresql[] = " ({$this->table->fund}.{$k}={$v} ) "; }else{ if(is_numeric($v)) $wheresql[] = " ({$this->table->fund}.{$k} IS NULL OR {$this->table->fund}.{$k}=0 ) "; else $wheresql[] = " ({$this->table->fund}.{$k} IS NULL ) "; }//if(empty($v) }//foreach } if(count($wheresql)>0) { $wheresql = " WHERE ".join(" AND ",$wheresql); }else{ $wheresql = ""; } if(empty($this->order)) { $order = "{$this->table->fund}.title"; }else{ $order = "{$this->table->fund}.{$this->order}"; } $sql = "SELECT {$this->table->fund}.*,count({$this->table->metadata_fund}.uuid) as mdcount FROM {$this->table->fund} left join {$this->table->metadata_fund} on {$this->table->fund}.id={$this->table->metadata_fund}.fid $wheresql group by {$this->table->fund}.id ORDER BY $order {$this->sort}"; $rs = $this->db->query($sql); return $rs->fetchAll(); } //数据不相关的项目(没有和数据进行关联) public function fetchNoDataFunds() { $wheresql = array(); $wheresql[] = " id not in (select fid from {$this->table->metadata_fund}) "; if(!empty($this->keyword)) { $wheresql[] = " ({$this->table->fund}.title LIKE '%{$this->keyword}%' OR {$this->table->fund}.fund_id LIKE '%{$this->keyword}%') "; } if(!empty($this->field)) { foreach($this->field as $k=>$v) { if(!empty($v)) { if(!is_numeric($v)) $v="'{$v}'"; $wheresql[] = " ({$this->table->fund}.{$k}={$v} ) "; }else{ if(is_numeric($v)) $wheresql[] = " ({$this->table->fund}.{$k} IS NULL OR {$this->table->fund}.{$k}=0 ) "; else $wheresql[] = " ({$this->table->fund}.{$k} IS NULL ) "; }//if(empty($v) }//foreach } if(count($wheresql)>0) { $wheresql = " WHERE ".join(" AND ",$wheresql); }else{ $wheresql = ""; } if(empty($this->order)) { $order = "{$this->table->fund}.title"; }else{ $order = "{$this->table->fund}.{$this->order}"; } $sql = "SELECT {$this->table->fund}.* FROM {$this->table->fund} $wheresql ORDER BY $order {$this->sort}"; $rs = $this->db->query($sql); return $rs->fetchAll(); } //单个项目的信息 public function getOneFund($id) { if(empty($id) || !is_numeric($id)) { return false; } $sql = "SELECT * FROM {$this->table->fund} WHERE id=$id LIMIT 1"; $rs = $this->db->query($sql); $row = $rs->fetch(); return $row; } //建立项目与数据的关系 public function createRelationFromFundToData($fid,$uuid,$place,$id = NULL) { if(empty($fid) || !is_numeric($fid)) { return "参数错误"; } if(!view::isUuid($uuid)) { return "参数错误"; } $data = array( 'uuid'=>$uuid, 'fid'=>$fid, 'place'=>$place ); $dbh = new dbh(); if(empty($id)) { $id = $dbh->insert($this->table->metadata_fund,$data,true); if(is_numeric($id)) { return $id; }else{ return "关系写入失败,请检查是否已经存在"; } }else{ $status = $dbh->update($this->table->metadata_fund,$data," id=$id "); if($status === true) { return $id; }else{ return "修改失败"; } } } //获得某个项目关联的数据 public function getDataByFund($id) { if(empty($id) || !is_numeric($id)) { return "参数错误"; } $sql = "SELECT mr.id,mr.fid,mr.place,md.title,md.uuid FROM {$this->table->metadata_fund} mr LEFT JOIN {$this->table->metadata} md ON mr.uuid=md.uuid WHERE mr.fid=$id ORDER BY mr.place ASC"; $rs = $this->db->query($sql); $rows = $rs->fetchAll(); return $rows; } //数据项目参数 public function getMdfundParam(\Zend_Controller_Request_Abstract $request = NULL) { $request = new \Zend_Controller_Request_Http(); $data = array( 'uuid' => trim($request->getParam('uuid')), 'fid' => (int)$request->getParam('fid'), 'place' => (int)$request->getParam('place'), ); return $data; } //写入项目信息 public function makeMdfund($id = NULL) { $data = $this->getMdfundParam(); $results = $this->events()->trigger('mdfund.checkParam', $this, compact('data')); $cache_data = $results->bottom(); if($cache_data !== true) { return $cache_data; } $results = $this->events()->trigger('mdfund.processData', $this, compact('data')); $data = $results->bottom(); $id = $this->createRelationFromFundToData($data['fid'],$data['uuid'],$data['place'],$id); if(is_numeric($id)) { return true; }else{ return $id; } } //删除项目以及项目和数据的关联(彻底删除) public function delete($id) { if(empty($id) || !is_numeric($id)) { return false; } $sql = "DELETE FROM {$this->table->fund} WHERE id=$id"; @$this->db->exec($sql); $sql = "DELETE FROM {$this->table->metadata_fund} WHERE fid=$id"; @$this->db->exec($sql); return true; } //移除数据和项目的关联 public function remove($id) { if(empty($id) || !is_numeric($id)) { return "参数错误"; } $sql = "DELETE FROM {$this->table->metadata_fund} WHERE id=$id"; if($this->db->exec($sql)) { return true; }else{ return "删除失败"; } } }