db=Zend_Registry::get('db'); $this->view->config = Zend_Registry::get('config'); $this->messenger=$this->_helper->getHelper('FlashMessenger'); $this->view->messages = $this->messenger->getMessages(); $this->wdb=Zend_Db::factory($this->view->config->waterdb); } function postDispatch() { $this->view->messages = $this->messenger->getMessages(); } function indexAction() { //其他连接 } function replaceAction() { //use preg_replace to replace the string $form=new ReplaceForm(); if ($this->_request->isPost()) { $formdata=$this->_request->getPost(); $pattern=$formdata["pattern"]; $form->populate($formdata); if (substr($pattern,0,1)!='/') { $pattern='/'.$pattern.'/m'; } $replace=$formdata["replace"]; if (isset($formdata["test"])) { $this->view->test=preg_replace($pattern,$replace,$formdata["source"]); } elseif (isset($formdata["submit"])) { $sql="select uuid,data from metadata where istemplate = 'n'"; $rows=$this->wdb->fetchAll($sql); foreach($rows as $k=>$row) { //do the replace $new_data=preg_replace($pattern,$replace,$row['data']); //防止正则错误 if (!empty($new_data)) { $sql="update metadata set data=? where uuid=?"; $this->wdb->query($sql,array($new_data,$uuid)); $dom = new DOMDocument(); $dom->loadXML($formdata['source']); $title=$dom->getElementsByTagName('resTitle')->item(0)->nodeValue; $deal['uuid']=$uuid; $deal['title']=$title; $this->view->deal[]=$deal; } } } } $this->view->form=$form; } //替换标题和英文标题到数据引用中,以标题为准 function citetitleAction() { $form=new ReplaceForm(); $form->setElements(array($form->source,$form->test,$form->submit)); if ($this->_request->isPost()) { $formdata=$this->_request->getPost(); $form->populate($formdata); if (isset($formdata["test"])) { $dom = new DOMDocument(); $dom->loadXML($formdata['source']); $root = $dom->getElementsByTagName('Metadata'); $xpath = new DOMXpath($dom); $title_key=$xpath->query("//Metadata/dataIdInfo/idCitation/resTitle"); $title=$title_key->item(0)->nodeValue; $title_en_path=$xpath->query("//Metadata/dataIdInfo/idCitation/resAltTitle"); $title_en=$title_en_path->item(0)->nodeValue; $otherCitDet=$xpath->query("//Metadata/dataIdInfo/idCitation/otherCitDet"); $other=$otherCitDet->item(0)->nodeValue; $other_cn=mb_strstr($other,'[',true); $title_o=mb_strstr($other_cn,'.',false); $title_ol=substr($title_o,1,-4); $title_old=mb_strstr($title_ol,'.',true); $other_eng=mb_strstr($other,'[',false); $titlen_o=mb_strstr($other_eng,'.',false); $titlen_ol=substr($titlen_o,1,-4); $titlen_old=mb_strstr($titlen_ol,',',true); $new_other=str_replace(array($title_old,$titlen_old),array($title,$title_en),$other); $otherCitDet->item(0)->nodeValue=$new_other; $this->view->test= $dom->saveXML($root->item(0)); } elseif (isset($formdata["submit"])) { $sql="select uuid,data from metadata where istemplate = 'n'"; $rows=$this->wdb->fetchAll($sql); foreach($rows as $k=>$row) { //do the replace $dom = new DOMDocument(); $dom->loadXML($row['data']); $uuid = $row['uuid']; $root = $dom->getElementsByTagName('Metadata'); $xpath = new DOMXpath($dom); $title_key=$xpath->query("//Metadata/dataIdInfo/idCitation/resTitle"); $title=$title_key->item(0)->nodeValue; $title_en_path=$xpath->query("//Metadata/dataIdInfo/idCitation/resAltTitle"); $title_en=$title_en_path->item(0)->nodeValue; $otherCitDet=$xpath->query("//Metadata/dataIdInfo/idCitation/otherCitDet"); $other=$otherCitDet->item(0)->nodeValue; $other_cn=mb_strstr($other,'[',true); $title_o=mb_strstr($other_cn,'.',false); $title_ol=substr($title_o,1,-4); $title_old=mb_strstr($title_ol,'.',true); $other_eng=mb_strstr($other,'[',false); $titlen_o=mb_strstr($other_eng,'.',false); $titlen_ol=substr($titlen_o,1,-4); $titlen_old=mb_strstr($titlen_ol,',',true); $new_other=str_replace(array($title_old,$titlen_old),array($title,$title_en),$other); $otherCitDet->item(0)->nodeValue=$new_other; $new_data = $dom->saveXML($root->item(0)); //防止错误 if (!empty($new_data)) { $sql="update metadata set data=? where uuid=?"; $this->wdb->query($sql,array($new_data,$uuid)); $deal['uuid']=$uuid; $deal['title']=$title; $this->view->deal[]=$deal; } } } } $this->view->form=$form; } //文件大小处理 function filesizeAction() { $form=new ReplaceForm(); $form->pattern->setLabel('文件大小'); $form->setElements(array($form->pattern,$form->source,$form->test,$form->submit)); if ($this->_request->isPost()) { $formdata=$this->_request->getPost(); $form->populate($formdata); if (isset($formdata["test"])) { $dom = new DOMDocument(); $dom->loadXML($formdata['source']); $root = $dom->getElementsByTagName('Metadata'); $xpath = new DOMXpath($dom); $title_key=$xpath->query("//Metadata/dataIdInfo/idCitation/resTitle"); $title=$title_key->item(0)->nodeValue; $transize_path=$xpath->query("//Metadata/distInfo/distTranOps/transSize"); $transize_path->item(0)->nodeValue=$formdata['pattern']; $this->view->test= $dom->saveXML($root->item(0)); } elseif (isset($formdata["submit"])) { $sql="select uuid,data from metadata where istemplate = 'n'"; $rows=$this->wdb->fetchAll($sql); foreach($rows as $k=>$row) { //do the replace $dom = new DOMDocument(); $dom->loadXML($row['data']); $root = $dom->getElementsByTagName('Metadata'); $uuid = $row['uuid']; $xpath = new DOMXpath($dom); $title_key=$xpath->query("//Metadata/dataIdInfo/idCitation/resTitle"); $title=$title_key->item(0)->nodeValue; $transize_path=$xpath->query("//Metadata/distInfo/distTranOps/transSize"); $sql="select sum(file_size) as fsize from westdc_fileinfo where meta_uuid = ?"; $this->db->setFetchMode(Zend_Db::FETCH_OBJ); $row=$this->db->fetchRow($sql,array($uuid)); //转换单位为MB $msize=round($row->fsize/(1024*1024),2); if($msize>10){ $msize=round($size/(1024*1024),1); } $transize_path->item(0)->nodeValue=msize; $new_data = $dom->saveXML($root->item(0)); //防止错误 if (!empty($new_data)) { $sql="update metadata set data=? where uuid=?"; $this->wdb->query($sql,array($new_data,$uuid)); $deal['uuid']=$uuid; $deal['title']=$title; $this->view->deal[]=$deal; } } } } $this->view->form=$form; } //修改限制使用说明 //useLimit可以是多项的 function uselimitAction() { $form=new ReplaceForm(); $form->pattern->setLabel('使用声明'); $form->setElements(array($form->pattern,$form->source,$form->test,$form->submit)); if ($this->_request->isPost()) { $formdata=$this->_request->getPost(); $form->populate($formdata); $limit_text=$formdata['pattern']; if (isset($formdata["test"])) { $dom = new DOMDocument(); $dom->loadXML($formdata['source']); $root = $dom->getElementsByTagName('Metadata'); $xpath = new DOMXpath($dom); $title_key=$xpath->query("//Metadata/dataIdInfo/idCitation/resTitle"); $title=$title_key->item(0)->nodeValue; $uselimits=$xpath->query("//Metadata/dataIdInfo/resConst/Consts/useLimit"); $do_uselimit=1; foreach($uselimits as $limit) { //已经有声明,则不需要处理 if ($limit->nodeValue==$limit_text || (strlen($limit->nodeValue)>3)) $do_uselimit=0; } if ($do_uselimit==1) { $new_uselimit=$dom->createElement('useLimit',$limit_text); $new_resconst=$dom->createElement('resConst'); $new_const=$dom->createElement('Consts'); $new_const->appendChild($new_uselimit); $new_resconst->appendChild($new_const); $desckey=$xpath->query("//Metadata/dataIdInfo/descKeys")->item(0); $resconst=$xpath->query("//Metadata/dataIdInfo/resConst")->item(0); if ($resconst) $resconst->parentNode->insertBefore($new_resconst,$resconst); else $desckey->parentNode->insertBefore($new_resconst,$desckey); $new_data=$dom->saveXML(); } $this->view->test= $new_data; } elseif (isset($formdata["submit"])) { $sql="select uuid,data from metadata where istemplate = 'n'"; $rows=$this->wdb->fetchAll($sql); foreach($rows as $k=>$row) { //do the replace $dom = new DOMDocument(); $dom->loadXML($row['data']); $root = $dom->getElementsByTagName('Metadata'); $uuid = $row['uuid']; $xpath = new DOMXpath($dom); $title_key=$xpath->query("//Metadata/dataIdInfo/idCitation/resTitle"); $title=$title_key->item(0)->nodeValue; $uselimits=$xpath->query("//Metadata/dataIdInfo/resConst/Consts/useLimit"); $do_uselimit=1; foreach($uselimits as $limit) { //已经有声明,则不需要处理 if ($limit->nodeValue==$limit_text || (strlen($limit->nodeValue)>3)) $do_uselimit=0; } if ($do_uselimit==1) { $new_uselimit=$dom->createElement('useLimit',$limit_text); $new_resconst=$dom->createElement('resConst'); $new_const=$dom->createElement('Consts'); $new_const->appendChild($new_uselimit); $new_resconst->appendChild($new_const); $desckey=$xpath->query("//Metadata/dataIdInfo/descKeys")->item(0); $resconst=$xpath->query("//Metadata/dataIdInfo/resConst")->item(0); if ($resconst) $resconst->parentNode->insertBefore($new_resconst,$resconst); else $desckey->parentNode->insertBefore($new_resconst,$desckey); $new_data=$dom->saveXML(); //防止错误 if (!empty($new_data)) { $sql="update metadata set data=? where uuid=?"; $this->wdb->query($sql,array($new_data,$uuid)); $deal['uuid']=$uuid; $deal['title']=$title; $this->view->deal[]=$deal; } } } } } $this->view->form=$form; } //联系人信息替换 function contactAction() { if ($this->_request->isPost()) { $formdata=$this->_request->getPost(); if (isset($formdata["test"])) { $this->view->test=$this->contactReplace($formdata["testxml"],$formdata); } elseif (isset($formdata["submit"])) { $sql="select uuid,data from metadata where istemplate = 'n'"; $rows=$this->wdb->fetchAll($sql); foreach($rows as $k=>$row) { //do the replace $new_data=$this->contactReplace($row["data"],$formdata); //防止正则错误 if (!empty($new_data)) { $sql="update metadata set data=? where uuid=?"; $this->wdb->query($sql,array($new_data,$uuid)); $dom = new DOMDocument(); $dom->loadXML($row['data']); $title=$dom->getElementsByTagName('resTitle')->item(0)->nodeValue; $deal['uuid']=$uuid; $deal['title']=$title; $this->view->deal[]=$deal; } } } $this->view->formdata=$formdata; } } private function contactReplace($xml,$replace) { $dom = new DOMDocument(); $dom->loadXML($xml); $xpath = new DOMXpath($dom); $contacts=$xpath->query('//rpIndName'); foreach($contacts as $contact) { if ($contact->nodeValue==$replace['oldname']) { $newrpIndName=$dom->createElement('rpIndName',$replace['name']); $newrpOrgName=$dom->createElement('rpOrgName',$replace['unit']); $newrpCntInfo=$dom->createElement('rpCntInfo'); $newcntPhone=$dom->createElement('cntPhone'); $newrpCntInfo->appendChild($newcntPhone); $newvoiceNum=$dom->createElement('voiceNum',$replace['voicenum']); $newcntPhone->appendChild($newvoiceNum); $newcntAddress=$dom->createElement('cntAddress'); $newrpCntInfo->appendChild($newcntAddress); $newdelPoint=$dom->createElement('delPoint',$replace['delpoint']); $newcntAddress->appendChild($newdelPoint); $newcity=$dom->createElement('city',$replace['city']); $newcntAddress->appendChild($newcity); $newarea=$dom->createElement('adminArea',$replace['adminarea']); $newcntAddress->appendChild($newarea); $newpostCode=$dom->createElement('postCode',$replace['postcode']); $newcntAddress->appendChild($newpostCode); $newcountry=$dom->createElement('country',$replace['country']); $newcntAddress->appendChild($newcountry); $neweMailAdd=$dom->createElement('eMailAdd',$replace['email']); $newcntAddress->appendChild($neweMailAdd); $rporg=$xpath->query('rpOrgName',$contact->parentNode); $contact->parentNode->removeChild($rporg->item(0)); $rpcnt=$xpath->query('rpCntInfo',$contact->parentNode); $contact->parentNode->removeChild($rpcnt->item(0)); $contact->parentNode->insertBefore($newrpIndName,$contact); $contact->parentNode->insertBefore($newrpOrgName,$contact); $contact->parentNode->insertBefore($newrpCntInfo,$contact); $contact->parentNode->removeChild($contact); } } return $dom->saveXML(); } }