| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | 
							- <?php
 
- /**
 
-  * Define a category.
 
-  * @author Valentin CARRUESCO
 
-  * @category Plugin
 
-  * @license copyright
 
-  */
 
- require_once(__DIR__.SLASH.'WikiPage.class.php');
 
- class WikiCategory extends Entity{
 
- 	public $id,$label,$icon,$color,$state,$path,$slug;
 
- 	protected $TABLE_NAME = 'wiki_category';
 
- 	public $fields =
 
- 	array(
 
- 		'id' => 'key',
 
- 		'label' => 'string',
 
- 		'slug' => 'string',
 
- 		'icon' => 'string',
 
- 		'color' => 'string',
 
- 		'state' => 'string',
 
- 		'path' => 'string'
 
- 	);
 
- 	const DEFAULT_CATEGORY = 'Non classé';
 
- 	public function __construct(){
 
- 		$this->color = self::color();
 
- 		parent::__construct();
 
- 	}
 
- 	public static function synchronize(){
 
- 		$workspace = WikiPage::workspace();
 
- 		$defaultCategory = $workspace.SLASH.wiki_os_encode(self::DEFAULT_CATEGORY);
 
- 		if(!file_exists($defaultCategory)) mkdir($defaultCategory,0755,true);
 
- 		$existing =  array();
 
- 		//MAJ de la base pour les dossiers supprimés
 
- 		foreach(self::loadAll() as $category){
 
- 			if(!file_exists($workspace.SLASH.wiki_os_encode($category->path)))
 
- 				self::deleteById($category->id);
 
- 			$existing[$category->path] = $category;
 
- 		}
 
- 		//MAJ de la base pour les nouveaux dossiers
 
- 		foreach(glob($workspace.SLASH.'*') as $folder){
 
- 			$path = str_replace($workspace.SLASH,'',wiki_os_decode($folder));
 
- 			if(isset($existing[$path])) continue;
 
- 			if(is_dir($folder)){
 
- 				$category = new self();
 
- 				$category->label = wiki_os_decode(basename($folder));
 
- 				$category->slug = slugify($category->label);
 
- 				$category->path = $path;
 
- 				$category->icon = 'far fa-bookmark';
 
- 				$category->save();
 
- 			} else {
 
- 				rename($folder, $defaultCategory.SLASH.basename($folder));
 
- 			}
 
- 		}
 
- 	}
 
- 	public function pages(){
 
- 		$pages = array();
 
- 		$workspace = WikiPage::workspace();
 
- 		$existing =  array();
 
- 		foreach(WikiPage::loadAll(array('category'=>$this->id)) as $page){
 
- 			if(!file_exists($workspace.SLASH.wiki_os_encode($page->path))){
 
- 				WikiPage::deleteById($page->id);
 
- 				continue;
 
- 			}
 
- 			$existing[$page->path] = $page;
 
- 		}
 
- 		
 
- 		foreach(glob($workspace.SLASH.wiki_os_encode($this->path).SLASH.'*.md') as $file){
 
- 			$path = str_replace($workspace.SLASH,'',wiki_os_decode($file));
 
- 			if(!is_file($file) || isset($existing[$path])) continue;
 
- 			$page = new WikiPage();
 
- 			$page->label = preg_replace('|\.md|i','',wiki_os_decode(basename($file)));
 
- 			$page->slug = slugify($page->label);
 
- 			$page->path = $path;
 
- 			$page->content = file_get_contents($file);
 
- 			$page->category = $this->id;
 
- 			$page->state = WikiPage::PUBLISHED;
 
- 			$page->save();
 
- 		}
 
- 		$pages =  WikiPage::loadAll(array('category'=>$this->id),array('label'));
 
- 		return $pages;
 
- 	}
 
- 	public static function deleteById($id){
 
- 		$category = self::getById($id);
 
- 		parent::deleteById($id);
 
- 		$workspace = WikiPage::workspace();
 
- 		$path = $workspace.SLASH.wiki_os_encode($category->path);
 
- 		if(file_exists($path) && is_dir($path)) self::remove_directory($path);
 
- 	}
 
- 	public static function remove_directory($dir){
 
- 		if(!is_dir($dir)) return;
 
- 		foreach (glob($dir.SLASH.'*') as $file) { 
 
- 			if(is_dir($file)){
 
- 				self::remove_directory($file);
 
- 			} else {
 
- 				unlink($file);
 
- 			}
 
- 		}
 
- 		rmdir($dir);
 
- 	}
 
- 	public static function color(){
 
- 		$colors = array(
 
- 			'#4E5C6E',
 
- 			'#19B7FF',
 
- 			'#19B7FF',
 
- 			'#7F6BFF',
 
- 			'#FC7419',
 
- 			'#FC2D2D',
 
- 			'#FFE100',
 
- 			'#14CF9F',
 
- 			'#EE84F0',
 
- 			'#2F362F'
 
- 		);
 
- 		return $colors[array_rand($colors)];
 
- 	}
 
- 	public function author(){
 
- 		return User::byLogin($this->creator)->fullName();
 
- 	}
 
- 	public function created(){
 
- 		return relative_time($this->created);
 
- 	}
 
- 	
 
- 	public function updater(){
 
- 		return User::byLogin($this->updater)->fullName();
 
- 	}
 
- 	public function updated(){
 
- 		return relative_time($this->updated);
 
- 	}
 
- }
 
- ?>
 
 
  |