Integrácie
Teams integruje šesť sesterských balíkov Roundly. Sú to pevné závislosti, takže ich funkcie sú na dodanom modeli Team vždy k dispozícii:
| Balík | Čo pridáva tímu |
|---|---|
enums-for-laravel | JoinRequestStatus a JoinPolicy získajú labels(), options(), validationRule(), values() a vyhľadávanie hodnôt. |
options-for-laravel | Typované nastavenia tímu — pravidlá vstupu, limit miest, predvolená rola, povinné schválenie. |
contacts-for-laravel | Kontaktné a fakturačné e-maily, telefóny a URL s primárnym kontaktom pre každý typ. |
addresses-for-laravel | Adresár fakturačných, fyzických a korešpondenčných adries s typovaným vyhľadávaním. |
approvals-for-laravel | Voliteľné schvaľovanie žiadostí o pripojenie viacerými adminmi, s výsledkom prepísaným späť do žiadosti. |
connections-for-laravel | Prepojenia tím–tím a tím–používateľ s oprávneniami a expiráciou. |
Každý má vlastné tabuľky — migrácie options, contacts, addresses, connections a approvals, ktoré ste publikovali pri inštalácii.
Schvaľovanie viacerými adminmi
Zapnite TEAMS_APPROVALS=true a žiadosť o pripojenie pošlite cez schvaľovací engine namiesto jedného schvaľovateľa. Natívna cesta joinRequests()->approve() / deny() zostáva nedotknutá:
use RoundlyConsulting\Approvals\Enums\ApprovalRule;
use RoundlyConsulting\Approvals\Facades\Approvals;
use RoundlyConsulting\Teams\Facades\Teams;
// .env → TEAMS_APPROVALS=true
$request = Teams::for($team)->joinRequests()
->requireApprovalFrom([$admin1, $admin2])
->rule(ApprovalRule::Quorum)
->quorum(2)
->open($user); // opens pending; an ApprovalRequest is created
// Admins sign off through the approvals engine:
Approvals::for($request)->as($admin1)->approve();
Approvals::for($request)->as($admin2)->approve(); // quorum reached — the member is addedrequireApprovalFrom(), rule() a quorum() vracajú nový handle, takže pripravený handle si môžete odložiť a použiť znova. Keď engine rozhodne, SyncJoinRequestStatusFromApproval prenesie výsledok do žiadosti cez Teams::for($team)->joinRequests() — takže ho Teams::fake() zaznamená: schválenie pridá člena a spustí JoinRequestApproved; zamietnutie označí žiadosť ako Denied a spustí JoinRequestDenied; zrušenie a expirácia nerobia nič. Žiadosť, ktorú už niekto vybavil ručne (alebo vypršala), si svoj výsledok ponechá — engine ho nikdy neprevráti. Listener koná, len kým je teams.approvals.enabled zapnuté. Bez rule() a quorum() platia teams.approvals.rule a .quorum; pri vypnutom schvaľovaní ide open() natívnou cestou.
Kontakty
use RoundlyConsulting\Contacts\Enums\ContactType;
use RoundlyConsulting\Teams\Facades\Teams;
// The team's ContactBook — the same as Contacts::for($team):
Teams::for($team)->contacts()->email('[email protected]')->label('billing')->primary()->add();
Teams::for($team)->contacts()->phone('+441234567891')->label('billing')->add();
Teams::for($team)->contacts()->url('https://status.example.com')->label('status')->add();
Teams::for($team)->contacts()->primary(ContactType::Email); // Contact|null
// The HasContacts trait on Team works too:
$team->addEmail('[email protected]', 'support', primary: true);
$team->addPhone('+441234567890', 'ops');
$team->addUrl('https://example.com', 'website');
$team->primaryEmail(); // Contact|nullAdresy
use RoundlyConsulting\Addresses\DataTransferObjects\AddressData;
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Teams\Facades\Teams;
// The team's AddressBook — the same as Addresses::for($team):
Teams::for($team)->addresses()->add(new AddressData(
city: 'London', street: '1 King St', postalCode: 'EC1A 1AA',
countryIso: 'GB', type: AddressType::Billing, isPrimary: true,
));
Teams::for($team)->addresses()->primary(AddressType::Billing);
// The HasAddresses trait on Team works too:
$team->createAddress(city: 'Berlin', street: 'Example Str. 1', postalCode: '10115', countryIsoCode: 'DE');
$team->getPrimaryAddressOfType(AddressType::Billing);contacts() a addresses() vám dajú ContactBook a AddressBook tímu, takže platia fasády týchto balíkov — aj ich fakes. Oba balíky majú v traite metódu addAddress(); na modeli Team vyhráva štruktúrovaná verzia z addresses a voľnotextová verzia z contacts je dostupná ako addContactAddress().
Prepojenia tímov
use RoundlyConsulting\Teams\Facades\Teams;
use RoundlyConsulting\Teams\Models\Team;
// The connections facade scoped to the team — the same as Connections::from($team):
Teams::for($team)->connections()->to($partnerTeam)->withPermissions('share:roster')->connect();
Teams::for($team)->connections()->to($partnerTeam)->disconnect();
// The HasConnections trait on Team works too:
$team->connectTo($partnerTeam, ['share:roster']); // team ↔ team
$team->inviteConnection($partnerTeam); // a pending invitation
$partnerTeam->acceptConnectionFrom($team);
$team->isConnectedTo($partnerTeam);
$team->connectablesOfType(Team::class); // partner teams
$team->hasPermissionThroughConnection($partnerTeam, 'share:roster');Team implementuje Connectable, takže sa môže prepojiť s inými tímami alebo s akýmkoľvek modelom typu Connectable, napríklad s používateľom, ktorý používa trait z balíka connections.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.