Aller au contenu

omnibase/lawyer Référence de l’API

Étage
Structure préparée · Omnibase
Version
main
Vérifié en réel
Son README ne le dit pas
Licence
MIT
composer require omnibase/lawyer:dev-main

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é.

Base\Lawyer

  • LawyerBundle class

    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.

    3 methods

Base\Lawyer\Admin\Settings

  • LawyerSettingsSection class

    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.

    3 methods

Base\Lawyer\Compliance

  • DomainNameCheck class

    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).

    2 methods

  • FeesInformationCheck class

    « 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

  • IdentificationCheck class

    « 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

  • MediatorCheck class

    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.

    2 methods

  • OrderDeclarationCheck class

    « 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

  • PaymentScopeCheck class

    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.

    2 methods

  • SpecialisationCheck class

    Specialisations, as RIN art. 10.2 has them:

    2 methods

  • WordingCheck class

    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.

    2 methods

Base\Lawyer\Controller\Admin

  • DeclarationController class

    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.

    1 method

Base\Lawyer\Controller\Admin\Crud

  • AreaCrudController class

    The fields of practice as the site shows them.

    5 methods

  • AttorneyCrudController class

    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).

    4 methods

Base\Lawyer\Controller\Client

  • LawyerController class

    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.

    5 methods

  • RequestController class

    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.

    1 method

  • SpaceController class

    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.

    1 method

Base\Lawyer\Demo

  • LawyerDemoAccounts class

    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.

    1 method · 3 constants

Base\Lawyer\DependencyInjection

Base\Lawyer\Entity

  • Area class

    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).

    6 methods

  • Attorney class

    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).

    19 methods · 1 constant

Base\Lawyer\Enum

  • Specialisation enum

    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.

    2 methods · 1 constant · 28 cases

Base\Lawyer\Form

  • AppointmentRequestType class

    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.

    1 method

Base\Lawyer\Form\Model

Base\Lawyer\Guard

  • DomainName class

    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. »

    1 method · 5 constants

  • SpecialistWords class

    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 ». »

    2 methods

  • Wording class

    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).

    3 methods · 1 constant

Base\Lawyer\Payment

  • FeePayment class

    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).

    5 methods · 1 constant

Base\Lawyer\Repository

Base\Lawyer\Security

  • OfficeAudience class

    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):

    2 methods

Base\Lawyer\Service

  • Domains class

    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'.

    4 methods

  • Record class

    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.

    10 methods · 8 constants

Base\Lawyer\Twig

  • LawyerExtension class

    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().

    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(): string

Modern layout: the class lives in src/, the bundle root is the package root.

LawyerBundle::build()

public function build(ContainerBuilder $container): void

Base\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(): string

LawyerSettingsSection::getFields()

public function getFields(): array

Base\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(): ComplianceResult

FeesInformationCheck 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(): ComplianceResult

IdentificationCheck 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(): ComplianceResult

MediatorCheck 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(): ComplianceResult

OrderDeclarationCheck 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(): ComplianceResult

PaymentScopeCheck 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(): ComplianceResult

SpecialisationCheck 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(): ComplianceResult

WordingCheck 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(): ComplianceResult

Base\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): Response

Base\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(): string

AreaCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

AreaCrudController::configureCrud()

public function configureCrud(Crud $crud): Crud

AreaCrudController::configureActions()

public function configureActions(Actions $actions): Actions

AreaCrudController::configureFields()

public function configureFields(string $pageName): iterable

AttorneyCrudController 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(): string

AttorneyCrudController::getPreferredIcon()

public static function getPreferredIcon(): ?string

AttorneyCrudController::configureActions()

public function configureActions(Actions $actions): Actions

AttorneyCrudController::configureFields()

public function configureFields(string $pageName): iterable

Base\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): Response

LawyerController::area()

public function area(string $slug, AreaRepository $areas): Response

LawyerController::fees()

public function fees(FeePayment $payment, MemberRepository $members, AppointmentTypeRepository $types): Response

LawyerController::mediation()

public function mediation(): Response

RequestController 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): Response

SpaceController 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): Response

Base\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(): iterable

Base\Lawyer\DependencyInjection

LawyerConfiguration class

class LawyerConfiguration extends AbstractBaseConfiguration LawyerConfiguration.php:8

LawyerConfiguration::getConfigTreeBuilder()

public function getConfigTreeBuilder(): TreeBuilder

LawyerExtension class

class LawyerExtension extends AbstractBaseExtension implements PrependExtensionInterface LawyerExtension.php:12

LawyerExtension::getConfiguration()

public function getConfiguration(array $config, ContainerBuilder $container): LawyerConfiguration

LawyerExtension::prepend()

public function prepend(ContainerBuilder $container): void

The 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): void

Base\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(): array

Area::setMatters()

public function setMatters(?array $matters): self

Area::getMattersText()

public function getMattersText(): string

The matters, one a line: what the back office's form edits.

Area::setMattersText()

public function setMattersText(?string $text): self

Area::getItems()

public function getItems(): array

What omnibase/office's Area calls the list.

Area::setItems()

public function setItems(?array $items): static

Attorney 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 = 3

RIN 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(): string

Attorney::getId()

public function getId(): ?int

Attorney::getMember()

public function getMember(): ?Member

Attorney::setMember()

public function setMember(?Member $member): self

Attorney::getBar()

public function getBar(): ?string

Attorney::setBar()

public function setBar(?string $bar): self

Attorney::getSwornIn()

public function getSwornIn(): ?int

Attorney::setSwornIn()

public function setSwornIn(?int $year): self

Attorney::getQualification()

public function getQualification(): ?string

Attorney::setQualification()

public function setQualification(?string $qualification): self

Attorney::getSpecialisations()

public function getSpecialisations(): array
Returns

only what the official list knows

Attorney::getSpecialisationValues()

public function getSpecialisationValues(): array

Attorney::setSpecialisationValues()

public function setSpecialisationValues(?array $values): self

Anything outside the official list is dropped: a specialisation is a certificate, not a wish.

Attorney::isSpecialist()

public function isSpecialist(): bool

Attorney::getDominantFields()

public function getDominantFields(): array

Attorney::setDominantFields()

public function setDominantFields(?array $fields): self

Attorney::getDominantFieldsText()

public function getDominantFieldsText(): string

One a line: what the back office's form edits.

Attorney::setDominantFieldsText()

public function setDominantFieldsText(?string $text): self

Base\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 SOCIAL_SECURITY = 'securite-sociale-protection-sociale'
case COMPANIES = 'societes'
case SPORT = 'sport'
case TRANSPORT = 'transports'
case LABOUR = 'travail'
const MAX = 2

An avocat holds and uses two mentions at most (Conseil national des barreaux).

Specialisation::label()

public function label(): string

The 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): void

Base\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
$names

the 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): bool

Wording 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
$extra

expressions 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 = []): bool

Wording::plain()

public static function plain(string $text): string

Lowered, 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(): bool

Whether omnibase/marketplace is there to take the payment.

FeePayment::isEnabled()

public function isEnabled(): bool

FeePayment::isAvailable()

public function isAvailable(): bool

Shown on the fees page only when all three hold.

FeePayment::getRoute()

public function getRoute(): ?string

Base\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): ?Attorney

AttorneyRepository::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): ?bool

Base\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(): array

Domains::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'

Record::__construct()

public function __construct(readonly SettingBagInterface $settings)

Record::get()

public function get(string $path): ?string

Record::getFirm()

public function getFirm(): ?string

Record::getStructure()

public function getStructure(): ?string

Record::getBar()

public function getBar(): ?string

Record::getNetwork()

public function getNetwork(): ?string

Record::getFees()

public function getFees(): ?string

Record::getFirstMeeting()

public function getFirstMeeting(): ?string

Record::getLegalAid()

public function getLegalAid(): ?string

Record::getDeclaredAt()

public function getDeclaredAt(): ?\DateTimeImmutable

The 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