$smarty->assign('require_tree', null);
$smarty->assign('html_editor', null);
$smarty->assign('require_charts', null);
+ $smarty->assign('require_mass', null);
if ($c->login->isAdmin() && $c->preferences->pref_telemetry_date) {
$now = new \DateTime();
$sent = new \DateTime($c->preferences->pref_telemetry_date);
'doAdminTools' => 'superadmin',
'telemetryInfos' => 'admin',
'telemetrySend' => 'admin',
- 'setRegistered' => 'admin'
+ 'setRegistered' => 'admin',
+ 'masschangeMembers' => 'groupmanager',
+ 'massstoremembers' => 'groupmanager',
+ 'masschangeMembersReview' => 'groupmanager'
];
foreach ($c['plugins']->getModules() as $plugin) {
'page_title' => _T("Members management"),
'require_dialog' => true,
'require_calendar' => true,
+ 'require_mass' => true,
'members' => $members_list,
'filter_groups_options' => $groups_list,
'nb_members' => $members->getCount(),
->withHeader('Location', $this->router->pathFor('removeMembers'));
}
+ if (isset($post['masschange'])) {
+ return $response
+ ->withStatus(301)
+ ->withHeader('Location', $this->router->pathFor('masschangeMembers'));
+ }
} else {
$this->flash->addMessage(
'error_detected',
}
}
)->setName('getDynamicFile')->add($authenticate);
+
+$app->get(
+ __('/members', 'routes') . __('/mass-change', 'routes'),
+ function ($request, $response) {
+ $filters = $this->session->filter_members;
+
+ $data = [
+ 'id' => $filters->selected,
+ 'redirect_uri' => $this->router->pathFor('members')
+ ];
+
+ $fc = $this->fields_config;
+ $form_elements = $fc->getMassiveFormElements($this->members_fields, $this->login);
+
+ //dynamic fields
+ $deps = array(
+ 'picture' => false,
+ 'groups' => false,
+ 'dues' => false,
+ 'parent' => false,
+ 'children' => false,
+ 'dynamics' => false
+ );
+ $member = new Adherent($this->zdb, null, $deps);
+
+ //Status
+ $statuts = new Status($this->zdb);
+
+ // display page
+ $this->view->render(
+ $response,
+ 'mass_change_members.tpl',
+ array(
+ 'mode' => $request->isXhr() ? 'ajax' : '',
+ 'page_title' => str_replace(
+ '%count',
+ count($data['id']),
+ _T('Mass change %count members')
+ ),
+ 'form_url' => $this->router->pathFor('masschangeMembersReview'),
+ 'cancel_uri' => $this->router->pathFor('members'),
+ 'data' => $data,
+ 'member' => $member,
+ 'fieldsets' => $form_elements['fieldsets'],
+ 'titles_list' => Titles::getList($this->zdb),
+ 'statuts' => $statuts->getList(),
+ 'require_mass' => true
+ )
+ );
+ return $response;
+ }
+)->setName('masschangeMembers')->add($authenticate);
+
+$app->post(
+ __('/members', 'routes') . __('/mass-change', 'routes') . __('/validate', 'routes'),
+ function ($request, $response) {
+ $post = $request->getParsedBody();
+
+ if (!isset($post['confirm'])) {
+ $this->flash->addMessage(
+ 'error_detected',
+ _T("Mass changes has not been confirmed!")
+ );
+ } else {
+ //we want only visibles fields
+ $fc = $this->fields_config;
+ $form_elements = $fc->getMassiveFormElements($this->members_fields, $this->login);
+
+ $changes = [];
+ foreach ($form_elements['fieldsets'] as $form_element) {
+ foreach ($form_element->elements as $field) {
+ if (isset($post[$field->field_id]) && isset($post['mass_' . $field->field_id])) {
+ $changes[$field->field_id] = [
+ 'label' => $field->label,
+ 'value' => $post[$field->field_id]
+ ];
+ }
+ }
+ }
+ }
+
+ $filters = $this->session->filter_members;
+ $data = [
+ 'id' => $filters->selected,
+ 'redirect_uri' => $this->router->pathFor('members')
+ ];
+
+ //Status
+ $statuts = new Status($this->zdb);
+
+ // display page
+ $this->view->render(
+ $response,
+ 'mass_change_members.tpl',
+ array(
+ 'mode' => $request->isXhr() ? 'ajax' : '',
+ 'page_title' => str_replace(
+ '%count',
+ count($data['id']),
+ _T('Review mass change %count members')
+ ),
+ 'form_url' => $this->router->pathFor('massstoremembers'),
+ 'cancel_uri' => $this->router->pathFor('members'),
+ 'data' => $data,
+ 'titles_list' => Titles::getList($this->zdb),
+ 'statuts' => $statuts->getList(),
+ 'changes' => $changes
+ )
+ );
+ return $response;
+ }
+)->setName('masschangeMembersReview')->add($authenticate);
+
+$app->post(
+ __('/members', 'routes') . __('/mass-change', 'routes'),
+ function ($request, $response, $args) {
+ $post = $request->getParsedBody();
+ $redirect_url = $post['redirect_uri'];
+ $error_detected = [];
+ $mass = 0;
+
+ unset($post['redirect_uri']);
+ if (!isset($post['confirm'])) {
+ $error_detected[] = _T("Mass changes has not been confirmed!");
+ } else {
+ unset($post['confirm']);
+ $ids = $post['id'];
+ unset($post['id']);
+
+ $fc = $this->fields_config;
+ $form_elements = $fc->getMassiveFormElements($this->members_fields, $this->login);
+ $disabled = $this->members_fields;
+ foreach (array_keys($post) as $key) {
+ $found = false;
+ foreach ($form_elements['fieldsets'] as $fieldset) {
+ if (isset($fieldset->elements[$key])) {
+ $found = true;
+ continue;
+ }
+ }
+ if (!$found) {
+ Analog::log(
+ 'Permission issue mass editing field ' . $key,
+ Analog::WARNING
+ );
+ unset($post[$key]);
+ } else {
+ unset($disabled[$key]);
+ }
+ }
+
+ if (!count($post)) {
+ $error_detected[] = _T("Nothing to do!");
+ } else {
+ $is_manager = !$this->login->isAdmin() && !$this->login->isStaff() && $this->login->isGroupManager();
+ foreach ($ids as $id) {
+ $deps = array(
+ 'picture' => false,
+ 'groups' => $is_manager,
+ 'dues' => false,
+ 'parent' => false,
+ 'children' => false,
+ 'dynamics' => false
+ );
+ $member = new Adherent($this->zdb, (int)$id, $deps);
+ $member->setDependencies(
+ $this->preferences,
+ $this->members_fields,
+ $this->history
+ );
+
+ if ($is_manager) {
+ $groups = $member->groups;
+ $is_managed = false;
+ foreach ($groups as $g) {
+ if ($this->login->isGroupManager($g->getId())) {
+ $is_managed = true;
+ break;
+ }
+ }
+ if (!$is_managed) {
+ Analog::log(
+ 'Trying to edit member #' . $id . ' without appropriate ACLs',
+ Analog::WARNING
+ );
+ $error_detected[] = _T('No permission to edit member');
+ continue;
+ }
+ }
+
+ $valid = $member->check($post, [], $disabled);
+ if ($valid === true) {
+ $done = $member->store();
+ if (!$done) {
+ $error_detected[] = _T("An error occured while storing the member.");
+ } else {
+ ++$mass;
+ }
+ } else {
+ $error_detected = array_merge($error_detected, $valid);
+ }
+
+ }
+ }
+ }
+
+ if ($mass == 0 && !count($error_detected)) {
+ $error_detected[] = _T('Something went wront during mass edition!');
+ } else {
+ $this->flash->addMessage(
+ 'success_detected',
+ str_replace(
+ '%count',
+ $mass,
+ _T('%count members has been changed successfully!')
+ )
+ );
+ }
+
+ if (count($error_detected) > 0) {
+ foreach ($error_detected as $error) {
+ $this->flash->addMessage(
+ 'error_detected',
+ $error
+ );
+ }
+ }
+
+ if (!$request->isXhr()) {
+ return $response
+ ->withStatus(301)
+ ->withHeader('Location', $redirect_url);
+ } else {
+ return $response->withJson(
+ [
+ 'success' => count($error_detected) === 0
+ ]
+ );
+ }
+ }
+)->setName('massstoremembers')->add($authenticate);
)
);
}
+
+ /**
+ * Get fields for massive changes
+ * @see FieldsConfig::getFormElements
+ *
+ * @param array $fields Member fields
+ * @param Login $login Login instance
+ *
+ * @return array
+ */
+ public function getMassiveFormElements(array $fields, Login $login)
+ {
+ $visibles = $this->getVisibilities();
+ $access_level = $login->getAccessLevel();
+
+ //remove not searchable fields
+ unset($fields['mdp_adh']);
+
+ foreach ($fields as $k => $f) {
+ if ($visibles[$k] == FieldsConfig::NOBODY ||
+ ($visibles[$k] == FieldsConfig::ADMIN &&
+ $access_level < Authentication::ACCESS_ADMIN) ||
+ ($visibles[$k] == FieldsConfig::STAFF &&
+ $access_level < Authentication::ACCESS_STAFF) ||
+ ($visibles[$k] == FieldsConfig::MANAGER &&
+ $access_level < Authentication::ACCESS_MANAGER)
+ ) {
+ unset($fields[$k]);
+ }
+ }
+
+ $mass_fields = [
+ 'titre_adh',
+ 'sexe_adh',
+ 'pref_lang',
+ 'cp_adh',
+ 'ville_adh',
+ 'pays_adh',
+ 'bool_display_info',
+ 'activite_adh',
+ Status::PK,
+ 'bool_admin_adh',
+ 'bool_exempt_adh',
+ ];
+ $mass_fields = array_intersect(array_keys($fields), $mass_fields);
+
+ foreach ($mass_fields as $mass_field) {
+ $this->setNotRequired($mass_field);
+ }
+ $form_elements = $this->getFormElements($login, false);
+ unset($form_elements['hiddens']);
+
+ foreach ($form_elements['fieldsets'] as &$form_element) {
+ $form_element->elements = array_intersect_key($form_element->elements, array_flip($mass_fields));
+ }
+ return $form_elements;
+ }
}
--- /dev/null
+ {foreach item=fieldset from=$fieldsets}
+ <fieldset class="galette_form">
+ <legend>{$fieldset->label}</legend>
+ <div>
+ {if !$self_adh and $fieldset@first && !isset($masschange)}
+ {include file="forms_types/picture.tpl"}
+ {/if}
+ {foreach item=entry from=$fieldset->elements}
+ {if $entry->field_id neq 'adresse2_adh'}
+ {assign var="template" value="text.tpl"}
+ {assign var="title" value=null}
+ {assign var="tip" value=null}
+ {assign var="size" value=null}
+ {assign var="propname" value=$entry->propname}
+ {assign var="value" value=null}
+ {assign var="checked" value=null}
+ {assign var="example" value=null}
+
+ {if $entry->type eq constant('Galette\Entity\FieldsConfig::TYPE_BOOL')}
+ {assign var="template" value="checkbox.tpl"}
+ {assign var="value" value="1"}
+ {/if}
+ {if $entry->field_id eq 'titre_adh'}
+ {assign var="template" value="titles.tpl"}
+ {assign var="value" value=$member->title}
+ {/if}
+ {if $entry->field_id eq 'pref_lang'}
+ {assign var="template" value="lang.tpl"}
+ {/if}
+ {if $entry->field_id eq 'sexe_adh'}
+ {assign var="template" value="gender.tpl"}
+ {/if}
+ {if $entry->field_id eq 'societe_adh'}
+ {assign var="template" value="company.tpl"}
+ {/if}
+ {if $entry->field_id|strpos:'date_' === 0 or $entry->field_id eq 'ddn_adh'}
+ {assign var="template" value="date.tpl"}
+ {/if}
+ {if $entry->field_id eq 'adresse_adh'}
+ {assign var="template" value="address.tpl"}
+ {/if}
+ {if $entry->field_id eq 'mdp_adh'}
+ {if !$self_adh}
+ {assign var="template" value="password.tpl"}
+ {else}
+ {assign var="template" value="captcha.tpl"}
+ {/if}
+ {/if}
+ {if $entry->field_id eq 'info_adh'
+ or $entry->field_id eq 'info_public_adh'}
+ {assign var="template" value="textarea.tpl"}
+ {if $entry->field_id eq 'info_adh'}
+ {assign var="example" value={_T string="This comment is only displayed for admins and staff members."}}
+ {else}
+ {if $login->isAdmin() or $login->isStaff()}
+ {assign var="example" value={_T string="This comment is reserved to the member."}}
+ {/if}
+ {/if}
+ {/if}
+ {if $entry->field_id eq 'activite_adh'}
+ {assign var="template" value="account.tpl"}
+ {/if}
+ {if $entry->field_id eq 'id_statut'}
+ {assign var="template" value="status.tpl"}
+ {/if}
+
+ {if $entry->field_id eq 'gpgid'}
+ {assign var="size" value="8"}
+ {/if}
+ {if $entry->field_id eq 'email_adh'
+ or $entry->field_id eq 'msn_adh'
+ or $entry->field_id eq 'jabber_adh'
+ or $entry->field_id eq 'url_adh'}
+ {assign var="size" value="30"}
+ {/if}
+ {if $entry->field_id eq 'fingerprint'}
+ {assign var="size" value="40"}
+ {/if}
+ {if $entry->field_id eq 'bool_display_info'}
+ {assign var="title" value={_T string="Do member want to appear publically?"}}
+ {assign var="tip" value={_T string="If you check this box (and if you are up to date with your contributions), your full name, website address ad other informations will be publically visible on the members list.<br/>If you've uploaded a photo, it will be displayed on the trombinoscope page.<br/>Note that administrators can disabled public pages, this setting will have no effect in that case."}}
+ {assign var="checked" value=$member->appearsInMembersList()}
+ {/if}
+ {if $entry->field_id eq 'login_adh'}
+ {assign var="example" value={_T string="(at least %i characters)" pattern="/%i/" replace=2}}
+ {/if}
+
+ {if $entry->field_id eq 'bool_admin_adh'}
+ {assign var="checked" value=$member->isAdmin()}
+ {/if}
+ {if $entry->field_id eq 'bool_exempt_adh'}
+ {assign var="checked" value=$member->isDueFree()}
+ {/if}
+ {if $entry->field_id eq 'parent_id'}
+ {assign var="value" value=$member->parent->id}
+ {/if}
+
+ {* If value has not been set, take the generic value *}
+ {if !$value}
+ {assign var="value" value=$member->$propname}
+ {/if}
+
+ {if !isset($masschange)}
+ {assign var="masschange" value=false}
+ {/if}
+
+ {include
+ file="forms_types/$template"
+ name=$entry->field_id
+ id=$entry->field_id
+ value=$value
+ required=$entry->required
+ readonly=$entry->readonly
+ disabled=$entry->disabled
+ label=$entry->label
+ title=$title
+ size=$size
+ tip=$tip
+ compile_id="input_{$entry->field_id}"
+ checked=$checked
+ masschange=$masschange
+ }
+ {/if}
+ {/foreach}
+ {if isset($groups) and $groups|@count != 0 and $fieldset@last and !isset($masschange)}
+ {include file="forms_types/groups.tpl"}
+ {/if}
+ </div>
+ </fieldset>
+ {/foreach}
{block name="component"}
<p class="radios">
{block name="label"}
- <span class="bline">{$label}</span>
+ <span class="bline">
+ {if $masschange}
+ {* Add a checkbox for fields to change on mass edition *}
+ <input type="checkbox" name="mass_{$entry->field_id}" class="mass_checkbox"/>
+ {/if}
+ {$label}
+ </span>
{/block}
{block name="element"}
{/if}
{block name="label"}
<label for="{$id}"{if isset($title)} title="{$title}"{/if}{if isset($tip) or isset($labelclass)} class="{if isset($tip)}tooltip{/if} {if isset($labelclass)}{$labelclass}{/if}"{/if}>
+ {if $masschange}
+ {* Add a checkbox for fields to change on mass edition *}
+ <input type="checkbox" name="mass_{$entry->field_id}" class="mass_checkbox"/>
+ {/if}
{$label}
</label>
{/block}
<li>{_T string="For the selection:"}</li>
{if $login->isAdmin() or $login->isStaff()}
<li><input type="submit" id="delete" name="delete" value="{_T string="Delete"}"/></li>
+ <li><input type="submit" id="masschange" class="button" name="masschange" value="{_T string="Mass change"}"/></li>
{if $pref_mail_method neq constant('Galette\Core\GaletteMail::METHOD_DISABLED')}
<li><input type="submit" id="sendmail" name="mailing" value="{_T string="Mail"}"/></li>
{/if}
{include file="js_removal.tpl"}
{include file="js_removal.tpl" selector="#delete" deleteurl="'{path_for name="batch-memberslist"}'" extra_check="if (!_checkselection()) {ldelim}return false;{rdelim}" extra_data="delete: true, member_sel: $('#listform input[type=\"checkbox\"]:checked').map(function(){ return $(this).val(); }).get()" method="POST"}
+ var _bindmassres = function(res) {
+ res.find('#btncancel')
+ .button()
+ .on('click', function(e) {
+ e.preventDefault();
+ res.dialog('close');
+ });
+
+ res.find('input[type=submit]')
+ .button();
+ }
+
+ $('#masschange').off('click').on('click', function(event) {
+ event.preventDefault();
+ var _this = $(this);
+
+ if (!_checkselection()) {
+ return false;
+ }
+ $.ajax({
+ url: '{path_for name="batch-memberslist"}',
+ type: "POST",
+ data: {
+ ajax: true,
+ masschange: true,
+ member_sel: $('#listform input[type=\"checkbox\"]:checked').map(function(){
+ return $(this).val();
+ }).get()
+ },
+ datatype: 'json',
+ {include file="js_loader.tpl"},
+ success: function(res){
+ var _res = $(res);
+ _bindmassres(_res);
+
+ _res.find('form').on('submit', function(e) {
+ e.preventDefault();
+ var _form = $(this);
+ var _data = _form.serialize();
+ $.ajax({
+ url: _form.attr('action'),
+ type: "POST",
+ data: _data,
+ datatype: 'json',
+ {include file="js_loader.tpl"},
+ success: function(html) {
+ var _html = $(html);
+ _bindmassres(_html);
+
+ $('#mass_change').remove();
+ $('body').append(_html);
+
+ _initTooltips('#mass_change');
+ //_massCheckboxes('#mass_change');
+
+ _html.dialog({
+ width: 'auto',
+ modal: true,
+ close: function(event, ui){
+ $(this).dialog('destroy').remove()
+ }
+ });
+
+ _html.find('form').on('submit', function(e) {
+ e.preventDefault();
+ var _form = $(this);
+ var _data = _form.serialize();
+ $.ajax({
+ url: _form.attr('action'),
+ type: "POST",
+ data: _data,
+ datatype: 'json',
+ {include file="js_loader.tpl"},
+ success: function(res) {
+ if (res.success) {
+ window.location.href = _form.find('input[name=redirect_uri]').val();
+ } else {
+ $.ajax({
+ url: '{path_for name="ajaxMessages"}',
+ method: "GET",
+ success: function (message) {
+ $('#asso_name').after(message);
+ }
+ });
+ }
+ }
+ });
+ });
+ },
+ error: function() {
+ alert("{_T string="An error occured :(" escape="js"}");
+ }
+ });
+ });
+
+ $('body').append(_res);
+
+ _initTooltips('#mass_change');
+ _massCheckboxes('#mass_change');
+
+ _res.dialog({
+ width: 'auto',
+ modal: true,
+ close: function(event, ui){
+ $(this).dialog('destroy').remove()
+ }
+ });
+ },
+ error: function() {
+ alert("{_T string="An error occured :(" escape="js"}");
+ }
+ });
+ });
+
var _attendance_sheet_details = function(){
var _selecteds = [];
$('table.listing').find('input[type=checkbox]:checked').each(function(){
--- /dev/null
+{if $mode eq 'ajax'}
+ {assign var="extend" value='ajax.tpl'}
+{else}
+ {assign var="extend" value='page.tpl'}
+{/if}
+{extends file=$extend}
+{block name="content"}
+ <div id="mass_change"{if $mode neq 'ajax'} class="center"{else} title="{$page_title}"{/if}>
+ <form action="{$form_url}" method="post">
+ {if $mode neq 'ajax'}<h2>{$page_title}</h2>{/if}
+ {if !isset($changes)}
+ <p>{_T string="Only checked fields will be updated."}</p>
+ {else}
+ <p>{_T string="You are about to proceed following changes for selected members:"}</p>
+ <ul>
+ {foreach $changes as $field => $change}
+ {assign var="display_value" value=$change.value}
+ {if $field eq 'id_statut'}
+ {assign var="display_value" value=$statuts[$display_value]}
+ {/if}
+ {if $field eq 'titre_adh'}
+ {assign var="display_value" value=$titles_list[$display_value]->long}
+ {/if}
+ {if $field eq 'sexe_adh'}
+ {if $display_value eq {Galette\Entity\Adherent::NC}}
+ {assign var="display_value" value={_T string="Unspecified"}}
+ {/if}
+ {if $display_value eq {Galette\Entity\Adherent::WOMAN}}
+ {assign var="display_value" value={_T string="Woman"}}
+ {/if}
+ {if $display_value eq {Galette\Entity\Adherent::MAN}}
+ {assign var="display_value" value={_T string="Man"}}
+ {/if}
+ {/if}
+ <li>
+ <input type="hidden" name="{$field}" value="{$change.value}"/>
+ {$change.label} {$display_value}
+ </li>
+ {/foreach}
+ </ul>
+ {/if}
+ <div class="button-container">
+ {if !isset($changes)}
+ {* Form entries*}
+ {include file="forms_types.tpl" masschange=true}
+ {/if}
+ <input type="submit" id="masschange" class="button" value="{if !isset($changes)}{_T string="Edit"}{else}{_T string="OK"}{/if}"/>
+ <a href="{$cancel_uri}" class="button" id="btncancel">{_T string="Cancel"}</a>
+ <input type="hidden" name="confirm" value="1"/>
+ {if $mode eq 'ajax'}<input type="hidden" name="ajax" value="true"/>{/if}
+ {foreach $data as $key=>$value}
+ {if is_array($value)}
+ {foreach $value as $val}
+ <input type="hidden" name="{$key}[]" value="{$val}"/>
+ {/foreach}
+ {else}
+ <input type="hidden" name="{$key}" value="{$value}"/>
+ {/if}
+ {/foreach}
+ </div>
+ </form>
+ </div>
+{/block}
{/if}
</div>
{/if}
- {foreach item=fieldset from=$fieldsets}
- <fieldset class="galette_form">
- <legend>{$fieldset->label}</legend>
- <div>
- {if !$self_adh and $fieldset@first}
- {include file="forms_types/picture.tpl"}
- {/if}
- {foreach item=entry from=$fieldset->elements}
- {if $entry->field_id neq 'adresse2_adh'}
- {assign var="template" value="text.tpl"}
- {assign var="title" value=null}
- {assign var="tip" value=null}
- {assign var="size" value=null}
- {assign var="propname" value=$entry->propname}
- {assign var="value" value=null}
- {assign var="checked" value=null}
- {assign var="example" value=null}
-
- {if $entry->type eq constant('Galette\Entity\FieldsConfig::TYPE_BOOL')}
- {assign var="template" value="checkbox.tpl"}
- {assign var="value" value="1"}
- {/if}
- {if $entry->field_id eq 'titre_adh'}
- {assign var="template" value="titles.tpl"}
- {assign var="value" value=$member->title}
- {/if}
- {if $entry->field_id eq 'pref_lang'}
- {assign var="template" value="lang.tpl"}
- {/if}
- {if $entry->field_id eq 'sexe_adh'}
- {assign var="template" value="gender.tpl"}
- {/if}
- {if $entry->field_id eq 'societe_adh'}
- {assign var="template" value="company.tpl"}
- {/if}
- {if $entry->field_id|strpos:'date_' === 0 or $entry->field_id eq 'ddn_adh'}
- {assign var="template" value="date.tpl"}
- {/if}
- {if $entry->field_id eq 'adresse_adh'}
- {assign var="template" value="address.tpl"}
- {/if}
- {if $entry->field_id eq 'mdp_adh'}
- {if !$self_adh}
- {assign var="template" value="password.tpl"}
- {else}
- {assign var="template" value="captcha.tpl"}
- {/if}
- {/if}
- {if $entry->field_id eq 'info_adh'
- or $entry->field_id eq 'info_public_adh'}
- {assign var="template" value="textarea.tpl"}
- {if $entry->field_id eq 'info_adh'}
- {assign var="example" value={_T string="This comment is only displayed for admins and staff members."}}
- {else}
- {if $login->isAdmin() or $login->isStaff()}
- {assign var="example" value={_T string="This comment is reserved to the member."}}
- {/if}
- {/if}
- {/if}
- {if $entry->field_id eq 'activite_adh'}
- {assign var="template" value="account.tpl"}
- {/if}
- {if $entry->field_id eq 'id_statut'}
- {assign var="template" value="status.tpl"}
- {/if}
-
- {if $entry->field_id eq 'gpgid'}
- {assign var="size" value="8"}
- {/if}
- {if $entry->field_id eq 'email_adh'
- or $entry->field_id eq 'msn_adh'
- or $entry->field_id eq 'jabber_adh'
- or $entry->field_id eq 'url_adh'}
- {assign var="size" value="30"}
- {/if}
- {if $entry->field_id eq 'fingerprint'}
- {assign var="size" value="40"}
- {/if}
- {if $entry->field_id eq 'bool_display_info'}
- {assign var="title" value={_T string="Do member want to appear publically?"}}
- {assign var="tip" value={_T string="If you check this box (and if you are up to date with your contributions), your full name, website address ad other informations will be publically visible on the members list.<br/>If you've uploaded a photo, it will be displayed on the trombinoscope page.<br/>Note that administrators can disabled public pages, this setting will have no effect in that case."}}
- {assign var="checked" value=$member->appearsInMembersList()}
- {/if}
- {if $entry->field_id eq 'login_adh'}
- {assign var="example" value={_T string="(at least %i characters)" pattern="/%i/" replace=2}}
- {/if}
-
- {if $entry->field_id eq 'bool_admin_adh'}
- {assign var="checked" value=$member->isAdmin()}
- {/if}
- {if $entry->field_id eq 'bool_exempt_adh'}
- {assign var="checked" value=$member->isDueFree()}
- {/if}
- {if $entry->field_id eq 'parent_id'}
- {assign var="value" value=$member->parent->id}
- {/if}
-
- {* If value has not been set, take the generic value *}
- {if !$value}
- {assign var="value" value=$member->$propname}
- {/if}
-
- {include
- file="forms_types/$template"
- name=$entry->field_id
- id=$entry->field_id
- value=$value
- required=$entry->required
- readonly=$entry->readonly
- disabled=$entry->disabled
- label=$entry->label
- title=$title
- size=$size
- tip=$tip
- compile_id="input_{$entry->field_id}"
- checked=$checked
- }
- {/if}
- {/foreach}
- {if isset($groups) and $groups|@count != 0 and $fieldset@last}
- {include file="forms_types/groups.tpl"}
- {/if}
- </div>
- </fieldset>
- {/foreach}
+ {* Main form entries*}
+ {include file="forms_types.tpl"}
+ {* Dynamic entries *}
{include file="edit_dynamic_fields.tpl" object=$member}
+
{if $pref_mail_method neq constant('Galette\Core\GaletteMail::METHOD_DISABLED') and (!$self_adh and ($login->isAdmin() or $login->isStaff()))}
<p>
<label for="mail_confirm">
});
</script>
{/if}
+{if $require_mass}
+ <script type="text/javascript" src="{base_url}/{$scripts_dir}mass_changes.js"></script>
+{/if}
{* If some additionnals headers should be added from plugins, we load the relevant template file
We have to use a template file, so Smarty will do its work (like replacing variables). *}
{if $headers|@count != 0}
--- /dev/null
+var _massCheckboxes = function(selector) {
+ if (typeof(selector) == 'undefined') {
+ selector = '';
+ } else {
+ selector = selector + ' ';
+ }
+
+ $(selector + 'select, ' + selector + 'textarea, ' + selector + 'input:not(.mass_checkbox)')
+ .off().on('change', function() {
+ $(this).parent().find('.mass_checkbox').prop('checked', true);
+ });
+}
+
+$(function() {
+ _massCheckboxes('#mass_change');
+});
background-image:url(images/icon-trash.png), url("jquery-ui/images/ui-bg_glass_75_ffb619_1x400.png");
}
+#masschange {
+ background-image: url(images/icon-edit.png), url("jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png");
+}
+#masschange.ui-state-hover {
+ background-image:url(images/icon-edit.png), url("jquery-ui/images/ui-bg_glass_75_ffb619_1x400.png");
+}
+
+
#subscribe {
background-image:url(images/subscribe.png), url("jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png");
}