<?php

// ru_RU.UTF-8:
// Мини-модуль, встроенный в шаблон,
// демонстрирующий поиск и пагинацию.

$cms["urls"]["^{$cms['base_path']}search_by_tag$"] = "hook_search_by_tag";
$cms["urls"]["^{$cms['base_path']}get_posts$"] = "hook_tpl_get_posts";

hook_add_fn( "hook_search_by_tag", "tpl_search_by_tag_fn" );
hook_add_fn( "menu_item_link", "tpl_menu_item_link" );
hook_add_fn( "hook_tpl_get_posts", "tpl_get_posts" );

// Загрузить переводы
$tpl = $cms["config"]["template.mod.php"]["template"];
__( "", $tpl );

// Только таким образом чтобы не стереть загруженные переводы
$cms["lang"][$tpl]["en_US.UTF-8"]["load_more"] = "Load more";
$cms["lang"][$tpl]["ru_RU.UTF-8"]["load_more"] = "Загрузить еще";
$cms["lang"][$tpl]["uk_UA.UTF-8"]["load_more"] = "Завантажити ще";

// Делает дополнительную обертку пунктам меню имеющим подпункты
// Как проверить:
// 
function tpl_menu_item_link() {
    global $cms;

    if ( $cms["menu.mod.php"]["item_link"]["has_submenu"] ) {
        $cms["menu.mod.php"]["item_link"]["link"] = "
            <div class=plus>
                {$cms['menu.mod.php']['item_link']['link']}
                <div class=icon></div>
            </div>";
    }
}

// Поиск по тегам
// Как проверить:
// Нигде не задействована
function tpl_search_by_tag_fn() {
    global $cms;
    if ( ! empty( $_GET["tag"] ) ) {
        $cms["page"]["title"] = "Поиск по тегу";
        $cms["status"] = "200";
        $cms["hooks"]["write"]["disabled"] = true;
        $cms["hooks"]["hook_search_by_tag"]["next"] = "template";
        $cms["page"]["text"] = "<h1>Статьи с тегом \"{$_GET['tag']}\"</h1>";
        $cms["page"]["t"] = "page";
        $cms["page"]["id"] = "search";

        if ( cms_base_connect() ) {
            try {
                $query = "SELECT * FROM pages WHERE tags LIKE ? ORDER BY id DESC";
                $stmt = $cms["pdo"]->prepare( $query );
                $stmt->execute( array( "%{$_GET['tag']}%" ) );
                while ( $page = $stmt->fetch( PDO::FETCH_ASSOC ) ) {
                    $cms["page"]["text"] .= "<a target=_blank href='{$cms['base_path']}{$page['url']}'>{$page['title']}</a>";
                }
            } catch ( PDOException $e ) {
                $cms["page"]["text"] .= "<p class=error>Ошибка выполнения запроса к базе данных.</p>";
            }
        } else {
            $cms["page"]["text"] .= "<p class=error>Ошибка подключения к базе данных.</p>";
        }
    }
}

function tpl_get_posts() {
    global $cms;

    if ( ! empty( $_POST["last"] ) ) {
        if ( cms_base_connect() ) {
            try {
                $date = date( "Y-m-d H:i:s" );
                // created<{$date} все равно нужно чтобы не запрашивали будущие
                $q = "SELECT * FROM pages WHERE t = ? AND created < ? AND created < ? AND published ORDER BY created DESC";
                $stmt = $cms["pdo"]->prepare( $q );
                $stmt->execute( array( "post", $_POST["last"], $date ) );

                $html = "";
                $n = 12;
        
                while ( $n-- > 0 && $page = $stmt->fetch( PDO::FETCH_ASSOC ) ) {
        
                    if ( preg_match( '/<img[^>]+data-preview[^>]*>/us', $page["text"], $m ) ) {
                        $preview_img = $m[0];
                    } else {
                        $preview_img = "";
                    }
        
                    if ( preg_match( '/^(.*)(<!--[\s]*preview-start[\s]*-->)(.*)(<!--[\s]*preview-end[\s]*-->)(.*)$/us', $page["text"], $m ) ) {
                        $preview = $m[3];
                    } else {
                        $preview = preg_replace( "/<h1>(.*?)<\/h1>/su", "", $page["text"] );
                        $preview = preg_replace( "/<style>(.*?)<\/style>/su", "", $preview );
                        $preview = trim( $preview );
                        $preview = mb_substr( strip_tags( $preview ), 0, 500 );
                        $preview = preg_replace( '/\s\S*$/u', " ...", $preview );
                        $preview = "<p>{$preview}</p>";
                    }
        
                    $html .= "
                    <article data-date='{$page["created"]}'>
                        {$preview_img}
                        <h2><a href='{$page["url"]}' target=_blank>{$page["title"]}</a></h2>
                        {$preview}
                    </article>
                    ";
        
                }
        
                echo $html;
                // Показать кнопку "Загрузить еще" если есть посты
                if ( $page = $stmt->fetch( PDO::FETCH_ASSOC ) ) {
                    $tpl = $cms["config"]["template.mod.php"]["template"];
                    echo "<button class=load-more>" . __( "load_more", $tpl ) . "</button>";
                }
            } catch ( PDOException $e ) {
                //
            }
        }
    }
}