Skip to content

Commit

Permalink
Добавлено:
Browse files Browse the repository at this point in the history
+ после обновления из Git не затираются настройки
+ исправлена структура папок
+ добавлен модуль проверки обновлений

Исправлено:
~ исправлена ошибка в ленте Яндекс Турбо: найдены закодированные символы
~ мелкие исправления ошибок
  • Loading branch information
Ichinya committed Jan 9, 2021
1 parent 3698236 commit 9c7052d
Show file tree
Hide file tree
Showing 22 changed files with 370 additions and 91 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
*.pdf
*.psd
*.sublime*
/cache.db
cache.db
config.inc.php
rss_templates/*.params.php
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
# Установка
Скопировать папку в корень сайта mediawiki. После чего лучше посмотреть настройки в файлах конфигурации скрипта `config.inc.php` и ленты rss `rss_templates\turbo.params.php` _(стандартные настройки подойдут для многих)_

Файлы с настройками создадутся автоматически при первом обращении. После чего их можно отредактировать и установить нужные параметры RSS ленты

# Вызов ленты RSS
* `сайт/turbo` выведется список адресов лент rss (для Яндекс Турбо)
* `сайт/turbo?page=0` лента RSS с шаблоном по умолчанию (задается в конфиге)
Expand All @@ -13,8 +15,10 @@
* Не требуется авторизация к сайту. По идее может работать даже из другого места. Работает полностью через **api mediawiki**
* Есть кэширование страниц, при первом запуске создается файл `cache.db`, в котором будут храниться страницы для rss лент
* Можно изменить почти что угодно. Код довольно простой, параметры апи храняться в файлах `params_*.json`
* Можно добавить шаблоны, просто нужно создать три файла: `шаблон.item.php` _(один элемент ленты)_, `шаблон.rss.php` _(лента)_ и `шаблон.params.php` _(параметры ленты)_
* Можно добавить шаблоны, просто нужно создать три файла: `шаблон.item.php` _(один элемент ленты)_, `шаблон.rss.php` _(лента)_, `шаблон.default_params.php` _(параметры ленты по умолчанию)_ и `шаблон.params.php` _(параметры ленты, создается при первом обращении к ленте)_
* Вызов шаблона (при использовании не по-умолчанию) происходит с параметром GET `template=шаблон`
* При обновлении скрипта на Git придет уведомление на e-mail, который указан в конфиге
* При обновлении скрипта, обновляет кэш (можно удалить, но тут будет больше нагрузка на сервер)

# Ограничения
* Ограничения самим api у mediawiki, возможно потребуется настраивать авторизацию или доступ к api
Expand Down
23 changes: 0 additions & 23 deletions cPage.php

This file was deleted.

6 changes: 4 additions & 2 deletions config.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
$server = $_SERVER['HTTP_HOST'];
return [
'defaultDate' => 1606780800, // 2020.12.01 00:00
'debug' => false,
'debug' => true,
'server' => $server,
'here' => $server . $_SERVER['REQUEST_URI'],
// урл API wiki
Expand All @@ -12,5 +12,7 @@
// меняет авторов статей на defaultAuthor
'replaceAuthor' => false,
// шаблон по-умолчанию
'defaultTemplate' => 'turbo'
'defaultTemplate' => 'turbo',
// электронный ящик для сообщений
'email' => ''
];
18 changes: 18 additions & 0 deletions default_config.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php
$server = $_SERVER['HTTP_HOST'];
return [
'defaultDate' => 1606780800, // 2020.12.01 00:00
'debug' => false,
'server' => $server,
'here' => $server . $_SERVER['REQUEST_URI'],
// урл API wiki
'urlAPI' => $server . "/api.php",
// если не найден автор статьи, то будет подставляться этот
'defaultAuthor' => 'Admin',
// меняет авторов статей на defaultAuthor
'replaceAuthor' => false,
// шаблон по-умолчанию
'defaultTemplate' => 'turbo',
// электронный ящик для сообщений
'email' => ''
];
34 changes: 18 additions & 16 deletions index.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
<?php
if (!file_exists('config.inc.php') && !copy('default_config.php', 'config.inc.php')) {
echo 'ERROR';
die();
}
$config = require_once('config.inc.php');
$currentVersion = "1.2.0";

spl_autoload_register(function ($class) {
$file = $class . '.php';
$file = 'libs/'.$class . '.php';
if (is_file($file)) {
/** @noinspection PhpIncludeInspection */
require_once $file;
Expand Down Expand Up @@ -31,9 +37,14 @@
$list->setConfigDB('init', 1);
}

// проверяем версию скрипта с версией кэша
cUpdate::checkUpdate($currentVersion);
if (!empty($config['email'])) {
cUpdate::sendNotify($config['email']);
}

$list->getPages();
// проверяем все страницы

$parse->updateCache($list->listPage);
$parse->fillingURL();
// модуль формирования RSS
Expand All @@ -48,20 +59,11 @@
} else {
// формируем список rss
$countPage = ceil($list->countPageDB() / $rss->getMaxCount());
echo "<pre>";
for ($i = 0; $i < $countPage; $i++) {
$strTemplate = ($config['defaultTemplate'] == $rssTemplate) ? '' : "template={$rssTemplate}&";
echo $str = "http://{$config['here']}?{$strTemplate}page={$i}<br />";
}
echo "</pre>";
ob_start();
include('templates/index.php');
$html = ob_get_contents();
ob_end_clean();
echo $html;
}


if (!isset($_GET['page']) && $config['debug']) {
$db = new cDB();
echo "Версия SQLite3: " . SQLite3::version()['versionString'];
echo '<pre>';
echo 'Количество запросов к кэшу: '.$db::$count_query.PHP_EOL;
print_r($db::$query);
echo '</pre>';
}
File renamed without changes.
86 changes: 57 additions & 29 deletions cDB.php → libs/cDB.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
class cDB
{
public static SQLite3 $db;
public static $count_query;
public static int $count_query = 0;
public static array $query = [];
private static $getSQL;

public static array $config = [];
private static ?string $getSQL;

public function __construct()
{
Expand All @@ -16,25 +18,29 @@ public function __construct()
self::createTableConfig();
}

self::$getSQL = self::$getSQL ?? $this->getConfig('getSQL');
if (empty(self::$config)) {

$this->readConfigFromBD();
self::$getSQL = self::$getSQL ?? $this->getConfig('getSQL');

if (self::$getSQL == null) {
self::$getSQL = true;
try {
self::$db->enableExceptions(true);
$sql = "SELECT * FROM config WHERE name = :name;";
$query = self::$db->prepare($sql);
$query->bindValue(':name', 'version');
self::$query[] = (self::$getSQL) ? $query->getSQL(self::$getSQL) : "$sql version";
$res = $query->execute()->fetchArray(SQLITE3_ASSOC);
if ($res == null) {
$this->setConfig('version', SQLite3::version()['versionString']);
if (self::$getSQL === null) {
self::$getSQL = true;
try {
self::$db->enableExceptions(true);
$sql = "SELECT * FROM config WHERE name = :name;";
$query = self::$db->prepare($sql);
$query->bindValue(':name', 'SQLite3_version');
self::$query[] = (self::$getSQL) ? $query->getSQL(self::$getSQL) : "$sql version";
$res = $query->execute()->fetchArray(SQLITE3_ASSOC);
if ($res == null) {
$this->setConfig('SQLite3_version', SQLite3::version()['versionString']);
}
} catch (Exception $e) {
self::$getSQL = false;
}
} catch (Exception $e) {
self::$getSQL = false;
}

$this->setConfig('getSQL', self::$getSQL);
$this->setConfig('getSQL', self::$getSQL);
}
}
}

Expand Down Expand Up @@ -66,20 +72,32 @@ static function createTableConfig()
return self::$db->exec($sql);
}

/**
* получение параметров из БД
* @return array резульат в виде массива
*/
public function readConfigFromBD()
{
self::$count_query++;
$sql = "SELECT * FROM config ";
$query = self::$db->query($sql);
self::$query[] = $sql;
$result = [];
while ($row = $query->fetchArray(SQLITE3_ASSOC)) {
$result[$row['name']] = $row['value'];
}
self::$config = $result;
return $result;
}

/**
* получение параметра из БД
* @param string $name имя параметра
* @return string|false строковое значение параметра или false
*/
public function getConfig($name)
public function getConfig(string $name)
{
self::$count_query++;
$sql = "SELECT * FROM config WHERE name = :name;";
$query = self::$db->prepare($sql);
$query->bindValue(':name', $name);
$res = $query->execute()->fetchArray(SQLITE3_ASSOC);
self::$query[] = (self::$getSQL) ? $query->getSQL(self::$getSQL) : "$sql $name";
return $res['value'];
return self::$config[$name];
}

/**
Expand All @@ -88,7 +106,7 @@ public function getConfig($name)
* @param string $value значение параметра
* @return bool
*/
public function setConfig($name, $value)
public function setConfig(string $name, string $value)
{
self::$count_query++;
if ($this->getConfig($name) === false || $this->getConfig($name) === null) {
Expand All @@ -104,6 +122,7 @@ public function setConfig($name, $value)
if (!$query->execute()) {
return false;
}
self::$config[$name] = $value;
return true;
}

Expand All @@ -123,7 +142,7 @@ public function getPageByIds(array $ids)
return [];
}
self::$count_query++;
$sql = "SELECT * FROM page WHERE id in (".implode(',', $ids).");";
$sql = "SELECT * FROM page WHERE id in (" . implode(',', $ids) . ");";
$query = self::$db->query($sql);
self::$query[] = $sql;
$result = [];
Expand Down Expand Up @@ -168,7 +187,7 @@ public function getCountPage()
return $query->fetchArray(SQLITE3_ASSOC)['count'];
}

public function getPageList(int $page, int $count)
public function getPageList(int $page, int $count):array
{
self::$count_query++;
$offset = $count * $page;
Expand Down Expand Up @@ -226,6 +245,15 @@ private function clearText($text)
foreach ($templateClear as $template) {
$text = preg_replace($template, '', $text);
}

$replace = [
'&#91;' => '[',
'&#93;' => ']',
'&lt;' => '<',
'&gt;' => '>'
];
$text = str_replace(array_keys($replace), array_values($replace), $text);

return $text;
}

Expand Down
35 changes: 35 additions & 0 deletions libs/cPage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php


class cPage
{

var $id;
var $title;
var $updateAt;
var $text;
public array $categories = [];
var $revid;
var $user;
var $url;

public function __construct($id, $title, $time)
{
$this->id = $id;
$this->title = $title;
$this->updateAt = $time;
}


public static function convertArrayToPage(array $pageDB): cPage
{
$page = new cPage($pageDB['id'], $pageDB['title'], $pageDB['updateAt']);
$page->url = $pageDB['url'];
$page->updateAt = $pageDB ['updateAt'];
$page->categories = ($pageDB['categories'] == '') ? [] : explode(',', $pageDB['categories']);
$page->user = $pageDB['user'];
$page->text = $pageDB['text'];
$page->revid = $pageDB['revid'];
return $page;
}
}
21 changes: 7 additions & 14 deletions cPageList.php → libs/cPageList.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class cPageList extends cContent
{
protected string $fileParams = "params_page_list.json";
protected string $fileParams = "params/params_page_list.json";
public array $listPage = [];
private string $author;
private bool $replaceAuthor;
Expand All @@ -23,7 +23,7 @@ public function __construct($config)

public function init()
{
$params = $this->initParamFile("params_init.json");
$params = $this->initParamFile("params/params_init.json");
$pagesIndex = $this->getContentAll($params);
$pages = [];
foreach ($pagesIndex as $pageIndex) {
Expand Down Expand Up @@ -71,18 +71,6 @@ public function getEmptyPages()
return $this->db->getEmptyPagesId();
}

private function convertArrayToPage(array $pageDB): cPage
{
$page = new cPage($pageDB['id'], $pageDB['title'], $pageDB['updateAt']);
$page->url = $pageDB['url'];
$page->updateAt = $pageDB ['updateAt'];
$page->categories = ($pageDB['categories'] == '') ? [] : explode(',', $pageDB['categories']);
$page->user = $pageDB['user'];
$page->text = $pageDB['text'];
$page->revid = $pageDB['revid'];
return $page;
}

public function getPageId($id)
{
$pageDB = $this->db->getPageById($id);
Expand Down Expand Up @@ -114,4 +102,9 @@ public function savePageDB(cPage $page)
return $this->db->updateCache($page);
}

private function convertArrayToPage(array $pageDB): cPage
{
return cPage::convertArrayToPage($pageDB);
}

}
Loading

0 comments on commit 9c7052d

Please sign in to comment.