Pobranie nieprzeczytanych postów i uprawnienia działów

PHP/MYSQL  Założony przez  CheQ.

Witam :)

W moim "pewnym projekcie" mam 2 problemy opisane w temacie.

Obecnie pobieram wszystkie działy i kategorie a jak wiadomo, administracja lubi stworzyć dział "Tylko dla zaufanych". Jak wyglądają te uprawnienia w mybb? Jak mogę sprawdzić skryptem czy dany użytkownik (po id) może pisać nowe tematy , odpowiadać w nich itp?

Druga sprawa , chcę zrobić "Pokaż nieprzeczytane posty" - z tym też się połapać nie mogę jak to w bazie zapisane jest.
Czy mógłbym liczyć na wytłumaczenie i (ewentualnie) kod do porania w tablicy nieprzeczytanych Tematów (w formie podobnej jak na forum tu jest) oraz o podobne wytłumaczenie związane z uprawnieniami?

Pozdrawiam.
Nieprzeczytane posty są już przecież, chyba że nie wiem o co Ci chodzi.

A co do tych działów to możesz zrobić poprzez funkcje:
get_unviewable_forums()
get_inactive_forums() 

Przykład działania (na podstawie Last post user in profile by Snake_):
        $unviewablefids get_unviewable_forums();
        
$nie "";
        if(
$unviewablefids)
            {
                
$nie "t.fid NOT IN ({$unviewablefids}) AND";
            }
        
$inactivefids get_inactive_forums();
        if (
$inactivefids)
            {
                
$nien "t.fid NOT IN ($inactivefids) AND";
            }
    
$limit $mybb->settings['lastpostuser_how'];
    
$query $db->query("
        SELECT p.*, p.message AS postmessage, p.subject AS postsubject, p.dateline AS postdate, t.*, t.subject AS threadsubject, u.*, f.*
        FROM "
.TABLE_PREFIX."posts p  
        LEFT JOIN "
.TABLE_PREFIX."threads t ON (t.tid=p.tid)
        LEFT JOIN "
.TABLE_PREFIX."users u ON (u.uid=p.uid)
        LEFT JOIN "
.TABLE_PREFIX."forums f ON (f.fid=p.fid)
        WHERE 
{$nie} {$nien} p.uid = '{$memprofile['uid']}'
        ORDER BY p.pid DESC
        LIMIT 0, 
$limit
    "
); 

Oczywiście zmienne:
$unviewablefids
$inactivefids 
pierw zdefiniuj w global:
global $inactivefids$unviewablefids
Na początku funkcji.
Witam.
Przepraszam ża dłuższy odstęp czasu ale teraz złapałem chwilę aby do projektu powrócić.

Otóż chodzi mi o to, bym Zapytaniem SQL pobrał nieprzeczytane posty użytkownika. Wiem że jest plugin jednak po 2 dniach ogrniania go po prostu NIE ROZUMIEM więc szukam jakiegoś... "zrozumiałego" rozwiązania.
Pozdrawiam.
"Nie rozumiem", wiec to zostaw. W pluginie o ktorym wspomnial Gibon (a dokladnie w jego kodzie) masz pokazane jak optymalnie wyciagnac, wyswietlic takie posty

Wysłane z mojego LG-P700 przy użyciu Tapatalka
Kod Gibona nie wyciąga z bazy nieprzeczytanych postów użytkownika. Robi to mój plugin "Nieprzeczytane posty" ale nie czarujmy się... to nie jest wcale takie proste. W kodzie jest multum rzeczy wykonywanych zanim idzie to konkretne zapytanie.

Ogólnie najprostszy przykład wygląda tak:

$sql "SELECT t.tid
        FROM " 
TABLE_PREFIX "threads t
        LEFT JOIN " 
TABLE_PREFIX "threadsread tr ON (tr.uid = {$mybb->user['uid']} AND t.tid = tr.tid) 
        LEFT JOIN " 
TABLE_PREFIX "forumsread fr ON (fr.uid = {$mybb->user['uid']} AND t.fid = fr.fid) 
        WHERE {WARUNKI_DODATKOWE}
            AND t.lastpost > IFNULL(tr.dateline,
{$mybb->user['lastmark']}
            AND t.lastpost > IFNULL(fr.dateline,
{$mybb->user['lastmark']}
            AND t.lastpost > 
{$mybb->user['lastmark']}
        ORDER BY t.dateline DESC"
;
$result $db->query($sql); 

z tym, że zamiast WARUNKI_DODATKOWE trzeba wrzucić kilka wbudowanych funkcji MyBB.
Wszystko do sprawdzenia w kodzie mojego pluginu:

https://github.com/lukasamd/MyBB-View_Un...dPosts.php
(09.08.2014, 21:55)Supryk napisał(a): "Nie rozumiem", wiec to zostaw.

Nie rozumiem - pytam. Nienawidzę takiego zachowana tak Twoje. Ja rozumiem że to nie jest nauka na jeden wieczór i poświeciliście multum swojego czasu żeby mieć taką wiedzę, sam mam podobnie - tylko powiedz mi, po co jest forum, skoro odsyłacie z kwitkiem kogoś, kto ma o tym "mniejsze" pojęcie i chce się podszkolić? Gdzie jest sens? Jeśli potrafisz mi to wytłumaczyć - chętnie wysłucham. Trochę "społeczności".:sciana:

@lukasamd - nie ukrywam, że na Twoją odpowiedź liczyłem najbardziej. Przejrzałem kod Twojego pluginu kilkanaście razy i pewne rzeczy udało mi się zrozumieć. Chciałbym tylko jeszcze przy okazji "uprawnień" - jak one w mybb działają? Jak te uprawnienia są zapisane? kiedy wiadomo że user może przeczytać dany dział/temat a kiedy nie? I tak naprawdę - jak mybb "wie" że post został przeczytany?
Nie chodzi mi o konkretny kod, bardziej o wytłumaczenie i podanie ew tabel. Informacji na ten temat nigdzie nie mogę znaleźć.

Dziękuje i pozdrawiam.
Co do uprawnień, to w kodzie na github zobacz fragment z komentarzem "Permissions". To jest kod pobrany z samego MyBB - po prostu sprawdzany jest dostęp do danych działów i robi się listę tych, które należy pominąć przy szukaniu.

Oznaczanie.. sam skrypt zapisuje w bazie co kto czytał (a nie jak niektórzy błędnie myślą, czego nie czytał). Są dwie tabele threadread i forumsread któe przechowują informacje o czasie ostatniego posta jaki widziałeś. Przynajmniej w moim pluginie, bo domyślnie MyBB ma ten mechanizm spierniczony: wchodzisz na pierwszą stronę tematy który ma tych stron sto, a on oznacza, że przeczytałeś cały.. dlatego plugin nadpisuje ten mechanizm, sprawdza jaki czas miał ostatni post na danej stronie i zapisuje jeżeli jest potrzeba.

Jeżeli użytkownik w danym dziale widział wszystkie posty i tematy, znaczniki z threadread są usuwane. Zamiast nich wystarczy jeden w forumsread - maksymalny czas dla całego działu. To zapewnia oszczędność miejsca w bazie (zbieranie info o wszystkim szybko by ją zapchało).
huh. Czyli jednak mi się dobrze wydawało. Dziękuję serdecznie za wyczerpującą odpowiedź. Myślę, że do reszty już sam dojdę.
Snake_ napisał 14.08.2014, 12:45:
[Obrazek: modnotice_thx.png]

Nie pisz zbędnych postów



Użytkownicy przeglądający ten wątek:

1 gości