Beispiel #1
0
 /**
  * ==========================================================================
  *  GET ALL FILE(S) RECURSIVELY
  * ==========================================================================
  *
  * -- CODE: -----------------------------------------------------------------
  *
  *    $files = Get::files(
  *        'some/path',
  *        'txt',
  *        'ASC',
  *        'update'
  *    );
  *
  *    $files = Get::files(
  *        'some/path',
  *        'gif,jpg,jpeg,png',
  *        'ASC',
  *        'update'
  *    );
  *
  *    $files = Get::files(
  *        'some/path',
  *        'txt',
  *        'ASC',
  *         null,
  *        'key:path' // output only the `path` data
  *    );
  *
  * --------------------------------------------------------------------------
  *
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  *  Parameter  | Type    | Desription
  *  ---------- | ------- | --------------------------------------------------
  *  $folder    | string  | Path to folder of file(s) you want to be listed
  *  $e         | string  | The file extension(s)
  *  $order     | string  | Ascending or descending? ASC/DESC?
  *  $sorter    | string  | The key of array item as sorting reference
  *  $filter    | string  | Filter the resulted array by a keyword
  *  $recursive | boolean | Get file(s) from a folder recursively?
  *  ---------- | ------- | --------------------------------------------------
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  *
  */
 public static function files($folder = ASSET, $e = '*', $order = 'ASC', $sorter = 'path', $filter = "", $recursive = true)
 {
     $results = array();
     $folder = rtrim(File::path($folder), DS);
     $e = $e ? explode(',', str_replace(' ', "", $e)) : true;
     if ($files = File::explore($folder, $recursive, true, false)) {
         if (strpos($filter, 'key:') === 0) {
             $s = explode(' ', substr($filter, 4), 2);
             $output = $s[0];
             $filter = isset($s[1]) ? $s[1] : "";
             $sorter = null;
         } else {
             $output = null;
         }
         foreach ($files as $k => $v) {
             $_k = File::B($k);
             $_kk = DS . str_replace($folder . DS, "", $k);
             if (!$filter || strpos(File::N($k), $filter) !== false) {
                 if ($v === 1) {
                     if ($e === true || $e === array('*') || Mecha::walk($e)->has(File::E($k))) {
                         $o = File::inspect($k, $output);
                         if (is_null($output)) {
                             $o['is']['hidden'] = strpos($_k, '__') === 0 || strpos($_k, '.') === 0 || strpos($_kk, DS . '__') !== false || strpos($_kk, DS . '.') !== false;
                         }
                         $results[] = $o;
                     }
                 } else {
                     if ($e === true || $e === array('/')) {
                         $results[] = File::inspect($k, $output);
                     }
                 }
             }
         }
         unset($files, $_k, $_kk);
         return !empty($results) ? Mecha::eat($results)->order($order, $sorter)->vomit() : false;
     }
     return false;
 }
Beispiel #2
0
    Shield::attach('page-' . $slug);
}, 100);
/**
 * Home Page
 * ---------
 *
 * [1]. /
 *
 */
Route::accept('/', function () use($config, $excludes) {
    Session::kill('search.query');
    Session::kill('search.results');
    $s = Get::articles();
    if ($articles = Mecha::eat($s)->chunk(1, $config->index->per_page)->vomit()) {
        $articles = Mecha::walk($articles, function ($path) use($excludes) {
            return Get::article($path, $excludes);
        });
    } else {
        $articles = false;
    }
    Filter::add('pager:url', function ($url) {
        return Filter::apply('index:url', $url);
    });
    Config::set(array('articles' => $articles, 'pagination' => Navigator::extract($s, 1, $config->index->per_page, $config->index->slug)));
    Shield::attach('page-home');
}, 110);
/**
 * Route Hook: after
 * -----------------
 */
Weapon::fire('routes_after');
Beispiel #3
0
            $_path = ASSET . DS . $v;
            File::open($_path)->delete();
            return $_path;
        });
        $is_folder_or_file = count($deletes) === 1 && is_dir(ASSET . DS . $deletes[0]) ? 'folder' : 'file';
        $P = array('data' => array('files' => $info_path));
        Notify::success(Config::speak('notify_' . $is_folder_or_file . '_deleted', '<code>' . implode('</code>, <code>', $deletes) . '</code>'));
        Weapon::fire(array('on_asset_update', 'on_asset_destruct'), array($P, $P));
        Guardian::kick($config->manager->slug . '/asset/1' . str_replace('&', '&amp;', HTTP::query('path', $p)));
    } else {
        Notify::warning(count($deletes) === 1 ? Config::speak('notify_confirm_delete_', '<code>' . File::path($name) . '</code>') : $speak->notify_confirm_delete);
    }
    Shield::lot(array('segment' => 'asset', 'files' => Mecha::O($deletes)))->attach('manager');
});
/**
 * Multiple Asset Action
 * ---------------------
 */
Route::accept($config->manager->slug . '/asset/do', function ($path = "") use($config, $speak) {
    if ($request = Request::post()) {
        Guardian::checkToken($request['token']);
        if (!isset($request['selected'])) {
            Notify::error($speak->notify_error_no_files_selected);
            Guardian::kick($config->manager->slug . '/asset/1');
        }
        $files = Mecha::walk($request['selected'], function ($v) {
            return str_replace('%2F', '/', Text::parse($v, '->encoded_url'));
        });
        Guardian::kick($config->manager->slug . '/asset/' . $request['action'] . '/files:' . implode(';', $files));
    }
});
<?php

$scopes = Mecha::walk(glob(POST . DS . '*', GLOB_NOSORT | GLOB_ONLYDIR), function ($v) {
    return File::B($v);
});
return array('pass' => array('title' => $speak->password, 'type' => 'text', 'scope' => implode(',', $scopes), 'description' => $speak->plugin_private_post->__description));
Beispiel #5
0
<?php

/**
 * Post Manager
 * ------------
 */
Route::accept(array($config->manager->slug . '/(' . $post . ')', $config->manager->slug . '/(' . $post . ')/(:num)'), function ($segment = "", $offset = 1) use($config, $speak) {
    $posts = false;
    $offset = (int) $offset;
    $s = call_user_func('Get::' . $segment . 's', strtoupper(Request::get('order', 'DESC')), Request::get('filter', ""), 'txt,draft,archive');
    if ($files = Mecha::eat($s)->chunk($offset, $config->manager->per_page)->vomit()) {
        $posts = Mecha::walk($files, function ($v) use($segment) {
            return call_user_func('Get::' . $segment . 'Header', $v);
        });
    } else {
        if ($offset !== 1) {
            Shield::abort();
        }
    }
    Config::set(array('page_title' => $speak->{$segment . 's'} . $config->title_separator . $config->manager->title, 'pages' => $posts, 'offset' => $offset, 'pagination' => Navigator::extract($s, $offset, $config->manager->per_page, $config->manager->slug . '/' . $segment), 'cargo' => 'cargo.post.php'));
    Shield::lot(array('segment' => $segment))->attach('manager');
});
/**
 * Post Repairer/Igniter
 * ---------------------
 */
Route::accept(array($config->manager->slug . '/(' . $post . ')/ignite', $config->manager->slug . '/(' . $post . ')/repair/id:(:num)'), function ($segment = "", $id = false) use($config, $speak, $response) {
    $units = array('title', 'slug', 'link', 'content', 'content_type', 'description', 'post' . DS . 'author');
    foreach ($units as $k => $v) {
        Weapon::add('tab_content_1_before', function ($page, $segment) use($config, $speak, $v) {
            include __DIR__ . DS . 'unit' . DS . 'form' . DS . $v . '.php';
Beispiel #6
0
?>
  <?php 
include __DIR__ . DS . 'unit' . DS . 'form' . DS . 'field' . DS . 'title.php';
?>
  <?php 
include __DIR__ . DS . 'unit' . DS . 'form' . DS . 'key.php';
?>
  <?php 
$types = array('text' => $speak->text, 'summary' => $speak->summary, 'boolean' => $speak->boolean, 'option' => $speak->option, 'file' => $speak->file, 'composer' => $speak->composer, 'editor' => $speak->editor);
?>
  <?php 
include __DIR__ . DS . 'unit' . DS . 'form' . DS . 'type.php';
?>
  <?php 
$scopes = Mecha::walk(array_merge(glob(POST . DS . '*', GLOB_NOSORT | GLOB_ONLYDIR), glob(RESPONSE . DS . '*', GLOB_NOSORT | GLOB_ONLYDIR)), function ($v) {
    return File::B($v);
});
?>
  <?php 
include __DIR__ . DS . 'unit' . DS . 'form' . DS . 'scope[].php';
?>
  <?php 
include __DIR__ . DS . 'unit' . DS . 'form' . DS . 'placeholder.php';
?>
  <?php 
include __DIR__ . DS . 'unit' . DS . 'form' . DS . 'value.textarea.php';
?>
  <?php 
include __DIR__ . DS . 'unit' . DS . 'form' . DS . 'description.text.php';
?>
  <div class="grid-group">
Beispiel #7
0
        Shield::abort();
    }
    File::write($config->{'__total_' . $segment . 's'})->saveTo(LOG . DS . $segment . 's.total.log', 0600);
    if ($files = call_user_func('Get::' . $segment . 's', 'DESC', Request::get('filter', ""), 'txt,hold')) {
        $responses_id = Mecha::walk($files, function ($v) {
            $parts = explode('_', File::B($v));
            return $parts[1];
        });
        if (strtoupper(Request::get('order', 'DESC')) === 'DESC') {
            rsort($responses_id);
        } else {
            sort($responses_id);
        }
        $responses_id = Mecha::eat($responses_id)->chunk($offset, $config->manager->per_page)->vomit();
        $responses = Mecha::walk($responses_id, function ($v) use($segment) {
            return call_user_func('Get::' . $segment, $v);
        });
    } else {
        $files = array();
        $responses = false;
    }
    Config::set(array('page_title' => $speak->{$segment . 's'} . $config->title_separator . $config->manager->title, 'pages' => $responses, 'offset' => $offset, 'pagination' => Navigator::extract($files, $offset, $config->manager->per_page, $config->manager->slug . '/' . $segment), 'cargo' => 'cargo.response.php'));
    Shield::lot(array('segment' => array($segment, $post)))->attach('manager');
});
/**
 * Response Repairer/Igniter
 * -------------------------
 */
Route::accept(array($config->manager->slug . '/(' . $response . ')/ignite', $config->manager->slug . '/(' . $response . ')/repair/id:(:num)'), function ($segment = "", $id = false) use($config, $speak, $post) {
    $units = array('name', 'email', 'url', 'message', 'content_type');
    foreach ($units as $k => $v) {
    if ($results === false) {
        return $speak->plugin_private_post->description;
    }
    $s = isset($results->fields->pass) ? $results->fields->pass : "";
    if (strpos($s, ':') !== false) {
        $s = explode(':', $s, 2);
        if (isset($s[1])) {
            $speak->plugin_private_post->hint = ltrim($s[1]);
        }
        // override password hint
        $s = $s[0];
    }
    $hash = md5($s . PRIVATE_POST_SALT);
    $html = Notify::read(false) . '<div class="overlay--' . File::B(__DIR__) . '"></div><form class="form--' . File::B(__DIR__) . '" action="' . $config->url . '/' . File::B(__DIR__) . '/do:access" method="post">' . NL;
    $html .= TAB . Form::hidden('token', Guardian::token()) . NL;
    $html .= TAB . Form::hidden('_', $hash) . NL;
    $html .= TAB . Form::hidden('kick', $config->url_current) . NL;
    $html .= TAB . '<p>' . $speak->plugin_private_post->hint . '</p>' . NL;
    $html .= TAB . '<p>' . Form::text('access', "", $speak->password . '&hellip;', array('autocomplete' => 'off')) . ' ' . Form::button($speak->submit, null, 'submit') . '</p>' . NL;
    $html .= '</form>' . O_END;
    if ($results && isset($results->fields->pass) && trim($results->fields->pass) !== "") {
        if (!Guardian::happy() && Session::get('is_allow_post_access') !== $hash) {
            return $html;
        }
    }
    return $content;
}
$filters = Mecha::walk(glob(POST . DS . '*', GLOB_NOSORT | GLOB_ONLYDIR), function ($v) {
    return File::B($v) . ':content';
});
Filter::add($filters, 'do_private_post', 30);
Beispiel #9
0
</th>
        <th class="text-center" colspan="2"><?php 
    echo $speak->action;
    ?>
</th>
      </tr>
    </thead>
    <tbody>
      <?php 
    foreach ($files as $file) {
        ?>
      <?php 
        $url = File::url(str_replace($cache_path, "", $file->path));
        ?>
      <tr<?php 
        echo Mecha::walk(Session::get('recent_item_update', array()))->has(File::B($file->path)) ? ' class="active"' : "";
        ?>
>
        <td class="td-icon"><?php 
        echo Form::checkbox('selected[]', $url);
        ?>
</td>
        <td class="td-collapse"><time datetime="<?php 
        echo Date::format($file->update_raw, 'c');
        ?>
"><?php 
        echo str_replace('-', '/', $file->update);
        ?>
</time></td>
        <td><span title="<?php 
        echo $file->size;
Beispiel #10
0
 /**
  * =====================================================================
  *  CHECK IF TEXT CONTAIN(S) `A` OR `B`
  * =====================================================================
  *
  * -- CODE: ------------------------------------------------------------
  *
  *    if(Text::check('A', 'B')->in($text)) { ... }
  *
  * ---------------------------------------------------------------------
  *
  */
 public static function in($text)
 {
     $arguments = is_array($text) ? $text : func_get_args();
     if (count(self::$texts) === 1) {
         if (count($arguments) === 1) {
             return strpos($arguments[0], self::$texts[0]) !== false;
         }
         return Mecha::walk($arguments)->has(self::$texts[0]);
     }
     foreach (self::$texts as $v) {
         if (strpos($arguments[0], $v) !== false) {
             return true;
         }
     }
     return false;
 }
Beispiel #11
0
        }
        unset($request['content']);
        // Remove content from request array
        $request['path'] = $results;
        File::serialize($request)->saveTo(__DIR__ . DS . 'states' . DS . 'config.txt', 0600);
        Notify::success(Config::speak('notify_success_updated', $speak->plugin));
        Guardian::kick(File::D($config->url_current));
    }
});
/**
 * Cache Killer
 * ------------
 */
function do_remove_cache()
{
    global $config, $c_cache;
    foreach ($c_cache->path as $path => $expire) {
        $path = str_replace(array('(:any)', '(:num)', '(:all)', '(', ')', '|', '/', ':'), array('*', '[0-9]*', '*', '{', '}', ',', '.', '.'), $path) . '.cache';
        if ($cache = File::exist(CACHE . DS . $path)) {
            File::open($cache)->delete();
        } else {
            foreach (glob(CACHE . DS . $path, GLOB_NOSORT | GLOB_BRACE) as $cache) {
                File::open($cache)->delete();
            }
        }
    }
}
$hooks = Mecha::walk(glob(POST . DS . '*', GLOB_NOSORT | GLOB_ONLYDIR), function ($v) {
    return 'on_' . File::B($v) . '_update';
});
Weapon::add($hooks, 'do_remove_cache', 10);
<?php

$name = $_FILES['file']['name'];
$mime = $_FILES['file']['type'];
$extension = File::E($name);
$mime_accept = array('application/download', 'application/octet-stream', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip');
$extension_accept = array('zip');
$path = File::N($name);
if (!empty($name)) {
    if (File::exist($destination . DS . $path)) {
        Notify::error(Config::speak('notify_folder_exist', '<code>' . $path . '</code>'));
    } else {
        if (!Mecha::walk($mime_accept)->has($mime) || !Mecha::walk($extension_accept)->has($extension)) {
            Notify::error(Config::speak('notify_invalid_file_extension', 'ZIP'));
        }
    }
} else {
    Notify::error($speak->notify_error_no_file_selected);
}
Beispiel #13
0
 /**
  * Widget Recent Response
  * ----------------------
  *
  * [1]. Widget::recentResponse();
  * [2]. Widget::recentResponse(5);
  *
  */
 public static function recentResponse($total = 7, $avatar_size = 50, $summary = 100, $d = 'monsterid', $folder = array(COMMENT, ARTICLE))
 {
     $T1 = TAB;
     $T2 = str_repeat($T1, 2);
     $T3 = str_repeat($T1, 3);
     $T4 = str_repeat($T1, 4);
     $T5 = str_repeat($T1, 5);
     $r = $folder[0] !== RESPONSE ? File::B($folder[0]) : 'response';
     $p = $folder[1] !== POST ? File::B($folder[1]) : 'post';
     $id = Config::get('widget_recent_' . $r . '_id', 0) + 1;
     $config = Config::get();
     $speak = Config::speak();
     $html = O_BEGIN . '<div class="widget widget-recent widget-recent-response" id="widget-recent-response-' . $id . '">' . NL;
     if ($responses = call_user_func('Get::' . $r . 's')) {
         $responses_id = Mecha::walk($responses, function ($v) {
             $parts = explode('_', File::B($v));
             return $parts[1];
         });
         rsort($responses_id);
         $html .= $T1 . '<ul class="recent-responses">' . NL;
         for ($i = 0, $count = count($responses_id); $i < $total; ++$i) {
             if ($i === $count) {
                 break;
             }
             $response = call_user_func('Get::' . $r, $responses_id[$i]);
             $post = call_user_func('Get::' . $p . 'Anchor', $response->post);
             $html .= $T2 . '<li class="recent-response">' . NL;
             if ($avatar_size !== false && $avatar_size > 0) {
                 $html .= $T3 . '<div class="recent-response-avatar">' . NL;
                 $html .= $T4;
                 $attr = ' alt="" width="' . $avatar_size . '" height="' . $avatar_size . '"';
                 if ($avatar = File::exist(ASSET . DS . '__avatar' . DS . $avatar_size . 'x' . $avatar_size . DS . md5($response->email) . '.png')) {
                     $html .= Asset::image($avatar, $attr);
                 } else {
                     if ($avatar = File::exist(ASSET . DS . '__avatar' . DS . '60x60' . DS . md5($response->email) . '.png')) {
                         $html .= Asset::image($avatar, $attr);
                     } else {
                         if ($avatar = File::exist(ASSET . DS . '__avatar' . DS . md5($response->email) . '.png')) {
                             $html .= Asset::image($avatar, $attr);
                         } else {
                             $html .= Asset::image($config->protocol . 'www.gravatar.com/avatar/' . md5($response->email) . '?s=' . $avatar_size . '&amp;d=' . urlencode($d), $attr);
                         }
                     }
                 }
                 $html .= $T3 . '</div>' . NL;
             }
             $html .= $T3 . '<div class="recent-response-header">' . NL;
             if ($response->url === '#') {
                 $html .= $T4 . '<span class="recent-response-name">' . $response->name . '</span>' . NL;
             } else {
                 $html .= $T4 . '<a class="recent-response-name" href="' . $response->url . '" rel="nofollow">' . $response->name . '</a>' . NL;
             }
             $html .= $T3 . '</div>' . NL;
             $html .= $T3 . '<div class="recent-response-body">' . Converter::curt($response->message, $summary, $config->excerpt->suffix) . '</div>' . NL;
             $html .= $T3 . '<div class="recent-response-footer">' . NL;
             $html .= $T4 . '<span class="recent-response-time">' . NL;
             $html .= $T5 . '<time datetime="' . $response->date->W3C . '">' . $response->date->FORMAT_3 . '</time> <a title="' . ($post ? Text::parse($post->title, '->text') : $speak->notify_error_not_found) . '" href="' . $response->permalink . '" rel="nofollow">#</a>' . NL;
             $html .= $T4 . '</span>' . NL;
             $html .= $T3 . '</div>' . NL;
             $html .= $T2 . '</li>' . NL;
         }
         $html .= $T1 . '</ul>' . NL;
     } else {
         $html .= $T1 . Config::speak('notify_empty', strtolower($speak->{$r . 's'})) . NL;
     }
     $html .= '</div>' . O_END;
     Config::set('widget_recent_' . $r . '_id', $id);
     return Filter::apply(array('widget:recent.' . $r, 'widget:recent.response', 'widget:recent', 'widget'), $html, $id);
 }
 if (strpos(DS . $path . DS, DS . '..' . DS) !== false) {
     Shield::abort();
 }
 // File not found
 if (!($snippet = File::exist(ASSET . DS . '__snippet' . DS . $x . DS . $path . '.' . $x))) {
     Shield::abort();
 }
 $content = File::open($snippet)->read();
 // Allow to run `printf` in snippet content for `txt` file
 if ($x === 'txt') {
     $lot = isset($get['lot']) ? explode(',', $get['lot']) : false;
     if ($lot !== false && strpos($content, '%') !== false) {
         // `http://stackoverflow.com/a/2053931`
         if (preg_match_all('#%(?:(\\d+)[$])?[-+]?(?:[ 0]|[\'].)?(?:[-]?\\d+)?(?:[.]\\d+)?[%bcdeEfFgGosuxX]#', $content, $matches)) {
             $lot = Mecha::walk($lot, function ($v) {
                 return str_replace('&#44;', ',', $v);
             });
             if (count($lot) >= count(array_unique($matches[1]))) {
                 $content = vsprintf($content, $lot);
             }
         }
     }
 }
 // Apply `do_snippet` filter if available
 if (function_exists('do_snippet')) {
     // Allow nested snippet(s) two time(s)
     $content = do_snippet(do_snippet($content));
 }
 // Apply all post content filter to the snippet output
 $filters = array();
 foreach (glob(POST . DS . '*', GLOB_NOSORT | GLOB_ONLYDIR) as $post) {
Beispiel #15
0
    // Loading the language file(s)
    $lang = LANGUAGE . DS . 'en_US' . DS . 'speak.txt';
    $lang_a = LANGUAGE . DS . $config['language'] . DS . 'speak.txt';
    if (!file_exists($lang) && !file_exists($lang_a)) {
        Guardian::abort('Language file not found.');
    }
    $lang = Text::toArray(File::open($lang)->read(""), S, '  ');
    if ($config['language'] !== 'en_US') {
        $lang_a = Text::toArray(File::open($lang_a)->read(""), S, '  ');
        Mecha::extend($lang, $lang_a);
    }
    $config['query'] = $config['url_query'] = HTTP::query($_GET);
    $config['offset'] = isset($s[1]) && is_numeric($s[1]) ? (int) $s[1] : 1;
    $config['page_type'] = $page;
    $config['speak'] = $lang;
    $config['is'] = array('post' => $page !== '404' && Mecha::walk(glob(POST . DS . '*', GLOB_NOSORT | GLOB_ONLYDIR))->has(POST . DS . $page), 'posts' => Mecha::walk(array('index', 'tag', 'archive', 'search', ""))->has($page), 'response' => false, 'responses' => false);
    unset($ss, $s, $lang, $lang_a);
    Config::set($config);
});
/**
 * =============================================================
 *  GET LANGUAGE FILE TO SPEAK
 * =============================================================
 *
 * -- CODE: ----------------------------------------------------
 *
 *    echo Config::speak('home');
 *
 * -------------------------------------------------------------
 *
 *    echo Config::speak('action')->save;
function do_snippet($content)
{
    global $config, $speak;
    if (strpos($content, '{{') === false) {
        return $content;
    }
    $content = function_exists('do_shortcode_x') ? do_shortcode_x($content) : $content;
    // plain text: `{{print:foo}}`
    if (strpos($content, '{{print:') !== false || strpos($content, '{{print=') !== false) {
        $content = preg_replace_callback('#\\{\\{print[:=](.*?)\\}\\}#', function ($matches) {
            $content = $matches[0];
            $e = File::E($matches[1], false);
            if ($e !== 'txt' && $e !== 'php') {
                $e = 'txt';
                $matches[1] .= '.txt';
            }
            if ($snippet = File::exist(ASSET . DS . '__snippet' . DS . $e . DS . $matches[1])) {
                return File::open($snippet)->read();
            }
            return $content;
        }, $content);
    }
    // plain text with wildcard(s): `{{print path="foo" lot="bar,baz,qux"}}`
    if (strpos($content, '{{print ') !== false) {
        $content = preg_replace_callback('#\\{\\{print\\s+(.*?)\\}\\}#', function ($matches) {
            $content = $matches[0];
            $data = Converter::attr($content, array('{{', '}}', ' '), array('"', '"', '='));
            $attr = (array) $data['attributes'];
            if (!isset($attr['path'])) {
                return $matches[0];
            }
            $e = File::E($attr['path'], false);
            if ($e !== 'txt' && $e !== 'php') {
                $e = 'txt';
                $attr['path'] .= '.txt';
            }
            if (!($snippet = File::exist(ASSET . DS . '__snippet' . DS . $e . DS . $attr['path']))) {
                return $matches[0];
            }
            $content = File::open($snippet)->read();
            if (isset($attr['lot']) && strpos($content, '%') !== false) {
                // `http://stackoverflow.com/a/2053931`
                if (preg_match_all('#%(?:(\\d+)[$])?[-+]?(?:[ 0]|[\'].)?(?:[-]?\\d+)?(?:[.]\\d+)?[%bcdeEfFgGosuxX]#', $content, $matches)) {
                    $lot = Mecha::walk(explode(',', $attr['lot']), function ($v) {
                        return str_replace('&#44;', ',', $v);
                    });
                    if (count($lot) >= count(array_unique($matches[1]))) {
                        $content = vsprintf($content, $lot);
                    }
                }
            }
            return $content;
        }, $content);
    }
    // executable code: `{{include:foo}}`
    if (strpos($content, '{{include:') !== false || strpos($content, '{{include=') !== false) {
        $content = preg_replace_callback('#\\{\\{include[:=](.*?)\\}\\}#', function ($matches) {
            $content = $matches[0];
            $e = File::E($matches[1], false);
            if ($e !== 'php') {
                $e = 'php';
                $matches[1] .= '.php';
            }
            if ($snippet = File::exist(ASSET . DS . '__snippet' . DS . $e . DS . $matches[1])) {
                ob_start();
                include $snippet;
                $content = ob_get_clean();
            }
            return $content;
        }, $content);
    }
    // executable code with variable(s): `{{include path="foo" lot="bar,baz,qux" another_var="1"}}`
    if (strpos($content, '{{include ') !== false) {
        $content = preg_replace_callback('#\\{\\{include\\s+(.*?)\\}\\}#', function ($matches) {
            $content = $matches[0];
            $data = Converter::attr($content, array('{{', '}}', ' '), array('"', '"', '='));
            $attr = (array) $data['attributes'];
            if (!isset($attr['path'])) {
                return $matches[0];
            }
            $e = File::E($attr['path'], false);
            if ($e !== 'php') {
                $e = 'php';
                $attr['path'] .= '.php';
            }
            if ($snippet = File::exist(ASSET . DS . '__snippet' . DS . $e . DS . $attr['path'])) {
                ob_start();
                if (isset($attr['lot'])) {
                    $lot = Mecha::walk(explode(',', str_replace('\\,', '&#44;', $attr['lot'])), function ($v) {
                        return Converter::strEval(str_replace('&#44;', ',', $v));
                    });
                } else {
                    $lot = array();
                }
                unset($attr['path'], $attr['lot']);
                extract($attr);
                include $snippet;
                $content = ob_get_clean();
            }
            return $content;
        }, $content);
    }
    return $content;
}