ajout de la partie slam dans le dossier web
This commit is contained in:
		
							
								
								
									
										165
									
								
								ap23/web/doku/inc/Draft.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								ap23/web/doku/inc/Draft.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | ||||
| <?php | ||||
|  | ||||
| namespace dokuwiki; | ||||
|  | ||||
| /** | ||||
|  * Class Draft | ||||
|  * | ||||
|  * @package dokuwiki | ||||
|  */ | ||||
| class Draft | ||||
| { | ||||
|  | ||||
|     protected $errors = []; | ||||
|     protected $cname; | ||||
|     protected $id; | ||||
|     protected $client; | ||||
|  | ||||
|     /** | ||||
|      * Draft constructor. | ||||
|      * | ||||
|      * @param string $ID the page id for this draft | ||||
|      * @param string $client the client identification (username or ip or similar) for this draft | ||||
|      */ | ||||
|     public function __construct($ID, $client) | ||||
|     { | ||||
|         $this->id = $ID; | ||||
|         $this->client = $client; | ||||
|         $this->cname = getCacheName($client.$ID, '.draft'); | ||||
|         if(file_exists($this->cname) && file_exists(wikiFN($ID))) { | ||||
|             if (filemtime($this->cname) < filemtime(wikiFN($ID))) { | ||||
|                 // remove stale draft | ||||
|                 $this->deleteDraft(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the filename for this draft (whether or not it exists) | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getDraftFilename() | ||||
|     { | ||||
|         return $this->cname; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Checks if this draft exists on the filesystem | ||||
|      * | ||||
|      * @return bool | ||||
|      */ | ||||
|     public function isDraftAvailable() | ||||
|     { | ||||
|         return file_exists($this->cname); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Save a draft of a current edit session | ||||
|      * | ||||
|      * The draft will not be saved if | ||||
|      *   - drafts are deactivated in the config | ||||
|      *   - or the editarea is empty and there are no event handlers registered | ||||
|      *   - or the event is prevented | ||||
|      * | ||||
|      * @triggers DRAFT_SAVE | ||||
|      * | ||||
|      * @return bool whether has the draft been saved | ||||
|      */ | ||||
|     public function saveDraft() | ||||
|     { | ||||
|         global $INPUT, $INFO, $EVENT_HANDLER, $conf; | ||||
|         if (!$conf['usedraft']) { | ||||
|             return false; | ||||
|         } | ||||
|         if (!$INPUT->post->has('wikitext') && | ||||
|             !$EVENT_HANDLER->hasHandlerForEvent('DRAFT_SAVE')) { | ||||
|             return false; | ||||
|         } | ||||
|         $draft = [ | ||||
|             'id' => $this->id, | ||||
|             'prefix' => substr($INPUT->post->str('prefix'), 0, -1), | ||||
|             'text' => $INPUT->post->str('wikitext'), | ||||
|             'suffix' => $INPUT->post->str('suffix'), | ||||
|             'date' => $INPUT->post->int('date'), | ||||
|             'client' => $this->client, | ||||
|             'cname' => $this->cname, | ||||
|             'errors' => [], | ||||
|         ]; | ||||
|         $event = new Extension\Event('DRAFT_SAVE', $draft); | ||||
|         if ($event->advise_before()) { | ||||
|             $draft['hasBeenSaved'] = io_saveFile($draft['cname'], serialize($draft)); | ||||
|             if ($draft['hasBeenSaved']) { | ||||
|                 $INFO['draft'] = $draft['cname']; | ||||
|             } | ||||
|         } else { | ||||
|             $draft['hasBeenSaved'] = false; | ||||
|         } | ||||
|         $event->advise_after(); | ||||
|  | ||||
|         $this->errors = $draft['errors']; | ||||
|  | ||||
|         return $draft['hasBeenSaved']; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the text from the draft file | ||||
|      * | ||||
|      * @throws \RuntimeException if the draft file doesn't exist | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getDraftText() | ||||
|     { | ||||
|         if (!file_exists($this->cname)) { | ||||
|             throw new \RuntimeException( | ||||
|                 "Draft for page $this->id and user $this->client doesn't exist at $this->cname." | ||||
|             ); | ||||
|         } | ||||
|         $draft = unserialize(io_readFile($this->cname,false)); | ||||
|         return cleanText(con($draft['prefix'],$draft['text'],$draft['suffix'],true)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove the draft from the filesystem | ||||
|      * | ||||
|      * Also sets $INFO['draft'] to null | ||||
|      */ | ||||
|     public function deleteDraft() | ||||
|     { | ||||
|         global $INFO; | ||||
|         @unlink($this->cname); | ||||
|         $INFO['draft'] = null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get a formatted message stating when the draft was saved | ||||
|      * | ||||
|      * @return string | ||||
|      */ | ||||
|     public function getDraftMessage() | ||||
|     { | ||||
|         global $lang; | ||||
|         return $lang['draftdate'] . ' ' . dformat(filemtime($this->cname)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Retrieve the errors that occured when saving the draft | ||||
|      * | ||||
|      * @return array | ||||
|      */ | ||||
|     public function getErrors() | ||||
|     { | ||||
|         return $this->errors; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get the timestamp when this draft was saved | ||||
|      * | ||||
|      * @return int | ||||
|      */ | ||||
|     public function getDraftDate() | ||||
|     { | ||||
|         return filemtime($this->cname); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user