Exemplo n.º 1
0
/**
 * Recalcule les statuts d'une rubrique
 * 
 * Fonction à appeler lorsque le statut d'un objet change dans une rubrique
 * ou que la rubrique est deplacée.
 * 
 * Si le statut passe a "publie", la rubrique et ses parents y passent aussi
 * et les langues utilisees sont recalculées.
 * Conséquences symétriques s'il est depublié.
 * 
 * S'il est deplacé alors qu'il était publiée, double conséquence.
 * 
 * Tout cela devrait passer en SQL, sous forme de Cascade SQL.
 *
 * @param int $id_rubrique
 *     Identifiant de la rubrique
 * @param array $modifs
 *     Tableau de description des modifications.
 *     Peut avoir 2 index, 'statut' étant obligatoire :
 *     - statut : indique le nouveau statut de la rubrique
 *     - id_rubrique : indiquer la rubrique dans laquelle on déplace la rubrique (son nouveau parent donc)
 * @param string $statut_ancien
 *     Ancien statut de la rubrique
 * @param bool $postdate
 *     true pour recalculer aussi la date du prochain article post-daté
 * @return bool
 *     true si le statut change effectivement
**/
function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $postdate = false)
{
    $neuf = false;
    if ($statut_ancien == 'publie') {
        if (isset($modifs['statut']) or isset($modifs['id_rubrique']) or $postdate and strtotime($postdate) > time()) {
            $neuf |= depublier_branche_rubrique_if($id_rubrique);
        }
        // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur
        if ($postdate) {
            calculer_prochain_postdate(true);
            $neuf |= strtotime($postdate) <= time();
            // par securite
        } elseif (isset($modifs['id_rubrique'])) {
            $neuf |= publier_branche_rubrique($modifs['id_rubrique']);
        }
    } elseif ($modifs['statut'] == 'publie') {
        if ($postdate) {
            calculer_prochain_postdate(true);
            $neuf |= strtotime($postdate) <= time();
            // par securite
        } else {
            $neuf |= publier_branche_rubrique($id_rubrique);
        }
    }
    if ($neuf) {
        // Sauver la date de la derniere mise a jour (pour menu_rubriques)
        ecrire_meta("date_calcul_rubriques", date("U"));
    }
    $langues = calculer_langues_utilisees();
    ecrire_meta('langues_utilisees', $langues);
}
Exemplo n.º 2
0
function action_dater_post($r)
{
	include_spip('inc/date');
	$type = $r[2];
	$id = $r[1];
	if (!isset($_REQUEST['avec_redac'])) {
		$date = dater_table($id, $type);
	} else {
		if (_request('avec_redac') == 'non')
			$annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0;
		else  {
				$annee_redac = _request('annee_redac');
				$mois_redac = _request('mois_redac');
				$jour_redac = _request('jour_redac');
				$heure_redac = _request('heure_redac');
				$minute_redac = _request('minute_redac');

				if ($annee_redac<>'' AND $annee_redac < 1001) 
					$annee_redac += 9000;
		}

		$date = format_mysql_date($annee_redac, $mois_redac, $jour_redac, $heure_redac, $minute_redac);
		include_spip('inc/modifier');
		revision_article($r[1],array("date_redac" => $date));
	}

	// a priori fait doublon avec instituer_xx utilise dans dater_table()
	// mais on laisse pour ne pas introduire de bug dans cette branche
	if (($type == 'article')
	AND $GLOBALS['meta']["post_dates"] == "non") {
		$t = sql_fetsel("statut, id_rubrique", "spip_articles", "id_article=$id");
		if ($t['statut'] == 'publie') {
			include_spip('inc/rubriques');
			if  (strtotime($date) >  time())
			  depublier_branche_rubrique_if($t['id_rubrique']);
			else
			  publier_branche_rubrique($t['id_rubrique']);
			calculer_prochain_postdate();
		}
	}
}
/**
 * Dissocier un ou des documents
 *
 * @param int|string $document
 *   id_document a dissocier
 *   I/image pour dissocier les images en mode Image
 *   I/document pour dissocier les images en mode document
 *   D/document pour dissocier les documents non image en mode document
 * @param  $objet
 *   objet duquel dissocier
 * @param  $id_objet
 *   id_objet duquel dissocier
 * @param bool $supprime
 *   supprimer les documents orphelins apres dissociation
 * @param bool $check
 *   verifier le texte des documents et relier les documents references dans l'objet
 * @return void
 */
function dissocier_document($document, $objet, $id_objet, $supprime = false, $check = false)
{
    if ($id_document = intval($document)) {
        supprimer_lien_document($id_document, $objet, $id_objet, $supprime, $check);
    } else {
        list($image, $mode) = explode('/', $document);
        $image = $image == 'I';
        $typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT');
        $obj = "id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet);
        $s = sql_select('docs.id_document', "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document", "{$obj} AND vu='non' AND docs.mode=" . sql_quote($mode) . " AND {$typdoc}");
        while ($t = sql_fetch($s)) {
            supprimer_lien_document($t['id_document'], $objet, $id_objet, $supprime, $check);
        }
    }
    // pas tres generique ca ...
    if ($objet == 'rubrique') {
        include_spip('inc/rubriques');
        depublier_branche_rubrique_if($id_objet);
    }
}
Exemplo n.º 4
0
function action_documenter_post($r)
{
	// - sign indique le portfolio image ou document, dans le cas de
	// la page exec=articles
	// - id est l'id_objet (id_article ou id_rubrique etc)
	// - type est 'article' (ou 'rubrique')
	// - id_document le doc a supprimer ou a delier de l'objet
	//   SI VIDE, on supprime tous les documents du type SIGN
	//   (bouton "supprimer tous les documents")
	list(, $sign, $id, $type, ,$id_document) = $r;

	if ($id_document) {
		supprimer_lien_document($id_document, $type, $id);
	}
	else {
		$obj = "id_objet=".intval($id)." AND objet=".sql_quote($type);
		$typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $sign  ? '' : 'NOT');

		$s = sql_select('docs.id_document AS id_doc', "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document", "$obj AND docs.mode='document' AND $typdoc");
		while ($t = sql_fetch($s)) {
			supprimer_lien_document($t['id_doc'], $type, $id);
		}
	}

	if ($type == 'rubrique') {
		include_spip('inc/rubriques');
		depublier_branche_rubrique_if($id);
	}
}