redAi Developers

Projekty i czaty

Od 29.09.2026 portal daje modułom dwie klasy do pracy z projektami i czatami. Do tabel projects i terminals moduł nadal nie sięga wprost: czyta i zakłada przez te klasy, a one liczą dostęp tym samym kodem co portal. Na instancji bez tej wersji sprawdźcie najpierw class_exists(\App\Narzedzia\Rozmowy::class).

App\Narzedzia\Projekty: tylko odczyt. Zwraca zwykłe tablice z polami wspólnymi dla wszystkich instancji. Instancje dokładają do projektów własne kolumny (faza, PM, backlog), ale na nich moduł nie może polegać.

MetodaZwraca
lista($dla)projekty widoczne dla osoby ($dla = User albo id): publiczne, własne, udostępnione wprost i przez grupę (administrator widzi wszystkie)
projekt(int $id)id, nazwa, slug, widocznosc, tworca_id, kontekst, adres albo null
czlonkowie(int $id)publiczny, tworca_id, osoby (id, nazwa, email), grupy (id, nazwa, osoby = id osób)
maDostep(int $projektId, $osoba)true/false ($osoba = User albo id), jak przy wejściu na stronę projektu
rozmowy(int $projektId)czaty projektu bez archiwum
rozmowa(int $czatId)id, nazwa, projekt_id, katalog, tworca_id, widok (prosty/terminal), zalozyl_modul, utworzono, adres
rozmowaPoKatalogu(string $katalog)to samo po katalogu roboczym czatu (pasuje też podkatalog)

rozmowaPoKatalogu(getcwd()) przydaje się w komendzie artisan modułu, którą woła czat: komenda wie wtedy, z którego czatu i projektu ją uruchomiono.

App\Narzedzia\Rozmowy::zaloz(): nowy czat z pierwszą wiadomością. Idzie tą samą drogą co przycisk „+ Nowy czat” i wysłanie wiadomości w Prostym czacie.

PHP
use App\Narzedzia\Rozmowy;

$czat = Rozmowy::zaloz([
    'modul'  => 'pmo',                 // klucz Waszego modułu, obowiązkowy
    'osoba'  => $request->user(),      // właściciel czatu (User albo id)
    'projekt'=> $projekt['id'],        // albo null = czat poza projektem
    'nazwa'  => 'Kamień M3: ustalenia',
    'tresc'  => "Przygotuj plan kamienia M3 na podstawie...", // pierwsza wiadomość; pusta = sam czat
]);

return redirect($czat['adres']);       // ['id', 'adres', 'projekt_id', 'katalog', 'tura']
  • Portal sprawdza, że moduł istnieje, osoba jest aktywna i ma dostęp do projektu. Brak dostępu = RuntimeException, zły moduł, osoba albo projekt = InvalidArgumentException. Nie zakładajcie czatu w projekcie, którego osoba nie widzi, „bo moduł może”.
  • Czat powstaje zawsze w widoku Prosty czat. Pierwsza wiadomość idzie od razu w imieniu osoby, a odpowiedź pojawia się w czacie jak po zwykłym wysłaniu.
  • Bez nazwa czat dostaje nazwę jak z przycisku, a tytuł dobiera się z pierwszej wiadomości.
  • Czat ma znacznik zalozyl_modul (klucz modułu), widoczny w Projekty::rozmowa(). Po nim odróżnicie czaty założone przez moduł od założonych ręcznie.
  • Każde wywołanie z treścią to prawdziwa tura Claude na koncie instancji. Nie zakładajcie czatów w pętli ani z harmonogramu bez wyraźnej potrzeby.

Ostatnia zmiana dokumentacji: 29.09.2026. Pytania: m@redai.pl.