-
Bastien Ho authored7d64c2ed
<?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;
}