| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- declare(strict_types=1);
- namespace App\Service\Organization;
- use App\Entity\Organization\Organization;
- use App\Enum\Organization\OrganizationIdsEnum;
- use App\Enum\Organization\SettingsProductEnum;
- use App\Service\Utils\UrlBuilder;
- use App\Test\Service\Organization\UtilsTest;
- use Doctrine\Common\Collections\Criteria;
- /**
- * Class OrganizationUtils : service rassemblant des fonctions d'aides pour les questions se rapportant à l'organisation
- * @package App\Service\Resource
- */
- class Utils
- {
- const START_DATE_KEY = 'dateStart';
- const END_DATE_KEY = 'dateEnd';
- /**
- * Test si l'organisation est considérée comme une structure == n'a pas un produit manager
- * @param Organization $organization
- * @return bool
- * @see UtilsTest::testIsStructureTest()
- */
- public function isStructure(Organization $organization): bool{
- return $organization->getSettings()->getProduct() != SettingsProductEnum::MANAGER()
- && $organization->getSettings()->getProduct() != SettingsProductEnum::MANAGER_PREMIUM();
- }
- /**
- * Test si l'organisation est considérée comme un manager == a un produit manager standard
- * @param Organization $organization
- * @return bool
- * @see UtilsTest::testIsManagerTest()
- */
- public function isManager(Organization $organization): bool{
- return $organization->getSettings()->getProduct() == SettingsProductEnum::MANAGER();
- }
- /**
- * Test si l'organisation est la structure 2iOpenservice
- * @param Organization $organization
- * @return bool
- * @see UtilsTest::testIsOrganizationIs2ios()
- */
- public function isOrganizationIs2ios(Organization $organization): bool{
- return $this->isOrganizationIdIs($organization, OrganizationIdsEnum::_2IOS());
- }
- /**
- * Test si l'organisation est la structure CMF
- * @param Organization $organization
- * @return bool
- * @see UtilsTest::testIsOrganizationIsCMF()
- */
- public function isOrganizationIsCMF(Organization $organization): bool{
- return $this->isOrganizationIdIs($organization, OrganizationIdsEnum::CMF());
- }
- /**
- * Test si l'id de l'organisation est celui passé en paramètre (doit faire partit des OrganizationIdsEnum)
- * @param Organization $organization
- * @param OrganizationIdsEnum $organizationIdsEnum
- * @return bool
- */
- private function isOrganizationIdIs(Organization $organization, OrganizationIdsEnum $organizationIdsEnum){
- return $organization->getId() === $organizationIdsEnum->getValue();
- }
- /**
- * Retourne dans quelles année d'activité on se situe aujourd'hui
- * @param Organization $organization
- * @return int
- * @throws \Exception
- * @see UtilsTest::testGetOrganizationCurrentActivityYear()
- */
- public static function getOrganizationCurrentActivityYear(Organization $organization): int{
- $today = new \DateTime();
- $year = intval($today->format('Y'));
- $musicalDate = $organization->getParameters()->getMusicalDate();
- if(empty($musicalDate)) $musicalDate = new \DateTime($year.'-08-31');
- $base_date = new \DateTime($musicalDate->format($year.'-m-d'));
- $dateStart = new \DateTime($year . '-01-01');
- if($today >= $dateStart && $today < $base_date)
- return $year - 1;
- else return $year;
- }
- /**
- * Fonction permettant de récupérer les dates de début et de fin d'activité d'une structure selon une année
- * @param Organization $organization
- * @param int $year
- * @return \DateTime[]
- * @throws \Exception
- * @see UtilsTest::testGetActivityPeriodsSwitchYear()
- */
- public static function getActivityPeriodsSwitchYear(Organization $organization, int $year): array
- {
- $musicalDate = $organization->getParameters()->getMusicalDate();
- if (empty($musicalDate)) {
- $dateStart = new \DateTime($year . "-09-01");
- $dateEnd = new \DateTime(($year + 1) . "-08-31");
- } else {
- $dateStart = new \DateTime($year . "-" . $musicalDate->format('m') . "-" . $musicalDate->format('d'));
- $dateEnd = clone($dateStart);
- $dateEnd->add(new \DateInterval('P1Y'))->sub(new \DateInterval('P1D'));
- }
- return [
- self::START_DATE_KEY => $dateStart->format('Y-m-d'),
- self::END_DATE_KEY => $dateEnd->format('Y-m-d')
- ];
- }
- /**
- * Permet de retrouver quelle sera la date d'activité correspondant à une date précise de l'année
- * @param Organization $organization
- * @param \DateTimeInterface $date
- * @return int
- * @throws \Exception
- * @see UtilsTest::testgetActivityYearSwitchDate()
- */
- public static function getActivityYearSwitchDate(Organization $organization, \DateTimeInterface $date): int
- {
- $year = $date->format('Y');
- $musicalDate = $organization->getParameters()->getMusicalDate();
- if (empty($musicalDate)) {
- $startDate = new \DateTime($year.'-08-31');
- }else{
- $startDate = new \DateTime($musicalDate->format($year.'-m-d'));
- }
- $pivotDate = new \DateTime($year . '-01-01');
- if($date >= $pivotDate && $date < $startDate)
- return (int) ($year - 1);
- else return (int) $year;
- }
- /**
- * Return the active subdomain of an organization as a string, or null
- *
- * @param Organization $organization
- * @return string | null
- */
- public static function getOrganizationActiveSubdomain(Organization $organization): ?string {
- foreach ($organization->getSubdomains() as $subdomain) {
- if ($subdomain->isActive()) {
- return $subdomain->getSubdomain();
- }
- }
- return null;
- }
- /**
- * Get the URL of the current website of the organization
- *
- * @see https://ressources.opentalent.fr/display/SPEC/Preferences#Preferences-Siteinternet
- *
- * @param Organization $organization
- * @return string | null
- */
- public static function getOrganizationWebsite(Organization $organization): ?string {
- $parameters = $organization->getParameters();
- if ($parameters->getDesactivateOpentalentSiteWeb()) {
- if ($parameters->getOtherWebsite()) {
- return UrlBuilder::prependHttps($parameters->getOtherWebsite());
- }
- return null;
- }
- if (!empty($parameters->getCustomDomain())) {
- return UrlBuilder::prependHttps($parameters->getCustomDomain());
- }
- $subdomain = self::getOrganizationActiveSubdomain($organization);
- if (!$subdomain) {
- return null;
- }
- return 'https://' . $subdomain . '.opentalent.fr';
- }
- /**
- * Update the admin username to match the pattern 'admin{subdomain}'
- *
- * @param Organization $organization
- */
- public static function updateAdminUsername(Organization $organization): void {
- $subdomain = self::getOrganizationActiveSubdomain($organization);
- if (!$subdomain) {
- throw new \RuntimeException('Organization has no active subdomain : ' . $organization->getId());
- }
- $criteria = Criteria::create()
- ->andWhere(Criteria::expr()->eq('adminAccess', 1));
- $admin = $organization->getAccesses()->matching($criteria)->first();
- if (!$admin) {
- throw new \RuntimeException('no admin found for organization ' . $organization->getId());
- }
- $admin->getPerson()->setUsername('admin' . $subdomain);
- }
- }
|