228 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| 	
 | |
| 	define('DRAFT_DIR', CONTENT_DIR . 'drafts/');
 | |
| 	
 | |
| 	class draft_indexer extends fs_filelister {
 | |
| 		
 | |
| 		var $_varname = 'cache';
 | |
| 		var $_cachefile = null;
 | |
| 		var $_directory = DRAFT_DIR;
 | |
| 		
 | |
| 		function draft_indexer() {
 | |
| 			$this->_cachefile = CACHE_DIR . 'draft_index.php';	
 | |
| 			return parent::fs_filelister();
 | |
| 		}
 | |
| 		
 | |
| 		
 | |
| 		function _checkFile($directory, $file) {
 | |
| 		
 | |
| 			$f = "$directory/$file";
 | |
| 				if ( is_dir($f) && ctype_digit($file)) {
 | |
| 					return 1;
 | |
| 				}
 | |
| 				
 | |
| 				if (fnmatch('entry*'.EXT, $file)) {
 | |
| 					$id=basename($file,EXT);
 | |
| 					$arr=draft_parse($id);
 | |
| 		
 | |
| 					//$this->add($id, $arr['subject']);
 | |
| 					$this->_list[$id] = $arr['subject'];
 | |
| 					
 | |
| 					return 0;
 | |
| 				}
 | |
| 		
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 	
 | |
| 	function &draft_init() {
 | |
| 		global $draftdb;
 | |
| 		if (!isset($draftdb))
 | |
| 			$draftdb =& new draft_indexer;
 | |
| 		return $draftdb;
 | |
| 	}
 | |
| 	
 | |
| 		
 | |
| 	function draft_getlist() {
 | |
| 		
 | |
| 		static $list = array();
 | |
| 		
 | |
| 		if (!$list) {
 | |
| 			$obj =& draft_init();
 | |
| 			$list = $obj->getList();
 | |
| 			krsort($list);
 | |
| 		}
 | |
| 		
 | |
| 		return $list;
 | |
| 		
 | |
| 	}	
 | |
| 	
 | |
| 	function draft_parse($id) {
 | |
| 	
 | |
| 		if ($fname=draft_exists($id)) {
 | |
| 		
 | |
| 			$entry = io_load_file($fname);
 | |
| 			
 | |
| 			$entry = array_change_key_case(utils_kexplode($entry));
 | |
| 			if (!isset($entry['categories']))
 | |
| 				$entry['categories'] = array();
 | |
| 			else 
 | |
| 				$entry['categories'] = explode(',', $entry['categories']);
 | |
| 				
 | |
| 			return $entry;
 | |
| 		}
 | |
| 		return array();
 | |
| 	}
 | |
| 
 | |
| 	
 | |
| 	function draft_save($entry, $id=null, $update_date=false) {
 | |
| 	
 | |
| 		if (!$id) {
 | |
| 			$id = bdb_idfromtime('entry', $entry['date']);
 | |
| 		}
 | |
| 	
 | |
| 		$ed = entry_dir($id);
 | |
| 		$dd = draft_dir($id);
 | |
| 		
 | |
| 		if (file_exists($ed.EXT)) {
 | |
| 		
 | |
| 			// move collateral files
 | |
| 			@rename($ed, $dd);
 | |
| 			
 | |
| 			// delete normal entry
 | |
| 			fs_delete($ed.EXT);
 | |
| 			
 | |
| 			// remove from normal flow
 | |
| 			$o =& entry_init();
 | |
| 			$o->delete($id);
 | |
| 	
 | |
| 		}
 | |
| 		
 | |
| 		$entry = array_change_key_case($entry, CASE_UPPER);
 | |
| 		if (isset($entry['CATEGORIES'])) {
 | |
| 			
 | |
| 				if (is_array($entry['CATEGORIES']))
 | |
| 					$entry['CATEGORIES'] = implode(',',$entry['CATEGORIES']);
 | |
| 				else
 | |
| 					trigger_error("Failed saving draft. Expected 'categories' to be
 | |
| 							an array, found " . gettype($entry['CATEGORIES']), E_USER_ERROR);	
 | |
| 		}
 | |
| 		
 | |
| 		$string = utils_kimplode($entry);
 | |
| 		
 | |
| 	
 | |
| 		if (!io_write_file($dd.EXT, $string)) {
 | |
| 				return false;
 | |
| 		} else return $id;
 | |
| 		
 | |
| 		return false;
 | |
| 		
 | |
| 	}
 | |
| 	
 | |
| 	function draft_dir($id) {
 | |
| 		if (!preg_match('|^entry[0-9]{6}-[0-9]{6}$|', $id))
 | |
| 			return false;
 | |
| 		//$date = date_from_id($id);
 | |
| 		//$f = CONTENT_DIR . "{$date['y']}/{$date['m']}/$id";
 | |
| 		return DRAFT_DIR . $id; 
 | |
| 		//return $f;
 | |
| 	
 | |
| 	
 | |
| 	}
 | |
| 	
 | |
| 	function draft_exists($id) {
 | |
| 	
 | |
| 		if (!user_loggedin()) 
 | |
| 			return false;
 | |
| 		
 | |
| 		$dir = draft_dir($id);
 | |
| 		if (!$dir)
 | |
| 			return false;
 | |
| 	
 | |
| 		$f = $dir .EXT;
 | |
| 		if (file_exists($f))
 | |
| 			return $f;
 | |
| 		
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	function draft_delete($id) {
 | |
| 		$dir = draft_dir($id);
 | |
| 		
 | |
| 		$f=$dir.EXT;
 | |
| 		if (!file_exists($f))
 | |
| 			return false;
 | |
| 		
 | |
| 		//$draftdb =& draft_init();
 | |
| 		//$draftdb->delete($id);
 | |
| 		fs_delete_recursive($dir);
 | |
| 		
 | |
| 		return fs_delete($f);
 | |
| 	}
 | |
| 	
 | |
| 	/*
 | |
| 	function draft_from_entry($entryid) {
 | |
| 		$dir = entry_dir($entryid);
 | |
| 		//$dir2 = str_replace('entry', 'draft', $dir);
 | |
| 		$dir2 = draft_dir($entryid);
 | |
| 		@rename($dir, $dir2);
 | |
| 		@rename($dir.EXT, $dir2.EXT);
 | |
| 	}
 | |
| 	*/
 | |
| 	
 | |
| 	function draft_to_entry($draftid) {
 | |
| 	
 | |
| 		$dir = draft_dir($draftid);
 | |
| 		$dir2 = entry_dir($draftid);
 | |
| 		
 | |
| 		@rename($dir, $dir2);
 | |
| 		draft_delete($draftid);
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	function smarty_block_draftlist($params, $content, &$smarty, &$repeat) {
 | |
| 		global $fpdb;
 | |
| 		
 | |
| 		if ($list = draft_getlist()) {
 | |
| 			$smarty->assign('draft_list', $list);
 | |
| 			return $content;
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	function smarty_block_draft($params, $content, &$smarty, &$repeat) {
 | |
| 		
 | |
| 		static $list = array();
 | |
| 		
 | |
| 		$smarty->assign(array(	'subject'=>'',
 | |
| 					'content'=>'',
 | |
| 					'date'=>'',
 | |
| 					'author'=>'',
 | |
| 					'version'=>'',
 | |
| 					'id'=>''
 | |
| 					)
 | |
| 				);
 | |
| 		$arr =& $smarty->get_template_vars('draft_list');
 | |
| 		
 | |
| 		list($id, $subject)=each($arr);
 | |
| 		
 | |
| 		if ($id){
 | |
| 			$smarty->assign('subject', $subject);
 | |
| 			$smarty->assign('id', $id);
 | |
| 		}
 | |
| 		
 | |
| 		$repeat = (bool) $id;
 | |
| 
 | |
| 		return $content;	
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	
 | |
| 	$smarty->register_block('draft_block', 'smarty_block_draftlist');
 | |
| 	$smarty->register_block('draft', 'smarty_block_draft');
 | |
| 
 | |
| 
 | |
| ?>
 | 
