'position' => 14,
'category' => FieldsCategories::ADH_CATEGORY_CONTACT
),
+ 'region_adh' => array(
+ 'label' => _T("Region:"),
+ 'propname' => 'region',
+ 'required' => false,
+ 'visible' => FieldsConfig::USER_WRITE,
+ 'position' => 15,
+ 'category' => FieldsCategories::ADH_CATEGORY_CONTACT
+ ),
'pays_adh' => array(
'label' => _T("Country:"),
'propname' => 'country',
'required' => false,
'visible' => FieldsConfig::USER_WRITE,
- 'position' => 15,
+ 'position' => 16,
'category' => FieldsCategories::ADH_CATEGORY_CONTACT
),
'tel_adh' => array(
'propname' => 'phone',
'required' => false,
'visible' => FieldsConfig::USER_WRITE,
- 'position' => 16,
+ 'position' => 17,
'category' => FieldsCategories::ADH_CATEGORY_CONTACT
),
'gsm_adh' => array(
'propname' => 'gsm',
'required' => false,
'visible' => FieldsConfig::USER_WRITE,
- 'position' => 17,
+ 'position' => 18,
'category' => FieldsCategories::ADH_CATEGORY_CONTACT
),
'email_adh' => array(
'propname' => 'email',
'required' => false,
'visible' => FieldsConfig::USER_WRITE,
- 'position' => 18,
+ 'position' => 19,
'category' => FieldsCategories::ADH_CATEGORY_CONTACT
),
'info_adh' => array(
[AjaxController::class, 'suggestCountries']
)->setName('suggestCountry');
+ $app->post(
+ '/suggest/regions/{term}',
+ [AjaxController::class, 'suggestRegions']
+ )->setName('suggestRegion');
+
$app->get(
'/telemetry/infos',
[AjaxController::class, 'telemetryInfos']
adresse_adh text NOT NULL,
cp_adh varchar(10) NOT NULL default '',
ville_adh varchar(200) NOT NULL default '',
+ region_adh varchar(200) NOT NULL default '',
pays_adh varchar(200) default NULL,
tel_adh varchar(50) default NULL,
gsm_adh varchar(50) default NULL,
adresse_adh text DEFAULT '' NOT NULL,
cp_adh character varying(10) DEFAULT '' NOT NULL,
ville_adh character varying(200) DEFAULT '' NOT NULL,
+ region_adh character varying(200) DEFAULT '' NOT NULL,
pays_adh character varying(200) DEFAULT NULL,
tel_adh character varying(50),
gsm_adh character varying(50),
-- Add amount to payment types
ALTER TABLE galette_types_cotisation ADD amount double NULL;
+-- Add region to members
+ALTER TABLE galette_adherents ADD region_adh varchar(200) NOT NULL DEFAULT '';
-- Add amount to payment types
ALTER TABLE galette_types_cotisation ADD amount real DEFAULT '0';
+-- Add region to members
+ALTER TABLE galette_adherents ADD region_adh character varying(200) DEFAULT '' NOT NULL;
}
} catch (Throwable $e) {
Analog::log(
- 'Something went wrong is towns suggestion: ' . $e->getMessage(),
+ 'Something went wrong in towns suggestion: ' . $e->getMessage(),
Analog::WARNING
);
throw $e;
}
} catch (Throwable $e) {
Analog::log(
- 'Something went wrong is countries suggestion: ' . $e->getMessage(),
+ 'Something went wrong in countries suggestion: ' . $e->getMessage(),
+ Analog::WARNING
+ );
+ throw $e;
+ }
+
+ return $this->withJson($response, $ret);
+ }
+
+ /**
+ * Ajax regions suggestion
+ *
+ * @param Request $request PSR Request
+ * @param Response $response PSR Response
+ * @param string $term Search term
+ *
+ * @return Response
+ */
+ public function suggestRegions(Request $request, Response $response, string $term): Response
+ {
+ $ret = [];
+
+ try {
+ $select = $this->zdb->select(Adherent::TABLE);
+ $select->columns(['region_adh']);
+ $select->where->like('region_adh', '%' . html_entity_decode($term) . '%');
+ $select->limit(10);
+ $select->order(['region_adh ASC']);
+
+ $regions = $this->zdb->execute($select);
+
+ $ret['success'] = true;
+ $ret['results'] = [];
+ foreach ($regions as $region) {
+ $ret['results'][] = [
+ 'title' => $region->region_adh
+ ];
+ }
+ } catch (Throwable $e) {
+ Analog::log(
+ 'Something went wrong in regions suggestion: ' . $e->getMessage(),
Analog::WARNING
);
throw $e;
* @property string $pref_adresse Address
* @property string $pref_adresse2 Address continuation
* @property string $pref_cp Association zipcode
- * @property string $pref_ville Association town
+ * @property string $pref_ville Association
+ * @property string $pref_region Region
* @property string $pref_pays Country
* @property integer $pref_postal_adress Postal adress to use, one of self::POSTAL_ADDRESS*
* @property integer $pref_postal_staff_member Staff member ID from which retrieve postal address
'pref_adresse2' => '',
'pref_cp' => '',
'pref_ville' => '',
+ 'pref_region' => '',
'pref_pays' => '',
'pref_postal_adress' => self::POSTAL_ADDRESS_FROM_PREFS,
'pref_postal_staff_member' => '',
* @property Social $social Social networks/Contact
* @property string $number Member number
* @property-read bool $self_adh
+ * @property string $region
*/
class Adherent
{
/** @var array<int,Social> */
private array $_socials;
private ?string $_number = null;
+ private ?string $_region = null;
private string $_row_classes;
{% if entry.field_id == 'id_statut' %}
{% set template = "status.html.twig" %}
{% endif %}
- {% if entry.field_id == 'ville_adh' or entry.field_id == 'lieu_naissance' or entry.field_id == 'pays_adh' %}
+ {% if entry.field_id == 'ville_adh' or entry.field_id == 'lieu_naissance' or entry.field_id == 'pays_adh' or entry.field_id == 'region_adh' %}
{% set template = "search.html.twig" %}
{% endif %}
},
minCharacters : 2
});
+ $('#region_adh_field').search({
+ apiSettings: {
+ url: '{{ url_for('suggestRegion', {'term': '{query}'}) }}',
+ method: 'post',
+ onFailure: function(response, element, xhr) {
+ console.log(response);
+ },
+ onError: function(errorMessage, element, xhr) {
+ {% include "elements/js/modal.js.twig" with {
+ modal_title_twig: _T("An error occurred :(")|e("js"),
+ modal_content: "errorMessage",
+ modal_class: "tiny",
+ modal_content_class: "scrolling",
+ modal_deny_only: true,
+ modal_cancel_text: _T("Close")|e("js"),
+ modal_classname: "redalert",
+ } %}
+ console.log(xhr);
+ }
+ },
+ minCharacters : 2
+ });
{% endif %}
{% include "elements/js/calendar.js.twig" %}
<label for="pref_ville">{{ _T("City:") }}</label>
<input type="text" name="pref_ville" id="pref_ville" value="{{ pref.pref_ville }}" maxlength="100"/>
</div>
+ <div class="field">
+ <label for="pref_region">{{ _T("Region:") }}</label>
+ <input type="text" name="pref_region" id=pref_region" value="{{ pref.pref_region }}" maxlength="100"/>
+ </div>
<div class="field">
<label for="pref_pays">{{ _T("Country:") }}</label>
<input type="text" name="pref_pays" id="pref_pays" value="{{ pref.pref_pays }}" maxlength="50"/>
$this->assertCount(3, $categorized);
$this->assertCount(13, $categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY]);
$this->assertCount(11, $categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_GALETTE]);
- $this->assertCount(10, $categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT]);
+ $this->assertCount(11, $categorized[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT]);
}
/**
$this->assertInstanceOf('\stdClass', $elements[1]);
$this->assertSame(3, $elements[1]->id);
- $this->assertCount(8, $elements[1]->elements);
+ $this->assertCount(9, $elements[1]->elements);
$this->assertInstanceOf('\stdClass', $elements[2]);
$this->assertSame(2, $elements[2]->id);
$this->assertInstanceOf('\stdClass', $elements[1]);
$this->assertSame(3, $elements[1]->id);
- $this->assertCount(8, $elements[1]->elements);
+ $this->assertCount(9, $elements[1]->elements);
$this->assertInstanceOf('\stdClass', $elements[2]);
$this->assertSame(2, $elements[2]->id);
$this->assertInstanceOf('\stdClass', $elements['fieldsets'][1]);
$this->assertSame(3, $elements['fieldsets'][1]->id);
- $this->assertCount(8, $elements['fieldsets'][1]->elements);
+ $this->assertCount(9, $elements['fieldsets'][1]->elements);
$this->assertInstanceOf('\stdClass', $elements['fieldsets'][2]);
$this->assertSame(2, $elements['fieldsets'][2]->id);
$this->assertInstanceOf('\stdClass', $elements['fieldsets'][1]);
$this->assertSame(3, $elements['fieldsets'][1]->id);
- $this->assertCount(8, $elements['fieldsets'][1]->elements);
+ $this->assertCount(9, $elements['fieldsets'][1]->elements);
$mail = $elements['fieldsets'][1]->elements['email_adh'];
$this->assertFalse($mail->required); //email is not required per default
$this->assertInstanceOf('\stdClass', $elements['fieldsets'][1]);
$this->assertSame(3, $elements['fieldsets'][1]->id);
- $this->assertCount(8, $elements['fieldsets'][1]->elements);
+ $this->assertCount(9, $elements['fieldsets'][1]->elements);
$mail = $elements['fieldsets'][1]->elements['email_adh'];
$this->assertTrue($mail->required); //email is required for self subscription
$town['visible'] = \Galette\Entity\FieldsConfig::NOBODY;
//gsm
- $gsm = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT][5]; //6 in FieldsConfig but 5 here.
+ $gsm = $fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT][6]; //5 in FieldsConfig but 6 here.
$gsm['position'] = count($fields[1]);
- unset($fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT][5]); //6 in FieldsConfig but 5 here.
+ unset($fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_CONTACT][6]); //5 in FieldsConfig but 6 here.
$gsm['category'] = \Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY;
$fields[\Galette\Entity\FieldsCategories::ADH_CATEGORY_IDENTITY][] = $gsm;