fixed some more each() calls;
core.utils.php: added new function utils_array_kshift(); code formatting changed slightly
This commit is contained in:
parent
3ca9093f7a
commit
61ec0d9f4d
File diff suppressed because it is too large
Load Diff
@ -1,223 +1,204 @@
|
||||
<?php
|
||||
define('DRAFT_DIR', CONTENT_DIR . 'drafts/');
|
||||
|
||||
|
||||
define('DRAFT_DIR', CONTENT_DIR . 'drafts/');
|
||||
|
||||
class draft_indexer extends fs_filelister {
|
||||
|
||||
var $_varname = 'cache';
|
||||
var $_cachefile = null;
|
||||
var $_directory = DRAFT_DIR;
|
||||
|
||||
function __construct() {
|
||||
$this->_cachefile = CACHE_DIR . 'draft_index.php';
|
||||
return parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
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 = utils_kexplode($entry);
|
||||
if (!isset($entry['categories']))
|
||||
$entry['categories'] = array();
|
||||
else
|
||||
$entry['categories'] = explode(',', $entry['categories']);
|
||||
|
||||
return $entry;
|
||||
}
|
||||
return array();
|
||||
class draft_indexer extends fs_filelister {
|
||||
|
||||
var $_varname = 'cache';
|
||||
|
||||
var $_cachefile = null;
|
||||
|
||||
var $_directory = DRAFT_DIR;
|
||||
|
||||
function __construct() {
|
||||
$this->_cachefile = CACHE_DIR . 'draft_index.php';
|
||||
return parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
function draft_save(&$entry, $id=null, $update_index = false, $update_date=false) {
|
||||
|
||||
if (!$id) {
|
||||
$id = bdb_idfromtime('entry', $entry['date']);
|
||||
function _checkFile($directory, $file) {
|
||||
$f = "$directory/$file";
|
||||
if (is_dir($f) && ctype_digit($file)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
$ed = entry_dir($id);
|
||||
$dd = draft_dir($id);
|
||||
|
||||
if (file_exists($ed.EXT)) {
|
||||
|
||||
// move collateral files
|
||||
@rename($ed, $dd);
|
||||
if (fnmatch('entry*' . EXT, $file)) {
|
||||
$id = basename($file, EXT);
|
||||
$arr = draft_parse($id);
|
||||
|
||||
if ($update_index) {
|
||||
// delete normal entry
|
||||
fs_delete($ed.EXT);
|
||||
// $this->add($id, $arr['subject']);
|
||||
$this->_list [$id] = $arr ['subject'];
|
||||
|
||||
// remove from normal flow
|
||||
$o =& entry_init();
|
||||
$o->delete($id, null);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
$new_entry = entry_prepare($entry);
|
||||
if ($new_entry['categories'])
|
||||
$new_entry['categories']=implode(',', $entry['categories']);
|
||||
else unset($new_entry['categories']);
|
||||
|
||||
$string = utils_kimplode($new_entry);
|
||||
|
||||
}
|
||||
|
||||
if (!io_write_file($dd.EXT, $string)) {
|
||||
return false;
|
||||
} else return $id;
|
||||
}
|
||||
|
||||
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 = 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_index = false, $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);
|
||||
|
||||
if ($update_index) {
|
||||
// delete normal entry
|
||||
fs_delete($ed . EXT);
|
||||
|
||||
// remove from normal flow
|
||||
$o = & entry_init();
|
||||
$o->delete($id, null);
|
||||
}
|
||||
}
|
||||
|
||||
$new_entry = entry_prepare($entry);
|
||||
if ($new_entry ['categories'])
|
||||
$new_entry ['categories'] = implode(',', $entry ['categories']);
|
||||
else
|
||||
unset($new_entry ['categories']);
|
||||
|
||||
$string = utils_kimplode($new_entry);
|
||||
|
||||
if (!io_write_file($dd . EXT, $string)) {
|
||||
return false;
|
||||
|
||||
}
|
||||
} else
|
||||
return $id;
|
||||
|
||||
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) {
|
||||
|
||||
$dir = draft_dir($id);
|
||||
if (!$dir)
|
||||
return false;
|
||||
|
||||
$f = $dir .EXT;
|
||||
if (file_exists($f))
|
||||
return $f;
|
||||
|
||||
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_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_exists($id) {
|
||||
$dir = draft_dir($id);
|
||||
if (!$dir)
|
||||
return false;
|
||||
|
||||
/*
|
||||
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);
|
||||
}
|
||||
*/
|
||||
$f = $dir . EXT;
|
||||
if (file_exists($f))
|
||||
return $f;
|
||||
|
||||
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');
|
||||
|
||||
$id = $subject = null;
|
||||
if ($arr)
|
||||
list($id, $subject)=each($arr);
|
||||
|
||||
if ($id){
|
||||
$smarty->assign('subject', $subject);
|
||||
$smarty->assign('id', $id);
|
||||
}
|
||||
|
||||
$repeat = (bool) $id;
|
||||
return false;
|
||||
}
|
||||
|
||||
return $content;
|
||||
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');
|
||||
|
||||
$id = $subject = null;
|
||||
if ($arr) {
|
||||
$firstElement = utils_array_kshift($arr);
|
||||
$id = array_keys($firstElement) [0];
|
||||
$subject = $firstElement [$id];
|
||||
}
|
||||
|
||||
if ($id) {
|
||||
$smarty->assign('subject', $subject);
|
||||
$smarty->assign('id', $id);
|
||||
}
|
||||
|
||||
$repeat = (bool) $id;
|
||||
|
||||
$smarty->register_block('draft_block', 'smarty_block_draftlist');
|
||||
$smarty->register_block('draft', 'smarty_block_draft');
|
||||
return $content;
|
||||
}
|
||||
|
||||
$smarty->register_block('draft_block', 'smarty_block_draftlist');
|
||||
$smarty->register_block('draft', 'smarty_block_draft');
|
||||
|
||||
?>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,458 +1,442 @@
|
||||
<?php
|
||||
|
||||
// utils.php
|
||||
// library of misc utilities
|
||||
|
||||
|
||||
// function subkey sort
|
||||
// function prototype :
|
||||
// array utils_sksort(array $arr, string $key, int $flag=SORT_ASC)
|
||||
// sorts an array of associative arrays by given key $key
|
||||
// $flag can be SORT_ASC or SORT_DESC for ascending
|
||||
// or descending order (defaults to ascending);
|
||||
// other flags are the same of array_multisort() php function ;)
|
||||
function utils_sksort($arr, $key, $flag=SORT_ASC) {
|
||||
if ($arr) {
|
||||
foreach($arr as $val)
|
||||
$sorter[] = $val[$key];
|
||||
array_multisort($sorter, $flag, $arr);
|
||||
return $arr;
|
||||
} else return false;
|
||||
}
|
||||
|
||||
// function prototype:
|
||||
// bool utils_pattern_match(string $string, string $pattern)
|
||||
|
||||
// returns true if $pattern matches $string, else returns false (what else?)
|
||||
// $pattern is a string containing standard shell-style jokers: * and ?
|
||||
// regex are powerful but somtimes, too complicated :)
|
||||
// usage: * matches a variable number of chars
|
||||
// e.g. : doc*.txt matches document.txt, docs.txt, dock.txt, etc.
|
||||
// and also doc.txt (note: I didn't want it to do that, but I didn't change it)
|
||||
// ? matches one char, whichever is
|
||||
// e.g. : document?.txt matches document1.txt, document2.txt, document3.txt, etc.
|
||||
// likewise "*", it should match document.txt, too (but I hadn't tried it :) )
|
||||
|
||||
// code from http://www.php.net/function.glob.php.htm#54519
|
||||
// by x_terminat_or_3 at yahoo dot country:fr
|
||||
// thank you, man ;)
|
||||
// as usual, slightly modified to fit my tastes :)
|
||||
|
||||
// utils.php
|
||||
// library of misc utilities
|
||||
|
||||
// function subkey sort
|
||||
// function prototype :
|
||||
// array utils_sksort(array $arr, string $key, int $flag=SORT_ASC)
|
||||
// sorts an array of associative arrays by given key $key
|
||||
// $flag can be SORT_ASC or SORT_DESC for ascending
|
||||
// or descending order (defaults to ascending);
|
||||
// other flags are the same of array_multisort() php function ;)
|
||||
function utils_sksort($arr, $key, $flag = SORT_ASC) {
|
||||
if ($arr) {
|
||||
foreach ($arr as $val)
|
||||
$sorter [] = $val [$key];
|
||||
array_multisort($sorter, $flag, $arr);
|
||||
return $arr;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
// function prototype:
|
||||
// bool utils_pattern_match(string $string, string $pattern)
|
||||
|
||||
// returns true if $pattern matches $string, else returns false (what else?)
|
||||
// $pattern is a string containing standard shell-style jokers: * and ?
|
||||
// regex are powerful but somtimes, too complicated :)
|
||||
// usage: * matches a variable number of chars
|
||||
// e.g. : doc*.txt matches document.txt, docs.txt, dock.txt, etc.
|
||||
// and also doc.txt (note: I didn't want it to do that, but I didn't change it)
|
||||
// ? matches one char, whichever is
|
||||
// e.g. : document?.txt matches document1.txt, document2.txt, document3.txt, etc.
|
||||
// likewise "*", it should match document.txt, too (but I hadn't tried it :) )
|
||||
|
||||
// code from http://www.php.net/function.glob.php.htm#54519
|
||||
// by x_terminat_or_3 at yahoo dot country:fr
|
||||
// thank you, man ;)
|
||||
// as usual, slightly modified to fit my tastes :)
|
||||
|
||||
if (!function_exists('fnmatch')) {
|
||||
|
||||
function fnmatch($pattern, $string) {
|
||||
|
||||
if ($pattern == null)
|
||||
return false;
|
||||
|
||||
//basically prepare a regular expression
|
||||
$out=null;
|
||||
$chunks=explode(';',$pattern);
|
||||
foreach($chunks as $pattern)
|
||||
{
|
||||
$escape=array('$','^','.','{','}','(',')','[',']','|');
|
||||
while(strpos($pattern,'**')!==false)
|
||||
$pattern=str_replace('**','*',$pattern);
|
||||
|
||||
foreach($escape as $probe)
|
||||
$pattern=str_replace($probe,"\\$probe",$pattern);
|
||||
$pattern=str_replace('?*','*', str_replace('*?','*',
|
||||
str_replace('*',".*",
|
||||
str_replace('?','.{1,1}',$pattern))));
|
||||
$out[]=$pattern;
|
||||
// basically prepare a regular expression
|
||||
$out = null;
|
||||
$chunks = explode(';', $pattern);
|
||||
foreach ($chunks as $pattern) {
|
||||
$escape = array(
|
||||
'$',
|
||||
'^',
|
||||
'.',
|
||||
'{',
|
||||
'}',
|
||||
'(',
|
||||
')',
|
||||
'[',
|
||||
']',
|
||||
'|'
|
||||
);
|
||||
while (strpos($pattern, '**') !== false)
|
||||
$pattern = str_replace('**', '*', $pattern);
|
||||
|
||||
foreach ($escape as $probe)
|
||||
$pattern = str_replace($probe, "\\$probe", $pattern);
|
||||
$pattern = str_replace('?*', '*', str_replace('*?', '*', str_replace('*', ".*", str_replace('?', '.{1,1}', $pattern))));
|
||||
$out [] = $pattern;
|
||||
}
|
||||
/* // NoWhereMan note: why splitting this in two? :)
|
||||
if(count($out)==1) return(eregi("^$out[0]$",$string)); else*/
|
||||
foreach($out as $tester) {
|
||||
if (preg_match("/^$tester$/i",$string))
|
||||
/*
|
||||
* // NoWhereMan note: why splitting this in two? :)
|
||||
* if(count($out)==1) return(eregi("^$out[0]$",$string)); else
|
||||
*/
|
||||
foreach ($out as $tester) {
|
||||
if (preg_match("/^$tester$/i", $string))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// function prototype:
|
||||
// array utils_kexplode(string $string, string $delim='|')
|
||||
|
||||
// explodes a string into an array by the given delimiter;
|
||||
// delimiter defaults to pipe ('|').
|
||||
// the string must be formatted as in:
|
||||
// key1|value1|key2|value2 , etc.
|
||||
// the array will look like
|
||||
// $arr['key1'] = 'value1'; $arr['key2'] = 'value2'; etc.
|
||||
function utils_kexplode($string, $delim = '|', $keyupper = true) {
|
||||
$arr = array();
|
||||
$string = trim($string);
|
||||
|
||||
|
||||
// function prototype:
|
||||
// array utils_kexplode(string $string, string $delim='|')
|
||||
|
||||
// explodes a string into an array by the given delimiter;
|
||||
// delimiter defaults to pipe ('|').
|
||||
// the string must be formatted as in:
|
||||
// key1|value1|key2|value2 , etc.
|
||||
// the array will look like
|
||||
// $arr['key1'] = 'value1'; $arr['key2'] = 'value2'; etc.
|
||||
|
||||
function utils_kexplode($string, $delim='|', $keyupper=true) {
|
||||
$arr = array();
|
||||
$string = trim($string);
|
||||
|
||||
$k = strtolower(strtok($string, $delim));
|
||||
$arr[$k] = strtok($delim);
|
||||
while (( $k = strtok($delim) ) !== false) {
|
||||
if ($keyupper && !preg_match('/[A-Z-_]/',$k)){
|
||||
/*
|
||||
trigger_error("Failed parsing <pre>$string</pre>
|
||||
keys were supposed to be UPPERCASE but <strong>\"$k\"</strong> was found; file may be corrupted
|
||||
or in an expected format. <br />
|
||||
Some SimplePHPBlog files may raise this error: set DUMB_MODE_ENABLED
|
||||
to true in your defaults.php to force parsing of the offending keys.",
|
||||
E_USER_WARNING);
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
$arr[strtolower($k)] = strtok($delim);
|
||||
$k = strtolower(strtok($string, $delim));
|
||||
$arr [$k] = strtok($delim);
|
||||
while (($k = strtok($delim)) !== false) {
|
||||
if ($keyupper && !preg_match('/[A-Z-_]/', $k)) {
|
||||
/*
|
||||
* trigger_error("Failed parsing <pre>$string</pre>
|
||||
* keys were supposed to be UPPERCASE but <strong>\"$k\"</strong> was found; file may be corrupted
|
||||
* or in an expected format. <br />
|
||||
* Some SimplePHPBlog files may raise this error: set DUMB_MODE_ENABLED
|
||||
* to true in your defaults.php to force parsing of the offending keys.",
|
||||
* E_USER_WARNING);
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
return $arr;
|
||||
$arr [strtolower($k)] = strtok($delim);
|
||||
}
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
/*
|
||||
function utils_newkexplode($string, $delim='|') {
|
||||
|
||||
$arr = array();
|
||||
|
||||
$lastoffset = $offset = 0;
|
||||
$len = strlen($string);
|
||||
|
||||
while ($lastoffset<$len) {
|
||||
$offset = strpos($string, $delim, $lastoffset);
|
||||
$key = substr($string, $lastoffset, $offset-$lastoffset);
|
||||
//echo 'parsing key: ', $key, $offset, chr(10);
|
||||
|
||||
$lastoffset = $offset + 1;
|
||||
|
||||
if (!ctype_upper($key))
|
||||
trigger_error("Failed parsing \"$string\"
|
||||
keys were supposed to be UPPERCASE", E_USER_ERROR);
|
||||
|
||||
$offset = strpos($string, $delim, $lastoffset);
|
||||
/*
|
||||
* function utils_newkexplode($string, $delim='|') {
|
||||
*
|
||||
* $arr = array();
|
||||
*
|
||||
* $lastoffset = $offset = 0;
|
||||
* $len = strlen($string);
|
||||
*
|
||||
* while ($lastoffset<$len) {
|
||||
* $offset = strpos($string, $delim, $lastoffset);
|
||||
* $key = substr($string, $lastoffset, $offset-$lastoffset);
|
||||
* //echo 'parsing key: ', $key, $offset, chr(10);
|
||||
*
|
||||
* $lastoffset = $offset + 1;
|
||||
*
|
||||
* if (!ctype_upper($key))
|
||||
* trigger_error("Failed parsing \"$string\"
|
||||
* keys were supposed to be UPPERCASE", E_USER_ERROR);
|
||||
*
|
||||
* $offset = strpos($string, $delim, $lastoffset);
|
||||
*
|
||||
* if ($offset===false)
|
||||
* $offset = $len;
|
||||
*
|
||||
* $val = substr($string, $lastoffset, $offset-$lastoffset);
|
||||
*
|
||||
* //echo 'parsing value ', $val, $offset, chr(10);
|
||||
*
|
||||
* $lastoffset = $offset + 1;
|
||||
*
|
||||
* $arr[$key] = $val;
|
||||
*
|
||||
* }
|
||||
* return $arr;
|
||||
*
|
||||
* }
|
||||
*/
|
||||
|
||||
if ($offset===false)
|
||||
$offset = $len;
|
||||
// function prototype:
|
||||
// array utils_kimplode(string $string, string $delim='|')
|
||||
|
||||
$val = substr($string, $lastoffset, $offset-$lastoffset);
|
||||
|
||||
//echo 'parsing value ', $val, $offset, chr(10);
|
||||
|
||||
$lastoffset = $offset + 1;
|
||||
|
||||
$arr[$key] = $val;
|
||||
|
||||
}
|
||||
return $arr;
|
||||
|
||||
}*/
|
||||
|
||||
|
||||
// function prototype:
|
||||
// array utils_kimplode(string $string, string $delim='|')
|
||||
|
||||
// explodes a string into an array by the given delimiter;
|
||||
// delimiter defaults to pipe ('|').
|
||||
// the string must be formatted as in:
|
||||
// key1|value1|key2|value2 , etc.
|
||||
// the array will look like
|
||||
// $arr['key1'] = 'value1'; $arr['key2'] = 'value2'; etc.
|
||||
|
||||
function utils_kimplode($arr, $delim='|') {
|
||||
|
||||
$string = "";
|
||||
foreach ($arr as $k => $val) {
|
||||
if ($val)
|
||||
$string .= strtoupper($k) . $delim . ($val) . $delim;
|
||||
}
|
||||
return $string;
|
||||
// explodes a string into an array by the given delimiter;
|
||||
// delimiter defaults to pipe ('|').
|
||||
// the string must be formatted as in:
|
||||
// key1|value1|key2|value2 , etc.
|
||||
// the array will look like
|
||||
// $arr['key1'] = 'value1'; $arr['key2'] = 'value2'; etc.
|
||||
function utils_kimplode($arr, $delim = '|') {
|
||||
$string = "";
|
||||
foreach ($arr as $k => $val) {
|
||||
if ($val)
|
||||
$string .= strtoupper($k) . $delim . ($val) . $delim;
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @todo send mail to admin
|
||||
*/
|
||||
function &utils_explode_recursive($array, &$string, $rdelim, $ldelim = '', $outerldelim = '', $outerrdelim = '') {
|
||||
$string .= $outerldelim;
|
||||
|
||||
/**
|
||||
* @todo send mail to admin
|
||||
*/
|
||||
|
||||
|
||||
function &utils_explode_recursive($array, &$string, $rdelim, $ldelim='', $outerldelim='', $outerrdelim='') {
|
||||
|
||||
$string .= $outerldelim;
|
||||
|
||||
while ($val = array_shift($array)) {
|
||||
|
||||
$string .= $rdelim;
|
||||
if (is_array($val)) {
|
||||
$string .= utils_explode_recursive($val, $string, $rdelim, $ldelim, $outerldelim, $outerrdelim);
|
||||
} else {
|
||||
$string .= $val;
|
||||
}
|
||||
|
||||
$string .= $ldelim;
|
||||
|
||||
}
|
||||
|
||||
$string .= $outerrdelim;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function utils_validateinput($str) {
|
||||
while ($val = array_shift($array)) {
|
||||
|
||||
if (preg_match('/[^a-z0-9\-_]/i',$str)){
|
||||
trigger_error("String \"$str\" is not a valid input", E_USER_ERROR);
|
||||
//return false;
|
||||
} else
|
||||
return true;
|
||||
}
|
||||
|
||||
function utils_cut_string($str,$maxc) {
|
||||
$car = strlen($str);
|
||||
if($car > $maxc) {
|
||||
return substr($str, 0, $maxc)."...";
|
||||
$string .= $rdelim;
|
||||
if (is_array($val)) {
|
||||
$string .= utils_explode_recursive($val, $string, $rdelim, $ldelim, $outerldelim, $outerrdelim);
|
||||
} else {
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function utils_status_header($status) {
|
||||
|
||||
switch ($status) {
|
||||
case 301:
|
||||
header("HTTP/1.1 301 Moved Permanently");
|
||||
break;
|
||||
case 403:
|
||||
header("HTTP/1.1 403 Forbidden");
|
||||
break;
|
||||
case 404:
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// code from php.net ;)
|
||||
// defaults to index.php ;)
|
||||
function utils_redirect($location="", $absolute_path=false, $red_type=null) {
|
||||
|
||||
if (!$absolute_path)
|
||||
$location = BLOG_BASEURL . $location;
|
||||
|
||||
if ( function_exists('wp_redirect') ) {
|
||||
wp_redirect($location);
|
||||
} else {
|
||||
header("Location: $location");
|
||||
$string .= $val;
|
||||
}
|
||||
|
||||
exit();
|
||||
|
||||
$string .= $ldelim;
|
||||
}
|
||||
|
||||
$string .= $outerrdelim;
|
||||
}
|
||||
|
||||
function utils_validateinput($str) {
|
||||
if (preg_match('/[^a-z0-9\-_]/i', $str)) {
|
||||
trigger_error("String \"$str\" is not a valid input", E_USER_ERROR);
|
||||
// return false;
|
||||
} else
|
||||
return true;
|
||||
}
|
||||
|
||||
function utils_cut_string($str, $maxc) {
|
||||
$car = strlen($str);
|
||||
if ($car > $maxc) {
|
||||
return substr($str, 0, $maxc) . "...";
|
||||
} else {
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
|
||||
function utils_status_header($status) {
|
||||
switch ($status) {
|
||||
case 301:
|
||||
header("HTTP/1.1 301 Moved Permanently");
|
||||
break;
|
||||
case 403:
|
||||
header("HTTP/1.1 403 Forbidden");
|
||||
break;
|
||||
case 404:
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// code from php.net ;)
|
||||
// defaults to index.php ;)
|
||||
function utils_redirect($location = "", $absolute_path = false, $red_type = null) {
|
||||
if (!$absolute_path)
|
||||
$location = BLOG_BASEURL . $location;
|
||||
|
||||
/*
|
||||
* utils_geturlstring()
|
||||
*
|
||||
* @return string complete url string as displayed in the browser
|
||||
*
|
||||
*/
|
||||
|
||||
function utils_geturlstring() {
|
||||
$str = BLOG_BASEURL . $_SERVER['PHP_SELF'];
|
||||
if ($_SERVER['QUERY_STRING'])
|
||||
$str .='?'.$_SERVER['QUERY_STRING'];
|
||||
return $str;
|
||||
if (function_exists('wp_redirect')) {
|
||||
wp_redirect($location);
|
||||
} else {
|
||||
header("Location: $location");
|
||||
}
|
||||
|
||||
// custom array_merge:
|
||||
// pads the second array to match the length of the first
|
||||
// this can be improved, anyway for now I'd just
|
||||
// do a quick & dirty solution :)
|
||||
function utils_array_merge($arr1, $arr2) {
|
||||
|
||||
$len=count($arr1[0]);
|
||||
|
||||
foreach($arr2 as $k=>$v)
|
||||
$arr2[$k]=array_pad((Array) $v, $len, null);
|
||||
|
||||
return array_merge($arr1, $arr2);
|
||||
exit();
|
||||
}
|
||||
|
||||
/*
|
||||
* utils_geturlstring()
|
||||
*
|
||||
* @return string complete url string as displayed in the browser
|
||||
*
|
||||
*/
|
||||
function utils_geturlstring() {
|
||||
$str = BLOG_BASEURL . $_SERVER ['PHP_SELF'];
|
||||
if ($_SERVER ['QUERY_STRING'])
|
||||
$str .= '?' . $_SERVER ['QUERY_STRING'];
|
||||
return $str;
|
||||
}
|
||||
|
||||
// custom array_merge:
|
||||
// pads the second array to match the length of the first
|
||||
// this can be improved, anyway for now I'd just
|
||||
// do a quick & dirty solution :)
|
||||
function utils_array_merge($arr1, $arr2) {
|
||||
$len = count($arr1 [0]);
|
||||
|
||||
foreach ($arr2 as $k => $v)
|
||||
$arr2 [$k] = array_pad((array) $v, $len, null);
|
||||
|
||||
return array_merge($arr1, $arr2);
|
||||
}
|
||||
|
||||
/*
|
||||
* Simple function to replicate PHP 5 behaviour
|
||||
*/
|
||||
function utils_microtime() {
|
||||
list ($usec, $sec) = explode(" ", microtime());
|
||||
return ((float) $usec + (float) $sec);
|
||||
}
|
||||
|
||||
function utils_countdashes($string, &$rest) {
|
||||
trim($string);
|
||||
$i = 0;
|
||||
while ($string {$i} == '-') {
|
||||
$i++;
|
||||
}
|
||||
if ($i)
|
||||
$rest = substr($string, $i);
|
||||
else
|
||||
$rest = $string;
|
||||
|
||||
return $i;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Simple function to replicate PHP 5 behaviour
|
||||
*/
|
||||
function utils_microtime()
|
||||
{
|
||||
list($usec, $sec) = explode(" ", microtime());
|
||||
return ((float)$usec + (float)$sec);
|
||||
}
|
||||
|
||||
function utils_countdashes($string, &$rest) {
|
||||
trim($string);
|
||||
$i = 0;
|
||||
while ($string{$i} == '-') {
|
||||
$i++;
|
||||
}
|
||||
if ($i)
|
||||
$rest = substr($string, $i);
|
||||
else $rest = $string;
|
||||
|
||||
return $i;
|
||||
|
||||
|
||||
}
|
||||
|
||||
function utils_mail($from, $subject, $message, $headers = '') {
|
||||
global $fp_config;
|
||||
if( $headers == '' ) {
|
||||
$headers = "MIME-Version: 1.0\n" .
|
||||
"From: " . $from . "\n" .
|
||||
"Content-Type: text/plain; charset=\"" . $fp_config['general']['charset'] . "\"\n";
|
||||
}
|
||||
|
||||
return mail($fp_config['general']['email'], $subject, $message, $headers);
|
||||
function utils_mail($from, $subject, $message, $headers = '') {
|
||||
global $fp_config;
|
||||
if ($headers == '') {
|
||||
$headers = "MIME-Version: 1.0\n" . "From: " . $from . "\n" . "Content-Type: text/plain; charset=\"" . $fp_config ['general'] ['charset'] . "\"\n";
|
||||
}
|
||||
|
||||
return mail($fp_config ['general'] ['email'], $subject, $message, $headers);
|
||||
}
|
||||
|
||||
/*
|
||||
* props: http://crisp.tweakblogs.net/blog/2031
|
||||
*/
|
||||
function utils_validateIPv4($IP) {
|
||||
return $IP == long2ip(ip2long($IP));
|
||||
}
|
||||
|
||||
function utils_validateIPv6($IP) {
|
||||
// fast exit for localhost
|
||||
if (strlen($IP) < 3)
|
||||
return $IP == '::';
|
||||
|
||||
// Check if part is in IPv4 format
|
||||
if (strpos($IP, '.'))
|
||||
{
|
||||
$lastcolon = strrpos($IP, ':');
|
||||
if (!($lastcolon && validateIPv4(substr($IP, $lastcolon + 1))))
|
||||
return false;
|
||||
|
||||
// replace IPv4 part with dummy
|
||||
$IP = substr($IP, 0, $lastcolon) . ':0:0';
|
||||
}
|
||||
|
||||
// check uncompressed
|
||||
if (strpos($IP, '::') === false)
|
||||
{
|
||||
return preg_match('/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i', $IP);
|
||||
}
|
||||
|
||||
// check colon-count for compressed format
|
||||
if (substr_count($IP, ':') < 8)
|
||||
{
|
||||
return preg_match('/^(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?$/i', $IP);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
function utils_validateIPv4($IP) {
|
||||
return $IP == long2ip(ip2long($IP));
|
||||
}
|
||||
|
||||
// get client IP
|
||||
function utils_ipget() {
|
||||
function utils_validateIPv6($IP) {
|
||||
// fast exit for localhost
|
||||
if (strlen($IP) < 3)
|
||||
return $IP == '::';
|
||||
|
||||
// Check if part is in IPv4 format
|
||||
if (strpos($IP, '.')) {
|
||||
$lastcolon = strrpos($IP, ':');
|
||||
if (!($lastcolon && validateIPv4(substr($IP, $lastcolon + 1))))
|
||||
return false;
|
||||
|
||||
$ip = '';
|
||||
|
||||
if ( !empty ( $_SERVER[ 'HTTP_CLIENT_IP' ] ) ) {
|
||||
$ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
|
||||
}
|
||||
elseif ( !empty ( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) ) {
|
||||
$ip = $_SERVER[ 'HTTP_X_FORWARDED_FOR' ];
|
||||
}
|
||||
elseif ( !empty ( $_SERVER[ 'REMOTE_ADDR' ] ) ) {
|
||||
$ip = $_SERVER[ 'REMOTE_ADDR' ];
|
||||
}
|
||||
elseif ( getenv( "HTTP_CLIENT_IP" ) ) {
|
||||
$ip = getenv( "HTTP_CLIENT_IP" );
|
||||
}
|
||||
elseif ( getenv( "HTTP_X_FORWARDED_FOR" ) ) {
|
||||
$ip = getenv( "HTTP_X_FORWARDED_FOR" );
|
||||
}
|
||||
elseif ( getenv( "REMOTE_ADDR") ) {
|
||||
$ip = getenv( "REMOTE_ADDR" );
|
||||
}
|
||||
|
||||
if (utils_validateIPv4($ip) || utils_validateIPv6($ip)) {
|
||||
return $ip;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
// replace IPv4 part with dummy
|
||||
$IP = substr($IP, 0, $lastcolon) . ':0:0';
|
||||
}
|
||||
|
||||
function utils_nocache_headers() {
|
||||
@ header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
|
||||
@ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
|
||||
@ header('Cache-Control: no-cache, must-revalidate, max-age=0');
|
||||
@ header('Pragma: no-cache');
|
||||
|
||||
// check uncompressed
|
||||
if (strpos($IP, '::') === false) {
|
||||
return preg_match('/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i', $IP);
|
||||
}
|
||||
|
||||
// check colon-count for compressed format
|
||||
if (substr_count($IP, ':') < 8) {
|
||||
return preg_match('/^(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?$/i', $IP);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// get client IP
|
||||
function utils_ipget() {
|
||||
$ip = '';
|
||||
|
||||
if (!empty($_SERVER ['HTTP_CLIENT_IP'])) {
|
||||
$ip = $_SERVER ['HTTP_CLIENT_IP'];
|
||||
} elseif (!empty($_SERVER ['HTTP_X_FORWARDED_FOR'])) {
|
||||
$ip = $_SERVER ['HTTP_X_FORWARDED_FOR'];
|
||||
} elseif (!empty($_SERVER ['REMOTE_ADDR'])) {
|
||||
$ip = $_SERVER ['REMOTE_ADDR'];
|
||||
} elseif (getenv("HTTP_CLIENT_IP")) {
|
||||
$ip = getenv("HTTP_CLIENT_IP");
|
||||
} elseif (getenv("HTTP_X_FORWARDED_FOR")) {
|
||||
$ip = getenv("HTTP_X_FORWARDED_FOR");
|
||||
} elseif (getenv("REMOTE_ADDR")) {
|
||||
$ip = getenv("REMOTE_ADDR");
|
||||
}
|
||||
|
||||
if (utils_validateIPv4($ip) || utils_validateIPv6($ip)) {
|
||||
return $ip;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function utils_nocache_headers() {
|
||||
@ header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
|
||||
@ header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
|
||||
@ header('Cache-Control: no-cache, must-revalidate, max-age=0');
|
||||
@ header('Pragma: no-cache');
|
||||
}
|
||||
|
||||
// from http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_using_curl
|
||||
// code under OSI BSD
|
||||
/**
|
||||
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an
|
||||
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL.
|
||||
* Return an
|
||||
* array containing the HTTP server response header fields and content.
|
||||
*/
|
||||
function utils_geturl($url) {
|
||||
/*
|
||||
if (ini_get('allow_url_fopen')) {
|
||||
return array('content' => io_load_file($url));
|
||||
}
|
||||
*/
|
||||
* if (ini_get('allow_url_fopen')) {
|
||||
* return array('content' => io_load_file($url));
|
||||
* }
|
||||
*/
|
||||
if (!function_exists('curl_init')) {
|
||||
trigger_error('curl extension is not installed');
|
||||
return array();
|
||||
}
|
||||
|
||||
$options = array(
|
||||
CURLOPT_RETURNTRANSFER => true, // return web page
|
||||
CURLOPT_HEADER => false, // don't return headers
|
||||
CURLOPT_FOLLOWLOCATION => false, // don't follow redirects
|
||||
CURLOPT_ENCODING => "", // handle all encodings
|
||||
CURLOPT_USERAGENT => "spider", // who am i
|
||||
CURLOPT_AUTOREFERER => true, // set referer on redirect
|
||||
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
|
||||
CURLOPT_TIMEOUT => 120, // timeout on response
|
||||
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
|
||||
);
|
||||
|
||||
$ch = curl_init( $url );
|
||||
curl_setopt_array( $ch, $options );
|
||||
$content = curl_exec( $ch );
|
||||
$err = curl_errno( $ch );
|
||||
$errmsg = curl_error( $ch );
|
||||
$header = curl_getinfo( $ch );
|
||||
curl_close( $ch );
|
||||
|
||||
$header['errno'] = $err;
|
||||
$header['errmsg'] = $errmsg;
|
||||
$header['content'] = $content;
|
||||
return $header;
|
||||
|
||||
$options = array(
|
||||
CURLOPT_RETURNTRANSFER => true, // return web page
|
||||
CURLOPT_HEADER => false, // don't return headers
|
||||
CURLOPT_FOLLOWLOCATION => false, // don't follow redirects
|
||||
CURLOPT_ENCODING => "", // handle all encodings
|
||||
CURLOPT_USERAGENT => "spider", // who am i
|
||||
CURLOPT_AUTOREFERER => true, // set referer on redirect
|
||||
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
|
||||
CURLOPT_TIMEOUT => 120, // timeout on response
|
||||
CURLOPT_MAXREDIRS => 10 // stop after 10 redirects
|
||||
);
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, $options);
|
||||
$content = curl_exec($ch);
|
||||
$err = curl_errno($ch);
|
||||
$errmsg = curl_error($ch);
|
||||
$header = curl_getinfo($ch);
|
||||
curl_close($ch);
|
||||
|
||||
$header ['errno'] = $err;
|
||||
$header ['errmsg'] = $errmsg;
|
||||
$header ['content'] = $content;
|
||||
return $header;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function utils_checksmarty() {
|
||||
|
||||
if (!file_exists(SMARTY_DIR . 'Smarty.class.php')) {
|
||||
function utils_checksmarty() {
|
||||
if (!file_exists(SMARTY_DIR . 'Smarty.class.php')) {
|
||||
$err = <<<ERR
|
||||
Fatal error: Smarty is not installed; please download it from <a href="http://smarty.php.net">http://smarty.php.net</a>; you will
|
||||
probably need <a href="http://www.phpinsider.com/php/code/SmartyValidate/">SmartyValidate</a> as well; unpack them to <b>fp-includes/core/smarty</b>: please do not overwrite files in fp-includes/core/smarty/plugins/
|
||||
ERR;
|
||||
trigger_error($err, E_USER_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function fplog($str) {
|
||||
if (!defined('DEBUG_MODE'))
|
||||
echo "\n[DEBUG] $str \n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Shift an element with its key off the beginning of array.
|
||||
* Just like array_shift(), but for an associative array.
|
||||
*
|
||||
* @param array $arr
|
||||
* The input array
|
||||
* @return unknown the shifted value, or NULL if array is empty or is not an array
|
||||
*/
|
||||
function utils_array_kshift(&$arr) {
|
||||
list ($k) = array_keys($arr);
|
||||
$r = array(
|
||||
$k => $arr [$k]
|
||||
);
|
||||
unset($arr [$k]);
|
||||
return $r;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function fplog($str) {
|
||||
if(!defined('DEBUG_MODE'))
|
||||
echo "\n[DEBUG] $str \n";
|
||||
}
|
||||
|
||||
?>
|
||||
|
@ -1,95 +1,100 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Plugin Name: Calendar
|
||||
Version: 1.1
|
||||
Plugin URI: http://flatpress.sf.net
|
||||
Type: Block
|
||||
Description: Adds a Calendar block level element
|
||||
Author: NoWhereMan
|
||||
Author URI: http://flatpress.sf.net
|
||||
*/
|
||||
* Plugin Name: Calendar
|
||||
* Version: 1.1
|
||||
* Plugin URI: http://flatpress.sf.net
|
||||
* Type: Block
|
||||
* Description: Adds a Calendar block level element
|
||||
* Author: NoWhereMan
|
||||
* Author URI: http://flatpress.sf.net
|
||||
*/
|
||||
|
||||
|
||||
# PHP Calendar (version 2.3), written by Keith Devens
|
||||
# http://keithdevens.com/software/php_calendar
|
||||
# see example at http://keithdevens.com/weblog
|
||||
# License: http://keithdevens.com/software/license
|
||||
|
||||
function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
|
||||
$first_of_month = gmmktime(0,0,0,$month,1,$year);
|
||||
#remember that mktime will automatically correct if invalid dates are entered
|
||||
# for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
|
||||
# this provides a built in "rounding" feature to generate_calendar()
|
||||
|
||||
$day_names = array(); #generate all the day names according to the current locale
|
||||
for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
|
||||
$day_names[$n] = ucfirst(date_strformat('%A',$t)); #%A means full textual day name
|
||||
|
||||
list($month, $year, $month_name, $weekday) = explode(',',date_strformat('%m,%Y,%B,%w',$first_of_month));
|
||||
$weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
|
||||
$title = htmlentities(ucfirst($month_name)).' '.$year; #note that some locales don't capitalize month and day names
|
||||
|
||||
#Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
|
||||
// PHP7 compatibility: Since $pn is never passed, we do not need to create "previous" and "next" elements.
|
||||
// Commented out to prevent deprecated each() function from being executed.
|
||||
// PHP Calendar (version 2.3), written by Keith Devens
|
||||
// http://keithdevens.com/software/php_calendar
|
||||
// see example at http://keithdevens.com/weblog
|
||||
// License: http://keithdevens.com/software/license
|
||||
function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()) {
|
||||
$first_of_month = gmmktime(0, 0, 0, $month, 1, $year);
|
||||
// remember that mktime will automatically correct if invalid dates are entered
|
||||
// for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
|
||||
// this provides a built in "rounding" feature to generate_calendar()
|
||||
|
||||
$day_names = array(); // generate all the day names according to the current locale
|
||||
for($n = 0, $t = (3 + $first_day) * 86400; $n < 7; $n++, $t += 86400) // January 4, 1970 was a Sunday
|
||||
$day_names [$n] = ucfirst(date_strformat('%A', $t)); // %A means full textual day name
|
||||
|
||||
list ($month, $year, $month_name, $weekday) = explode(',', date_strformat('%m,%Y,%B,%w', $first_of_month));
|
||||
$weekday = ($weekday + 7 - $first_day) % 7; // adjust for $first_day
|
||||
$title = htmlentities(ucfirst($month_name)) . ' ' . $year; // note that some locales don't capitalize month and day names
|
||||
|
||||
// Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
|
||||
|
||||
// PHP7 compatibility: Since $pn is never passed, we do not need to create "previous" and "next" elements.
|
||||
$p = '';
|
||||
$n = '';
|
||||
/*
|
||||
@list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
|
||||
if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.($pl).'">'.$p.'</a>' : $p).'</span> ';
|
||||
if($n) $n = ' <span class="calendar-next">'.($nl ? '<a href="'.($nl).'">'.$n.'</a>' : $n).'</span>';
|
||||
*/
|
||||
$calendar = '<table class="calendar">'."\n".
|
||||
'<caption class="calendar-month">'.$p.($month_href ? '<a href="'.($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";
|
||||
|
||||
if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
|
||||
#if day_name_length is >3, the full name of the day will be printed
|
||||
foreach($day_names as $d)
|
||||
$calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
|
||||
// Commented out to prevent deprecated each() function from being executed.
|
||||
// @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
|
||||
// if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.($pl).'">'.$p.'</a>' : $p).'</span> ';
|
||||
// if($n) $n = ' <span class="calendar-next">'.($nl ? '<a href="'.($nl).'">'.$n.'</a>' : $n).'</span>';
|
||||
|
||||
$calendar = '<table class="calendar">' . "\n" . '<caption class="calendar-month">' . $p . ($month_href ? '<a href="' . ($month_href) . '">' . $title . '</a>' : $title) . $n . "</caption>\n<tr>";
|
||||
|
||||
if ($day_name_length) { // if the day names should be shown ($day_name_length > 0)
|
||||
// if day_name_length is >3, the full name of the day will be printed
|
||||
foreach ($day_names as $d)
|
||||
$calendar .= '<th abbr="' . htmlentities($d) . '">' . htmlentities($day_name_length < 4 ? substr($d, 0, $day_name_length) : $d) . '</th>';
|
||||
$calendar .= "</tr>\n<tr>";
|
||||
}
|
||||
|
||||
if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'"> </td>'; #initial 'empty' days
|
||||
for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
|
||||
if($weekday == 7){
|
||||
$weekday = 0; #start a new week
|
||||
|
||||
if ($weekday > 0)
|
||||
$calendar .= '<td colspan="' . $weekday . '"> </td>'; // initial 'empty' days
|
||||
for($day = 1, $days_in_month = gmdate('t', $first_of_month); $day <= $days_in_month; $day++, $weekday++) {
|
||||
if ($weekday == 7) {
|
||||
$weekday = 0; // start a new week
|
||||
$calendar .= "</tr>\n<tr>";
|
||||
}
|
||||
if(isset($days[$day]) and is_array($days[$day])){
|
||||
@list($link, $classes, $content) = $days[$day];
|
||||
if(is_null($content)) $content = $day;
|
||||
$calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
|
||||
($link ? '<a class="calendar-day" href="'.($link).'">'.$content.'</a>' : $content).'</td>';
|
||||
}
|
||||
else $calendar .= "<td>$day</td>";
|
||||
if (isset($days [$day]) and is_array($days [$day])) {
|
||||
@list ($link, $classes, $content) = $days [$day];
|
||||
if (is_null($content))
|
||||
$content = $day;
|
||||
$calendar .= '<td' . ($classes ? ' class="' . htmlspecialchars($classes) . '">' : '>') . ($link ? '<a class="calendar-day" href="' . ($link) . '">' . $content . '</a>' : $content) . '</td>';
|
||||
} else
|
||||
$calendar .= "<td>$day</td>";
|
||||
}
|
||||
if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'"> </td>'; #remaining "empty" days
|
||||
|
||||
return $calendar."</tr>\n</table>\n";
|
||||
if ($weekday != 7)
|
||||
$calendar .= '<td colspan="' . (7 - $weekday) . '"> </td>'; // remaining "empty" days
|
||||
|
||||
return $calendar . "</tr>\n</table>\n";
|
||||
}
|
||||
|
||||
function plugin_calendar_widget() {
|
||||
|
||||
global $fp_params;
|
||||
|
||||
$y = isset($fp_params['y'])? $fp_params['y'] : date('y');
|
||||
$m = isset($fp_params['m'])? $fp_params['m'] : date('m');
|
||||
|
||||
$y = isset($fp_params ['y']) ? $fp_params ['y'] : date('y');
|
||||
$m = isset($fp_params ['m']) ? $fp_params ['m'] : date('m');
|
||||
|
||||
global $fpdb;
|
||||
|
||||
$q = new FPDB_Query(array('fullparse'=>false,'y'=>$y,'m'=>$m, 'count' => -1), null);
|
||||
|
||||
$q = new FPDB_Query(array(
|
||||
'fullparse' => false,
|
||||
'y' => $y,
|
||||
'm' => $m,
|
||||
'count' => -1
|
||||
), null);
|
||||
|
||||
$days = array();
|
||||
|
||||
while ($q->hasmore($queryId)) {
|
||||
|
||||
list($id, $entry) = $q->getEntry($queryId);
|
||||
list ($id, $entry) = $q->getEntry($queryId);
|
||||
$date = date_from_id($id);
|
||||
$d = (int)$date['d'];
|
||||
|
||||
$days[$d] = array(get_day_link($y, $m, str_pad($d, 2, '0', STR_PAD_LEFT)), 'linked-day');
|
||||
$d = (int) $date ['d'];
|
||||
|
||||
$days [$d] = array(
|
||||
get_day_link($y, $m, str_pad($d, 2, '0', STR_PAD_LEFT)),
|
||||
'linked-day'
|
||||
);
|
||||
|
||||
$count++;
|
||||
}
|
||||
@ -99,8 +104,8 @@ function plugin_calendar_widget() {
|
||||
$lang = lang_load('plugin:calendar');
|
||||
|
||||
$widget = array();
|
||||
$widget['subject'] = $lang['plugin']['calendar']['subject'];
|
||||
$widget['content'] = '<ul id="widget_calendar"><li>'. generate_calendar($y,$m, $days).'</li></ul>';
|
||||
$widget ['subject'] = $lang ['plugin'] ['calendar'] ['subject'];
|
||||
$widget ['content'] = '<ul id="widget_calendar"><li>' . generate_calendar($y, $m, $days) . '</li></ul>';
|
||||
|
||||
return $widget;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user