ARGOS multigaming cms

//офтопик
Филтрирал ли си входящите данни?
Ако URL адреса е:
site.com/language/a'

Какво ще стане?

ЕДИТ: Това да изключваш десния бутон на потребителите не мисля, че е полезно...достатъчно е да натиснеш:
CTRL + U и пак се вижда source code....


SQL ERROR [ mysqli ]

User '4039438_forum' has exceeded the 'max_questions' resource (current value: 12000) [1226]

An sql error occurred while fetching this page. Please contact an administrator if this problem persists.
 
Hi :)
това ще му излезе:
This language is not supported.

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

Скоро ще дам ново демо на нов хост, версията там на сегашното демо е 4.7, а вече стигнахме доста напред до 5.3.
Ще кача наново всичко, но искам да тествам няколко пъти още и да прегледам още код, че има още неща, които мисля да направя.
 
5.4:
- Открих още 1 бъгче, а именно, ако някой достъпи /adminee, /admin[string], а не admin/ го праща в трета глуха. Това е заради SEO URL-тата на новините.
Има глобален рутер, който прихваща всички url-та, зададен е с / и заради това добавих малка проверка в контролера на новините, ако някой достъпи нещо, което е след admin да го праща в индекса. demo: http://argoscms.atwebpages.com/adminee
- малки промени (почти незначителни) в -> :: (в изобразяването на датата и чата в новините), Администратори и Глобални модератори долу в статистиката се изобразяват с кейсове, презаместват вече съществуващи думи.
Така че ги направих съответно да са на латиница, тъй като не искам да ползвам мултиланг дефиниции за тях, понеже са еднакви почти на всички езици. До сега бяха на кирилица, но реших да са на латиница.
Другите групи направени от вас, няма да изискват кейс реплейс, а ще се изобразяват както сте ги задали от phpbb3 админ панела + техните цветове.
- Всички екстеншъни бяха прегледани и им беше добавена мултиланг поддръжка (на тези, които си вървят със системата). На места имаше малки добавки. (добавяне на html, за да са по-user friendly)
- GameQ беше изтрита и свалена по-стара версия, засега ще остане тази, докато не ъпдейтнат както трябва A2S_ заявките към source енджин сървърите.


Приемам всякакви съвети за разширяване на системата :)
 
Последно редактирано:
Guys, вече съм на PHP 8.1 и съм започнал да правя промени. Phpbb тръгна, не съм го тествал изцяло, но щом се инсталира значи мисля, че няма да има проблем.

Със системата нещата не изглеждат така, научих някои новости, които въведох и продължавам да чистя грешки. Ако успея да подкарам всичко ще обявя новата версия :)
Рутер класа не тръгна, но намерих workaround и ще видим дали ще го въведат. Свързан е с call_user_func_array функцията.
Само се добавя едно array_values на едно място и си тръгва под 8.1 с къстъм параметри, които се ползват, за да се въведе темплейтния файл през рутирането, а след това се предава на mustache.
 
5.5:
- Пълна php 8.1 поддръжка (цялата система почти претърпя промени, както и екстеншъните)
Версия 5.4 ще остане като "legacy" - няма да се ъпдейтва вече, но който е под php 7.4 и я иска, да си я закупи.
Мога да дам съпорт за нея и 9-те мои екстеншъна, но от тук нататък ще се пише само код годен, да се възпроизведе под PHP 8.1
- Добавил съм проверки на някои места дали вече има съществуващ запис в екстеншъните и в системата. (за да не се записват еднакви данни)


Търся безплатен хостинг с PHP 8.1 поддръжка, за да я кача там и да дам демо, ако някой знае такъв, нека пише.
 
Допълвам листа с бъгове:

known bugs:
- редактирането на html файлове (през страницата html editor) не работи на localhost,а на 127.0.0.1, заради това, че в Localhost сте с айпи като това ::1
(оправено)
- за Admin notes важи същото като горното (не може да се създаде файла с името на айпито поради същата причина)
(вече запазва по име, а не по айпи, за да работи и под localhost)
- greyfish системата не работи с домейн вместо айпи и порт за добавяне на сървърите. (по-нататък мога да добавя такава поддръжка)
(добавено)
- gameq работи с някои сървъри, с други не (това е библиотеката която чеква сървърите и взима информация от тях).
Причината: Наскоро имаше ъпдейт, явно от Valve пак са правили ъпдейти по енджина и някои сървъри ги дава онлайн/други офлайн.
Ще трябва да мине време, за да се ъпдейтнат всички сървъри, но като знам, че има и емулатори този бъг може и да си остане.

(заменено с LGSL Game Queries)
 
Последно редактирано:
5.6:
Премахнат е следния ред:
<script src='https://www.google.com/recaptcha/api.js'></script>
от някои от темплейтите, забравен е тъй като се ползва вградена captch-a, а предишните версии използваха recaptch-ата на гугъл.
Целия код (html) на всички темплейти е индентнат с Indent by fold (Notepad++ плъгина)
Целия код (html) на adminLTE темплейтa на админ панела е индентнат.
Целия код на темплейтния файл за инсталатора в папка install/ е индентнат също.
composer.json съдържа вече:
Код:
{
  
    "minimum-stability": "dev",
    "require": {
        "nette/robot-loader": "v3.4.x-dev",
        "mobiledetect/mobiledetectlib": "dev-master",
        "mustache/mustache": "dev-main",
        "pimple/pimple": "dev-main",
        "vlucas/phpdotenv": "5.4.x-dev",
        "evenement/evenement": "dev-master",
        "phpfastcache/phpfastcache": "v8.x-dev",
        "austinb/gameq": "v3.x-dev",
        "fig/http-message-util": "dev-master",
        "pok4/php-router": "dev-argosrouter"
    },
  
"repositories": [
    {
        "type": "package",
        "package": {
            "name": "pok4/php-router",
            "version": "dev-argosrouter",
            "type": "package",
            "autoload": {
              "psr-4": {
                "PHPRouter\\": "src"
              }
            },
            "source": {
                "url": "git@github.com:pok4/php-router.git",
                "type": "git",
                "reference": "argosrouter"
            }
        }
    }
]
  
  
}

Принуден бях да форкна репото на рутер класа и да променям кода по-него, за да е годен за php 8.1.
Повечето неща бяха вече предлагани от ползватели, но хората, които се грижат за класа са го зарязали тотално...
Както и да е всичко си работи без проблем :)

Утре ще тествам и може и да заменя GameQ библиотеката с тази от LGSL (https://github.com/tltneon/lgsl/), ще се ползва само класа, за да се взима инфо от сървърите.. Целта е всичко да се извлича нормално без офлайн статуси и простотии..

Още не съм изтествал всичко цялостно, тъй като системата си е доста голяма...Може да изпаднат още бъгове.
 
Последно редактирано:
5.7:
- индентация на целия код по контролери/модели/ентитита и файла с функциите.
- sql_escape функцията от functions.php е изтрита (ползваше се на няколко места, но всичко е минато с pdo prepare)
- имаше бъг с файловата система и липсваха едни проверки на места за кейс реплейс, вече е оправено и се изобразяват категориите както трябва
- още оптимизации по кода
- GameQ е заменено с LGSL 6.x (за сега върви доста бързо, но прави леки проблеми понякога и чакам автора да отговори на мой въпрос)
- добавено е бутонче до captch-aта с цел да се рефрешва, ако някой не е сигурен, че ще напише кода правилно от нея
- имаше style="" таг на места (по инсталатора и темплейтите) и е премахнат където е могло, всичко е пренесено в style.css файловете.
(има на места се ползва за сетване на цвят на определен потребител от функция и е неизбежно да се премaхне)
Инсталатора вече е с bootstrap 4.6 css от CDN.
- Оставени са коментари по кода на всички функции и методи, но за момента никъде нищо не е въвеждано, ще остане за по-нататък.

ПС: По-горе бях споменал нещо за HTML Editor-a, но го оправих. Просто в ajax-a е трябвало да се зададе на заявката cache: false,...
Вече си работи както трябва и под localhost. На домейн не би трябвало да има никакви проблеми.
 
Последно редактирано:
5.8:
- Stable release (тествахме 2-ма човека почти всичко и сме прегледали и контролери, модели и т.н. след автоматичната индентация)
- добавена е username_clean функцията, за да може да се записват админ бележките както трябва, тъй като тази функция филтрира специални знаци в имената на потребителите. (просто е дефинирана в бейсконтролера, иначе си се взима от phpbb3 интеграцията)
- промени по core.php (почти незначителни)
- още индентация на кода по места

Написах нови екстеншъни и ще ги дам като нови постове. Нарочно пиша нови постове, тъй като линквам от други сайтове към всеки конкретно :)
 
Новият екстеншън е факт, както бях обещал - той запазва автоматично текста в контактната форма и в коментарите за 30 минути.
Работи с localstorage с json формат за записване на стринга (текста) + време за изтичане на самия текст.

Демо:

Цена на екстеншъна: 10 евро.

може да се добавят проверки за други екстеншъни като тикет системата или да се надгради още малко, за да запазва и в админ панела в новините текста примерно. За сега работи само за коментарите в новините и контактната форма.

Струва си :)
 
още 1 екстеншън - нарекох го просто discord. Работи с lgsl query-тата.
Добавя страница Discord в менюто и има опция от админ панела да си въведете айди на дискорд групата ви.

Демо със снимка:
11.png

Демо от видео:

Цена: 10 евро
 
Започнах работа по профилната страница, от която ще може да купувате кредити и да гледате лог. Магазините ще се разработват конкретно за всяка игра. От профилната страница може да гледате лог и купувате кредити. Още не съм решил дали да ползвам Paymentwall или само Paypal. Paymentwall може да се интегрира и с Paypal, така ще имате повече възможности за плащане.

Май с него ще е, но на по-късен етап, сега предстоят функции и проверки :)11.png
 
Давам малко код за това как изглежда Paymentwall метода. Пуснал съм го през ajax метода на самия екстеншън, за да е годен да дава output response (чисто).

Ако всичко е ок, потребителя ще си получи кредитите за които е платил.


PHP:
        //require the data about paymentwall
        require_once(__DIR__.'/lib/paymentwall.php');
        Paymentwall_Base::setApiType(Paymentwall_Base::API_GOODS);
        Paymentwall_Base::setAppKey($this->api_key_paymentwall); // available in your Paymentwall merchant area
        Paymentwall_Base::setSecretKey($this->private_key_paymentwall); // available in your Paymentwall merchant area
        $pingback = new Paymentwall_Pingback($_GET, $_SERVER['REMOTE_ADDR']);
        if ($pingback->validate()) {
          $product_id =  $pingback->getProduct()->getId();
          $user_id = (int)$pingback->getUserId();
          
          //fetch data from phpbb database based on user id (to get username, username_clean, user_ip for the user)
          $results    = $this->db->query("SELECT username,username_clean,user_ip FROM `".$this->forum_db."`.".$this->forum_db_prefix."_users WHERE user_id='".$user_id."'");
          $row=$results->fetch(PDO::FETCH_ASSOC);
          
          $username = $row['username'];
          $username_clean = $row['username_clean'];
          $user_ip = $row['user_ip'];
          
          //get the specific product name and set the credits for him
          $credits = 0;//globalize
          if($product_id == "10_credits") { $credits=10; }
          if($product_id == "20_credits") { $credits=20; }
          if($product_id == "50_credits") { $credits=50; }
          
          $date = time();//current timestamp (epoch)
            
          //check if exist and insert else - update
          $check = $this->db->query('SELECT user_id FROM '.$this->argos_db_prefix.'members WHERE user_id="'.$user_id.'"');
          
          if ($check->rowCount() > 0) {
          //set Credits by user id
           $this->db->query('UPDATE '.$this->argos_db_prefix.'members SET credits=credits+"'.$credits.'",last_buy_date="'.$date.'" WHERE user_id="'.$user_id.'"');
          } else {
          //first row, when user buy credits for the first time
           $this->db->query('INSERT INTO '.$this->argos_db_prefix.'members (user_id,username,username_clean,user_ip,credits,first_buy_date) VALUES("'.$user_id.'","'.$username.'","'.$username_clean.'","'.$user_ip.'","'.$credits.'","'.$date.'")');
          }
          
          echo "OK"; 
        } else {
          echo $pingback->getErrorSummary();
        }

Paymentwall идва с различни уиджети за вашия сайт. Вкарва се във ифрейм заедно с api key-a и още параметри в самия url за ифрейма.
Оттам нататък при успешна транзакция има pingback request както при paypal api-то.

Давам и снимка с кредитите, които съм задал и са готови за закупуване от контролния панел на paymentwall.Без име.png


Имайте в предвид, че може да ги зададете така както аз или да си въведете свои, но вече съм направил проверки с тези и мисля, че е "справедливо".
Ако въведете свои ще трябват малки промени по кода за product id-то (нищо фрапантно)

Това всичкото е правено с екстеншън за профилите. Ще има и банер статистика за всеки потребител, която ще може да се поставя във форуми и прочие.. Ще съдържа дата на първо закупуване, дата на последно закупуване, име и кредити. Ще се постарая банерчето да е що годе добре направено и ще седи под профилната страница (по-горе е показана)

Все още не съм тествал всичко, тъй като съм под локален хост с wifi зад рутер. Скоро ще тествам, но предполагам, че всичко ще работи, тъй като и преди това съм го интегрирал по-този начин в други мои проекти.
 
PHP:
if($product_id == "10_credits") { $credits=10; }
if($product_id == "20_credits") { $credits=20; }
if($product_id == "50_credits") { $credits=50; }
ай, не така де
 
2.png

Така изглежда юзърбара, който може да се ползва във форуми и в сайтове. Целта е, ако някой тръгне да продава акаунт, да докаже кога е купувал кредити първо и кога последно. (също така и колко кредита има в момента)
 
PHP:
if($product_id == "10_credits") { $credits=10; }
if($product_id == "20_credits") { $credits=20; }
if($product_id == "50_credits") { $credits=50; }
ай, не така де
Здрасти :)
Какво имаш в предвид ?

Можеше да стане и с switch
switch($product_id) {
case '10_credits':
$credits = 10;
break;
............
}

Ако имаш по-добър съвет, пиши :) Аз съм сметнал, че така е по-добре, за да се настройва по-лесно от потребителите.
Може да се мине и product_id с (int) отпред и няма да е нужно никакъв иф/switch (ще върне числото отпред), но product id-то, може и да е само текст, така, че това зависи от този, който ще настройва paymentwall-a си...

Ей така: echo (int)'14xwexwxe'; (ще върне 14) ако е пред (int)$product_id нищо от това по-горе няма да трябва, но съм преценил, че така е най-добре.

PS: Все пак да не забравяме, че тази част от скрипта се задейства само от сървърите (request-ите) на paymentwall, тъй като само те достъпват до там.

Ако се питате какво е product_id-то, ето го (Забравил съм _ на 50-тичката :D, но както и да е, всичко си работи..):Без име.png



-----------------
ПС2:

Сега като се замислих, потърсих функция, която взима числото, дори и ако е след текст и казах така:
//get the credits amount
$credits = (int) filter_var($product_id, FILTER_SANITIZE_NUMBER_INT);
Така ще е май най-добре, за да е по-автоматизирано и да не се налага, да се пипа по кода... Но пък ако някой въведете само текст... ще даде фира.
Но нали за това съм аз - да помагам, ако някой има проблем, ще ми пише и така...
То е логично, че системата работи само с кредити (числа) и каквото и да се въведе в product id трябва да съдържа числа, дали ще е credit_20 или 20_credit - по-горната функция ще вземе и 2-та пъти числото 20....
Ми това е.. По-добре не може да стане :D
 
Последно редактирано:
Ново демо: https://argos.pw/ (Версия 5.8)
Demo accs:
demo pass: demo12
demo1 pass: demo12
demo2 pass: demo12
demo3 pass: demo12
demo4 pass: demo12
demo5 pass: demo12

Демото е от jump.bg с най-евтиния план и евтин домейн. Моля, тествайте и ако откриете бъгове - докладвайте :)
 
Последно редактирано:
Fixed. Снощи променях по htaccess-a едни неща и един ред съм го преместил където не трябва.
 

Back
Горе