- /* Vérification de l'existance de la *campagne*, de son *statut* et de la *concordance du type* */
- if(intval($id_souscription_campagne)
- AND $t = sql_getfetsel('type_objectif', 'spip_souscription_campagnes', 'id_souscription_campagne='.intval($id_souscription_campagne)))
- {
- return true;
- }
+ $campagne = sql_fetsel(array('type_objectif', 'objectif_initial', 'objectif', 'objectif_limiter'),
+ 'spip_souscription_campagnes', 'id_souscription_campagne='.sql_quote(intval($id_souscription_campagne)));
+
+ /* La campagne doit exister */
+ if(!count($campagne['type_objectif']))
+ return false;
+
+ elseif($type_souscription != null && $campagne['type_objectif'] != $type_souscription)
+ return false;
+
+ /* Si la campagne doit être fermée lorsque l'objectif est atteint,
+ * alors on bloque. */
+ elseif($campagne['objectif_limiter'] &&
+ calcul_avancement_campagne($id_souscription_campagne, $campagne['type_objectif'], $campagne['objectif_initial']) >= $campagne['objectif'])
+ return false;