[Sell] Argos CMS / MVC logic less

Ето и какво ми написаха:
Здравейте,

благодаря ви за запитването и за доверието към нас. Извиняваме се за забавянето в отговора, но трябваше да обсъдим случая с главния системен администратор.

За съжаление, на този етап не можем да предоставим възможност за изпълнение на постоянни Python процеси на нашия споделен хостинг. Политиката ни е насочена към гарантиране на стабилност и сигурност за всички клиенти, а подобни процеси могат да създадат рискове или прекомерно натоварване на споделените ресурси.
Ако обаче в бъдеще решите да преминете към VPS, ще можем да предложим съдействие и подходящи решения за вашите нужди.

Благодарим ви за разбирането и сме насреща, ако имате други въпроси или нужда от съдействие

Поздрави,
Пламен Колев

Ще купя VPS от Zap hosting, но това ще е зимата, а не сега.
Функцията за транслейт ще праща заявките към определен порт с питонския скрипт по горе.
Ще го защитя с един апи кей, който няма да се променя (поне засега, ще седи във функцията...).
Ще има и fallback към гугълската функция, ако нещо стане със сървъра и линка към който ще е апито.
Надявам се всичко да стане по план, но има време, а и чакам да мине Август, ако Август мине ще планувам всичко в по преден план.
 
Гут дей,
В 13.4 или 13.5 ще интегрирам tasks или накратко задачи, които се създават от админ панела (cron задачите, за които споменах по-напред, ще са си отделно от това)
Task-овете ще се създават от админ панела и ще може да инжектирате php код в текстареата, както и да зададете на какво време да се изпълнява. Трябва да сте запознати със системата и функциите й, за да ги ползвате ползотворно.
Самите таскове ще са под формата на json файлове и ще седят в папка tasks в root dir-a и ще са защитени от htaccess.
Ще ги правя с json manager-a.
Самия php скрипт ще е в нов контролер, който ще рутира your-site.com/tasks и вече ще може да го закачите към крон задача от cpanel/crontab на vps. Това ще си е изцяло отделна страница, която ще може да я ползвате пожелание.
Ще е много удобно, защото ще може да я комбинирате с крон задачите, и ще може да я заредите като крон и от админ панела на аргос, стига да ви е позволено от хоста (exec командата).
Все още съм леко объркан, бота ми даде решение да се изпълнява php кода с eval, но никога не съм ползвал тази функция, а и в момента от телефона, не ми се занимава да я проучвам. Като стигна до там, ще ръчкам тогава.
Това, ако се случи по план ще е удобно, защото може да разпращате разни съобщения, да триете кеш, да правите други неща с функциите на системата през определено време.
 
Към горния пост ще добавя само, че ще има опция за спиране и пускане на определена задача с ios switch бутон.
Също така тасковете ще се засичат с phpfastcache и няма да може да се преизпълняват докато не мине точното им време. (превенция за директен достъп до tasks страницата)

Днес в почивките благодарение на [email protected] открихме 2 бъга, но няма как да пусна ъпдейт, заради телефона и индентацията на код, не ми се ползват туулове, така, че ще ви кажа как и какво (бъговете не са сериозни и даже на някои хостинги, не се появяват), зависи от конфигурацията.

Аргос винаги ползва utf8mb4 unicode ci,
но някои екстеншъни в бързината, може по невнимание да се ползва друг тип колация и при специални символи да даде грешка. За това е добре да се подсигурим още в началото, за това трябва да се влезе в core.php и да намерите:
Code:
$dbh = new PDO("mysql:host=" . $dbhost . ";dbname=" . $dbname . ";charset=utf8mb4", $dbuser, $dbpass);
и да го преправите на :
Code:
  $dbh = new PDO(
    "mysql:host=" . $dbhost . ";dbname=" . $dbname . ";charset=utf8mb4",
    $dbuser,
    $dbpass,
    [
      PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    ]
  );
Това е правено с бота, и за това е такава индентацията, за това няма да правя автоматичен ъпдейт, за да си се съобразя с моята индентация, която е по-различна.

Това ще наложи utf8mb4 още повече, за да няма проблеми повече.
Ето и зайко какво написа:
charset=utf8mb4 в DSN е само информативен за PDO, не задава реално charset-а на самата сесия в MySQL.

SET NAMES utf8mb4 гарантира, че и клиентът (PHP), и MySQL сесията комуникират с един и същи енкодинг.

Без него, ще получаваш Incorrect string value при символи като ®, ™, или емоджита.

Другите неща пак са свързани с енкодинг, защото ползват лош iconv и някои специални символи не се компилират и трябваше да бъдат заменени с последната функция ignore_non_utf8($string).

1. Влезте в App/Controllers/Admin и отворете Add_Server.php и намерете :
Code:
$hostname = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $result['s']['name']);
заменете с --->
Code:
$hostname = ignore_non_utf8($result['s']['name']);

Отворете includes/functions.php и намерете:
Code:
$hostname = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $result['s']['name']);
заменете с ---->
Code:
$hostname = ignore_non_utf8($result['s']['name']);

Това ще влезе в новите ъпдейти някога, ако имате проблеми с добавянето на сървъри със специални имена е добре да го направите, ако ли не, просто подминете и изчакайте новия автоматичен ъпдейт.

2.Другия бъг е свързан с коментарите към галерия и видео клипове, отворете App/Entity/CommentSystem.php и намерете:
Code:
':created_by_current_user' => false,
':user_has_upvoted' => false,
заменете false и на 2те места с 0.
Това е в execute pdo заявката, само там, на други места не ги променяйте.
Ако не ги промените, коментарите няма да работят, но само на някои хостинги.
Така, че е добре да бъдат презаменени.
 
Last edited:
Накарах зайко да ми напише wrapper за ssh2 библиотеката. Ще слагам спомагателен клас в App/Entity, защото може да потрябва някога за някой екстеншън.
По принцип повечето хостинг компании поддържат ssh2, но при някои трябва да я поискате отделно.
На easyhost, на които съм - я имат по-начало, но ако сте на vps 100% ще трябва да я инсталирате отделно и да я добавите в php.ini. (не е много лесно, питайте бота)
За хостингите, вече ще трябва да пишете на съпорта.
Има еквивалент - phpseclib, но е голяма и не мога да си я позволя в ядрото. Phpseclib може да се свали и да се постави в някой екстеншън и аутолоудъра ще я прихване. (В случай, че няма как да инсталирате ssh2)
Vendor папката е 3100 файла, да я приддържам в този й вид...(засега)

На есен с песен, ако сме still alive.
- поздрави !
 
Онзи ден по време на инсталация имаше проблем под hestia с неразрешени права на apache user-a.
Който има проблем и му излиза еррор лог за права, да изпълни :
Code:
sudo find /home/MyUser/web/example.com/public_html/ -type d -exec chmod 755 {} \;
sudo find /home/MyUser/web/example.com/public_html/ -type f -exec chmod 644 {} \;

sudo chown -R YourUser:YourUser /home/YourUser/web/your-site.com/public_html/

Това е забелязано под hestia control panel с къстъм юзър, и понеже не са му дадени права, и по време на инсталация дава грешки.

Бота ми подготви функция за даване на chmod права по време на отварянето на аргос инсталатора, но пробвах да я тествам на моя споделен хостинг, като махна правата от install.html темплейтния файл, но без успех, веднага сетва нови на юзъра. (Явно настройка на хоста)
За това есента като взема аз vps и инсталирам hestia, ще си го ръчкам сам и ще преценя дали да интегрирам функцията от бота за автоматичен chmod, за да няма грешки повече.

Също така errorhandler класа може първи да даде грешка, ако няма нужните права и ще се чудите какво става, за това в следващия ъпдейт ще го обхвана с проверка дали системата е инсталирана и тогава да сработва, че иначе няма да знаете какво става и какъв всъщност е проблема.
Който има проблеми нека пише, ще помогна.

Пример за грешки:
Code:
[Tue Jun 24 19:33:34.182295 2025] [proxy_fcgi:error] [pid 235420:tid 140031964472896] [client 51.158.252.178:0] AH01071: Got error 'PHP message: PHP Fatal error:  Uncaught ErrorException: Trying to access array offset on null in /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php:91\nStack trace:\n#0 /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php(91): App\\Controllers\\ErrorHandler::handle()\n#1 /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php(38): App\\Controllers\\ErrorHandler->renderErrorPage()\n#2 [internal function]: App\\Controllers\\ErrorHandler::handleException()\n#3 {main}\n  thrown in /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php on line 91; PHP message: PHP Fatal error:  Uncaught ErrorException: Trying to access array offset on null in /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php:91\nStack trace:\n#0 /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php(91): App\\Controllers\\ErrorHandler::handle()\n#1 /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php(38): App\\Controllers\\ErrorHandler->renderErrorPage()\n#2 /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php(47): App\\Controllers\\ErrorHandler::handleException()\n#3 /home/MyUser/web/example.com/public_html/core.php(20): App\\Controllers\\ErrorHandler::handleShutdown()\n#4 [internal function]: {closure}()\n#5 {main}\n  thrown in /home/MyUser/web/example.com/public_html/App/Controllers/ErrorHandler.php on line 91', referer: https://example.com/

и:
Code:
[Tue Jun 24 19:43:55.513515 2025] [proxy_fcgi:error] [pid 235420:tid 140031905723968] [client 51.158.252.49:0] AH01071: Got error 'PHP message: PHP Fatal error:  Uncaught RuntimeException: Unable to create directory '/home/MyUser/web/example.com/public_html/cache/autoloader_front' in /home/MyUser/web/example.com/public_html/includes/autoloader.php:488\nStack trace:\n#0 /home/MyUser/web/example.com/public_html/core.php(142): Nette\Loaders\RobotLoader->setTempDirectory()\n#1 {main}\n  thrown in /home/MyUser/web/example.com/public_html/includes/autoloader.php on line 488', referer: https://example.com/

И двете се оправят с chmod командите по-горе в моя пост. Надявам се, че ще успея да го оправя, като взема VPS, макар, че системата не е виновна и това не се отнася за нея толкова, но да е автоматизирано всичко.
Phpbb също сетва chmod по време на инсталация, защо и Аргос да не го прави?!
 
Last edited:
Този пост ще е малко по-дълъг.
Понеже няма да ме има цял месец, ще съобщя какво следва занапред.

1.Ъпдейт на библиотеки.
- Mustache е ъпдейтнат до версия 3.0alpha1 и е премахната поддръжката за php <5.4 (още по-добре, излишните ифове са махнати), има и още неща.
Не знам ъпдейта дали ще е успешен и дали няма да даде нещо на късо, но предстои да разберем.
- Crawler библиотеката с ботовете също е ъпдейтната. Има разни фиксове и поправка на typo грешки.
- GeoIp библиотеката също е ъпдейтната.

2.Нововъведения/ъпдейти
- В page_eq и page функциите, трябва да има още проверки, ако DISABLE_PAGES_IN_URL=0 да наслагва /pages/ автоматично, ако го няма.
- В core.php трябва да се оправи редиректа, ако DISABLE_PAGES_IN_URL=1, а иммено ако в url има /pages/ да го маха и редиректва към без /pages/.
- Инжектиране на script библиотеки и css библиотеки от админ панела като линкове.
- Да се добави опция горе в менюто в админ панела с камбанка, която ще проверява за нови ъпдейти.
- Да се добави cronjobs в админ панела, където да може да се пускат директно крон задачи
- Да се добави търсачка в страницата за импресии
- Да се създадат помощни функции games_functions.php, които са само и единствено свързани с игри, и за които ще се пишат екстеншъни.
- Превод на системата на немски и румънски
- Изтриване на кеша по отделно (mustache+autoloader), (translate), (css/js от min.php) и (phpfastcache)
- Да едитна translate функцията, да работи с локалния транслейт сървър, и да има fallback за гугълския превод
- Да сложа type='password' на паролите в imap/smtp и да ги хеширам, че в момента са в plain text.
- Да се дъздаде страница в админ панела за Tasks (задачи) и да може да се пускат и спират.
- Да се обхване errorhandler с иф дали системата е инсталирана
- Да фиксна App/Entity/CommentSystem.php, че в момента в pdo execute седи false, а трябва да е 0.
- Да заменя стария iconv с ignore_non_utf8 в Add_Server.php контролера и includes/functions.php (greyfish_cache функцията)
- Да сложа wrapper за ssh2 в App/Entity за бъдещо използване на ssh в ядрото или екстеншъните.
- Да видя какво става при чиста инсталация на hestia и дали се задават нормално права при ъплоуд и ако не, да пробвам с къстъм функция, която при достъп до инсталатора сетва 755 на директории и 644 на файлове.(автоматично)

Това е за сега, до след месец може още библиотеки да са ъпдейтнати, дано няма нужда от пренаписване на код.
В автоматичния ъпдейт ще е и цялата vendor папка, защото там са библиотеките. (знаете) и самия архив ще е по-голям, но няма как, иначе трябва вие сами да си ъпдейтвате през composer. Няма проблем, вярвам, че ще е ок всичко. Просто ъпдейта, ще трае по-дълго.

Може да изникне още нещо, ако ми хрумне, но да видим...
Трябва да видя и нов default стил, че този в момента не покрива стандартите на системата. Но ще бъде пипнат и оптимизиран, ако някой реши да го ползва.
Системата струва 140 лв. и ако я вземете сега, всички ъпдейти по-горе, ще ги получите като автоматичен ъпдейт през админ панела.

За връзка с мен:
- лс
- discord: .pok4