Changeset 74517 in spip-zone


Ignore:
Timestamp:
Jul 30, 2013, 4:07:06 PM (6 years ago)
Author:
kent1@…
Message:

Meilleur affichage des infos récupérées, on affiche aussi les vignettes...

On ajoute des extensions gérées : ai,eps,jpg,pdf,png,tif,tiff,psd maintenant

On update les informations du documents en base (titre, descriptif, credits) si non remplies, et on met l'ensemble des métadonnées dans le champ metas.

Version 0.2.0 (test)

nécessite Médias

Location:
_plugins_/xmp_php/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/xmp_php/trunk/inc/xmpphp_infos.php

    r74511 r74517  
    4242        $content = array();
    4343        while($iterator->Next(&$a, &$b, &$c, &$o) == TRUE){
    44                 if(preg_match(',(.*):(.*)\[(.*)\](.*),',$b,$matches)){
    45                         if(!is_array($content[$matches[1]][$matches[2]])){
    46                                 if(is_null OR !$content[$matches[1]][$matches[2]])
    47                                         $content[$matches[1]][$matches[2]] = array();
    48                                 else
    49                                         $content[$matches[1]][$matches[2]] = array($content[$matches[1]][$matches[2]]);
    50                         }
    51                         if($matches[4]){
    52                                 if(!is_array($content[$matches[1]][$matches[2]][$matches[3]])){
    53                                         if(is_null($content[$matches[1]][$matches[2]][$matches[3]]) OR !$content[$matches[1]][$matches[2]][$matches[3]])
    54                                                 $content[$matches[1]][$matches[2]][$matches[3]] = array();
     44                if (strcmp($a, SXMPMeta::kXMP_NS_EXIF)==0) {
     45                        spip_log("Skipping ".SXMPMeta::kXMP_NS_EXIF." ... \n",'xmp');
     46                        $iterator->Skip(SXMPIterator::kXMP_IterSkipSubtree );
     47                } else {
     48                        if(preg_match(',(.*):(.*)\[(.*)\](.*),',$b,$matches)){
     49                                if(!is_array($content[$matches[1]][$matches[2]])){
     50                                        if(is_null OR !$content[$matches[1]][$matches[2]])
     51                                                $content[$matches[1]][$matches[2]] = array();
    5552                                        else
    56                                                 $content[$matches[1]][$matches[2]][$matches[3]] = array($content[$matches[1]][$matches[2]][$matches[3]]);
     53                                                $content[$matches[1]][$matches[2]] = array($content[$matches[1]][$matches[2]]);
    5754                                }
     55                                if($matches[4]){
     56                                        if(!is_array($content[$matches[1]][$matches[2]][$matches[3]])){
     57                                                if(is_null($content[$matches[1]][$matches[2]][$matches[3]]) OR !$content[$matches[1]][$matches[2]][$matches[3]])
     58                                                        $content[$matches[1]][$matches[2]][$matches[3]] = array();
     59                                                else
     60                                                        $content[$matches[1]][$matches[2]][$matches[3]] = array($content[$matches[1]][$matches[2]][$matches[3]]);
     61                                        }
     62                                        $cle = str_replace('/','',str_replace('/?','',$matches[4]));
     63                                        $content[$matches[1]][$matches[2]][$matches[3]][$cle] = $c;
     64                                }
     65                                else{
     66                                        $content[$matches[1]][$matches[2]][$matches[3]] = $c;
     67                                }
     68                        }else if(!is_null($c) && $c && preg_match(',(.*):(.*)\/(.*),',$b,$matches)){
    5869                                $cle = str_replace('/','',str_replace('/?','',$matches[4]));
    5970                                $content[$matches[1]][$matches[2]][$matches[3]][$cle] = $c;
     71                        }else if(!is_null($c) && $c && preg_match(',(.*):(.*),',$b,$matches)){
     72                                $content[$matches[1]][$matches[2]] = $c;
    6073                        }
    61                         else
    62                                 $content[$matches[1]][$matches[2]][$matches[3]] = $c;
    63                 }else if(!is_null($c) && $c && preg_match(',(.*):(.*)\/(.*),',$b,$matches)){
    64                         $cle = str_replace('/','',str_replace('/?','',$matches[4]));
    65                         $content[$matches[1]][$matches[2]][$matches[3]][$cle] = $c;
    66                 }else if(!is_null($c) && $c && preg_match(',(.*):(.*),',$b,$matches))
    67                         $content[$matches[1]][$matches[2]] = $c;
     74                }
    6875        }
    6976
    70         spip_log($content,'xmp');
     77        $xmpfiles->CloseFile();
    7178
    72         $xmpfiles->CloseFile();
     79        $infos_new = array();
     80        if(isset($content['dc']) && is_array($content['dc'])){
     81                foreach($content['dc'] as $cle => $val){
     82                        if(in_array($cle,array('description','title','creator','rights')) && !isset($infos_new[$cle]) && is_array($val)){
     83                                // On ne garde que la première
     84                                $val = array_shift($val);
     85                                if(is_array($val)){
     86                                        if(count($val) == 2 && isset($val['xml:lang']))
     87                                                unset($val['xml:lang']);
     88                                        if(count($val) == 1)
     89                                                $newval = array_shift($val);
     90                                }else if(is_string($val))
     91                                        $newval = $val;
     92
     93                                $newval = str_replace('  ',' ',$newval);
     94                                if($cle == 'description')
     95                                        $infos_new['descriptif'] = $newval;
     96                                if($cle == 'title')
     97                                        $infos_new['titre'] = $newval;
     98                                if($cle == 'creator')
     99                                        $infos_new['credits'] = $newval;
     100                                if($cle == 'rights')
     101                                        $infos_new['credits'] = $newval;
     102                        }
     103                        if(($cle == 'subject') && is_array($val) && !isset($infos_new['tags']))
     104                                $infos_new['tags'] = implode(',',$val);
     105                }
     106        }
     107        if(isset($content['pdf']) && is_array($content['pdf'])){
     108                foreach($content['pdf'] as $cle => $val){
     109                        if(($cle == 'Producer') && !isset($infos_new['credits']) && is_string($val) && strlen($val) > 0)
     110                                $infos_new['credits'] = $val;
     111                        if(($cle == 'Copyright') && is_string($val) && strlen($val) > 0)
     112                                $infos_new['credits'] = $val;
     113                        if(($cle == 'Keywords') && is_string($val) && strlen($val) > 0 && !isset($infos_new['tags']))
     114                                $infos_new['tags'] = implode(',',explode(' ',str_replace('  ',' ',$val)));
     115                }
     116        }
     117        if(isset($content['xmp']) && is_array($content['xmp'])){
     118                if(isset($content['xmp']['MetadataDate']) OR isset($content['xmp']['ModifyDate']) OR isset($content['xmp']['CreateDate'])){
     119                        $date_verif = false;
     120                        foreach(array('MetadataDate','ModifyDate','CreateDate') as $date){
     121                                if(isset($content['xmp'][$date])){
     122                                        $date_verif = $date;
     123                                        break;
     124                                }
     125                        }
     126                        if(preg_match('/([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2}).*/',$content['xmp'][$date_verif],$matches))
     127                                $infos_new['date'] = $matches[1].' '.$matches[2];
     128                }
     129        }
     130        if(isset($content['xmpRights']) && is_array($content['xmpRights'])){
     131                $url = false;
     132                if(preg_match('/^http:\/\/.*/',$content['xmpRights']['WebStatement']))
     133                        $url = true;
     134                if($url && isset($infos_new['credits']))
     135                        $infos_new['credits'] = '['.$infos_new['credits'].'->'.$content['xmpRights']['WebStatement'].']';
     136                elseif(!isset($infos_new['credits']))
     137                        $infos_new['credits'] = $content['xmpRights']['WebStatement'];
     138        }
     139
     140        $infos_new['metas'] = serialize($content);
    73141
    74142        /**
     
    76144         * Utile pour metadatas/video par exemple
    77145         */
    78         if(!$only_return && (intval($id_document) && (count($content) > 0))){
    79                 $infos = array('metas'=>serialize($content));
     146        if(!$only_return && (intval($id_document) && (count($infos_new) > 0))){
     147                $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
     148                foreach($infos_new as $champ=>$val){
     149                        if($document[$champ] == $val) unset($infos_new[$champ]);
     150                }
    80151                include_spip('action/editer_document');
    81152                spip_log('modification du document','xmp');
    82                 spip_log($infos,'xmp');
    83                 document_modifier($id_document, $infos);
     153                document_modifier($id_document, $infos_new);
    84154                return true;
    85155        }
    86         return array('metas'=>serialize($content));
     156        return $infos_new;
    87157}
    88158?>
  • _plugins_/xmp_php/trunk/paquet.xml

    r74511 r74517  
    22        prefix="xmpphp"
    33        categorie="edition"
    4         version="0.1.1"
    5         etat="dev"
     4        version="0.2.0"
     5        etat="test"
    66        compatibilite="[3.0.0;3.0.99]"
    77        logo="images/xmpphp-64.png"
    88        schema="0.1"
    9 >       
     9>
    1010
    1111        <nom>XMP PHP</nom>
     
    2222        <pipeline nom="declarer_tables_principales" inclure="base/xmpphp.php" />
    2323       
     24        <necessite nom="medias" compatibilite="[1.6.12;[" />
    2425        <utilise nom="doc2img" />
    2526</paquet>
  • _plugins_/xmp_php/trunk/prive/squelettes/inclure/xmpphp_document_desc_action.html

    r74511 r74517  
    1 <BOUCLE_doc(DOCUMENTS){si #AUTORISER{modifier,document,#ENV{id_document}}}{distant=non}{id_document}{tout}>
    2 [(#EXTENSION|in_array{#LISTE{ai,pdf}}|oui)<span class="sep"> | </span>[(#BOUTON_ACTION{<:xmpphp:lien_recuperer_infos:>,#URL_ACTION_AUTEUR{xmpphp_infos,#ID_DOCUMENT,#SELF|ancre_url{doc_#ID_DOCUMENT}},ajax})]]
     1<BOUCLE_doc(DOCUMENTS){si #AUTORISER{modifier,document,#ENV{id_document}}}{id_document}{extension IN ai,eps,jpg,pdf,png,tif,tiff,psd}{mode IN document,image}{distant=non}{tout}>
     2<span class="sep"> | </span>[(#BOUTON_ACTION{<:xmpphp:lien_recuperer_infos:>,#URL_ACTION_AUTEUR{xmpphp_infos,#ID_DOCUMENT,#SELF|ancre_url{doc_#ID_DOCUMENT}},ajax})]
    33</BOUCLE_doc>
  • _plugins_/xmp_php/trunk/prive/xmpphp_infos_fichier.html

    r74511 r74517  
    88                <BOUCLE_data(DATA){si #METAS|strlen|>{0}|oui}{source tableau,#METAS|unserialize}>
    99                <div>
    10                         <strong>#CLE</strong><br />
     10                        <strong>#CLE</strong>
    1111                        <B_data2>
    12                         <ul>
    13                         <BOUCLE_data2(DATA){source tableau,#VALEUR}{cle != Thumbnails}>
    14                         <li>#CLE :
    15                                 <BOUCLE_data3(DATA){source tableau,#VALEUR}{', '}>[(#VALEUR|is_array|?{[(#VALEUR|foreach)],#VALEUR})]</BOUCLE_data3>
    16                                 </B_data3>#VALEUR<//B_data3>
    17                         </li>
     12                        <ul class="spip">
     13                        <BOUCLE_data2(DATA){source tableau,#VALEUR}>
     14                                <B_data_thumbs>[(#REM)
     15
     16                                        Gestion spécifique des thumbnails pour les afficher
     17
     18                                ]<li>[(#_data2:CLE) :]
     19                                        <BOUCLE_data_thumbs(DATA){si #CLE|=={Thumbnails}}{source tableau,#VALEUR}>
     20                                        <ul>
     21                                                <BOUCLE_data_thumb(DATA){source tableau,#VALEUR}>[
     22                                                (#CLE|match{format}|oui)
     23                                                        [(#VALEUR|=={JPEG}|?{#SET{format,image/jpg},#SET{format,#VALEUR}})]
     24                                                ][
     25                                                (#CLE|match{height}|oui)#SET{height,#VALEUR}][
     26                                                (#CLE|match{width}|oui)#SET{width,#VALEUR}][
     27                                                (#CLE|match{image}|oui)#SET{image,#VALEUR}][
     28                                                (#CLE|match{image}|non)
     29                                                <li>[(#CLE) :]#VALEUR</li>
     30                                                ]</BOUCLE_data_thumb>[
     31                                                (#GET{image}|oui)
     32                                                <li>
     33                                                        <img src="data:[(#GET{format})];base64,[(#GET{image})]" alt="" width="#GET{width}" height="#GET{height}" />
     34                                                </li>
     35                                                ]</B_data_thumb>
     36                                        </ul>
     37                                        </BOUCLE_data_thumbs>
     38                                </li>
     39                                </B_data_thumbs>
     40                                        <B_data3>
     41                                        <li>[(#CLE) :]
     42                                                <ul>
     43                                                <BOUCLE_data3(DATA){si #VALEUR|is_array|et{#VALEUR|count|=={2}|et{#VALEUR|table_valeur{xml:lang}}|non}|oui}{source tableau,#VALEUR}>
     44                                                <B_recursive>
     45                                                <ul>
     46                                                        <BOUCLE_recursive(BOUCLE_data3)> </BOUCLE_recursive>
     47                                                </ul>
     48                                                </B_recursive>
     49                                                </li>
     50                                                </BOUCLE_data3>
     51                                                </ul>
     52                                        </li>
     53                                        </B_data3>
     54                                        [(#VALEUR|is_array|et{#VALEUR|count|=={2}|et{#VALEUR|table_valeur{xml:lang}}|oui}|oui)
     55                                        <li>[(#CLE) : ][(#VALEUR|array_shift)][ ((#VALEUR|table_valeur{xml:lang}))]</li>]
     56                                        [(#VALEUR|is_array|et{#VALEUR|count|=={2}|et{#VALEUR|table_valeur{xml:lang}}|oui}|non)
     57                                        <li>[(#CLE) : ][(#VALEUR)]</li>]
     58                                        <//B_data3>
     59                        <//B_data_thumbs>
    1860                        </BOUCLE_data2>
    1961                        </ul>
  • _plugins_/xmp_php/trunk/xmp_php_pipelines.php

    r74511 r74517  
    2323        if ($flux['args']['fond']=='modeles/document_desc'){
    2424                if(isset($flux['args']['contexte']['id_document']) && ($flux['args']['contexte']['id_document'] > 0)){
    25                         $extension = sql_getfetsel("extension", "spip_documents","id_document=".intval($flux['args']['contexte']['id_document']));
    26                         if(in_array($extension,array('pdf','ai','psd')))
     25                        $infos_doc = sql_fetsel("distant,extension,mode", "spip_documents","id_document=".intval($flux['args']['contexte']['id_document']));
     26                        if(($infos_doc['distant'] == 'non') && in_array($infos_doc['mode'],array('document','image')) && in_array($infos_doc['extension'],array('ai','eps','jpg','pdf','png','psd','tif','tiff')))
    2727                                $flux['data']['texte'] .= recuperer_fond('prive/xmpphp_infos_fichier', $flux['args']['contexte']);
    2828                }
Note: See TracChangeset for help on using the changeset viewer.