[Sell] Argos CMS / MVC logic less

Както обещах завърших и дискорд нотификациите от админ панела.
Ето и демо снимки:
https://i.ibb.co/FJhjcxH/Screenshot-20241006-135209.png
https://i.ibb.co/wzcFptj/Screenshot-20241006-135252.png
След като юзъра натисне бутона отпред, ще му иска разрешение и след това ще му вземе юзър айдито, и ще го впише в датабазата. От админ панела пък ще може да изпратите до всички абонирани потрбители съобщение, което вие решите благодарение на текстареата.
С бота изградихме код на база sleep, за да избегнем рейт лимитите от 50 рекуеста на секунда, ако имате над 50 потребителя абонирани.
Разбира се не съм го тествал обстойно, при мен за сега работи ок, но трябва да се тества с над 50 абонирани.

Важно е, че базата я има, а ако има проблем ще се отстрани лесно.

Днес точно изтича хоста за демото в jump.bg. Не знам колко време ще го държат сайта, но както написах няма да го подновявам.
 
Обмислям да вкарам тази библиотека https://github.com/Webklex/php-imap в системата. Сега като изтрия 200 migrate.php файла, ще се отвори малко място и за тази библиотека.
Php 8.4 няма да поддържа imap екстеншъна повече (https://php.watch/versions/8.4/imap-unbundled)
Pecl как ще се настройва с imap на споделен хостинг ще се мъдри сигурно доста време, а библиотеката която споделям е независима и работи без модули.
Много ми е важно емейлите от контактната форма да могат да отиват в sent папката на вашия емейл провайдър, било то на roundcube на вашия хост или gmail.
Планирам още при инсталация да има тикчета и при клик да се пускат полета за попълване и за smtp и за imap настройки. Те няма да са задължителни, но който повече разбира, ще си ги попълни.
Дори и не попълнени, те ще се впишат в config.env и може да се попълнят на по късен етап.

Бота даде вариант за съвместно ползване с nette библиотеката, ето го и него:
Code:
<?php

require 'vendor/autoload.php';

use PhpImap\Mailbox;
use Nette\Mail\Message;
use Nette\Mail\SmtpMailer;

// Sending the email
$mail = new Message;
$mail->setFrom('Your Name <[email protected]>')
     ->addTo('[email protected]')
     ->setSubject('Test Email')
     ->setBody("Hello, this is a test email sent using Nette Mail.");

$mailer = new SmtpMailer([
    'host' => 'smtp.gmail.com',
    'username' => '[email protected]',
    'password' => 'your-app-password',
    'secure' => 'ssl',
]);

// Send the email
$mailer->send($mail);

// Connecting to Gmail via IMAP
$server = 'imap.gmail.com:993/imap/ssl';
$username = '[email protected]';
$password = 'your-app-password'; // App-specific password for Gmail

$mailbox = new Mailbox(
    '{' . $server . '}INBOX',  // Folder where to move the email
    $username,
    $password,
    __DIR__,  // Path to directory for attachments (if any)
    'UTF-8'   // Server encoding
);

// Constructing the raw message to append
$rawMessage = $mail->generateMessage();

// Move the message to the Inbox
$mailbox->appendMessageToMailbox($rawMessage);

// Disconnect from IMAP
$mailbox->disconnect();

Лично ще го тествам и няма много да го мисля, ако всичко работи.
Също така сега ще има и бутон за цитат при отговора на емейли и от там ще може да цитирате даден емейл, за да знаете какво е писал потребителя. В комбинация с imap всичко ще си дойде на мястото. :)
 
Здравейте,
Вече съм в София, но не съм взел зарядното за лаптопа от Слънчев бряг. В понеделник ще посетя тук един сервиз, за да взема зарядно, ако имат такова, че лаптопа е специфичен...
Взех и хоста от easyhost.bg.
:)
 
Вече съм си в Слънчев бряг, но зарядното го няма и тук. Откачих!
Поръчах ново зарядно след търсене в гугъл от Емаг.
Очаквана доставка 1 - 4 Ноември.
С наще си имаме работа с документи тези дни, така че ще съм зает и без това...
Жалко..сърбяха ме ръцете, но ще чакам. Канех се утре да търся по Несебър и Бургас, но зарядното е много специфично и само в Емаг намерих такова, което да стане и да е със същите параметри.
Лаптопа въобще не си заслужава инвестиция в него, но все пак сега няма да взимам все още нов, а и вътре имам важни неща...
Ще чакам търпеливо и стискам палци всичко да тръгне...:)
 
Зарядното пристигна :) В момента работя по 8.8.1fixfree, която ще пусна като нов пост малко по-късно. Дали ще е днес или утре, зависи.
Най-сетне хахаха :)
 
Както знаете, версия 9.0 беше започната и днес беше завършена.

Предоставям чейнчлог:
- Оптимизации по цялото ядро (Всички ArrayIterator-и са премахнати, pdo prepare вече се ползва почти навсякъде, там където не се, не се ползват променливи в заявките. Оставям за в бъдеще сбиването на масивите с compact и разпределянето на ланг файловете по страници.)
- Добавена е rollback екстрата с която вече няма сайта да спира при грешка в някой екстеншън или във _functions.php в темплейтите.
- Добавена е Alphabetic no avatar функция, която сетва но аватари с определен цвят за всяка първа буква от ника
- Добавено е избиране на тайм зона от админ панела
- Добавен е калкулатор в админ панела
- Добавена е опция за включване и изключване на къстъм страниците от админ панела.
- Добавена е опция за включване и изключване на последните теми от форума от админ панела.
- Фикснат е рефреша на каптчата под файърфокс (от бутона)
- Добавена е опция каптчата да е само с цифри от админ панела.
- Добавена е voice captcha екстра и при клик на бутона се чува с глас през google api (free)
- Добавено е поле в конфигурация за промяна на мета таг-а 'theme-color'. (hex цвят)
- Добавени са SMTP и IMAP настройки в конфигурация
- Добавена е Under Construction страница, която се активира от админ панела
- Добавен е Activity log в админ панела

Който не е видял темата с безплатната 8.8.1fixfree и нейния чейнчлог, то - https://darksteam.net/threads/argos-cms-8-8-1fix-free-multigaming-cms.26510/#post-220902

За да ъпдейтнете от 8.8.1 или 8.8.1FixFree към 9.0 е нужно да презамените/качите:
App/
assets/
admin/
includes/
install/
lang/
core.php
routes.json
и да изпълните следните sql заявки:
Code:
ALTER TABLE argos_pages ADD COLUMN `show` VARCHAR(255) NOT NULL DEFAULT '1';
ALTER TABLE argos_pages ADD COLUMN `addon_regex` VARCHAR(255) NOT NULL DEFAULT '';
INSERT INTO argos_config (config_name, config_value) VALUES ('alphabeticava', '1');
INSERT INTO argos_config (config_name, config_value) VALUES ('no_avatar_path', 'assets/img/no_avatar.png');
INSERT INTO argos_config (config_name, config_value) VALUES ('timezone', 'Europe/Sofia');
INSERT INTO argos_config (config_name, config_value) VALUES ('last_forum_topics_enable', '1');
INSERT INTO argos_config (config_name, config_value) VALUES ('captcha_numbers', '1');
INSERT INTO argos_config (config_name, config_value) VALUES ('hex_theme_color', '#272727');
INSERT INTO argos_config (config_name, config_value) VALUES ('smtp_host', '');
INSERT INTO argos_config (config_name, config_value) VALUES ('smtp_user', '');
INSERT INTO argos_config (config_name, config_value) VALUES ('smtp_pass', '');
INSERT INTO argos_config (config_name, config_value) VALUES ('imap_server', '');
INSERT INTO argos_config (config_name, config_value) VALUES ('imap_email', '');
INSERT INTO argos_config (config_name, config_value) VALUES ('imap_pass', '');
INSERT INTO argos_config (config_name, config_value) VALUES ('imap_folder', '');
INSERT INTO argos_config (config_name, config_value) VALUES ('under_construction', '0');
CREATE TABLE `argos_acp_user_visits` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100) NOT NULL,
    ip_address VARCHAR(45) NOT NULL,
    page_name VARCHAR(255) NOT NULL,
    browser VARCHAR(255) NOT NULL,
    visit_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=0;
(ако префикса на таблиците ви не е "argos_" сменете го с вашия!)

В бъдещи версии ще има още нововъведения и оптимизации.
За сега всичко уж е стабилно, но си трябват повече тестове. Аз съм сам и може да излезе нещо, ако вие тествате, но ще го оправим бързо!
За това тествайте!
 
В следващата версия на Аргос очаквайте privacy policy страница и интегриране на чисто нов cookie law плъгин, преведен цялостно и интегриран със страницата за политиката за ползване.
Ето и демо https://argoscms.xyz/cookie/cookie.html - плъгина е писан с бота и на места има код от мен и не е индентнат кода, защото е правен от телефона. (ще го оправя)
Също така всички темплейти ще претърпят промени и fontawesome 4 ще бъде заменен с версия 6.6.0.
Има и друго. Функцията за страницирането ще претърпи промени, защото не поддържа масиви в get параметрите. (вече е направено)
В core.php съм махнал едно условие, което е досадно и не беше съобразено от мен заради новата функция за пускане и спиране на къстъм страниците.
Ще бъде добавен bootstrap 3 js за всички темплейти, които го нямат, а ползват версия 3.

Това ще е за сега, но може да изникнат още неща, искам да преправя и логиките на аякс чатовете, да не работят толкова на често, но ще ползвaм бота, защото не знам кой подход ще е най-добър.
 
Last edited:
9.1:
- Добавена е индентация в jquery_js страницата на js/jquery кода
- Кода който поставяте там в js/jquery страницата се форматира като base64 вече, за да заобикаля mod_security и да не се налага да го спирате
- Добавенa e force_redirect функцията на 3 секунди след събмит на jquery_js код в страницата, която споменахме по-горе.
- Добавен е фикс и поддръжка на масиви в GET параметрите в pagination (функцията за странициране) във functions.php
- Добавени са новите функции add_page и remove_page с които може да добавяте къстъм страници от към екстеншъните във functions.php
- Премахнато е условие в core.php, което не беше съобразено добре от мен свързано със спирането/пускането на къстъм страници. Беше поставено в sql заявката отговаряща за това в core.php
- Добавен е bootstrap js файла за версия 3 за по-старите темплейти, които го ползват.
- Изменения в readme.txt
- Във всички екстеншъни, които ползват ALTER TABLE в sql.php е добавено 'NOT EXIST' с цел да се избегнат грешки при спиране и пускане на екстеншъните.
- Всички чатове свързани с Аргос, включително и екстеншъните са ъпдейтнати и вече четат текстовия файл за последното чат съобщение.
- Добавен е FontAwesome 6.6.0 с backward compatibility за версия 4.7.0 във всички темплейти

Тъй като времето напредна днес, оставям за 9.2 въвеждането на новия cookie policy плъгин и новата страница за политика за ползване в админ панела.

Напомням, че версията струва точно 100 лв.
Плащането става с:
- Банков превод
- Easypay
- Еконт/Спиди

Връзка с мен:
Discord: .pok4
- или тук на ЛС!

пс:
Ъпдейт от 9.0 към 9.1:
- Заменя се core.php
- Заменя се App/
- Заменя се admin/
- Заменя се includes/
- Заменя се readme/
- Заменя се template/
- Заменя се greyfish/ папката (заради новата иконка на cs2)
1.Ако имате промени по темплейтите, заменяте fontawesome 4.7.0 в header.html с:
Code:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/v4-shims.min.css">
2.Oтваряте footer.html и под jquery библиотеката добавяте:
Code:
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
във всички теми, които в header са с инклуднат bootstrap 3x.
3.Също така в папките на темплейтите отваряте js папките и презамествате globals.js
 
Last edited:
В следващата версия, нововъведенията ще са:
- премахване на ajax.html файловете от темплейтите и от админ темплейта. Файлът ще бъде преместен в assets папката и ще е само 1.
- В globals.js отново ще има промени, трябва да се добавят условия "> 0" на length проверките, защото без тях кода се изпълнява отново, защото се връща обект. Това е много старо и сега ще го оправя.
- Ще бъде добавена новата страница за политика и cookie manager js файла.
- В инсталатора ще бъдат добавени още проверки и няма да се изисква въвеждане на наклонена черта при папката на форума и ще се търси в нея config.php, ако не бъде намерен, значи форума не е на лице.
- в екстеншъните по начало май все още има arrayiterrator-и и ще ги махна
- ще бъде добавена иконка със стрелка нагоре в админ панел таба Конфигурация до полето за js/css версиите, за да е по удобно вдигането им. (на база js)

Общо взето това е най-важното за 9.2 на която ще се заседя по-дълго време, докато не ми хрумне нещо, което да си струва.