Subversion Repositories eFlore/Applications.cel

Rev

Blame | Last modification | View Log | RSS feed

<?php


Class ImageRss extends DBAccessor {

    var $config;
    
    function ImageRss($config) {

        $this->config=$config;
    }
    
    function getElement($uid){
        
        $this->authentifier();
        
        $rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
        $rss .= "<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
        $rss .='
          <channel>
         <title>Carnet en ligne</title>
         <link>http://www.tela-botanica.org/cel/jrest/ImageRss</link>
         <description>Carnet en ligne</description>
         <language>fr</language>';
        
        $DB=$this->connectDB($this->config,'cel_db');
                        
        $query_id_id_img = 'SELECT cmc_id_mot_cle_utilisateur, cmc_id_proprietaire FROM cel_mots_cles WHERE cmc_id_mot_cle_general = md5("'.$DB->escapeSimple($uid[0]).'")' ;
                      
        $res =& $DB->query($query_id_id_img);
    
        if (DB::isError($res)) {
            
            die($res->getMessage());
        }
                               
        $query='SELECT * FROM cel_images';
        
        $premier_item = true ;
        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
            
            if($premier_item) {
                $query .= ' WHERE ';
                $premier_item = false ;
            }
            else{
                $query .= ' OR ';
            }
            
            $query .= '(ci_meta_mots_cles LIKE "%'.$row['cmc_id_mot_cle_utilisateur'].'%" AND ci_ce_utilisateur ="'.$row['cmc_id_proprietaire'].'")' ;
        }
        
        $query .= ' ORDER BY ci_meta_date_ajout DESC LIMIT 0,100' ;
                             
        $res =& $DB->query($query);
    
        if (DB::isError($res)) {
            die($res->getMessage());
        }

           while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
           $row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']);
           $row['ci_id_image'] = htmlspecialchars($row['ci_id_image']);
           $row['ci_meta_date_ajout'] = htmlspecialchars($row['ci_meta_date_ajout']);
           $row['ci_ce_utilisateur'] = htmlspecialchars($row['ci_ce_utilisateur']);
           $row['ci_meta_user_comment'] = htmlspecialchars($row['ci_meta_user_comment']);
           $row['ci_note_image'] = htmlspecialchars($row['ci_note_image']);
           $tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height']));
           
            $id = $row['ci_id_image'];
            $chemin_sur_serveur = $this->config['cel_db']['url_images'];
            
            $req_liaison = 'SELECT * FROM cel_inventory WHERE ordre IN (SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = "'.$row['ci_id_image'].'") AND identifiant = "'.$row['ci_ce_utilisateur'].'"' ; 
            $res_liaison =& $DB->query($req_liaison);
    
            if (DB::isError($res_liaison)) {
                die($res_liaison->getMessage());
            }
    
            if (DB::isError($res_liaison)) {
                die($res_liaison->getMessage());
            }
            
            $id = sprintf('%09s', $id) ;
            $id = wordwrap($id, 3 , '_', true) ;
        
            $id_fichier = $id.".jpg" ;
            
            $niveauDossier = split("_", $id) ;
            
            $dossierNiveau1 = $niveauDossier[0] ;
            $dossierNiveau2 = $niveauDossier[1] ;
            
            $chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;
            
            $chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ;
            $chemin_fichier_m = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ;              

               $rss.= '  <item>
              <title>'.$row['ci_nom_original']." (".$row['ci_id_image'].") ". ' par ' . $row['ci_ce_utilisateur'].'</title>
              <author>'.$row['ci_ce_utilisateur'].'</author>
              <link>'.$chemin_fichier.'</link> 
              <description>'.
              ' <![CDATA[<img src="'.$chemin_fichier_m.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'.
              $row['ci_nom_original']. ' modifie le ' .$row['ci_meta_date_ajout'] . ' par ' . $row['ci_ce_utilisateur'].'<br/>' ;
              
              if(trim($row['ci_meta_mots_cles']) != '') { 
                  $row['ci_meta_mots_cles'] = rtrim($row['ci_meta_mots_cles'],',');
                  
                  $mots_cles_chaine = '' ;
                  $mots_cles_tab = split(',',$row['ci_meta_mots_cles']);
                  foreach($mots_cles_tab as $item) {
                      $mots_cles_chaine .= '\''.$item.'\','; 
                  }
                  $mots_cles_chaine = rtrim($mots_cles_chaine,',');
                  
                  $req_mots_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles WHERE cmc_id_mot_cle_utilisateur IN ('.$mots_cles_chaine.') AND cmc_id_proprietaire = "'.$row['ci_ce_utilisateur'].'"' ; 
                    $res_mots_cles =& $DB->query($req_mots_cles);
                    
                  if (DB::isError($res_mots_cles)) {
                        die($res_mots_cles->getMessage());
                  }
                  
                  
                  $mots_cles = '' ;
                  
                  while($mot_cle = & $res_mots_cles->fetchrow(DB_FETCHMODE_ASSOC)) {
                      $mots_cles .= $mot_cle['cmc_mot_cle'].' , ' ;
                  }
                  
                  $mots_cles = rtrim($mots_cles,', ');
                  
                  if(trim($mots_cles) != '') { 
                    $rss .= 'Mot clés : '.htmlentities($mots_cles).' <br/>' ;
                  }
              }
              
              while($ligne = & $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) {
                  $rss .= '<p> Liée à l\'observation '.$ligne['id'].'<br/>'  ;
                  $rss .= 'Nom saisi : '.$ligne['nom_sel'].'<br/>'  ;
                  $rss .= 'Nom retenu : '.$ligne['nom_ret'].'<br/>'  ;
                  $rss .= 'Datée du '.$ligne['date_observation'].'<br/>'  ;
                  $rss .= 'Lieu : '.trim($ligne['location'],'000null').' ('.trim($ligne['id_location'],'000null').') '.trim($ligne['station'],'000null').' '.trim($ligne['lieudit'],'000null').'<br/></p>'  ;
              }
              $rss .= ']]>' ;
              $rss .= '</description>
                <dc:format>text/html</dc:format>
             </item>';
        }
    
        $rss.= '</channel> </rss>';
                
                
        header("Content-Type: text/xml; charset=UTF-8");
        print $rss;
        exit;   
    }
    

    function getRessource(){
        
        $this->authentifier();
        $DB=$this->connectDB($this->config,'cel_db');
            
    
    $rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
    $rss .= "<rss version=\"2.0\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
    $rss .='
          <channel>
         <title>Carnet en ligne</title>
         <link>http://www.tela-botanica.org/cel/jrest/ImageRss</link>
         <description>Carnet en ligne</description>
         <language>fr</language>';

                    
            $query='SELECT * FROM cel_images order by ci_meta_date_ajout DESC LIMIT 0,100';
          
            $res =& $DB->query($query);
    
            if (DB::isError($res)) {
                die($res->getMessage());
            }

           while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
           $row['ci_nom_original'] = htmlspecialchars($row['ci_nom_original']);
           $row['ci_id_image'] = htmlspecialchars($row['ci_id_image']);
           $row['ci_meta_date_ajout'] = htmlspecialchars($row['ci_meta_date_ajout']);
           $row['ci_ce_utilisateur'] = htmlspecialchars($row['ci_ce_utilisateur']);
           $row['ci_meta_user_comment'] = htmlspecialchars($row['ci_meta_user_comment']);
           $row['ci_note_image'] = htmlspecialchars($row['ci_note_image']);
           $tailleXY = $this->calculerDimensions(array($row['ci_meta_width'], $row['ci_meta_height']));
           
            $id = $row['ci_id_image'];
            $chemin_sur_serveur = $this->config['cel_db']['url_images'];
            
            $req_liaison = 'SELECT * FROM cel_inventory WHERE ordre IN (SELECT coi_ce_observation FROM cel_obs_images WHERE coi_ce_image = "'.$row['ci_id_image'].'") AND identifiant = "'.$row['ci_ce_utilisateur'].'"' ; 
            $res_liaison =& $DB->query($req_liaison);
    
            if (DB::isError($res_liaison)) {
                die($res_liaison->getMessage());
            }
            
            $id = sprintf('%09s', $id) ;
            $id = wordwrap($id, 3 , '_', true) ;
        
            $id_fichier = $id.".jpg" ;
            
            $niveauDossier = split("_", $id) ;
            
            $dossierNiveau1 = $niveauDossier[0] ;
            $dossierNiveau2 = $niveauDossier[1] ;
            
            $chemin_sur_serveur_final = $chemin_sur_serveur.'/'.$dossierNiveau1.'/'.$dossierNiveau2 ;
            
            $chemin_fichier = $chemin_sur_serveur_final.'/L/'.$id."_L.jpg" ;
            $chemin_fichier_m = $chemin_sur_serveur_final.'/M/'.$id."_M.jpg" ;              

               $rss.= '  <item>
              <title>'.$row['ci_nom_original']." (".$row['ci_id_image'].") ". ' par ' . $row['ci_ce_utilisateur'].'</title>
              <author>'.$row['ci_ce_utilisateur'].'</author>
              <link>'.$chemin_fichier.'</link> 
              <description>'.
              ' <![CDATA[<img src="'.$chemin_fichier_m.'" alt="'.$row['ci_nom_original'].'" height="'.$tailleXY[1].'px" width="'.$tailleXY[0].'px"></img><br/>'.
              $row['ci_nom_original']. ' modifie le ' .$row['ci_meta_date_ajout'] . ' par ' . $row['ci_ce_utilisateur'].'<br/>' ;
              
               if(trim($row['ci_meta_mots_cles']) != '') { 
                  $row['ci_meta_mots_cles'] = rtrim($row['ci_meta_mots_cles'],',');
                  
                  $mots_cles_chaine = '' ;
                  $mots_cles_tab = split(',',$row['ci_meta_mots_cles']);
                  foreach($mots_cles_tab as $item) {
                      $mots_cles_chaine .= '\''.$item.'\','; 
                  }
                  $mots_cles_chaine = rtrim($mots_cles_chaine,',');
                  
                  $req_mots_cles = 'SELECT cmc_mot_cle FROM cel_mots_cles WHERE cmc_id_mot_cle_utilisateur IN ('.$mots_cles_chaine.') AND cmc_id_proprietaire = "'.$row['ci_ce_utilisateur'].'"' ; 
                    $res_mots_cles =& $DB->query($req_mots_cles);
                    
                  if (DB::isError($res_mots_cles)) {
                        die($res_mots_cles->getMessage());
                  }
                  
                  
                  $mots_cles = '' ;
                  
                  while($mot_cle = & $res_mots_cles->fetchrow(DB_FETCHMODE_ASSOC)) {
                      $mots_cles .= $mot_cle['cmc_mot_cle'].' , ' ;
                  }
                  
                  $mots_cles = rtrim($mots_cles,', ');
                  
                  if(trim($mots_cles) != '') { 
                    $rss .= 'Mot clés : '.htmlentities($mots_cles).' <br/>' ;
                  }
              }
              
              while($ligne = & $res_liaison->fetchrow(DB_FETCHMODE_ASSOC)) {
                  $rss .= '<p> Liée à l\'observation '.$ligne['id'].'<br/>'  ;
                  $rss .= 'Nom saisi : '.$ligne['nom_sel'].'<br/>'  ;
                  $rss .= 'Nom retenu : '.$ligne['nom_ret'].'<br/>'  ;
                  $rss .= 'Datée du '.$ligne['date_observation'].'<br/>'  ;
                  $rss .= 'Lieu : '.trim($ligne['location'],'000null').' ('.trim($ligne['id_location'],'000null').') '.trim($ligne['station'],'000null').' '.trim($ligne['lieudit'],'000null').'<br/></p>'  ;
              }
              $rss .= ']]>' ;
              $rss .= '</description>
                <dc:format>text/html</dc:format>
             </item>';
    
       }

       $rss.= '</channel> </rss>';
                
                
        header("Content-Type: text/xml; charset=UTF-8");
        print $rss;
        exit;   
        }
        
    function calculerDimensions($tailleXY) {
    
        $tailleOr = 300 ;
        
        if($tailleXY[1] == 0) {
            $tailleXY[1] = $tailleOr;
        }
        
        if($tailleXY[0] == 0) {
            $tailleXY[0] = $tailleOr;
        }
        
        $maxTaille = max($tailleXY[1],$tailleXY[0]) ;
        
        if($maxTaille == $tailleXY[1]) {
            
            $rapport = $tailleXY[1]/$tailleXY[0] ;
            $tailleXY[1] = 300 ;
            $tailleXY[0] = round($tailleXY[1]/$rapport,0) ;
            
        }else {
            $rapport = $tailleXY[0]/$tailleXY[1] ;
            $tailleXY[0] = 300 ;
            $tailleXY[1] = round($tailleXY[0]/$rapport,0) ;  
        }
        
        return $tailleXY ;
    }
    
    
    public function authentifier() { 
        if (!isset($_SERVER['PHP_AUTH_USER'])) {
        header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
        header('HTTP/1.0 401 Unauthorized');
        header('Content-type: text/html; charset=UTF-8');
        echo 'Accès interdit';
        exit;
        } else {
            if($this->verifierAcces($_SERVER['PHP_AUTH_USER'])) {
                return ;
            }
            else
            {
                header('WWW-Authenticate: Basic realm="www.tela-botanica.org"');
                header('HTTP/1.0 401 Unauthorized');
                header('Content-type: text/html; charset=UTF-8');
                echo 'Accès interdit';
                exit ;
            }
        }
    }
    
    public function verifierAcces($id) {
        
                $DB=$this->connectDB($this->config,'database_ident');
        $query="SELECT ".$this->config['database_ident']['ann_id']." as name FROM ".$this->config['database_ident']['annuaire']." WHERE ".$this->config['database_ident']['ann_id']." ='".$DB->escapeSimple($id)
        ."' AND ".$this->config['database_ident']['ann_pwd']." = ".$this->config['database_ident']['pass_crypt_funct']."('".$DB->escapeSimple($_SERVER['PHP_AUTH_PW'])."')" ;

        $res =& $DB->getOne($query);
        
        if($res == "") {
            return false ;
        }
        
        if (DB::isError($res)) {
            die($res->getMessage());
        }
        
        return $this->isAdmin($id) ;
        
    }
} 


/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
* Revision 1.5  2008-11-13 11:29:12  ddelon
* Reecriture gwt-ext
*
* Revision 1.4  2007-06-06 13:31:16  ddelon
* v0.09
*
* Revision 1.3  2007-05-22 12:54:09  ddelon
* Securisation acces utilisateur
*
*
* 
*/

?>