cartable.php 14.02 KiB
<?php
require_once 'cartable.civix.php';
// phpcs:disable
use CRM_Cartable_ExtensionUtil as E;
// phpcs:enable
/**
 * Implements hook_civicrm_config().
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config/
function cartable_civicrm_config(&$config) {
  _cartable_civix_civicrm_config($config);
/**
 * Implements hook_civicrm_xmlMenu().
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu
function cartable_civicrm_xmlMenu(&$files) {
  _cartable_civix_civicrm_xmlMenu($files);
/**
 * Implements hook_civicrm_install().
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install
function cartable_civicrm_install() {
  _cartable_civix_civicrm_install();
/**
 * Implements hook_civicrm_postInstall().
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall
function cartable_civicrm_postInstall() {
  _cartable_civix_civicrm_postInstall();
/**
 * Implements hook_civicrm_uninstall().
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall
function cartable_civicrm_uninstall() {
  _cartable_civix_civicrm_uninstall();
/**
 * Implements hook_civicrm_enable().
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable
function cartable_civicrm_enable() {
  _cartable_civix_civicrm_enable();
/**
 * Implements hook_civicrm_disable().
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable
function cartable_civicrm_disable() {
  _cartable_civix_civicrm_disable();
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
/** * Implements hook_civicrm_upgrade(). * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade */ function cartable_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) { return _cartable_civix_civicrm_upgrade($op, $queue); } /** * Implements hook_civicrm_managed(). * * Generate a list of entities to create/deactivate/delete when this module * is installed, disabled, uninstalled. * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed */ function cartable_civicrm_managed(&$entities) { _cartable_civix_civicrm_managed($entities); } /** * Implements hook_civicrm_caseTypes(). * * Add CiviCase types provided by this extension. * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes */ function cartable_civicrm_caseTypes(&$caseTypes) { _cartable_civix_civicrm_caseTypes($caseTypes); } /** * Implements hook_civicrm_angularModules(). * * Add Angular modules provided by this extension. * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules */ function cartable_civicrm_angularModules(&$angularModules) { // Auto-add module files from ./ang/*.ang.php _cartable_civix_civicrm_angularModules($angularModules); } /** * Implements hook_civicrm_alterSettingsFolders(). * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders */ function cartable_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) { _cartable_civix_civicrm_alterSettingsFolders($metaDataFolders); } /** * Implements hook_civicrm_entityTypes(). * * Declare entity types provided by this module. * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes */ function cartable_civicrm_entityTypes(&$entityTypes) { _cartable_civix_civicrm_entityTypes($entityTypes); } /** * Implements hook_civicrm_themes(). */ function cartable_civicrm_themes(&$themes) { _cartable_civix_civicrm_themes($themes); }
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
// --- Functions below this ship commented out. Uncomment as required. --- /** * Implements hook_civicrm_preProcess(). * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_preProcess */ //function cartable_civicrm_preProcess($formName, &$form) { // //} function cartable_civicrm_pageRun( &$page ) { if($page instanceof CRM_Cartable_Page_GenerateMembershipTypes){ CRM_Core_Resources::singleton()->addScriptFile('cartable', 'assets/built/membership-types.js', 110, 'html-header', FALSE); } } /** * Implements hook_civicrm_navigationMenu(). * * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_navigationMenu */ function cartable_civicrm_navigationMenu(&$menu) { _cartable_civix_insert_navigation_menu($menu, 'Administer/CiviMember', [ 'label' => 'Générer des types d’adhésion', 'name' => 'GenerateMembershipTypes', 'url' => 'civicrm/cartable/generate-membership-types', 'permission' => 'access CiviCRM', 'operator' => 'OR', 'separator' => 1, ]); _cartable_civix_navigationMenu($menu); } function cartable_include($path){ $complete_path = __DIR__.'/'.$path; if(file_exists($complete_path)){ include($complete_path); return $complete_path; } return false; } function cartable_civicrm_buildForm($formName, &$form) { header('FormName:'.$formName); $templatePath = realpath(dirname(__FILE__)."/templates"); if ($formName == 'CRM_Contribute_Form_Contribution_Main') { CRM_Core_Resources::singleton()->addScriptFile('cartable', 'vendor/bastienho/jquery-tabs/jquery-tabs.js'); CRM_Core_Resources::singleton()->addScriptFile('cartable', 'assets/built/academies.js'); CRM_Core_Resources::singleton()->addScriptFile('cartable', 'assets/built/membership.js'); CRM_Core_Resources::singleton()->addStyleFile('cartable', 'vendor/bastienho/jquery-tabs/jquery-tabs.css'); CRM_Core_Resources::singleton()->addStyleFile('cartable', 'assets/built/academies.css'); CRM_Core_Resources::singleton()->addStyleFile('cartable', 'assets/built/membership.css'); } if ($formName == 'CRM_Contribute_Form_Contribution_Main' || $formName == 'CRM_Contact_Form_Contact') { CRM_Core_Resources::singleton()->addScriptFile('cartable', 'assets/built/donnees-particulier.js'); } } function cartable_get_values($dataset, $sort=true){ $maybe_file = __DIR__."/inc/values/{$dataset}.php"; if(file_exists($maybe_file)){ $array = include $maybe_file; if($sort){ asort($array, SORT_NATURAL); } return $array; }
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
return []; } function cartable_get_custom_field_id($fieldname, $groupname=null){ $FieldId = civicrm_api3('CustomField', 'getvalue', ['return'=>"id", 'name'=>$fieldname, 'custom_group_id'=>$groupname]); if(!$FieldId){ return false; } return "custom_{$FieldId}"; } function cartable_parse_rates(string $rates_setting){ $Rates = []; if($rates_setting){ $RatesRows = explode("\n", $rates_setting); foreach($RatesRows as $RateRow){ $Rate = explode('|', $RateRow); $Rates[(int) $Rate[0]] = (int) $Rate[1]; } } return $Rates; } function cartable_get_donnees_particuliers_vars(){ $CorpsField = cartable_get_custom_field_id('Corps', 'DonneesParticulier'); $DisciplineField = cartable_get_custom_field_id('Discipline', 'DonneesParticulier'); $AutreDisciplineField = cartable_get_custom_field_id('AutreDiscipline', 'DonneesParticulier'); $StatutField = cartable_get_custom_field_id('Statut', 'DonneesParticulier'); $TypeDePosteField = cartable_get_custom_field_id('TypeDePoste', 'DonneesParticulier'); if(!$CorpsField || !$DisciplineField || !$AutreDisciplineField || !$StatutField || !$TypeDePosteField){ return false; } return [ 'hide_if_not' => [ $CorpsField => [ $StatutField => [ 'titulaire', 'stagiaire', ], ], $TypeDePosteField => [ $StatutField => [ 'cdd', 'cdi', ], ], $DisciplineField => [ $CorpsField => [ 'Certifié·e', 'Agrégé·e', 'PLP', ], $TypeDePosteField => [ 'Enseignant·e', ], ], $AutreDisciplineField => [ $CorpsField => [ 'Autre', ], $TypeDePosteField => [ 'Autre', ], ], ], 'filter_options' => [ $DisciplineField => [ // Corps $CorpsField => [ 'Certifié·e' => cartable_get_values('disciplines-fonctionnaires'),
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
'Agrégé·e' => cartable_get_values('disciplines-fonctionnaires'), 'PLP' => cartable_get_values('disciplines-non-titulaires'), ], // Type de post $TypeDePosteField => [ 'Enseignant·e' => cartable_get_values('disciplines-all'), ], ], ], ]; } function cartable_get_membership_vars($vars){ $membershipRatio = civicrm_api3('Setting', 'getvalue', [ 'return' => "value", 'name' => "cartable_membership_ratio", ]); $membershipRatesSettings = civicrm_api3('Setting', 'getvalue', [ 'return' => "value", 'name' => "cartable_membership_rates", ]); $membershipRates = cartable_parse_rates($membershipRatesSettings); $otherAmountField = null; foreach($vars['priceSet']['fields'] as $amountFieldID=>$amountField){ if($amountField['name'] === 'other_amount'){ $otherAmountField = $amountField; break; } } $variables = [ 'membershipRatio' => $membershipRatio, 'membershipRates' => $membershipRates, 'otherAmountField' => $otherAmountField, 'currency' => [ 'code' => $vars['currency'], 'symbol' => $vars['currencySymbol'], ], ]; if(civicrm_api3('Setting', 'getvalue', [ 'return' => "value", 'name' => "debug_enabled", ])){ $variables['debug'] = [ '_PriceSet' => $vars['priceSet'], '_RatesSettings' => $membershipRatesSettings, '_membershipRatesRows' => $membershipRatesRows, ]; } return $variables; } function cartable_get_indexed_syndicates_and_provinces($vars){ $ProvinceField = cartable_get_custom_field_id('Departements', 'DonneesSyndicat'); $FrequencesPaiementField = cartable_get_custom_field_id('FrequencesPaiement', 'ParametresAdhesion'); $GrilleCotisationField = cartable_get_custom_field_id('GrilleCotisation', 'ParametresAdhesion'); $RatioSupplementaireField = cartable_get_custom_field_id('RatioSupplementaire', 'ParametresAdhesion'); if(!$ProvinceField){ return false; } // First get all needed values $CountryId = civicrm_api3('Country', 'getvalue', ['return'=>"id", 'name'=>"france"]); $Provinces = civicrm_api3('StateProvince', 'get', ['country_id'=>$CountryId, 'options'=>['limit'=>0], 'sequential'=>1]); $Syndicates = civicrm_api3('Contact', 'get', ['return'=>"id,display_name,{$ProvinceField},{$FrequencesPaiementField},{$GrilleCotisationField},{$RatioSupplementaireField}", 'contact_sub_type'=>"SyndicatSUD", 'options'=>['limit'=>-1], 'sequential'=>1 ]); $MembershipTypes = civicrm_api3('MembershipType', 'get', ['options'=>['limit'=>0]]); $membershipFieldID = $vars['membershipFieldID']; $SyndicatesList = [];
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
$IndexedSyndicates = []; $IndexedProvinces = []; $IndexedMembershipTypes = []; $IndexedMembershipFields = []; // Index values per relation foreach($Provinces['values'] as $province){ $IndexedSyndicates[$province['abbreviation']] = []; $IndexedProvinces[$province['id']] = $province['abbreviation']; } foreach($MembershipTypes['values'] as $membershipType){ $IndexedMembershipTypes[$membershipType['member_of_contact_id']] = $membershipType; } foreach($vars['priceSet']['fields'][$membershipFieldID]['options'] as $membershipField){ $IndexedMembershipFields[$membershipField['membership_type_id']] = $membershipField; } // Aggregate syndicates per department, membership types per syndicate foreach($Syndicates['values'] as $syndicate){ if(!isset($syndicate[$ProvinceField]) || empty($syndicate[$ProvinceField])){ continue; } //CIVICRM_QFID_15_price_12 //CIVICRM_QFID_{$membershipFieldOpeionId}_price_{$membershipFieldID} $syndicate['membership_field'] = isset($IndexedMembershipTypes[$syndicate['id']]) ? 'CIVICRM_QFID_'.$IndexedMembershipFields[$IndexedMembershipTypes[$syndicate['id']]['id']]['id'].'_price_'.$IndexedMembershipFields[$IndexedMembershipTypes[$syndicate['id']]['id']]['price_field_id'] : null; $syndicate['Departements'] = $syndicate[$ProvinceField]; $syndicate['PaymentFrequency'] = $syndicate[$FrequencesPaiementField]; $syndicate['MembershipRates'] = cartable_parse_rates($syndicate[$GrilleCotisationField]); $syndicate['membershipRatio'] = $syndicate[$RatioSupplementaireField]; unset($syndicate[$ProvinceField]); unset($syndicate[$FrequencesPaiementField]); unset($syndicate[$GrilleCotisationField]); unset($syndicate[$RatioSupplementaireField]); unset($syndicate['contact_sub_type']); unset($syndicate['contact_is_deleted']); $syndicate_provinces = $syndicate['Departements']; $SyndicatesList[$syndicate['id']] = $syndicate; foreach($syndicate['Departements'] as $province_id){ $IndexedSyndicates[$IndexedProvinces[$province_id]][] = $syndicate['id']; } } $variables = [ 'Syndicates' => $SyndicatesList, 'IndexedSyndicates' => $IndexedSyndicates, 'IndexedProvinces' => $IndexedProvinces, 'IndexedMembershipTypes' => $IndexedMembershipTypes, ]; if(civicrm_api3('Setting', 'getvalue', [ 'return' => "value", 'name' => "debug_enabled", ])){ $variables['debug'] = [ '_Provinces' => $Provinces['values'], '_Syndicates' => $Syndicates['values'], '_MembershipTypes' => $MembershipTypes['values'], '_PriceSet' => $vars['priceSet'], '_MembershipFields' => $vars['priceSet']['fields'][$membershipFieldID], '_Vars' => $vars, ]; } return $variables; }