function article_import_k2($mon_article)
{
    include_spip('joomla2spip_fonctions');
    include_spip('plugins/installer');
    $err = '';
    // chercher si l'article n'a pas deja ete importe
    $ancien_id = $mon_article['id_article'];
    $result = sql_fetsel('id_article', 'spip_articles', 'id_article=' . intval($ancien_id));
    if ($result) {
        return;
    }
    // chercher la rubrique
    $titre_rub = $mon_article['rubrique'];
    $result = sql_fetsel('id_rubrique', 'spip_rubriques', 'titre=' . sql_quote($titre_rub));
    if ($result) {
        $id_rubrique = $result['id_rubrique'];
    }
    // creer article vide
    include_spip('action/editer_article');
    $id_article = insert_article($id_rubrique);
    $sql = "UPDATE spip_articles SET id_article = '{$ancien_id}' WHERE id_article = '{$id_article}'";
    spip_query($sql);
    if (spip_version_compare($GLOBALS['spip_version_branche'], '3.0.0', '>=')) {
        include_spip('action/editer_article');
        $sql = "UPDATE spip_auteurs_liens SET id_objet = '{$ancien_id}' WHERE id_objet = '{$id_article}' AND objet = 'article'";
    } else {
        include_spip('inc/modifier');
        $sql = "UPDATE spip_auteurs_articles SET id_article = '{$ancien_id}' WHERE id_article = '{$id_article}'";
    }
    spip_query($sql);
    $id_article = $ancien_id;
    // le remplir
    $c = array();
    foreach (array('surtitre', 'titre', 'soustitre', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'maj', 'ps', 'visites') as $champ) {
        $c[$champ] = $mon_article[$champ];
    }
    revisions_articles($id_article, $c);
    // Modification de statut, changement de rubrique ?
    $c = array();
    foreach (array('date', 'statut', 'id_parent') as $champ) {
        $c[$champ] = $mon_article[$champ];
    }
    $c['id_parent'] = $id_rubrique;
    $err .= instituer_article($id_article, $c);
    // Un lien de trad a prendre en compte
    if (!spip_version_compare($GLOBALS['spip_version_branche'], '3.0.0', '>=')) {
        $err .= article_referent($id_article, array('lier_trad' => _request('lier_trad')));
    }
    // ajouter les extras
    // les documents attachées
    if (isset($mon_article['document']) and count($mon_article['document']) > 0) {
        $ajouter_documents = charger_fonction('ajouter_documents', 'action');
        $copie_local = charger_fonction('copier_local', 'action');
        include_spip('inc/joindre_document');
        include_spip('formulaires/joindre_document');
        foreach ($mon_article['document'] as $document) {
            $file = url_absolue('media/k2/attachments/' . $document['fichier']);
            spip_log($file, 'teste');
            set_request('joindre_distant', true);
            set_request('url', $file);
            $files = joindre_trouver_fichier_envoye();
            $mode = joindre_determiner_mode('auto', 'new', 'article');
            $nouveaux_doc = $ajouter_documents('new', $files, 'article', $id_article, $mode);
            spip_log($nouveaux_doc, 'teste');
            $id_document = $nouveaux_doc[0];
            $copie_local($id_document);
            $titre = isset($document['titre']) ? $document['titre'] : '';
            sql_updateq('spip_documents', array('titre' => $titre), 'id_document=' . $id_document);
        }
    }
    return $err;
}
function crayons_update_article($id_article, $c = false)
{
    include_spip('action/editer_article');
    // Enregistrer les nouveaux contenus
    revisions_articles($id_article, $c);
    // En cas de statut ou de id_rubrique
    // NB: instituer_article veut id_parent, et pas id_rubrique !
    if (isset($c['id_rubrique'])) {
        $c['id_parent'] = $c['id_rubrique'];
        unset($c['id_rubrique']);
    }
    instituer_article($id_article, $c);
}
Beispiel #3
0
function snippets_articles_importer($id_target,$arbre,$contexte){
	include_spip('base/serial');
	include_spip('base/abstract_sql');
	include_spip('inc/snippets');
	
	$table_prefix = $GLOBALS['table_prefix'] ;

	$champs_non_importables = array("id_article","id_rubrique","id_secteur","maj","export","visites","referers","popularite","id_trad","idx","id_version","url_propre");
	$champs_non_ajoutables = array('titre','date','date_redac','lang');
	$champs_jointures = array('auteur','mot');
	$champs_defaut_values = array('statut'=>'lememe');
	$table = 'spip_articles';
	$primary = 'id_article';
	$fields = $GLOBALS['tables_principales']['spip_articles']['field'];
	$tag_objets="articles";
	$tag_objet="article";
	$translations = array();
	
	$forcer_id = false ; // mettre true pour garder les meme id que dans le XML
	$forcer_maj = false ; // mettre true pour mettre a jour un lot d'articles de meme titre que dans le spip cible
	
	
	if ($arbre && isset($arbre[$tag_objets]))
		foreach($arbre[$tag_objets] as $objets){
			foreach($objets[$tag_objet] as $objet){
			spip_log($objet['titre'],"snippets");
				$creation = false;
				$auteur_connu = false ;
				
				// mettre a jour des articles deja en bdd avec le xml fournit
				if($forcer_maj){
				$id_target = '';
				$id_article_trouve = sql_fetsel("id_article","spip_articles","titre=".sql_quote($objet['titre'][0])); // ajouter la rub courrante
				$id_target = $id_article_trouve['id_article'] ;
				if(!intval($id_target))
					spip_log($objet['titre'][0].$id_target,"snippets_titres_erreur");
				}
				
				include_spip('action/editer_article');
				// si c'est une creation, creer le formulaire avec les infos d'entete
				if (!($id_objet=intval($id_target))){
					if (preg_match(",id_rubrique=([0-9]*),i",$contexte,$regs))
						$id_rubrique=intval($regs[1]);
					$id_objet = insert_article($id_rubrique);
					
					// forcer l'id
					if($forcer_id){
					$champs_non_importables = array("id_rubrique","id_secteur","maj","export","visites","referers","popularite","id_trad","idx","id_version","url_propre");
					$sql = "UPDATE ".$table_prefix."_articles SET id_article = '".$objet['id_article'][0]."' WHERE id_article = '$id_objet'";
        			spip_query($sql); 
        			$id_objet = $objet['id_article'][0] ;
					}
					
					$creation = true;
				}
				// sinon on ajoute chaque champ, sauf le titre
				$row = spip_fetch_array(spip_query("SELECT * FROM $table WHERE $primary="._q($id_objet)));
				foreach (array_keys($row) as $key)
					if ( 	!in_array($key,$champs_non_importables) 
						AND !in_array($key,$champs_jointures) 
						AND ($creation OR !in_array($key,$champs_non_ajoutables) OR !$row[$key])
						AND isset($objet[$key])){
						$v=trim(spip_xml_aplatit($objet[$key]));
						$row[$key] = ($creation or $forcer_maj)?$v:($row[$key].$v);
					}
								
				revisions_articles($id_objet , $row);
				$translations[] = array($table,$objet[$primary],$id_objet);
				// gerer l'import de liens eventuels
				if ($id AND isset($objet['liens'])){
					foreach($objet['liens'] as $liens){
						// A FAIRE
					}
				}
				
				$id_article = $id_objet ; 
				
				if ( $objet['auteur'] AND ($creation OR $forcer_maj)){
					$auteur_connu = true ;
					sql_delete("spip_auteurs_articles","id_article=".sql_quote($id_article));
					foreach($objet['auteur'] as $nom){
					// ajouter l'auteur
						spip_log($nom,"snippets");
						$id_auteur = get_id_auteur($nom);
  				         if ($id_auteur) {  
  				         spip_log($nom.$id_auteur,"snippets");
        				 $sql="INSERT INTO ".$table_prefix."_auteurs_articles (id_auteur, id_article) VALUES ($id_auteur, $id_article)";
        				 spip_query($sql);                              				              	
        				}                   							
					}
				}	
				
				if($auteur_connu){
				// se virer soi-meme
        		$connect_id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ;
        		$sql = "DELETE FROM ".$table_prefix."_auteurs_articles WHERE id_auteur = '$connect_id_auteur' AND id_article = '$id_article'";
        		spip_query($sql); 
        		}
        		
        		// statut de l'article
        		if($champs_defaut_values['statut'] != 'prepa'){
        		$sql = "UPDATE ".$table_prefix."_articles SET statut = '".$objet['statut'][0]."' WHERE id_article = '$id_article'";
        		spip_query($sql); 
        		}
        		
        		
        		if ( $objet['mot'] AND ($creation OR $forcer_maj)){
			
					sql_delete("spip_mots_articles","id_article=".sql_quote($id_article));
					foreach($objet['mot'] as $mot){
					spip_log($mot,"snippets");
					// ajouter le mot cle
					$id_article = $id_objet ;
					$table_prefix = $GLOBALS['table_prefix'] ;
						$id_mot  = get_id_mot($mot);
  				         if ($id_mot) {  				                
        				 $sql="INSERT INTO ".$table_prefix."_mots_articles (id_mot, id_article) VALUES ($id_mot, $id_article)";
        				 spip_query($sql);                              				              	
        				}                   							
					}
				}	
        		
        		
        		
        		if ( $objet['document'] AND ($creation OR $forcer_maj)){
			
					sql_delete("spip_documents_liens","id_objet=".sql_quote($id_article)." and objet='article'");
					foreach($objet['document'] as $doc){
					spip_log("--> ".$doc,"snippets");
					// ajouter le doc
					list($id,$fichier,$extension,$titre,$descriptif) = explode('|',$doc) ;
					spip_log("--- $id,$fichier,$extension,$titre","snippets");
					spip_log("hop ".$fichier,"snippets");
					$table_prefix = $GLOBALS['table_prefix'] ;
						 $id_doc  = get_id_doc($fichier);
  				         if ($id_doc) {  				                
        				 spip_log("hop doc".$fichier."trouve".$id_doc,"snippets");
        				 $sql="INSERT INTO ".$table_prefix."_documents_liens (id_document, id_objet, objet) VALUES ($id_doc, $id_article,'article')";
        				 spip_query($sql);                              				              	
        				 }else{
        				 // au cas ou, on creer un doc, mais il vaut mieux transferer les doc avec toutes les infos avant de snippet
        				 $a =  array(
							'date' => 'NOW()',
							'distant' => 'non',
							'mode' => 'image',
							'titre'=> $titre,
							'descriptif'=> $descriptif,
							'extension'=> $extension,
							'fichier' => $fichier );
							
							//'largeur' => $largeur,
							//'hauteur' => $hauteur,
							//'taille' => $taille,
							
						if($forcer_id) $a['id_document'] = $id ;	
			 	    	
			 	    	$id = sql_insertq("spip_documents", $a);
        				spip_log ("ajout du document $fichier $titre  (M 'image' T 'article' L '$id_article' D '$id')","snippets");
        				
        				sql_insertq("spip_documents_articles",
   	                    	array('id_document' => $id,
    	                    'id_article' => $id_article));
        				 
        				 }
        				
					}
				}
        	
        		
        		
			}
		}
	return $translations;
}