[Agora-commits] agora/ecrire/include/bd/oci8 article_oci8.php, 1.1,
1.1.2.1
oliviermansour at adullact1.hosting.cri74.org
oliviermansour at adullact1.hosting.cri74.org
Ven 30 Déc 17:56:31 CET 2005
Update of /cvsroot/agora/agora/ecrire/include/bd/oci8
In directory adullact1:/tmp/cvs-serv4104/ecrire/include/bd/oci8
Modified Files:
Tag: SPIP_AGORA_Charlotte
article_oci8.php
Log Message:
OCI Driver
Index: article_oci8.php
===================================================================
RCS file: /cvsroot/agora/agora/ecrire/include/bd/oci8/article_oci8.php,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -d -r1.1 -r1.1.2.1
--- article_oci8.php 24 Nov 2005 14:24:47 -0000 1.1
+++ article_oci8.php 30 Dec 2005 16:56:28 -0000 1.1.2.1
@@ -155,6 +155,240 @@
}
// }}}
+
+
+
+
+
+ // {{{ update()
+
+ /**
+ * This method is used to update this article in the database
+ * @access public
+ */
+
+ function update() {
+ $db = &$this->_getDB();
+ if (DB::isError($db)) {
+ return PEAR::raiseError("[".get_class($this)." DB_article : update()] ".$db->getMessage()."", null,
+ null, null, null, null, false);
+ }
+ /*
+ if ($this->_date == "NOW()") $dateValue = "NOW()"; else $dateValue = "'".$db->quoteString($this->_date)."'";
+ if ($this->_modificationDate == "NOW()") $dateModifValue = "NOW()"; else $dateModifValue = "'".$db->quoteString($this->_date)."'";
+ */
+
+ $maDate = new Date();
+ $this->setMajDate($maDate->getDate(DATE_FORMAT_ISO));
+
+
+ // calcul du secteur ... à chaque fois
+ $rubriqueMetier = &recuperer_instance_rubrique();
+ $rubriqueMetier->load($this->_rubriqueId);
+ $this->_secteurId = $rubriqueMetier->findSectorId();
+
+
+ // vérification de la date d'expiration
+ if (!is_null($this->_expirationDate) and ($this->_expirationDate != '0000-00-00 00:00:00')) {
+ include_once (dirname(__FILE__).'/../../date.php');
+ // la date d'expiration doit être supérieure a la date de publication en ligne
+ if (Date::compare(new Date($this->getExpirationDate()), new Date($this->getDate())) < 0) {
+ $this->_expirationDate = null; // cette date n'est pas valide
+ }
+ }
+
+ // avec Oracle le CLOB doit s'inserer 4000 par 4000 ou via un pointeur !
+ if (strlen($this->_texte) < 3980) { // OK
+
+
+ $query = "UPDATE ".$GLOBALS['table_prefix']."_articles "
+ ."SET surtitre = '".$db->quoteString($this->_surtitre)."', "
+ ."titre = '".$db->quoteString($this->_titre)."', soustitre = '".$db->quoteString($this->_soustitre)."', "
+ ."id_rubrique = ".$this->_rubriqueId.", descriptif = '".$db->quoteString($this->_descriptif)."', "
+ ."chapo = '".$db->quoteString($this->_chapo)."', texte = '".$db->quoteString($this->_texte)."', "
+ ."ps = '".$db->quoteString($this->_ps)."', date_heure = '".$db->quoteString($this->_date)."', "
+ ."statut = '".$db->quoteString($this->_statut)."', id_secteur = ".$this->_secteurId.", "
+ ."maj = '".$db->quoteString($this->_majDate)."', export = '".$db->quoteString($this->_export)."', "
+ ."date_redac = '".$db->quoteString($this->_redactionDate)."', visites = ".$this->_visites.", "
+ ."referers = ".$this->_referers.", popularite = ".$this->_popularite.", "
+ ."accepter_forum = '".$db->quoteString($this->_accepterForum)."', auteur_modif = ".$this->_auteurModif.", "
+ ."date_modif = '".$db->quoteString($this->_modificationDate)."', extra = '".$db->quoteString($this->_extra)."', "
+ ."lang = '".$db->quoteString($this->_lang)."', langue_choisie= '" . $db->quoteString($this->_langChoisie) . "', "
+ ."id_trad = '".$this->_tradId."', nom_site= '" . $db->quoteString($this->_nomSite) . "', "
+ ."url_site = '".$db->quoteString($this->_urlSite)."',"
+ ."activer_historique = '".$this->_activerHistorique."',"
+ ."date_expiration = '".$this->_expirationDate."' "
+ ." WHERE id_article = ".$this->_articleId;
+
+ $result = $db->query($query);
+ if (DB::isError($result)) {
+ return PEAR::raiseError("[".get_class($this)." DB_article : update() $query => $query ] ".$result->getMessage()."", null,
+ null, null, null, null, false);
+ }
+
+ } else {
+ // 1st update with empty clob
+ $query = "UPDATE ".$GLOBALS['table_prefix']."_articles "
+ ."SET surtitre = '".$db->quoteString($this->_surtitre)."', "
+ ."titre = '".$db->quoteString($this->_titre)."', soustitre = '".$db->quoteString($this->_soustitre)."', "
+ ."id_rubrique = ".$this->_rubriqueId.", descriptif = '".$db->quoteString($this->_descriptif)."', "
+ ."chapo = '".$db->quoteString($this->_chapo)."', texte = EMPTY_CLOB(), "
+ ."ps = '".$db->quoteString($this->_ps)."', date_heure = '".$db->quoteString($this->_date)."', "
+ ."statut = '".$db->quoteString($this->_statut)."', id_secteur = ".$this->_secteurId.", "
+ ."maj = '".$db->quoteString($this->_majDate)."', export = '".$db->quoteString($this->_export)."', "
+ ."date_redac = '".$db->quoteString($this->_redactionDate)."', visites = ".$this->_visites.", "
+ ."referers = ".$this->_referers.", popularite = ".$this->_popularite.", "
+ ."accepter_forum = '".$db->quoteString($this->_accepterForum)."', auteur_modif = ".$this->_auteurModif.", "
+ ."date_modif = '".$db->quoteString($this->_modificationDate)."', extra = '".$db->quoteString($this->_extra)."', "
+ ."lang = '".$db->quoteString($this->_lang)."', langue_choisie= '" . $db->quoteString($this->_langChoisie) . "', "
+ ."id_trad = '".$this->_tradId."', nom_site= '" . $db->quoteString($this->_nomSite) . "', "
+ ."url_site = '".$db->quoteString($this->_urlSite)."',"
+ ."activer_historique = '".$this->_activerHistorique."',"
+ ."date_expiration = '".$this->_expirationDate."' "
+ ." WHERE id_article = ".$this->_articleId;
+
+ $result = $db->query($query);
+ if (DB::isError($result)) {
+ return PEAR::raiseError("[".get_class($this)." DB_article : update() $query => $query ] ".$result->getMessage()."", null,
+ null, null, null, null, false);
+ }
+
+ // on fait ça a l'ancienne pour le CLOB
+ // 2nd update with just the texte CLOB
+ $conn = ociLogon ($this->_dbParameters->getDbHost(), $this->_dbParameters->getDbUser(), $this->_dbParameters->getDbPass());
+
+ $query = "UPDATE ".$GLOBALS['table_prefix']."_articles set texte = EMPTY_CLOB() WHERE id_article = ".$this->_articleId." " .
+ "returning texte into :THE_CLOB";
+ $DBresult = ociparse($conn, $query);
+ $Clob = OCINewDescriptor($conn, OCI_D_LOB);
+ OCIBindByName($DBresult, ":THE_CLOB", &$Clob, -1, OCI_B_CLOB);
+ OCIExecute($DBresult, OCI_DEFAULT);
+ $Clob->save($this->_texte);
+ ocicommit($conn);
+ ociLogoff ($conn);
+
+ //var_dump ($test);
+
+ }
+
+ //die ( "<br><br>$query<br><br>");
+
+
+
+ // vérification de la non expiration de l'article
+ if ($this->isExpired()) {
+ // je dois repasser sur la rubrique - j'ai déjà un objet rubriqueMetier
+ if ( $rubriqueMetier->checkForExpired() ) { // va modifier mon objet rubrique
+ $update = $rubriqueMetier->update();
+ if ( PEAR::isError($update) ) {
+ PEAR::raiseError("Rubrique::update $id error".$update->getMessage(), PEAR_LOG_ERR);
+ } else {
+ // je dois recharger mon article si je compte utiliser mon objet apres
+ $this->setIsLoaded(false);
+ $this->load($this->getArticleId());
+ }
+ }
+ }
+
+
+ // Mise à jour des objets liés
+ $this->updateRelatedObjects();
+
+ // Mise à jour de l'embargo
+ $this->updateEmbargo();
+
+ /******* Ajout MAPPING guillaume.grason at diplomatie.gouv.fr *******/
+ if ($this->getStatut()=='mappe') { // il faut mettre à jour la rubrique
+ $rubriqueMetier->load($this->getRubriqueId());
+ $statut = $rubriqueMetier->getStatutFromRubrique($this->getRubriqueId());
+ if ($statut != $rubriqueMetier->getStatut()) {
+ $rubriqueMetier->setStatut($statut);
+ $rubriqueMetier->update();
+ }
+ unset ($rubriqueMetier);
+ }
+ /******* Fin Ajout MAPPING guillaume.grason at diplomatie.gouv.fr *******/
+ }
+
+ // }}}
+
+
+
+ // {{{ load()
+
+ /**
+ * This method is used to load an article from the database
+ * @access public
+ * @param int $idArticle id of article to load
+ */
+
+ function load($idArticle) {
+ if (($this->_isLoaded) and ($this->_articleId == $idArticle)) return; // l'article est chargé
+
+ $db = &$this->_getDB();
+ if (DB::isError($db)) {
+ return PEAR::raiseError("[".get_class($this)." DB_article : load()] ".$db->getMessage()."", null,
+ null, null, null, null, false);
+ }
+
+ define("ARTICLE_ALL_FIELDS_WH_TEXTE", " id_article, surtitre, titre, soustitre, id_rubrique, descriptif, chapo, "
+ ."ps, date_heure, statut, id_secteur, maj, export, date_redac, visites, referers, popularite, "
+ ."accepter_forum, auteur_modif, date_modif, extra, lang, langue_choisie, id_trad, nom_site, url_site, version_id, activer_historique, date_expiration ");
+
+ $query = "SELECT".ARTICLE_ALL_FIELDS_WH_TEXTE."FROM ".$GLOBALS['table_prefix']."_articles WHERE id_article = $idArticle";
+
+
+ //echo "<br>" . $query . "<br>";
+
+ $result = $db->query($query);
+
+ if (DB::isError($result)) {
+ return PEAR::raiseError("[".get_class($this)." DB_article : load() $query => $query ] ".$result->getMessage()."", null,
+ null, null, null, null, false);
+ } else {
+ if ($row = $result->fetchRow()) {
+
+ $maDate = new Date($row['maj']);
+ $row['maj']= $maDate->getDate(DATE_FORMAT_TIMESTAMP);
+
+ $this->_fetchData($row);
+ } else {
+ return PEAR::raiseError("[".get_class($this)." DB_article : load($idArticle)] Aucun article ne correspond pas à cet ID!", null,
+ null, null, null, null, false);
+ }
+ $result->free();
+ }
+
+ // okay, maintenant on récupère le texte
+ $DBlink = ociLogon ($this->_dbParameters->getDbHost(), $this->_dbParameters->getDbUser(), $this->_dbParameters->getDbPass());
+ $query = "SELECT texte FROM ".$GLOBALS['table_prefix']."_articles WHERE id_article = $idArticle";
+ $stmt=OCIParse($DBlink,$query);
+ OCIExecute($stmt,OCI_DEFAULT);
+ $result = array();
+ $x=0;
+ while(OCIFetch($stmt)){
+ $ncols=OCINumCols($stmt);
+ $result[$x] = array();
+ for($i=1,$j=0;$i<=$ncols;$i++,$j++){
+ $column_name=OCIColumnName($stmt,$i);
+ if(is_object($tmp=OCIResult($stmt,$i))&&OCIColumnType($stmt,$i)=='CLOB'){
+ $column_value=$tmp->load();
+ }else{
+ $column_value=$tmp;
+ }
+ $result[$x][$j] = $column_value;
+ }
+ $x++;
+ }
+ $this->_texte = $result[0][0]; // TODO must be optimized ?
+
+ // l'article est chargé
+ $this->_isLoaded = true;
+ }
+
+ // }}}
+
+
}
Plus d'informations sur la liste de diffusion Agora-commits