diff --git a/system/htmly.php b/system/htmly.php
index 8f0d23c..9d76ad1 100644
--- a/system/htmly.php
+++ b/system/htmly.php
@@ -284,7 +284,7 @@ get('/author/:name', function ($name) {
$posts = get_profile_posts($name, $page, $perpage);
- $total = get_count('/'.$name.'/', 'dirname');
+ $total = get_profilecount($name);
if ($total === 0) {
not_found();
@@ -1362,7 +1362,7 @@ get('/admin/mine', function () {
$posts = get_profile_posts($name, $page, $perpage);
- $total = get_count('/'.$name.'/', 'dirname');
+ $total = get_profilecount($name);
$author = get_author($name);
diff --git a/system/includes/functions.php b/system/includes/functions.php
index 9388a57..2ceffe6 100644
--- a/system/includes/functions.php
+++ b/system/includes/functions.php
@@ -1086,7 +1086,9 @@ function get_type($type, $page, $perpage)
// dirname string
$dirname = $v['dirname'];
- if (strpos($dirname, '/' . strtolower($type)) !== false) {
+ $str = explode('/', $dirname);
+
+ if (strtolower($type) === strtolower($str[4])) {
$tmp[] = $v;
}
}
@@ -1451,7 +1453,35 @@ function get_typecount($var)
foreach ($posts as $index => $v) {
- if (stripos($v['dirname'], '/' . $var) !== false) {
+ // dirname string
+ $dirname = $v['dirname'];
+
+ $str = explode('/', $dirname);
+
+ if (strtolower($var) === strtolower($str[4])) {
+ $tmp[] = $v;
+ }
+
+ }
+
+ return count($tmp);
+}
+
+// Return profile posts count. Matching $var
+function get_profilecount($var)
+{
+ $posts = get_blog_posts();
+
+ $tmp = array();
+
+ foreach ($posts as $index => $v) {
+
+ // dirname string
+ $dirname = $v['dirname'];
+
+ $str = explode('/', $dirname);
+
+ if (strtolower($var) === strtolower($str[1])) {
$tmp[] = $v;
}
@@ -1558,128 +1588,37 @@ function keyword_count($keyword)
}
-// Return recent posts lists
+// Return recent posts
function recent_posts($custom = null, $count = null)
{
- if (empty($count)) {
- $count = config('recent.count');
- if (empty($count)) {
- $count = 5;
- }
- }
-
- $dir = "cache/widget";
- $filename = "cache/widget/recent.cache";
- $tmp = array();
- $posts = array();
- $recent = '';
-
- if (!is_dir($dir)) {
- mkdir($dir, 0775, true);
- }
-
- if (file_exists($filename)) {
- $posts = unserialize(file_get_contents($filename));
- if (count($posts) < $count) {
- $posts = get_posts(null, 1, $count);
- $tmp = serialize($posts);
- file_put_contents($filename, print_r($tmp, true), LOCK_EX);
- }
- } else {
- $posts = get_posts(null, 1, $count);
- $tmp = serialize($posts);
- file_put_contents($filename, print_r($tmp, true), LOCK_EX);
- }
-
- if (!empty($custom)) {
- $arr = array();
- $i = 1;
- foreach ($posts as $post) {
- $arr[] = $post;
- if ($i++ >= $count)
- break;
- }
- return $arr;
- } else {
- $i = 1;
- $recent .= '
';
- foreach ($posts as $post) {
- $recent .= '- ' . $post->title . '
';
- if ($i++ >= $count)
- break;
- }
- if (empty($posts)) {
- $recent .= '- ' . i18n('No_posts_found') . '
';
- }
- $recent .= '
';
- return $recent;
- }
+ return get_recent('posts', 'list', $count, $custom);
}
-// Return recent type lists
+// Return recent posts by category
+function recent_category($category, $count = null, $custom = null)
+{
+ return get_recent('category', $category, $count, $custom);
+}
+
+// Return recent posts by type
function recent_type($type, $count = null, $custom = null)
{
- if (empty($count)) {
- $count = config('recent.count');
- if (empty($count)) {
- $count = 5;
- }
- }
-
- $dir = 'cache/widget';
- $filename = 'cache/widget/recent.' . $type . '.cache';
- $tmp = array();
- $posts = array();
- $recent = '';
-
- if (!is_dir($dir)) {
- mkdir($dir, 0775, true);
- }
-
- if (file_exists($filename)) {
- $posts = unserialize(file_get_contents($filename));
- if (count($posts) < $count) {
- $posts = get_type($type, 1, $count);
- if (!empty($posts)) {
- $tmp = serialize($posts);
- file_put_contents($filename, print_r($tmp, true), LOCK_EX);
- }
- }
- } else {
- $posts = get_type($type, 1, $count);
- if (!empty($posts)) {
- $tmp = serialize($posts);
- file_put_contents($filename, print_r($tmp, true), LOCK_EX);
- }
- }
-
- if (!empty($custom)) {
- $arr = array();
- $i = 1;
- foreach ($posts as $post) {
- $arr[] = $post;
- if ($i++ >= $count)
- break;
- }
- return $arr;
- } else {
- $i = 1;
- $recent .= '';
- foreach ($posts as $post) {
- $recent .= '- ' . $post->title . '
';
- if ($i++ >= $count)
- break;
- }
- if (empty($posts)) {
- $recent .= '- No recent ' . $type . ' found
';
- }
- $recent .= '
';
- return $recent;
- }
+ return get_recent('type', $type, $count, $custom);
}
-// Return recent tag posts list
+// Return recent posts by tag
function recent_tag($tag, $count = null, $custom = null)
+{
+ return get_recent('tag', $tag, $count, $custom);
+}
+
+// Return recent posts by author
+function recent_profile_posts($name, $count = null, $custom = null)
+{
+ return get_recent('profile', $name, $count, $custom);
+}
+
+function get_recent($filter, $var, $count = null, $custom = null)
{
if (empty($count)) {
$count = config('recent.count');
@@ -1689,7 +1628,7 @@ function recent_tag($tag, $count = null, $custom = null)
}
$dir = 'cache/widget';
- $filename = 'cache/widget/recent.tag.' . $tag . '.cache';
+ $filename = 'cache/widget/recent.' . $filter . '.' . $var . '.cache';
$tmp = array();
$posts = array();
$recent = '';
@@ -1701,14 +1640,34 @@ function recent_tag($tag, $count = null, $custom = null)
if (file_exists($filename)) {
$posts = unserialize(file_get_contents($filename));
if (count($posts) < $count) {
- $posts = get_tag($tag, 1, $count);
+ if ($filter == 'profile') {
+ $posts = get_profile_posts($var, 1, $count);
+ } elseif ($filter == 'category') {
+ $posts = get_category($var, 1, $count);
+ } elseif ($filter == 'type') {
+ $posts = get_type($var, 1, $count);
+ } elseif ($filter == 'posts') {
+ $posts = get_posts(null, 1, $count);
+ } elseif ($filter == 'tag') {
+ $posts = get_tag($var, 1, $count);
+ }
if (!empty($posts)) {
$tmp = serialize($posts);
file_put_contents($filename, print_r($tmp, true), LOCK_EX);
}
}
} else {
- $posts = get_tag($tag, 1, $count);
+ if ($filter == 'profile') {
+ $posts = get_profile_posts($var, 1, $count);
+ } elseif ($filter == 'category') {
+ $posts = get_category($var, 1, $count);
+ } elseif ($filter == 'type') {
+ $posts = get_type($var, 1, $count);
+ } elseif ($filter == 'posts') {
+ $posts = get_posts(null, 1, $count);
+ } elseif ($filter == 'tag') {
+ $posts = get_tag($var, 1, $count);
+ }
if (!empty($posts)) {
$tmp = serialize($posts);
file_put_contents($filename, print_r($tmp, true), LOCK_EX);
@@ -1733,11 +1692,12 @@ function recent_tag($tag, $count = null, $custom = null)
break;
}
if (empty($posts)) {
- $recent .= 'No recent ' . $tag . ' found';
+ $recent .= '' . i18n('No_posts_found') . '';
}
$recent .= '';
return $recent;
- }
+ }
+
}
// Return popular posts lists
@@ -3710,7 +3670,7 @@ function add_view($page)
if (file_exists($filename)) {
$views = json_decode(file_get_data($filename), true);
}
-
+
if (isset($views[$page])) {
$views[$page]++;
save_json_pretty($filename, $views);