ajout de la partie slam dans le dossier web
This commit is contained in:
		
							
								
								
									
										168
									
								
								ap23/web/doku/inc/Action/Subscribe.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								ap23/web/doku/inc/Action/Subscribe.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,168 @@ | ||||
| <?php | ||||
|  | ||||
| namespace dokuwiki\Action; | ||||
|  | ||||
| use dokuwiki\Action\Exception\ActionAbort; | ||||
| use dokuwiki\Action\Exception\ActionDisabledException; | ||||
| use dokuwiki\Subscriptions\SubscriberManager; | ||||
| use dokuwiki\Extension\Event; | ||||
|  | ||||
| /** | ||||
|  * Class Subscribe | ||||
|  * | ||||
|  * E-Mail subscription handling | ||||
|  * | ||||
|  * @package dokuwiki\Action | ||||
|  */ | ||||
| class Subscribe extends AbstractUserAction { | ||||
|  | ||||
|     /** @inheritdoc */ | ||||
|     public function minimumPermission() { | ||||
|         return AUTH_READ; | ||||
|     } | ||||
|  | ||||
|     /** @inheritdoc */ | ||||
|     public function checkPreconditions() { | ||||
|         parent::checkPreconditions(); | ||||
|  | ||||
|         global $conf; | ||||
|         if(isset($conf['subscribers']) && !$conf['subscribers']) throw new ActionDisabledException(); | ||||
|     } | ||||
|  | ||||
|     /** @inheritdoc */ | ||||
|     public function preProcess() { | ||||
|         try { | ||||
|             $this->handleSubscribeData(); | ||||
|         } catch(ActionAbort $e) { | ||||
|             throw $e; | ||||
|         } catch(\Exception $e) { | ||||
|             msg($e->getMessage(), -1); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** @inheritdoc */ | ||||
|     public function tplContent() { | ||||
|         tpl_subscribe(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Handle page 'subscribe' | ||||
|      * | ||||
|      * @author Adrian Lang <lang@cosmocode.de> | ||||
|      * @throws \Exception if (un)subscribing fails | ||||
|      * @throws ActionAbort when (un)subscribing worked | ||||
|      */ | ||||
|     protected function handleSubscribeData() { | ||||
|         global $lang; | ||||
|         global $INFO; | ||||
|         global $INPUT; | ||||
|  | ||||
|         // get and preprocess data. | ||||
|         $params = array(); | ||||
|         foreach(array('target', 'style', 'action') as $param) { | ||||
|             if($INPUT->has("sub_$param")) { | ||||
|                 $params[$param] = $INPUT->str("sub_$param"); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // any action given? if not just return and show the subscription page | ||||
|         if(empty($params['action']) || !checkSecurityToken()) return; | ||||
|  | ||||
|         // Handle POST data, may throw exception. | ||||
|         Event::createAndTrigger('ACTION_HANDLE_SUBSCRIBE', $params, array($this, 'handlePostData')); | ||||
|  | ||||
|         $target = $params['target']; | ||||
|         $style = $params['style']; | ||||
|         $action = $params['action']; | ||||
|  | ||||
|         // Perform action. | ||||
|         $subManager = new SubscriberManager(); | ||||
|         if($action === 'unsubscribe') { | ||||
|             $ok = $subManager->remove($target, $INPUT->server->str('REMOTE_USER'), $style); | ||||
|         } else { | ||||
|             $ok = $subManager->add($target, $INPUT->server->str('REMOTE_USER'), $style); | ||||
|         } | ||||
|  | ||||
|         if($ok) { | ||||
|             msg( | ||||
|                 sprintf( | ||||
|                     $lang["subscr_{$action}_success"], hsc($INFO['userinfo']['name']), | ||||
|                     prettyprint_id($target) | ||||
|                 ), 1 | ||||
|             ); | ||||
|             throw new ActionAbort('redirect'); | ||||
|         } | ||||
|  | ||||
|         throw new \Exception( | ||||
|             sprintf( | ||||
|                 $lang["subscr_{$action}_error"], | ||||
|                 hsc($INFO['userinfo']['name']), | ||||
|                 prettyprint_id($target) | ||||
|             ) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Validate POST data | ||||
|      * | ||||
|      * Validates POST data for a subscribe or unsubscribe request. This is the | ||||
|      * default action for the event ACTION_HANDLE_SUBSCRIBE. | ||||
|      * | ||||
|      * @author Adrian Lang <lang@cosmocode.de> | ||||
|      * | ||||
|      * @param array &$params the parameters: target, style and action | ||||
|      * @throws \Exception | ||||
|      */ | ||||
|     public function handlePostData(&$params) { | ||||
|         global $INFO; | ||||
|         global $lang; | ||||
|         global $INPUT; | ||||
|  | ||||
|         // Get and validate parameters. | ||||
|         if(!isset($params['target'])) { | ||||
|             throw new \Exception('no subscription target given'); | ||||
|         } | ||||
|         $target = $params['target']; | ||||
|         $valid_styles = array('every', 'digest'); | ||||
|         if(substr($target, -1, 1) === ':') { | ||||
|             // Allow “list” subscribe style since the target is a namespace. | ||||
|             $valid_styles[] = 'list'; | ||||
|         } | ||||
|         $style = valid_input_set( | ||||
|             'style', $valid_styles, $params, | ||||
|             'invalid subscription style given' | ||||
|         ); | ||||
|         $action = valid_input_set( | ||||
|             'action', array('subscribe', 'unsubscribe'), | ||||
|             $params, 'invalid subscription action given' | ||||
|         ); | ||||
|  | ||||
|         // Check other conditions. | ||||
|         if($action === 'subscribe') { | ||||
|             if($INFO['userinfo']['mail'] === '') { | ||||
|                 throw new \Exception($lang['subscr_subscribe_noaddress']); | ||||
|             } | ||||
|         } elseif($action === 'unsubscribe') { | ||||
|             $is = false; | ||||
|             foreach($INFO['subscribed'] as $subscr) { | ||||
|                 if($subscr['target'] === $target) { | ||||
|                     $is = true; | ||||
|                 } | ||||
|             } | ||||
|             if($is === false) { | ||||
|                 throw new \Exception( | ||||
|                     sprintf( | ||||
|                         $lang['subscr_not_subscribed'], | ||||
|                         $INPUT->server->str('REMOTE_USER'), | ||||
|                         prettyprint_id($target) | ||||
|                     ) | ||||
|                 ); | ||||
|             } | ||||
|             // subscription_set deletes a subscription if style = null. | ||||
|             $style = null; | ||||
|         } | ||||
|  | ||||
|         $params = compact('target', 'style', 'action'); | ||||
|     } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user