Lue dans les fichiers PHP du paquet au commit abd1ac17af6d : ses espaces de noms, classes, interfaces et énumérations, leurs constantes, propriétés et méthodes publiques avec leur PHPDoc, et les options que prennent ses fabriques. Rien n’en est exécuté.
LawyerBundleclassThe lawyers' regime, on omnibase/office: what a law firm's site owes to article 10 of the Règlement intérieur national (RIN), written as checks the back office runs - the domain name (10.5), specialisations from the certified list only and three dominant fields at most (10.2), wording free of comparison (10.2), the firm identified (10.2), the site and what it says declared to the conseil de l'Ordre (10.2, 10.3, 10.5), the fees explained and the fee agreement announced (11.1, 11.2), the consumer mediator of the profession - and its own pages: the fields of practice, the fees, the mediation, the client's space, the memo for the Ordre.
3 methods
LawyerSettingsSectionclassThe settings' lawyers' section: what the legal notice and the fees page print and only the firm knows - its denomination, its structure of practice, its bar, its network, the day the site was declared to the conseil de l'Ordre, how its fees are set. The compliance widget reads the same.
3 methods
DomainNameCheckclassThe domain name carries the lawyer's name or the firm's denomination, and evokes generically neither the title, nor a field of law, nor an activity of the profession (RIN art. 10.5).
2 methods
FeesInformationCheckclass« L'avocat informe son client, dès sa saisine, des modalités de détermination des honoraires » (RIN art. 11.1) and « conclut par écrit avec son client une convention d'honoraires » (art. 11.2). The fees page always says the second; the first is the firm's own words, typed in the settings: how its fees are set.
2 methods
IdentificationCheckclass« L'avocat doit, dans toute communication, [...] faire état de sa qualité et permettre, quel que soit le support utilisé, de l'identifier, de le localiser, de le joindre, de connaître le barreau auquel il est inscrit, la structure d'exercice à laquelle il appartient et, le cas échéant, le réseau dont il est membre » (RIN art. 10.2). The legal notice prints them; the network is asked only of who has one.
2 methods
MediatorCheckclassThe consumer mediator of the lawyers' profession is named on the site, with how to reach it: the page /mediation and the legal notice print lawyer.mediator. A warning when the configuration has emptied it.
2 methods
OrderDeclarationCheckclass« L'avocat qui ouvre ou modifie substantiellement un site Internet doit en informer le conseil de l'Ordre sans délai et lui communiquer les noms de domaine qui permettent d'y accéder » (RIN art. 10.5). The settings keep which bar and the day the Ordre was told; the back office's memo lists what to send.
2 methods
PaymentScopeCheckclassPaying online is for fees only (RIN art. 11.5); clients' funds go to the CARPA (art. 6.2). Off: nothing to check. On without omnibase/marketplace or without a route: the link is not shown, and the back office says why.
2 methods
SpecialisationCheckclassSpecialisations, as RIN art. 10.2 has them:
2 methods
WordingCheckclassWhat the firm wrote for the public - the fields of practice, the team's biographies, its fees - read again for what RIN art. 10.2 forbids: comparison, disparagement, a reference to judicial functions. A warning names where and what.
2 methods
DeclarationControllerclassThe memo of what is declared to the conseil de l'Ordre, filled with what the site says today: its domain names (RIN art. 10.5), each lawyer's specialisations, qualifications and dominant fields as they are shown (art. 10.2: their terms are sent to the Ordre), the fields of practice the firm presents (art. 10.3: any publicity is communicated). To print or to copy into the letter - the bundle sends nothing itself.
1 method
Base\Lawyer\Controller\Admin\Crud
AreaCrudControllerclassThe fields of practice as the site shows them.
5 methods
AttorneyCrudControllerclassA member of the team as a lawyer: bar, oath, and what RIN art. 10.2 frames - the certified specialisations, picked in the official list (two at most), and the dominant fields (three at most).
4 methods
LawyerControllerclassThe lawyers' regime's public pages: the fields of practice, the fees - how they are set, the fee agreement, how they are paid - and the consumer mediator of the profession.
5 methods
RequestControllerclassAsking for a first appointment without an account: an office's clients are invited, so someone new could not go through omnibase/office's booking pages, which ask to sign in. The request becomes an appointment of the office in request mode (no time yet: the office fixes it), under the name, the e-mail and the phone given; the few words are kept encrypted, as every reason is.
1 method
SpaceControllerclassThe client's space: the appointments to come, the documents the office sent and those the client deposited - in the encrypted vault, never by e-mail.
1 method
LawyerDemoAccountsclassThe demonstration accounts of a law firm (glitchr/omnibase's `demo` environment): one for each role this bundle and omnibase/office know. The roles of the firm come from two groups, as in a real one - "Avocats" (ROLE_LAWYER) and "Secrétariat" (ROLE_SECRETARY), both ROLE_STAFF through the application's role hierarchy; "cabinet" is the firm's administrator.
1 method · 3 constants
Base\Lawyer\DependencyInjection
LawyerConfigurationclass1 method
LawyerExtensionclass3 methods
AreaclassA field of practice of the firm (labour, family, criminal...): what it covers, the matters handled, who follows it. Information for the public - never called a "speciality": that word is for the certificates held (Base\Lawyer\Entity\Attorney), and the wording is checked (Base\Lawyer\Compliance\WordingCheck, SpecialisationCheck).
6 methods
AttorneyclassA member of the team as a lawyer: the bar they are registered with, the year of their oath, their certified specialisations (from the official list, two at most), a specific qualification within one, and their dominant fields of activity - three at most, from an actual and habitual practice (RIN art. 10.2).
19 methods · 1 constant
SpecialisationenumThe mentions of specialisation a lawyer may hold: the list fixed by the order of the garde des Sceaux of 28 December 2011, as the Conseil national des barreaux publishes it (28 mentions). "Seul l'avocat titulaire d'un ou de plusieurs certificats de spécialisation [...] peut utiliser pour sa communication [...] les mots « spécialiste », « spécialisé », « spécialité » ou « spécialisation »" (RIN art. 10.2): a specialisation is one of these cases, or it is not shown.
2 methods · 1 constant · 28 cases
AppointmentRequestTypeclassomnibase/office's form for a first appointment asked without an account, with this regime's labels (@lawyer.request.*). Kept for whoever builds the form by this name; the regime's own page gives the prefix itself.
1 method
AppointmentRequestclass
DomainNameclassRIN art. 10.5: « Le nom de domaine doit comporter le nom de l'avocat ou la dénomination du cabinet en totalité ou en abrégé, qui peut être suivi ou précédé du mot « avocat ». L'utilisation de noms de domaine évoquant de façon générique le titre d'avocat ou un titre pouvant prêter à confusion, un domaine du droit ou une activité relevant de celles de l'avocat, est interdite. »
1 method · 5 constants
SpecialistWordsclassRIN art. 10.2: « Seul l'avocat titulaire d'un ou de plusieurs certificats de spécialisation [...] régulièrement obtenus et non invalidés peut utiliser pour sa communication, quel qu'en soit le support, les mots « spécialiste », « spécialisé », « spécialité » ou « spécialisation ». »
2 methods
WordingclassWords a lawyer's communication must not carry: comparison with colleagues, disparagement, the superlatives of advertising. The texts: the lawyer's communication keeps to "la dignité, la loyauté, la confraternité, la délicatesse ; la neutralité, l'impartialité et l'objectivité" (règlement professionnel, art. 14.1), abstains from "toute démarche à caractère publicitaire" (art. 14.2), and a personalised solicitation or an online offer of services "ne peut pas inclure d'éléments comparatifs ou dénigrants" (decree n° 73-1202 of 28 December 1973 as amended by decree n° 2019-257 of 29 March 2019).
3 methods · 1 constant
FeePaymentclassThe hook towards paying a fee note online. The bundle takes no payment itself: when omnibase/marketplace is installed and the application has turned lawyer.payment.enabled on and named its route, the fees page links to it - for fees only (« Les honoraires sont payés [...] notamment en espèces, par chèque, par virement, par billet à ordre et par carte bancaire », RIN art. 11.5). Clients' funds never go through it: « L'avocat qui manie les fonds, effets ou valeurs de manière accessoire à une opération juridique ou judiciaire doit les déposer sans délai à la CARPA » (RIN art. 6.2).
5 methods · 1 constant
AreaRepositoryclassThe finders are omnibase/office's (findActive(), findOneActiveBySlug(), findForMember()).
1 method
AttorneyRepositoryclass3 methods
OfficeAudienceclassProfessional secrecy within the firm, as the tool applies it to a client's documents, beyond the client and whoever sent the document (the voter's own business):
2 methods
DomainsclassThe site's domain names and how each reads against RIN art. 10.5: those of the configuration (lawyer.domains), else the host of the router's default address; the names they may carry are the firm's denomination and the lawyers'.
4 methods
RecordclassWhat only the firm knows and the back office's settings keep: its denomination, its structure of practice, its bar, its network, the day the site was declared to the conseil de l'Ordre, how its fees are set.
10 methods · 8 constants
LawyerExtensionclassThe regime in templates: lawyer_record() (the firm, its bar, its fees as typed in the settings), lawyer_attorney(member) (bar, oath, certified specialisations, dominant fields), lawyer_areas(member|null), lawyer_mediator(), lawyer_payment() (the hook for paying fees online), lawyer_rules_url().
2 methods
Base\Lawyer
LawyerBundle class
class LawyerBundle extends AbstractBaseBundle LawyerBundle.php:24
The lawyers' regime, on omnibase/office: what a law firm's site owes to article 10 of the Règlement intérieur national (RIN), written as checks the back office runs - the domain name (10.5), specialisations from the certified list only and three dominant fields at most (10.2), wording free of comparison (10.2), the firm identified (10.2), the site and what it says declared to the conseil de l'Ordre (10.2, 10.3, 10.5), the fees explained and the fee agreement announced (11.1, 11.2), the consumer mediator of the profession - and its own pages: the fields of practice, the fees, the mediation, the client's space, the memo for the Ordre.
Paying online is for fees only, through omnibase/marketplace when it is installed; the bundle itself takes no payment.
Compliance built into the code does not replace the Ordre's control.
LawyerBundle::__construct()
public function __construct()LawyerBundle::getPath()
public function getPath(): stringModern layout: the class lives in src/, the bundle root is the package root.
LawyerBundle::build()
public function build(ContainerBuilder $container): voidBase\Lawyer\Admin\Settings
LawyerSettingsSection class
final class LawyerSettingsSection implements SettingsSectionInterface LawyerSettingsSection.php:18
The settings' lawyers' section: what the legal notice and the fees page print and only the firm knows - its denomination, its structure of practice, its bar, its network, the day the site was declared to the conseil de l'Ordre, how its fees are set. The compliance widget reads the same.
LawyerSettingsSection::__construct()
public function __construct(readonly TranslatorInterface $translator)LawyerSettingsSection::getPage()
public function getPage(): stringLawyerSettingsSection::getFields()
public function getFields(): arrayBase\Lawyer\Compliance
DomainNameCheck class
final class DomainNameCheck implements ComplianceCheckInterface DomainNameCheck.php:15
The domain name carries the lawyer's name or the firm's denomination, and evokes generically neither the title, nor a field of law, nor an activity of the profession (RIN art. 10.5).
DomainNameCheck::__construct()
public function __construct(readonly Domains $domains)DomainNameCheck::check()
public function check(): ComplianceResultFeesInformationCheck class
final class FeesInformationCheck implements ComplianceCheckInterface FeesInformationCheck.php:16
« L'avocat informe son client, dès sa saisine, des modalités de détermination des honoraires » (RIN art. 11.1) and « conclut par écrit avec son client une convention d'honoraires » (art. 11.2). The fees page always says the second; the first is the firm's own words, typed in the settings: how its fees are set.
FeesInformationCheck::__construct()
public function __construct(readonly Record $record)FeesInformationCheck::check()
public function check(): ComplianceResultIdentificationCheck class
final class IdentificationCheck implements ComplianceCheckInterface IdentificationCheck.php:18
« L'avocat doit, dans toute communication, [...] faire état de sa qualité et permettre, quel que soit le support utilisé, de l'identifier, de le localiser, de le joindre, de connaître le barreau auquel il est inscrit, la structure d'exercice à laquelle il appartient et, le cas échéant, le réseau dont il est membre » (RIN art. 10.2). The legal notice prints them; the network is asked only of who has one.
IdentificationCheck::__construct()
public function __construct(readonly Record $record, readonly OfficeRepository $offices)IdentificationCheck::check()
public function check(): ComplianceResultMediatorCheck class
final class MediatorCheck implements ComplianceCheckInterface MediatorCheck.php:14
The consumer mediator of the lawyers' profession is named on the site, with how to reach it: the page /mediation and the legal notice print lawyer.mediator. A warning when the configuration has emptied it.
MediatorCheck::__construct()
public function __construct(readonly array $mediator = [])MediatorCheck::check()
public function check(): ComplianceResultOrderDeclarationCheck class
final class OrderDeclarationCheck implements ComplianceCheckInterface OrderDeclarationCheck.php:16
« L'avocat qui ouvre ou modifie substantiellement un site Internet doit en informer le conseil de l'Ordre sans délai et lui communiquer les noms de domaine qui permettent d'y accéder » (RIN art. 10.5). The settings keep which bar and the day the Ordre was told; the back office's memo lists what to send.
OrderDeclarationCheck::__construct()
public function __construct(readonly Record $record)OrderDeclarationCheck::check()
public function check(): ComplianceResultPaymentScopeCheck class
final class PaymentScopeCheck implements ComplianceCheckInterface PaymentScopeCheck.php:15
Paying online is for fees only (RIN art. 11.5); clients' funds go to the CARPA (art. 6.2). Off: nothing to check. On without omnibase/marketplace or without a route: the link is not shown, and the back office says why.
On and available: a reminder of what the payment page may take.
PaymentScopeCheck::__construct()
public function __construct(readonly FeePayment $payment)PaymentScopeCheck::check()
public function check(): ComplianceResultSpecialisationCheck class
final class SpecialisationCheck implements ComplianceCheckInterface SpecialisationCheck.php:25
Specialisations, as RIN art. 10.2 has them:
- the words « spécialiste », « spécialisé », « spécialité », « spécialisation » are for the holders of a certificate: a lawyer without one whose title, biography or dominant fields use them, or a field of practice that does when nobody in the firm holds a certificate, is to be corrected;
- a specialisation shown is one of the official list (the entity keeps nothing else), two at most;
- the dominant fields of activity are three at most.
SpecialisationCheck::__construct()
public function __construct(readonly AttorneyRepository $attorneys, readonly AreaRepository $areas)SpecialisationCheck::check()
public function check(): ComplianceResultWordingCheck class
final class WordingCheck implements ComplianceCheckInterface WordingCheck.php:19
What the firm wrote for the public - the fields of practice, the team's biographies, its fees - read again for what RIN art. 10.2 forbids: comparison, disparagement, a reference to judicial functions. A warning names where and what.
WordingCheck::__construct()
public function __construct(readonly AreaRepository $areas, readonly MemberRepository $members, readonly Record $record, readonly array $extra = [])WordingCheck::check()
public function check(): ComplianceResultBase\Lawyer\Controller\Admin
DeclarationController class
class DeclarationController extends AbstractController DeclarationController.php:23
The memo of what is declared to the conseil de l'Ordre, filled with what the site says today: its domain names (RIN art. 10.5), each lawyer's specialisations, qualifications and dominant fields as they are shown (art. 10.2: their terms are sent to the Ordre), the fields of practice the firm presents (art. 10.3: any publicity is communicated). To print or to copy into the letter - the bundle sends nothing itself.
DeclarationController::index()
public function index(Record $record, Domains $domains, AttorneyRepository $attorneys, AreaRepository $areas): ResponseBase\Lawyer\Controller\Admin\Crud
AreaCrudController class
class AreaCrudController extends AbstractCrudController AreaCrudController.php:19
The fields of practice as the site shows them.
AreaCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringAreaCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringAreaCrudController::configureCrud()
public function configureCrud(Crud $crud): CrudAreaCrudController::configureActions()
public function configureActions(Actions $actions): ActionsAreaCrudController::configureFields()
public function configureFields(string $pageName): iterableAttorneyCrudController class
class AttorneyCrudController extends AbstractCrudController AttorneyCrudController.php:22
A member of the team as a lawyer: bar, oath, and what RIN art. 10.2 frames - the certified specialisations, picked in the official list (two at most), and the dominant fields (three at most).
AttorneyCrudController::getEntityFqcn()
public static function getEntityFqcn(): stringAttorneyCrudController::getPreferredIcon()
public static function getPreferredIcon(): ?stringAttorneyCrudController::configureActions()
public function configureActions(Actions $actions): ActionsAttorneyCrudController::configureFields()
public function configureFields(string $pageName): iterableBase\Lawyer\Controller\Client
LawyerController class
class LawyerController extends AbstractController LawyerController.php:20
The lawyers' regime's public pages: the fields of practice, the fees - how they are set, the fee agreement, how they are paid - and the consumer mediator of the profession.
LawyerController::__construct()
public function __construct(readonly OfficeRepository $offices, readonly Record $record)LawyerController::areas()
public function areas(AreaRepository $areas): ResponseLawyerController::area()
public function area(string $slug, AreaRepository $areas): ResponseLawyerController::fees()
public function fees(FeePayment $payment, MemberRepository $members, AppointmentTypeRepository $types): ResponseLawyerController::mediation()
public function mediation(): ResponseRequestController class
class RequestController extends AbstractRequestController RequestController.php:22
Asking for a first appointment without an account: an office's clients are invited, so someone new could not go through omnibase/office's booking pages, which ask to sign in. The request becomes an appointment of the office in request mode (no time yet: the office fixes it), under the name, the e-mail and the phone given; the few words are kept encrypted, as every reason is.
The form, its model and what is done with the request are omnibase/office's (AbstractRequestController, AppointmentRequests); the route, the page and its words are this regime's.
RequestController::request()
public function request(Request $request): ResponseSpaceController class
class SpaceController extends AbstractController SpaceController.php:17
The client's space: the appointments to come, the documents the office sent and those the client deposited - in the encrypted vault, never by e-mail.
SpaceController::index()
public function index(AppointmentRepository $appointments, DocumentRepository $documents): ResponseBase\Lawyer\Demo
LawyerDemoAccounts class
final class LawyerDemoAccounts implements DemoAccountProviderInterface LawyerDemoAccounts.php:25
The demonstration accounts of a law firm (glitchr/omnibase's demo
environment): one for each role this bundle and omnibase/office know. The
roles of the firm come from two groups, as in a real one - "Avocats"
(ROLE_LAWYER) and "Secrétariat" (ROLE_SECRETARY), both ROLE_STAFF through
the application's role hierarchy; "cabinet" is the firm's administrator.
An application's fixtures take them from Base\Demo\DemoAccountFactory ($accounts->account('avocate', $manager)) and attach what makes them worth signing in as: a member of the team and an agenda to the lawyers, a request and documents in the vault to the client. A firm without one of these roles (a lawyer practising alone has no associate) leaves it out: base.demo.exclude.
Registered when the installed glitchr/omnibase has the demo environment (config/services.php).
const LAWYERS = 'Avocats'const SECRETARIES = 'Secrétariat'const CLIENTS = 'Clients'
LawyerDemoAccounts::getDemoAccounts()
public function getDemoAccounts(): iterableBase\Lawyer\DependencyInjection
LawyerConfiguration class
class LawyerConfiguration extends AbstractBaseConfiguration LawyerConfiguration.php:8
LawyerConfiguration::getConfigTreeBuilder()
public function getConfigTreeBuilder(): TreeBuilderLawyerExtension class
class LawyerExtension extends AbstractBaseExtension implements PrependExtensionInterface LawyerExtension.php:12
LawyerExtension::getConfiguration()
public function getConfiguration(array $config, ContainerBuilder $container): LawyerConfigurationLawyerExtension::prepend()
public function prepend(ContainerBuilder $container): voidThe office's pages in the lawyers' regime's words: the contact form's warning (nothing confidential here: the client's space is for that), the menu of the client's space, where the e-mails send the client.
LawyerExtension::load()
public function load(array $configs, ContainerBuilder $container): voidBase\Lawyer\Entity
Area class
class Area extends Area Area.php:20
A field of practice of the firm (labour, family, criminal...): what it covers, the matters handled, who follows it. Information for the public - never called a "speciality": that word is for the certificates held (Base\Lawyer\Entity\Attorney), and the wording is checked (Base\Lawyer\Compliance\WordingCheck, SpecialisationCheck).
The fields and the methods common to the regimes are omnibase/office's (Base\Office\Entity\Area); the matters and the table are the lawyers'.
Area::getMatters()
public function getMatters(): arrayArea::setMatters()
public function setMatters(?array $matters): selfArea::getMattersText()
public function getMattersText(): stringThe matters, one a line: what the back office's form edits.
Area::setMattersText()
public function setMattersText(?string $text): selfArea::getItems()
public function getItems(): arrayWhat omnibase/office's Area calls the list.
Area::setItems()
public function setItems(?array $items): staticAttorney class
class Attorney Attorney.php:18
A member of the team as a lawyer: the bar they are registered with, the year of their oath, their certified specialisations (from the official list, two at most), a specific qualification within one, and their dominant fields of activity - three at most, from an actual and habitual practice (RIN art. 10.2).
const MAX_DOMINANT_FIELDS = 3RIN art. 10.2: « dont le nombre revendiqué ne peut être supérieur à trois ».
Attorney::__construct()
public function __construct(?Member $member = null, ?string $bar = null)Attorney::__toString()
public function __toString(): stringAttorney::getId()
public function getId(): ?intAttorney::getMember()
public function getMember(): ?MemberAttorney::setMember()
public function setMember(?Member $member): selfAttorney::getBar()
public function getBar(): ?stringAttorney::setBar()
public function setBar(?string $bar): selfAttorney::getSwornIn()
public function getSwornIn(): ?intAttorney::setSwornIn()
public function setSwornIn(?int $year): selfAttorney::getQualification()
public function getQualification(): ?stringAttorney::setQualification()
public function setQualification(?string $qualification): selfAttorney::getSpecialisations()
public function getSpecialisations(): array- Returns
only what the official list knows
Attorney::getSpecialisationValues()
public function getSpecialisationValues(): arrayAttorney::setSpecialisationValues()
public function setSpecialisationValues(?array $values): selfAnything outside the official list is dropped: a specialisation is a certificate, not a wish.
Attorney::isSpecialist()
public function isSpecialist(): boolAttorney::getDominantFields()
public function getDominantFields(): arrayAttorney::setDominantFields()
public function setDominantFields(?array $fields): selfAttorney::getDominantFieldsText()
public function getDominantFieldsText(): stringOne a line: what the back office's form edits.
Attorney::setDominantFieldsText()
public function setDominantFieldsText(?string $text): selfBase\Lawyer\Enum
Specialisation enum
enum Specialisation Specialisation.php:14
The mentions of specialisation a lawyer may hold: the list fixed by the order of the garde des Sceaux of 28 December 2011, as the Conseil national des barreaux publishes it (28 mentions). "Seul l'avocat titulaire d'un ou de plusieurs certificats de spécialisation [...] peut utiliser pour sa communication [...] les mots « spécialiste », « spécialisé », « spécialité » ou « spécialisation »" (RIN art. 10.2): a specialisation is one of these cases, or it is not shown.
case ARBITRATION = 'arbitrage'case ASSOCIATIONS = 'associations-fondations'case INSURANCE = 'assurances'case BANKING = 'bancaire-boursier'case COMMERCIAL = 'commercial-affaires-concurrence'case CREDIT = 'credit-consommation'case BODILY_INJURY = 'dommage-corporel'case CHILDREN = 'enfants'case ENVIRONMENT = 'environnement'case FOREIGNERS = 'etrangers-nationalite'case FAMILY = 'famille-personnes-patrimoine'case TRUST = 'fiducie'case TAX = 'fiscal-douanier'case SECURITIES = 'garanties-suretes-execution'case REAL_ESTATE = 'immobilier'case INTERNATIONAL = 'international-union-europeenne'case DIGITAL = 'numerique-communications'case CRIMINAL = 'penal'case INTELLECTUAL_PROPERTY = 'propriete-intellectuelle'case DATA_PROTECTION = 'protection-donnees-personnelles'case PUBLIC = 'public'case RURAL = 'rural'case HEALTH = 'sante'case COMPANIES = 'societes'case SPORT = 'sport'case TRANSPORT = 'transports'case LABOUR = 'travail'const MAX = 2An avocat holds and uses two mentions at most (Conseil national des barreaux).
Specialisation::label()
public function label(): stringThe mention as the order names it.
Specialisation::choices()
public static function choices(): array- Returns
label => value, for a form
Base\Lawyer\Form
AppointmentRequestType class
class AppointmentRequestType extends AppointmentRequestType AppointmentRequestType.php:12
omnibase/office's form for a first appointment asked without an account, with this regime's labels (@lawyer.request.*). Kept for whoever builds the form by this name; the regime's own page gives the prefix itself.
AppointmentRequestType::configureOptions()
public function configureOptions(OptionsResolver $resolver): voidBase\Lawyer\Form\Model
AppointmentRequest class
class AppointmentRequest extends AppointmentRequest AppointmentRequest.php:8
the model is omnibase/office's: Base\Office\Form\Model\AppointmentRequest
Base\Lawyer\Guard
DomainName class
final class DomainName DomainName.php:26
RIN art. 10.5: « Le nom de domaine doit comporter le nom de l'avocat ou la dénomination du cabinet en totalité ou en abrégé, qui peut être suivi ou précédé du mot « avocat ». L'utilisation de noms de domaine évoquant de façon générique le titre d'avocat ou un titre pouvant prêter à confusion, un domaine du droit ou une activité relevant de celles de l'avocat, est interdite. »
assess() reads a host against the names it may carry (the firm's denomination, the lawyers' names):
OK it carries a name, alone or with "avocat" / "avocats" GENERIC it carries no name and evokes the title, a field of law or an activity: forbidden MIXED it carries a name and a field of law or an activity besides UNNAMED it carries no name the site knows LOCAL a development host (localhost, an address, .local, .test): nothing to assess
A reading aid: the conseil de l'Ordre, told of the domain names, decides.
const OK = 'ok'const GENERIC = 'generic'const MIXED = 'mixed'const UNNAMED = 'unnamed'const LOCAL = 'local'
DomainName::assess()
public static function assess(?string $host, array $names): string$namesthe firm's denomination and the lawyers' names
SpecialistWords class
final class SpecialistWords SpecialistWords.php:13
RIN art. 10.2: « Seul l'avocat titulaire d'un ou de plusieurs certificats de spécialisation [...] régulièrement obtenus et non invalidés peut utiliser pour sa communication, quel qu'en soit le support, les mots « spécialiste », « spécialisé », « spécialité » ou « spécialisation ». »
Finds those four words (and their feminine and plural forms) in a text.
SpecialistWords::find()
public static function find(?string $text): array- Returns
the words found, as written
SpecialistWords::uses()
public static function uses(?string $text): boolWording class
final class Wording Wording.php:25
Words a lawyer's communication must not carry: comparison with colleagues, disparagement, the superlatives of advertising. The texts: the lawyer's communication keeps to "la dignité, la loyauté, la confraternité, la délicatesse ; la neutralité, l'impartialité et l'objectivité" (règlement professionnel, art. 14.1), abstains from "toute démarche à caractère publicitaire" (art. 14.2), and a personalised solicitation or an online offer of services "ne peut pas inclure d'éléments comparatifs ou dénigrants" (decree n° 73-1202 of 28 December 1973 as amended by decree n° 2019-257 of 29 March 2019).
A list of expressions is a help to the person who writes, not a judge: what it finds is shown as a warning, and what it does not find is not thereby allowed.
The expressions themselves are omnibase/office's (Base\Office\Guard\Wording), common to the regulated practices; the lawyers' own follow them.
const PATTERNS = ['fonctions juridictionnelles' => '\b(?:ancien(?:ne)?\s+(?:magistrate?|juge|procureure?|conseill(?:er|ere)\s+prud)|juge\s+(?:consulaire|de\s+proximite|supple…What is the lawyers' alone, each a regular expression on the plain text.
Wording::scan()
public static function scan(?string $text, array $extra = []): array$extraexpressions of the site's own, matched as they are written (case and accents apart)
- Returns
what was found, by its label
Wording::isClean()
public static function isClean(?string $text, array $extra = []): boolWording::plain()
public static function plain(string $text): stringLowered, without accents nor tags, typographic apostrophes and spaces made plain.
Base\Lawyer\Payment
FeePayment class
class FeePayment FeePayment.php:18
The hook towards paying a fee note online. The bundle takes no payment itself: when omnibase/marketplace is installed and the application has turned lawyer.payment.enabled on and named its route, the fees page links to it - for fees only (« Les honoraires sont payés [...] notamment en espèces, par chèque, par virement, par billet à ordre et par carte bancaire », RIN art. 11.5). Clients' funds never go through it: « L'avocat qui manie les fonds, effets ou valeurs de manière accessoire à une opération juridique ou judiciaire doit les déposer sans délai à la CARPA » (RIN art. 6.2).
const MARKETPLACE = 'Base\Marketplace\MarketplaceBundle'
FeePayment::__construct()
public function __construct(readonly bool $enabled = false, readonly ?string $route = null, readonly ?bool $installed = null)FeePayment::isInstalled()
public function isInstalled(): boolWhether omnibase/marketplace is there to take the payment.
FeePayment::isEnabled()
public function isEnabled(): boolFeePayment::isAvailable()
public function isAvailable(): boolShown on the fees page only when all three hold.
FeePayment::getRoute()
public function getRoute(): ?stringBase\Lawyer\Repository
AreaRepository class
class AreaRepository extends AreaRepository AreaRepository.php:13
The finders are omnibase/office's (findActive(), findOneActiveBySlug(), findForMember()).
AreaRepository::__construct()
public function __construct(ManagerRegistry $registry)AttorneyRepository class
class AttorneyRepository extends ServiceEntityRepository AttorneyRepository.php:11
AttorneyRepository::__construct()
public function __construct(ManagerRegistry $registry)AttorneyRepository::findOneByMember()
public function findOneByMember(?Member $member): ?AttorneyAttorneyRepository::findVisible()
public function findVisible(): array- Returns
those the site shows
Base\Lawyer\Security
OfficeAudience class
final class OfficeAudience implements AudienceResolverInterface OfficeAudience.php:24
Professional secrecy within the firm, as the tool applies it to a client's documents, beyond the client and whoever sent the document (the voter's own business):
- the lawyers see and read it;
- the secretariat and the rest of the staff see that it exists and what it is called, and read only what is not marked confidential;
- nobody else: neither another client, nor the site's administrators as such.
Only its sender withdraws a document.
OfficeAudience::__construct()
public function __construct(readonly RoleHierarchyInterface $roles, readonly string $lawyerRole = 'ROLE_LAWYER', readonly string $staffRole = 'ROLE_STAFF')OfficeAudience::decide()
public function decide(string $attribute, Document $document, UserInterface $user): ?boolBase\Lawyer\Service
Domains class
class Domains Domains.php:15
The site's domain names and how each reads against RIN art. 10.5: those of the configuration (lawyer.domains), else the host of the router's default address; the names they may carry are the firm's denomination and the lawyers'.
Domains::__construct()
public function __construct(readonly Record $record, readonly AttorneyRepository $attorneys, readonly array $domains = [], readonly ?string $defaultUri = null)Domains::all()
public function all(): arrayDomains::names()
public function names(): array- Returns
the firm's denomination and its lawyers' names
Domains::verdicts()
public function verdicts(): array- Returns
domain => DomainName verdict
Record class
class Record Record.php:14
What only the firm knows and the back office's settings keep: its denomination, its structure of practice, its bar, its network, the day the site was declared to the conseil de l'Ordre, how its fees are set.
Read without ever failing a page: a settings table not there yet answers nothing.
const FIRM = 'lawyer.firm.name'const STRUCTURE = 'lawyer.firm.structure'const BAR = 'lawyer.firm.bar'const NETWORK = 'lawyer.firm.network'const DECLARED_AT = 'lawyer.order.declared_at'const FEES = 'lawyer.fees.terms'const FIRST_MEETING = 'lawyer.fees.first_meeting'const LEGAL_AID = 'lawyer.fees.legal_aid'
Record::__construct()
public function __construct(readonly SettingBagInterface $settings)Record::get()
public function get(string $path): ?stringRecord::getFirm()
public function getFirm(): ?stringRecord::getStructure()
public function getStructure(): ?stringRecord::getBar()
public function getBar(): ?stringRecord::getNetwork()
public function getNetwork(): ?stringRecord::getFees()
public function getFees(): ?stringRecord::getFirstMeeting()
public function getFirstMeeting(): ?stringRecord::getLegalAid()
public function getLegalAid(): ?stringRecord::getDeclaredAt()
public function getDeclaredAt(): ?\DateTimeImmutableThe day the site was declared to the conseil de l'Ordre, when what was typed is a date.
Base\Lawyer\Twig
LawyerExtension class
class LawyerExtension extends AbstractExtension LawyerExtension.php:22
The regime in templates: lawyer_record() (the firm, its bar, its fees as typed in the settings), lawyer_attorney(member) (bar, oath, certified specialisations, dominant fields), lawyer_areas(member|null), lawyer_mediator(), lawyer_payment() (the hook for paying fees online), lawyer_rules_url().
LawyerExtension::__construct()
public function __construct(readonly Record $record, readonly AreaRepository $areas, readonly AttorneyRepository $attorneys, readonly FeePayment $payment, readonly array $mediator = [], readonly ?string $rulesUrl = null)LawyerExtension::getFunctions()
public function getFunctions(): array