}
if (!defined('GALETTE_TPL_THEME_DIR')) {
- define('GALETTE_TPL_THEME_DIR', GALETTE_ROOT . 'templates/default/');
+ define('GALETTE_TPL_THEME_DIR', GALETTE_ROOT . 'templates/gtwig/'/*'templates/default/'*/);
}
);
$container->set('Slim\Views\Twig', function (ContainerInterface $c) {
+
+ $templates = ['__main__' => GALETTE_TPL_THEME_DIR];
+ foreach ($c->get('plugins')->getModules() as $module_id => $module) {
+ $dir = $module['root'] . '/templates/' . $c->get('preferences')->pref_theme;
+ if (!is_dir($dir)) {
+ continue;
+ }
+ $templates[$module['route']] = $dir;
+ }
+
$view = new \Slim\Views\Twig(
- GALETTE_ROOT . 'templates/gtwig/', //GALETTE_TPL_THEME_DIR //FIXME
+ $templates,
[
'cache' => rtrim(GALETTE_CACHE_DIR, DIRECTORY_SEPARATOR),
- 'debug' => true //FIXME
+ 'debug' => (GALETTE_MODE === \Galette\Core\Galette::MODE_DEV),
+ 'strict_variables' => (GALETTE_MODE == \Galette\Core\Galette::MODE_DEV)
]
);
//End Twig extensions
//Twig functions
- $function = new \Twig\TwigFunction('__', function ($string) {
- return __($string);
+ $function = new \Twig\TwigFunction('__', function ($string, $domain = 'galette') {
+ return __($string, $domain);
+ });
+ $view->getEnvironment()->addFunction($function);
+
+ $function = new \Twig\TwigFunction('_T', function ($string, $domain = 'galette') {
+ return _T($string, $domain);
+ });
+ $view->getEnvironment()->addFunction($function);
+
+ $function = new \Twig\TwigFunction('_Tn', function ($singular, $plural, $count, $domain = 'galette') {
+ return _Tn($singular, $plural, $count, $domain);
});
$view->getEnvironment()->addFunction($function);
- $function = new \Twig\TwigFunction('_T', function ($string) {
- return _T($string);
+ $function = new \Twig\TwigFunction('_Tx', function ($context, $string, $domain = 'galette') {
+ return _Tx($context, $string, $domain);
+ });
+ $view->getEnvironment()->addFunction($function);
+
+ $function = new \Twig\TwigFunction('_Tnx', function ($context, $singular, $plural, $count, $domain = 'galette') {
+ return _Tnx($context, $singular, $plural, $count, $domain);
});
$view->getEnvironment()->addFunction($function);
//End Twig functions
//Twig globals
- //$smarty->assign('flash', $c->get('flash'));
+ $view->getEnvironment()->addGlobal('flash', $c->get('flash'));
$view->getEnvironment()->addGlobal('login', $c->get('login'));
$view->getEnvironment()->addGlobal('logo', $c->get('logo'));
+
//$smarty->assign('tpl', $smarty);
//$smarty->assign('headers', $c->get('plugins')->getTplHeaders());
- //$smarty->assign('plugin_actions', $c->get('plugins')->getTplAdhActions());
- /*$smarty->assign(
+ $view->getEnvironment()->addGlobal('plugin_actions', $c->get('plugins')->getTplAdhActions());
+ $view->getEnvironment()->addGlobal(
'plugin_batch_actions',
$c->get('plugins')->getTplAdhBatchActions()
- );*/
- /*$smarty->assign(
+ );
+ $view->getEnvironment()->addGlobal(
'plugin_detailled_actions',
$c->get('plugins')->getTplAdhDetailledActions()
- );*/
+ );
//$smarty->assign('scripts_dir', 'js/');
//$smarty->assign('jquery_dir', 'js/jquery/');
//$smarty->assign('jquery_markitup_version', JQUERY_MARKITUP_VERSION);
$view->getEnvironment()->addGlobal('galette_lang_name', $c->get('i18n')->getName());
$view->getEnvironment()->addGlobal('languages', $c->get('i18n')->getList());
$view->getEnvironment()->addGlobal('i18n', $c->get('i18n'));
- //$smarty->assign('plugins', $c->get('plugins'));
+ $view->getEnvironment()->addGlobal('plugins', $c->get('plugins'));
$view->getEnvironment()->addGlobal('preferences', $c->get('preferences'));
/*
$smarty->assign('pref_slogan', $c->get('preferences')->pref_slogan);
'pref_editor_enabled',
$c->get('preferences')->pref_editor_enabled
);
- $smarty->assign('pref_mail_method', $c->get('preferences')->pref_mail_method);
- $smarty->assign('existing_mailing', $c->get('session')->mailing !== null);
- $smarty->assign('contentcls', null);
- $smarty->assign('additionnal_html_class', null);
+ $smarty->assign('pref_mail_method', $c->get('preferences')->pref_mail_method);*/
+ $view->getEnvironment()->addGlobal('existing_mailing', $c->get('session')->mailing !== null);
+ /*$smarty->assign('contentcls', null);
$smarty->assign('error_detected', null);
$smarty->assign('warning_detected', null);
- $smarty->assign('success_detected', null);
- $smarty->assign('html_editor', null);
- $smarty->assign('require_charts', null);
- $smarty->assign('require_mass', null);
- $smarty->assign('autocomplete', null);
- if ($c->get('login')->isAdmin() && $c->get('preferences')->pref_telemetry_date) {
+ $smarty->assign('success_detected', null);*/
+ $view->getEnvironment()->addGlobal('html_editor', false);
+ $view->getEnvironment()->addGlobal('require_charts', false);
+ $view->getEnvironment()->addGlobal('require_mass', false);
+ $view->getEnvironment()->addGlobal('autocomplete', false);
+ /*if ($c->get('login')->isAdmin() && $c->get('preferences')->pref_telemetry_date) {
$now = new \DateTime();
$sent = new \DateTime($c->get('preferences')->pref_telemetry_date);
$sent->add(new \DateInterval('P1Y')); // ask to resend telemetry after one year
}
}
- foreach ($c->get('plugins')->getModules() as $module_id => $module) {
- $smarty->addTemplateDir(
- $module['root'] . '/templates/' . $c->get('preferences')->pref_theme,
- $module['route']
- );
- }
*/
//End Twig globals
*
* PHP version 5
*
- * Copyright © 2019-2021 The Galette Team
+ * Copyright © 2019-2022 The Galette Team
*
* This file is part of Galette (http://galette.tuxfamily.org).
*
* @package Galette
*
* @author Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2019-2021 The Galette Team
+ * @copyright 2019-2022 The Galette Team
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
* @link http://galette.tuxfamily.org
* @since Available since 0.9.4dev - 2019-12-02
* @name GaletteController
* @package Galette
* @author Johan Cwiklinski <johan@x-tnd.be>
- * @copyright 2019-2021 The Galette Team
+ * @copyright 2019-2022 The Galette Team
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
* @link http://galette.tuxfamily.org
* @since Available since 0.9.4dev - 2019-12-02
$groups_list = $groups->getList();
//assign pagination variables to the template and add pagination links
- $filters->setSmartyPagination($this->router, $this->view->getSmarty(), false);
- $filters->setViewCommonsFilters($this->preferences, $this->view->getSmarty());
+ $filters->setSmartyPagination($this->router, $this->view, false);
+ $filters->setViewCommonsFilters($this->preferences, $this->view);
$this->session->filter_members = $filters;
// display page
$this->view->render(
$response,
- 'gestion_adherents.tpl',
+ 'pages/members_list.html.twig',
array(
'page_title' => _T("Members management"),
'require_mass' => true,
);
$ptlist = $ptypes->getList();
- $filters->setViewCommonsFilters($this->preferences, $this->view->getSmarty());
+ $filters->setViewCommonsFilters($this->preferences, $this->view);
$social = new Social($this->zdb);
$types = $member->getMemberRegisteredTypes();
// display page
$this->view->render(
$response,
- 'advanced_search.tpl',
+ 'pages/advanced_search.html.twig',
array(
'page_title' => _T("Advanced search"),
'filter_groups_options' => $groups_list,
// display page
$this->view->render(
$response,
- 'mass_change_members.tpl',
+ 'modals/mass_change_members.html.twig',
array(
'mode' => $request->isXhr() ? 'ajax' : '',
'page_title' => str_replace(
// display page
$this->view->render(
$response,
- 'mass_change_members.tpl',
+ 'modals/mass_change_members.html.twig',
array(
'mode' => $request->isXhr() ? 'ajax' : '',
'page_title' => str_replace(
namespace Galette\Core;
+use Slim\Router;
use Slim\Slim;
use Analog\Analog;
use Laminas\Db\Sql\Select;
}
/**
- * Creates pagination links and assign some usefull variables to the
- * Smarty template
+ * Creates pagination links and assign some useful variables to the template
*
* @param Router $router Application instance
- * @param Smarty $view View instance
+ * @param mixed $view View instance
* @param boolean $restricted Do not permit to display all
*
* @return void
*/
- public function setSmartyPagination(\Slim\Router $router, \Smarty $view, $restricted = true)
+ public function setSmartyPagination(Router $router, $view, $restricted = true)
{
$paginate = null;
$this->view = $view;
$options[0] = _T("All");
}
- //Now, we assign common variables to Smarty template
- $view->assign('nb_pages', $this->pages);
- $view->assign('page', $this->current_page);
- $view->assign('numrows', $this->show);
- $view->assign('pagination', $paginate);
- $view->assign('nbshow_options', $options);
+ //Now, we assign common variables to template
+ $view->getEnvironment()->addGlobal('nb_pages', $this->pages);
+ $view->getEnvironment()->addGlobal('page', $this->current_page);
+ $view->getEnvironment()->addGlobal('numrows', $this->show);
+ $view->getEnvironment()->addGlobal('pagination', $paginate);
+ $view->getEnvironment()->addGlobal('nbshow_options', $options);
$this->view = null;
$this->router = null;
'value' => $page
];
- if ($this->view->getTemplateVars('cur_subroute')) {
+ if ($this->view->getEnvironment()->getGlobals()['cur_subroute']) {
$args['type'] = $this->view->getTemplateVars('cur_subroute');
}
$href = $this->router->pathFor(
- $this->view->getTemplateVars('cur_route'),
+ $this->view->getEnvironment()->getGlobals()['cur_route'],
$args
);
return $href;
* @property boolean $pref_bool_groupsmanagers_mailings
* @property boolean $pref_bool_groupsmanagers_exports
* @property-read string $vpref_email_newadh Comma separated list of mail senders
+ * @property-read string $vpref_email Comma separated list of mail senders
*/
class Preferences
{
public function __get($name)
{
$forbidden = array('defaults');
- $virtuals = array('vpref_email_newadh');
+ $virtuals = array('vpref_email', 'vpref_email_newadh');
if (!in_array($name, $forbidden) && isset($this->prefs[$name])) {
if (
}
}
- if (in_array($name, ['pref_email_newadh'])) {
+ if (in_array($name, ['vpref_email', 'pref_email_newadh'])) {
$values = explode(',', $value);
$value = $values[0]; //take first as default
}
public function __isset($name)
{
$forbidden = array('defaults');
- $virtuals = array('vpref_email_newadh');
+ $virtuals = array('vpref_email', 'vpref_email_newadh');
if (!in_array($name, $forbidden) && isset($this->prefs[$name])) {
return true;
* Set commons filters for templates
*
* @param Preferences $prefs Preferences instance
- * @param Smarty $view Smarty template reference
+ * @param mixed $view Template reference
*
* @return void
*/
- public function setViewCommonsFilters($prefs, \Smarty $view)
+ public function setViewCommonsFilters($prefs, $view)
{
$filter_options = array(
Members::FILTER_NAME => _T("Name"),
$filter_options[Members::FILTER_ID] = _T("Member ID");
}
- $view->assign(
+ $view->getEnvironment()->addGlobal(
'field_filter_options',
$filter_options
);
- $view->assign(
+ $view->getEnvironment()->addGlobal(
'membership_filter_options',
array(
Members::MEMBERSHIP_ALL => _T("All members"),
)
);
- $view->assign(
+ $view->getEnvironment()->addGlobal(
'filter_accounts_options',
array(
Members::ALL_ACCOUNTS => _T("All accounts"),
+++ /dev/null
-{extends file="page.tpl"}
-
-{block name="content"}
- <form action="{path_for name="filter-memberslist"}" method="post" id="filtre" class="ui form">
- <div class="galetteform ui styled fluid accordion field">
- <div class="active ui title">
- <i class="dropdown icon"></i>
- {_T string="Simple search"}
- </div>
- <div class="active content">
- <div class="four fields">
- <div class="field">
- <label for="filter_str">{_T string="Search:"}</label>
- <input type="text" name="filter_str" id="filter_str" value="{$filters->filter_str}" type="search" placeholder="{_T string="Enter a value"}"/>
- </div>
- <div class="field">
- <label for="field_filter">{_T string="in:"}</label>
- <select name="field_filter" class="ui search dropdown nochosen">
- {html_options options=$field_filter_options selected=$filters->field_filter}
- </select>
- </div>
- <div class="field">
- <label for="membership_filter">{_T string="Membership status"}</label>
- <select id="membership_filter" name="membership_filter" class="ui search dropdown nochosen">
- {html_options options=$membership_filter_options selected=$filters->membership_filter}
- </select>
- </div>
- <div class="field">
- <label for="filter_account">{_T string="Account activity"}</label>
- <select id="filter_account" name="filter_account" class="ui search dropdown nochosen">
- {html_options options=$filter_accounts_options selected=$filters->filter_account}
- </select>
- </div>
- <div class="field">
- <label for="group_filter">{_T string="Member of group"}</label>
- <select name="group_filter" id="group_filter" class="ui search dropdown nochosen">
- <option value="0">{_T string="Select a group"}</option>
-{foreach from=$filter_groups_options item=group}
- <option value="{$group->getId()}"{if $filters->group_filter eq $group->getId()} selected="selected"{/if}>{$group->getIndentName()}</option>
-{/foreach}
- </select>
- </div>
- </div>
- <div class="inline fields">
- <label for="email_filter">{_T string="With email:"}</label>
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="email_filter" id="filter_dc_email" value="{Galette\Repository\Members::FILTER_DC_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_DC_EMAIL')} checked="checked"{/if}>
- <label for="filter_dc_email">{_T string="Don't care"}</label>
- </div>
- </div>
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="email_filter" id="filter_with_email" value="{Galette\Repository\Members::FILTER_W_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_W_EMAIL')} checked="checked"{/if}>
- <label for="filter_with_email">{_T string="With"}</label>
- </div>
- </div>
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="email_filter" id="filter_without_email" value="{Galette\Repository\Members::FILTER_WO_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_WO_EMAIL')} checked="checked"{/if}>
- <label for="filter_without_email">{_T string="Without"}</label>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="galetteform ui styled fluid accordion field">
- <div class="active ui title">
- <i class="dropdown icon"></i>
- {_T string="Advanced search"}
- </div>
- <div class="active content">
- <div class="two fields">
- <div class="field">
- <label>{_T string="Birth date"}</label>
- <div class="two fields">
- <div class="field">
- <label for="birth_date_begin">{_T string="beetween"}</label>
- <div class="ui calendar" id="birth-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="birth_date_begin" name="birth_date_begin" type="text" class="birth_date" maxlength="10" size="10" value="{$filters->birth_date_begin}" placeholder="{_T string="(yyyy-mm-dd format)"}" />
- </div>
- </div>
- </div>
- <div class="field">
- <label for="birth_date_end">{_T string="and"}</label>
- <div class="ui calendar" id="birth-rangeend">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="birth_date_end" name="birth_date_end" type="text" class="birth_date" maxlength="10" size="10" value="{$filters->birth_date_end}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="field">
- <label>{_T string="Creation date"}</label>
- <div class="two fields">
- <div class="field">
- <label for="creation_date_begin">{_T string="beetween"}</label>
- <div class="ui calendar" id="creation-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="creation_date_begin" name="creation_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->creation_date_begin}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- <div class="field">
- <label for="creation_date_end">{_T string="and"}</label>
- <div class="ui calendar" id="creation-rangeend">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="creation_date_end" name="creation_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->creation_date_end}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="two fields">
- <div class="field">
- <label>{_T string="Modification date"}</label>
- <div class="two fields">
- <div class="field">
- <label for="modif_date_begin">{_T string="beetween"}</label>
- <div class="ui calendar" id="modification-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="modif_date_begin" name="modif_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->modif_date_begin}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- <div class="field">
- <label for="modif_date_end">{_T string="and"}</label>
- <div class="ui calendar" id="modification-rangeend">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="modif_date_end" name="modif_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->modif_date_end}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="field">
- <label>{_T string="Due date"}</label>
- <div class="two fields">
- <div class="field">
- <label for="due_date_begin">{_T string="beetween"}</label>
- <div class="ui calendar" id="due-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="due_date_begin" name="due_date_begin" type="text" class="due_date" maxlength="10" size="10" value="{$filters->due_date_begin}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- <div class="field">
- <label for="due_date_end">{_T string="and"}</label>
- <div class="ui calendar" id="due-rangeend">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="due_date_end" name="due_date_end" type="text" class="due_date" maxlength="10" size="10" value="{$filters->due_date_end}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="two fields">
- <div class="field">
- <div class="grouped fields">
- <label for="show_public_infos">{_T string="Show public infos"}</label>
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="show_public_infos" id="show_public_infos_dc" value="{Galette\Repository\Members::FILTER_DC_PUBINFOS}"{if $filters->show_public_infos eq constant('Galette\Repository\Members::FILTER_DC_PUBINFOS')} checked="checked"{/if}>
- <label for="show_public_infos_dc" >{_T string="Don't care"}</label>
- </div>
- </div>
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="show_public_infos" id="show_public_infos_yes" value="{Galette\Repository\Members::FILTER_W_PUBINFOS}"{if $filters->show_public_infos eq constant('Galette\Repository\Members::FILTER_W_PUBINFOS')} checked="checked"{/if}>
- <label for="show_public_infos_yes" >{_T string="Yes"}</label>
- </div>
- </div>
- <div class="field">
- <div class="ui radio checkbox">
- <input type="radio" name="show_public_infos" id="show_public_infos_no" value="{Galette\Repository\Members::FILTER_WO_PUBINFOS}"{if $filters->show_public_infos eq constant('Galette\Repository\Members::FILTER_WO_PUBINFOS')} checked="checked"{/if}>
- <label for="show_public_infos_no" >{_T string="No"}</label>
- </div>
- </div>
- </div>
- </div>
- <div class="field">
- <label for="status">{_T string="Status"}</label>
- <select name="status[]" id="status" multiple="" class="ui search dropdown nochosen">
- <option value="">{_T string="Status"}</option>
- {html_options options=$statuts selected=$filters->status}
- </select>
- </div>
- </div>
- </div>
- </div>
- <div class="galetteform ui styled fluid accordion field">
- <div class="active ui title">
- <i class="dropdown icon"></i>
- {_T string="Advanced groups search"} ({_T string="Experimental"})
- <a
- href="#"
- id="addbutton_g"
- class="ui tiny compact icon green button tab-button tooltip"
- >
- <i class="plus icon"></i>
- <span class="hidden">{_T string="Add new group search criteria"}</span>
- </a>
- </div>
- <div class="active content">
- <select name="groups_logical_operator" class="operator_selector nochosen">
- <option value="{Galette\Filters\AdvancedMembersList::OP_AND}"{if $filters->groups_search_log_op eq constant('Galette\Filters\AdvancedMembersList::OP_AND')} selected="selected"{/if}>{_T string="In all selected groups"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_OR}"{if $filters->groups_search_log_op eq constant('Galette\Filters\AdvancedMembersList::OP_OR')} selected="selected"{/if}>{_T string="In any of selected groups"}</option>
- </select>
- <ul id="groups_search_list" class="fields_list">
- {foreach from=$filters->groups_search item=gs}
- <li>
- <select name="groups_search[]" class="group_selector nochosen">
- <option value="">{_T string="Select a group"}</option>
- {foreach from=$filter_groups_options item=group}
- <option value="{$group->getId()}"{if $gs.group eq $group->getId()} selected="selected"{/if}>{$group->getName()}</option>
- {/foreach}
- </select>
- <a
- href="#"
- class="ui small compact red icon button fright tooltip delete delcriteria"
- >
- <i class="trash alt icon"></i>
- <span class="sr-only">{_T string="Remove criteria"}</span>
- </a>
- </li>
- {/foreach}
- </ul>
- </div>
- </div>
-
- <div class="galetteform ui styled fluid accordion field">
- <div class="active ui title">
- <i class="dropdown icon"></i>
- {_T string="Within contributions"}
- </div>
- <div class="active content">
- <div class="two fields">
- <div class="field">
- <label>{_T string="Creation date"}</label>
- <div class="two fields">
- <div class="field">
- <label for="contrib_creation_date_begin">{_T string="beetween"}</label>
- <div class="ui calendar" id="contrib-creation-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="contrib_creation_date_begin" name="contrib_creation_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->contrib_creation_date_begin}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- <div class="field">
- <label for="contrib_creation_date_end">{_T string="and"}</label>
- <div class="ui calendar" id="contrib-creation-rangeend">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="contrib_creation_date_end" name="contrib_creation_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->contrib_creation_date_end}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="field">
- <label>{_T string="Begin date"}</label>
- <div class="two fields">
- <div class="field">
- <label for="contrib_begin_date_begin">{_T string="beetween"}</label>
- <div class="ui calendar" id="contrib-begin-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="contrib_begin_date_begin" name="contrib_begin_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->contrib_begin_date_begin}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- <div class="field">
- <label for="contrib_begin_date_end">{_T string="and"}</label>
- <div class="ui calendar" id="contrib-begin-rangeend">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="contrib_begin_date_end" name="contrib_begin_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->contrib_begin_date_end}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="two fields">
- <div class="field">
- <label>{_T string="End date"}</label>
- <div class="two fields">
- <div class="field">
- <label for="contrib_end_date_begin">{_T string="beetween"}</label>
- <div class="ui calendar" id="contrib-end-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="contrib_end_date_begin" name="contrib_end_date_begin" type="text" class="due_date" maxlength="10" size="10" value="{$filters->contrib_end_date_begin}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- <div class="field">
- <label for="contrib_end_date_end">{_T string="and"}</label>
- <div class="ui calendar" id="contrib-end-rangeend">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- <input id="contrib_end_date_end" name="contrib_end_date_end" type="text" class="due_date" maxlength="10" size="10" value="{$filters->contrib_end_date_end}" placeholder="{_T string="(yyyy-mm-dd format)"}"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="field">
- <label>{_T string="Amount"}</label>
- <div class="two fields">
- <div class="field">
- <label for="contrib_min_amount">{_T string="beetween"}</label>
- <input id="contrib_min_amount" name="contrib_min_amount" type="text" maxlength="10" size="10" value="{$filters->contrib_min_amount}"/>
- </div>
- <div class="field">
- <label for="contrib_max_amount">{_T string="and"}</label>
- <input id="contrib_max_amount" name="contrib_max_amount" type="text" maxlength="10" size="10" value="{$filters->contrib_max_amount}"/>
- </div>
- </div>
- </div>
- </div>
- <div class="two fields">
- <div class="field">
- <label for="contributions_types">{_T string="Type"}</label>
- <select name="contributions_types[]" id="contributions_types" multiple="" class="ui dropdown nochosen">
- <option value="">{_T string="Type"}</option>
- {html_options options=$contributions_types selected=$filters->contributions_types}
- </select>
- </div>
- <div class="field">
- <label for="payments_types">{_T string="Payment type"}</label>
- <select name="payments_types[]" id="payments_types" multiple="" class="ui dropdown nochosen">
- <option value="">{_T string="Payment type"}</option>
- {html_options options=$payments_types selected=$filters->payments_types}
- </select>
- </div>
- </div>
-{foreach $contrib_dynamics as $field}
- <div class="field">
- {assign var=fid value=$field->getId()}
- {if $field|is_a:'Galette\DynamicFields\Choice'}
- {assign var=rid value="cdsc_$fid"}
- {else}
- {assign var=rid value="cds_$fid"}
- {/if}
- <label for="cds{if $field|is_a:'Galette\DynamicFields\Choice'}c{/if}_{$field->getId()}">{$field->getName()}</label>
- {if $field|is_a:'Galette\DynamicFields\Line'}
- <input type="text" name="cds_{$field->getId()}" id="cds_{$field->getId()}" value="{if isset($filters->contrib_dynamic.$rid)}{$filters->contrib_dynamic.$rid}{/if}" />
- {elseif $field|is_a:'Galette\DynamicFields\Text'}
- <textarea name="cds_{$field->getId()}" id="cds_{$field->getId()}">{if isset($filters->contrib_dynamic.$rid)}{$filters->contrib_dynamic.$rid}{/if}</textarea>
- {elseif $field|is_a:'Galette\DynamicFields\Choice'}
- <select name="cdsc_{$field->getId()}[]" id="cdsc_{$field->getId()}" multiple="multiple" class="ui dropdown nochosen">
- <option value="">{_T string="Select"}</option>
- {foreach $field->getValues() item=choice key=k}
- <option value="{$k}"{if isset($cds.field) and $cds.field eq $rid} selected="selected"{/if}>{$choice}</option>
- {/foreach}
- </select>
- {/if}
- </div>
-{/foreach}
- </div>
- </div>
- <div class="galetteform ui styled fluid accordion field">
- <div class="active ui title">
- <i class="dropdown icon"></i>
- {_T string="Free search"}
- <a
- href="#"
- id="addbutton"
- class="ui tiny compact icon green button tab-button tooltip"
- >
- <i class="plus icon"></i>
- <span class="hidden">{_T string="Add new free search criteria"}</span>
- </a>
- </div>
- <div class="active content">
- <ul id="fs_sortable" class="fields_list connectedSortable">
-{foreach from=$filters->free_search item=fs}
- <li>
- <select name="free_logical_operator[]" class="operator_selector nochosen">
- <option value="{Galette\Filters\AdvancedMembersList::OP_AND}"{if $fs.log_op eq constant('Galette\Filters\AdvancedMembersList::OP_AND')} selected="selected"{/if}>{_T string="and"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_OR}"{if $fs.log_op eq constant('Galette\Filters\AdvancedMembersList::OP_OR')} selected="selected"{/if}>{_T string="or"}</option>
- </select>
- <select name="free_field[]" class="field_selector nochosen">
- <option value="">{_T string="Select a field"}</option>
- {foreach $search_fields as $field}
- {if $fs.field eq $field@key}
- {if $field@key|strpos:'date_' === 0 or $field@key eq 'ddn_adh'}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::DATE')}
- {else if $field@key === {Galette\Entity\Status::PK}}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::CHOICE')}
- {assign var=fvalues value=$statuts}
- {else if $field@key === 'sexe_adh'}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::CHOICE')}
- {assign var=fvalues value=[Galette\Entity\Adherent::NC => {_T string="Unspecified"}, Galette\Entity\Adherent::MAN => {_T string="Man"}, Galette\Entity\Adherent::WOMAN => {_T string="Woman"}]}
- {else}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::LINE')}
- {/if}
- {/if}
- <option value="{$field@key}"{if $fs.field eq $field@key} selected="selected"{/if}>{$field.label}</option>
- {/foreach}
- {foreach $adh_dynamics as $field}
- {if $field|is_a:'Galette\DynamicFields\Separator'}
- {continue}
- {/if}
- {assign var=fid value=$field->getId()}
- {assign var=rid value="dyn_$fid"}
- {if $fs.field eq $rid}
- {assign var=cur_field value=$field}
- {/if}
- <option value="dyn_{$field->getId()}"{if $fs.field eq $rid} selected="selected"{/if}>{$field->getName()}</option>
- {/foreach}
- {foreach from=$adh_socials item=$label key=$type}
- {assign var=rid value="socials_$type"}
- {if $fs.field eq $rid}
- {assign var=cur_field value=$type}
- {/if}
- <option value="socials_{$type}"{if $fs.field eq $rid} selected="selected"{/if}>{$label}</option>
- {/foreach}
-
- </select>
- {* may not be defined *}
- {if !isset($cur_field)}{assign var=cur_field value=null}{/if}
- {if !isset($type)}{assign var=type value=null}{/if}
- <span class="data">
- <input type="hidden" name="free_type[]" value="{if isset($cur_field)}{$cur_field->getType()}{/if}"/>
- {if $cur_field|is_a:'Galette\DynamicFields\Choice' || $type eq constant('Galette\DynamicFields\DynamicField::CHOICE')}
- <select name="free_query_operator[]" class="free_operator nochosen">
- <option value="{Galette\Filters\AdvancedMembersList::OP_EQUALS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_EQUALS')} selected="selected"{/if}>{_T string="is"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_NOT_EQUALS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_NOT_EQUALS')} selected="selected"{/if}>{_T string="is not"}</option>
- </select>
- <select name="free_text[]" class="free_text nochosen">
- {if $cur_field|is_a:'Galette\DynamicFields\Choice'}
- {html_options options=$cur_field->getValues() selected=$fs.search}
- {else}
- {html_options options=$fvalues selected=$fs.search}
- {/if}
- </select>
- {elseif $cur_field|is_a:'Galette\DynamicFields\Date' || $type == constant('Galette\DynamicFields\DynamicField::DATE')}
- <select name="free_query_operator[]" class="free_operator nochosen">
- <option value="{Galette\Filters\AdvancedMembersList::OP_EQUALS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_EQUALS')} selected="selected"{/if}>{_T string="is"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_BEFORE}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_BEFORE')} selected="selected"{/if}>{_T string="before"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_AFTER}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_AFTER')} selected="selected"{/if}>{_T string="after"}</option>
- </select>
- <input type="text" name="free_text[]" value="{$fs.search|date_format:{_T string="Y-m-d"}}" class="modif_date" maxlength="10" size="10"/>
- <span class="exemple">{_T string="(yyyy-mm-dd format)"}</span>
- {elseif $cur_field|is_a:'Galette\DynamicFields\Boolean' || $type == constant('Galette\DynamicFields\DynamicField::BOOLEAN')}
- <select name="free_query_operator[]" class="free_operator nochosen">
- <option value="{Galette\Filters\AdvancedMembersList::OP_EQUALS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_EQUALS')} selected="selected"{/if}>{_T string="is"}</option>
- </select>
- <input type="radio" name="free_text[]" id="free_text_yes" value="1"{if $fs.search eq 1} checked="checked"{/if}/><label for="free_text_yes">{_T string="Yes"}</label>
- <input type="radio" name="free_text[]" id="free_text_no" value="0"{if $fs.search eq 0} checked="checked"{/if}/><label for="free_text_no">{_T string="No"}</label>
- {else}
- <select name="free_query_operator[]" class="free_operator nochosen">
- <option value="{Galette\Filters\AdvancedMembersList::OP_EQUALS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_EQUALS')} selected="selected"{/if}>{_T string="is"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_CONTAINS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_CONTAINS')} selected="selected"{/if}>{_T string="contains"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_NOT_EQUALS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_NOT_EQUALS')} selected="selected"{/if}>{_T string="is not"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_NOT_CONTAINS}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_NOT_CONTAINS')} selected="selected"{/if}>{_T string="do not contains"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_STARTS_WITH}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_STARTS_WITH')} selected="selected"{/if}>{_T string="starts with"}</option>
- <option value="{Galette\Filters\AdvancedMembersList::OP_ENDS_WITH}"{if $fs.qry_op eq constant('Galette\Filters\AdvancedMembersList::OP_ENDS_WITH')} selected="selected"{/if}>{_T string="ends with"}</option>
- </select>
- <input type="text" name="free_text[]" value="{$fs.search}"{if $cur_field|is_a:'Galette\DynamicFields\Text'} class="large"{/if}/>
- {/if}
- </span>
- <a
- href="#"
- class="ui small compact red icon button fright tooltip delete delcriteria"
- >
- <i class="trash alt icon"></i>
- <span class="sr-only">{_T string="Remove criteria"}</span>
- </a>
- </li>
-{/foreach}
- </ul>
- </div>
- </div>
- <div class="ui basic center aligned segment">
- <input type="submit" class="ui primary button" value="{_T string="Filter"}"/>
- <input type="hidden" name="advanced_filtering" value="true" />
- <input type="submit" name="clear_adv_filter" class="ui button" value="{_T string="Clear filter"}"/>
- {include file="forms_types/csrf.tpl"}
- </div>
- </form>
-{/block}
-
-{block name="javascripts"}
- <script type="text/javascript">
- var _operators = {
- op_equals: { id: {Galette\Filters\AdvancedMembersList::OP_EQUALS}, name: "{_T string='is'}" },
- op_contains: { id: {Galette\Filters\AdvancedMembersList::OP_CONTAINS}, name: "{_T string='contains'}" },
- op_not_equals: { id: {Galette\Filters\AdvancedMembersList::OP_NOT_EQUALS}, name: "{_T string='is not'}" },
- op_not_contains: { id: {Galette\Filters\AdvancedMembersList::OP_NOT_CONTAINS}, name: "{_T string='do not contains'}" },
- op_starts_with: { id: {Galette\Filters\AdvancedMembersList::OP_STARTS_WITH}, name: "{_T string='starts with'}" },
- op_ends_with: { id: {Galette\Filters\AdvancedMembersList::OP_ENDS_WITH}, name: "{_T string='ends with'}" },
- op_before: { id: {Galette\Filters\AdvancedMembersList::OP_BEFORE}, name: "{_T string='before'}" },
- op_after: { id: {Galette\Filters\AdvancedMembersList::OP_AFTER}, name: "{_T string='after'}" },
- };
-
- var _fields = {
-{foreach $search_fields as $field}
- {if $field@key|strpos:'date_' === 0 or $field@key eq 'ddn_adh'}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::DATE')}
- {else if $field@key === {Galette\Entity\Status::PK}}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::CHOICE')}
- {assign var=fvalues value=$statuts}
- {else if $field@key === 'sexe_adh'}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::CHOICE')}
- {assign var=fvalues value=[Galette\Entity\Adherent::NC => {_T string="Unspecified"}, Galette\Entity\Adherent::MAN => {_T string="Man"}, Galette\Entity\Adherent::WOMAN => {_T string="Woman"}]}
- {else}
- {assign var=type value=constant('Galette\DynamicFields\DynamicField::LINE')}
- {/if}
- {$field@key}: { type:'{$type}'{if isset($fvalues)}, values: {$fvalues|@json_encode}{/if} },
-{/foreach}
-{foreach $adh_dynamics as $field}
- {if $field|is_a:'Galette\DynamicFields\Separator'}
- {continue}
- {else if $field|is_a:'Galette\DynamicFields\Choice'}
- dyn_{$field->getId()}: { type:'{$field->getType()}', values: {$field->getValues()|@json_encode} },
- {else}
- dyn_{$field->getId()}: { type:'{$field->getType()}' },
- {/if}
-{/foreach}
- };
-
- var _newFilter = function(elt) {
- elt.find('span').html('');
- elt.find('select.operator_selector').val(0);
- elt.find('select.field_selector').val('');
- }
- var _rmFilter = function(elt) {
- if ( !elt ) {
- elt = $('li');
- }
- elt.find('.delcriteria').click(function(){
- var _this = $(this);
- if ( _this.parents('ul').find('li').length > 1 ) {
- _this.parent('li').remove();
- } else {
- _newFilter(_this.parent('li'));
- }
- return false;
- });
- }
- var _getOperatorSelector = function(list) {
- var _options = '';
- for (var i = 0; i < list.length; i++) {
- var _operator = _operators[list[i]];
- _options += '<option value="' + _operator.id + '">' + _operator.name + '</option>';
- }
- return '<select name="free_query_operator[]" class="free_operator newselectize">' + _options + '</select>';
- }
-
- /*var _datePickers = function() {
- $('.modif_date').datepicker({
- changeMonth: true,
- changeYear: true,
- showOn: 'button',
- maxDate: '-0d',
- yearRange: 'c-10:c+0',
- buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
- });
- $('.due_date').datepicker({
- changeMonth: true,
- changeYear: true,
- showOn: 'button',
- yearRange: 'c-10:c+5',
- buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
- });
- }*/
-
- var _selectize = function(selector) {
- if ( !selector ) {
- selector = '.operator_selector,.field_selector,.free_operator,.free_text,.group_selector';
- }
-
- $(selector).selectize({
- maxItems: 1
- });
- }
-
- var _initFieldSelector = function(parent) {
- if (typeof parent == 'undefined') {
- parent = '';
- }
- $(parent + '.field_selector').change(function () {
- var _field_id = $(this).val();
- var _field = _fields[_field_id];
- var _type = _field.type;
-
- if (!_type) {
- return false;
- }
-
- var _html;
- switch(_type) {
- case '{constant('Galette\DynamicFields\DynamicField::BOOLEAN')}':
- _html = _getOperatorSelector(['op_equals']);
-
- _html += '<input type="radio" name="free_text[]" id="free_text_yes" value="1"{if $fs.search eq 1} checked="checked"{/if}/><label for="free_text_yes">{_T string="Yes"}</label><input type="radio" name="free_text[]" id="free_text_no" value="0"{if $fs.search eq 0} checked="checked"{/if}/><label for="free_text_no">{_T string="No"}</label>';
- break;
- case '{constant('Galette\DynamicFields\DynamicField::CHOICE')}':
- _html = _getOperatorSelector(['op_equals', 'op_not_equals']);
- var _options = '';
- if (Array.isArray(_field.values)) {
- for (var i = 0; i < _field.values.length; i++) {
- _options += '<option value="' + i + '">' + _field.values[i] + '</option>';
- }
- } else {
- for (key in _field.values) {
- _options += '<option value="' + key + '">' + _field.values[key] + '</option>';
- }
- }
- _html += '<select name="free_text[]" class="newselectize">' + _options + '</select>';
- break;
- case '{constant('Galette\DynamicFields\DynamicField::DATE')}':
- _html = _getOperatorSelector(['op_equals', 'op_before', 'op_after']);
- _html += '<input type="text" name="free_text[]" class="modif_date" maxlength="10" size="10"/>';
- _html += '<span class="exemple">{_T string="(yyyy-mm-dd format)"}</span>';
- break;
- default:
- _html = _getOperatorSelector(['op_equals', 'op_contains', 'op_not_equals', 'op_not_contains', 'op_starts_with', 'op_ends_with']);
- _html += '<input type="text" name="free_text[]"';
- if (_type == 'text') {
- _html += ' class="large"';
- }
- _html += '/>';
- break;
-
- }
- _html += '<input type="hidden" name="free_type[]" value="' + _type + '"/>';
- $(this).parent().find('span.data').html(_html);
- _selectize('.newselectize');
- $('.newselectize').removeClass('newselectize');
- //_datePickers();
- _fieldsInSortable();
- });
- _rmFilter();
- }
-
- $(function(){
- _initSortable();
- //_datePickers();
- _selectize();
-
- $('#addbutton_g').click(function(){
- $('.operator_selector,.group_selector').each(function(){ // do this for every select with the 'combobox' class
- if ($(this)[0].selectize) { // requires [0] to select the proper object
- var value = $(this).val(); // store the current value of the select/input
- $(this)[0].selectize.destroy(); // destroys selectize()
- $(this).val(value); // set back the value of the select/input
- }
- });
-
- $('#groups_search_list li:first')
- .clone() // copy
- .insertAfter('#groups_search_list li:last'); // where
- _selectize();
- return false;
- });
-
- $('#addbutton').click(function(){
- $('.operator_selector,.field_selector,.free_operator').each(function(){ // do this for every select with the 'combobox' class
- if ($(this)[0].selectize) { // requires [0] to select the proper object
- var value = $(this).val(); // store the current value of the select/input
- $(this)[0].selectize.destroy(); // destroys selectize()
- $(this).val(value); // set back the value of the select/input
- }
- });
- $('#fs_sortable li:first')
- .clone() // copy
- .insertAfter('#fs_sortable li:last'); // where
- _selectize();
- //_datePickers();
- _fieldsInSortable();
- _initFieldSelector();
- return false;
- });
-
- _initFieldSelector();
-
- /*$('.birth_date').datepicker({
- changeMonth: true,
- changeYear: true,
- showOn: 'button',
- maxDate: '-0d',
- yearRange: '-200:+0',
- buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
- });*/
- });
- </script>
-{/block}
+++ /dev/null
-{if !empty($object->getDynamicFields())}
- {assign var=fields value=$object->getDynamicFields()->getFields()}
- {if !isset($masschange)}
- {assign var="masschange" value=false}
- {/if}
-
- {if !empty($fields)}
-
-{function name=draw_field}
- {assign var=valuedata value=$field_data.field_val|escape}
- {if $field|is_a:'Galette\DynamicFields\File'}
- <label>{$field->getName()|escape}</label>
- {else}
- <label for="info_field_{$field->getId()}_{$loop}">
- {if $masschange}
- {* Add a checkbox for fields to change on mass edition *}
- <input type="checkbox" name="mass_info_field_{$field->getId()}" class="mass_checkbox"/>
- {/if}
- {$field->getName()|escape}
- </label>
- {/if}
- {if $field|is_a:'Galette\DynamicFields\Text'}
- <textarea name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}"
- cols="{if $field->getWidth() > 0}{$field->getWidth()}{else}61{/if}"
- rows="{if $field->getHeight() > 0}{$field->getHeight()}{else}6{/if}"
- {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
- {if !$masschange}
- {if $field->isRequired()} required="required"{/if}
- {/if}
- {if $disabled} disabled="disabled"{/if}>{$valuedata}</textarea>
- {elseif $field|is_a:'Galette\DynamicFields\Line'}
- <input type="text" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}"
- {if $field->getWidth() > 0}size="{$field->getWidth()}"{/if}
- {if $field->getSize() > 0}maxlength="{$field->getSize()}"{/if}
- value="{$valuedata}"
- {if !$masschange}
- {if $field->isRequired()} required="required"{/if}
- {/if}
- {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
- {if $disabled} disabled="disabled"{/if}
- />
- {elseif $field|is_a:'Galette\DynamicFields\Choice'}
- <select name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}"
- {if !$masschange}
- {if $field->isRequired()} required="required"{/if}
- {/if}
- {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
- {if $disabled} disabled="disabled"{/if}
- >
- <!-- If no option is present, page is not XHTML compliant -->
- <option value="">{_T string="Select an option"}</option>
- {html_options options=$field->getValues() selected=$valuedata}
- </select>
- {elseif $field|is_a:'Galette\DynamicFields\Date'}
- <input type="text" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}" maxlength="10"
- value="{$valuedata}" class="dynamic_date modif_date"
- {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
- {if !$masschange}
- {if $field->isRequired()} required="required"{/if}
- {/if}
- {if $disabled} disabled="disabled"{/if}
- />
- <span class="exemple">{_T string="(yyyy-mm-dd format)"}</span>
- {elseif $field|is_a:'Galette\DynamicFields\Boolean'}
- <input type="checkbox" name="info_field_{$field->getId()}_{$loop}" id="info_field_{$field->getId()}_{$loop}" value="1"
- {if $valuedata eq 1} checked="checked"{/if}
- {if $field->isRepeatable()} data-maxrepeat="{$field->getRepeat()}"{/if}
- {if !$masschange}
- {if $field->isRequired()} required="required"{/if}
- {/if}
- {if $disabled} disabled="disabled"{/if}
- />
- {elseif $field|is_a:'Galette\DynamicFields\File'}
- {if $object->id}
- <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_new">{_T string="new"}</label>
- {/if}
- <input
- type="file"
- name="info_field_{$field->getId()}_{$loop}"
- id="info_field_{$field->getId()}_{$loop}_new"
- {if $field->isRequired() and $valuedata eq ''} required="required"{/if}
- {if $disabled} disabled="disabled"{/if}
- />
- {if $object->id}
- <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_current">{_T string="current"}</label>
- <a href="{path_for name="getDynamicFile" data=["id" => $object->id, "fid" => $field->getId(), "pos" => $loop, "name" => $valuedata]}">
- {$valuedata}
- </a>
- - <label class="labelalign" for="info_field_{$field->getId()}_{$loop}_delete">
- {_T string="delete"}
- </label>
- <input
- type="checkbox"
- name="info_field_{$field->getId()}_{$loop}"
- id="info_field_{$field->getId()}_{$loop}_delete"
- onclick="this.form.info_field_{$field->getId()}_{$loop}_new.disabled = this.checked;"
- />
- {/if}
- {/if}
-{/function}
-
-<div class="ui styled fluid accordion field">
- <div class="active title">
- <i class="icon dropdown"></i>
- {_T string="Additionnal fields:"}
- </div>
- <div class="active content field">
- {assign var=access_level value=$login->getAccessLevel()}
- {foreach from=$fields item=field}
- {if $field->getInformation()}
- <div>{$field->getInformation()}</div>
- {/if}
-
- {assign var=perm value=$field->getPerm()}
- {if $field|is_a:'Galette\DynamicFields\Separator'}
- <div class="ui horizontal divider">{$field->getName()|escape}</div>
- {elseif ($field|is_a:'Galette\DynamicFields\File' || $field->isRepeatable()) && $masschange}
- <!-- File and repeatable fields not shown in mass changes form -->
- {else}
- <div class="field{if $field->isRepeatable()} repetable{/if}">
- {assign var=disabled value=false}
- {if $perm eq constant('Galette\DynamicFields\DynamicField::PERM_USER_READ') && $access_level eq constant('Galette\Core\Authentication::ACCESS_USER')}
- {assign var=disabled value=true}
- {/if}
- {assign var=values value=$object->getDynamicFields()->getValues($field->getId())}
- {assign var=can_add value=false}
- {if $field->getRepeat() === 0 || !is_array($values) || $values|@count < $field->getRepeat() || $values|@count === 0}
- {assign var=can_add value=true}
- {/if}
- {foreach from=$values item=field_data}
- {if not $field_data@first}<br/>{/if}
- {draw_field field=$field field_data=$field_data disabled=$disabled loop=$field_data@iteration}
- {/foreach}
- {if !is_array($values) || $values|@count === 0}
- {$field_data = ['field_val' => '']}
- {if (is_array($values))}
- {assign var="current_count" value=$values|@count}
- {else}
- {assign var="current_count" value=0}
- {/if}
- {draw_field field=$field field_data=$field_data disabled=$disabled loop=$current_count + 1}
- {/if}
- </div>
- {if $field->isRepeatable()}
- {if $field->getRepeat() === 0}
- <p class="exemple" id="repeat_msg">{_T string="Enter as many occurences you want."}</p>
- {elseif !is_array($values) || $values|@count < $field->getRepeat() || $values|@count === 0}
- {if (is_array($values))}
- {assign var="current_count" value=$values|@count}
- {else}
- {assign var="current_count" value=1}
- {/if}
- {assign var=remaining value=$field->getRepeat() - $current_count}
- <p class="exemple" id="repeat_msg">{_T string="Enter up to %count more occurences." pattern="/%count/" replace=$remaining}</p>
- {/if}
- {/if}
- {/if}
- {/foreach}
- </div>
-</div>
-<script type="text/javascript">
- {if !$masschange}
- var _addLnk = function(){
- return $('<a class="ui small compact icon green button" href="#"><i class="plus icon" title="{_T string="New occurence"}"></i> <span class="sr-only">{_T string="New occurence"}"</span></a>');
- };
-
- var _lnkEvent = function(_a, _input, _parent) {
- var _vals = _input[0].id.split(/_/);
- var _total = $(_input[0]).data('maxrepeat'); //max number of occurences
- var _current = _vals[_vals.length-1]; //current occurrence
-
- _a.click(function(e) {
- var _new = _input.clone();
-
- var _id = '';
-
- for ( var i = 0 ; i < _vals.length -1 ; i++ ) {
- _id += _vals[i] + '_';
- }
-
- _current = Number(_current) + 1;
- _new.attr('id', _id + _current);
- _new.attr('name', _id + _current);
- _new.val('');
- _a.remove();
- _parent.append('<br/>');
- _parent.append(_new);
- _new.focus();
- if( _total == '0' || _current < _total ) {
- var _b = _addLnk();
- _lnkEvent(_b, _new, _parent);
- _parent.append(_b);
- if (_current < _total) {
- $('#repeat_msg').html('{_T string="Enter up to %count more occurences." pattern="/%count/" replace="COUNT" escape="js"}'.replace(/COUNT/, _total - _current));
- }
- } else if (_current == _total) {
- $('#repeat_msg').remove();
- }
- return false;
- });
- }
- {/if}
-
- $(function(){
- {if !$masschange}
- $('.repetable').each(function(){
- var _total;
- var _current;
- var _parent = $(this);
-
- var _input = $(this).find('input:last');
- if ( _input.length > 0 ) {
- while ( $(this).find('input').length > 1 && _input.val() == '' ) {
- _input.prev('br').remove();
- _input.remove();
- _input = $(this).find('input:last')
- }
- var _vals = _input[0].id.split(/_/);
- var _total = $(_input[0]).data('maxrepeat'); //max number of occurences
- var _current = _vals[_vals.length-1]; //current occurrence
-
- if ( _total == '0' || _current < _total ) {
- var _a = _addLnk();
- $(this).append(_a);
- _lnkEvent(_a, _input, _parent);
- }
- }
- });
- {/if}
- /*$('.dynamic_date').datepicker({
- changeMonth: true,
- changeYear: true,
- showOn: 'button',
- buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
- });*/
- });
-</script>
- {/if}
-{/if}
+++ /dev/null
- {foreach item=fieldset from=$fieldsets}
- <div class="galetteform ui styled fluid accordion field">
- <div class="active title">
- <i class="icon dropdown"></i>
- {_T string=$fieldset->label}
- </div>
- <div class="active content field">
- {if !isset($masschange) && !$self_adh and $fieldset@first}
- {include file="forms_types/picture.tpl"}
- {/if}
- {foreach item=entry from=$fieldset->elements}
- {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'}
- {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 and other information 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 $entry->field_id eq 'activite_adh'}
- {assign var="value" value=$member->isActive()}
- {/if}
-
- {* If value has not been set, take the generic value *}
- {if !$value and $propname != 'password'}
- {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
- }
-
- {/foreach}
- {if isset($groups) and $groups|@count != 0 and $fieldset@last and (!isset($masschange) or $masschange == false)}
- {include file="forms_types/groups.tpl"}
- {/if}
- </div>
- </div>
- {/foreach}
+++ /dev/null
-{extends file="forms_types/select.tpl"}
-
-{block name="element"}
- <select name="activite_adh" id="activite_adh" class="ui dropdown nochosen"{if isset($disabled) and $disabled == true} disabled="disabled"{/if}{if isset($required.activite_adh) and $required.activite_adh eq 1} required="required"{/if}>
- <option value="1" {if $member->isActive() eq 1}selected="selected"{/if}>{_T string="Active"}</option>
- <option value="0" {if $member->isActive() eq 0}selected="selected"{/if}>{_T string="Inactive"}</option>
- </select>
-{/block}
+++ /dev/null
-<div class="grouped fields">
- <div class="field required">
-{include
- file="forms_types/textarea.tpl"
- name=$entry->field_id
- id=$entry->field_id
- value=$member->address|escape
- required=$entry->required
- disabled=$entry->disabled
- label=$entry->label
- notag=true
- elt_class="large"
-}
- </div>
-</div>
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-
-{block name="component"}
- {assign var="required" value=true}
- {assign var="type" value="gaptcha"}
- {assign var="name" value="gaptcha"}
- {assign var="id" value="gaptcha"}
- {assign var="value" value=null}
- {assign var="example" value={_T string="(numbers only)"}}
- {assign var="tip" value={_T string="This field is required trying to avoid registration spam. We are sorry for the inconvennience."}}
- {assign var="component_class" value="field required"}
- {$smarty.block.parent}
-{/block}
-
-{block name="label"}
- {assign var="label" value="Captcha"}
- {$smarty.block.parent}
- {$gaptcha->generateQuestion()}
-{/block}
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-{assign var="inline" value=true}
-
-{block name="component"}
- {assign var="type" value="checkbox"}
- {if isset($masschange) and $masschange == true}
- {assign var="component_class" value="inline field"}
- {else}
- {assign var="component_class" value="field"}
- {/if}
- {$smarty.block.parent}
-{/block}
+++ /dev/null
-<div class="grouped fields">
-{include
- file="forms_types/checkbox.tpl"
- name="is_company"
- id="is_company"
- value="1"
- label={_T string="Is company?"}
- title={_T string="Is member a company?"}
- tip={_T string="Do you manage a non profit organization, or a company? If you do so, check the box, and then enter its name in the field that will appear."}
- checked=$member->isCompany()
- component_class="field"
-}
- <div class="field">
-{include
- file="forms_types/text.tpl"
- name=$entry->field_id
- id=$entry->field_id
- value=$member->company_name
- required=$entry->required
- disabled=$entry->disabled
- label=$entry->label
- component_id="company_field"
- component_class="{if not $member->isCompany()}hidden{/if}"
-}
- </div>
-</div>
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-
-{block name="component"}
- {assign var="type" value="text"}
- {assign var="example" value={_T string="(yyyy-mm-dd format)"}}
- {if $id eq 'ddn_adh'}
- {assign var="example" value={_T string="(yyyy-mm-dd format)"}|cat:"<span id=\"member_age\">{$member->getAge()}</span>"}
- {/if}
- {assign var="component_class" value="field"}
- {$smarty.block.parent}
-{/block}
-
-{block name="element"}
- <div class="ui calendar" id="birth-rangestart">
- <div class="ui input left icon">
- <i class="calendar icon"></i>
- {$smarty.block.parent}
- </div>
- </div>
-{/block}
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-
-{block name="component"}
- <div class="grouped fields">
- {block name="label"}
- <label>
- {if $masschange}
- {* Add a checkbox for fields to change on mass edition *}
- {* FIXME: use SUI capacitie to display that well *}
- <input type="checkbox" name="mass_{$entry->field_id}" class="mass_checkbox"/>
- {/if}
- {$label}
- </label>
- {/block}
-
- {block name="element"}
- <div class="field inline">
- <input type="radio" name="sexe_adh" id="gender_nc" value="{Galette\Entity\Adherent::NC}"{if !$member->isMan() and !$member->isWoman()} checked="checked"{/if}{if isset($disabled) and $disabled == true} disabled="disabled"{/if}/>
- <label for="gender_nc">{_T string="Unspecified"}</label>
- </div>
- <div class="field inline">
- <input type="radio" name="sexe_adh" id="gender_man" value="{Galette\Entity\Adherent::MAN}"{if $member->isMan()} checked="checked"{/if}{if isset($disabled) and $disabled == true} disabled="disabled"{/if}/>
- <label for="gender_man">{_T string="Man"}</label>
- </div>
- <div class="field inline">
- <input type="radio" name="sexe_adh" id="gender_woman" value="{Galette\Entity\Adherent::WOMAN}"{if $member->isWoman()} checked="checked"{/if}{if isset($disabled) and $disabled == true} disabled="disabled"{/if}/>
- <label for="gender_woman">{_T string="Woman"}</label>
- </div>
- {/block}
- </div>
-{/block}
+++ /dev/null
-<div class="field">
- <label>{_T string="Groups:"}</label>
- {if $login->isGroupManager()}
- <a class="ui icon button" id="btngroups">
- <i class="user tag icon" aria-hidden="true"></i>
- {_T string="Manage user's groups"}
- </a>
- {/if}
- {if $login->isAdmin() or $login->isStaff()}
- <a class="ui icon button" id="btnmanagedgroups">
- <i class="user shield icon" aria-hidden="true"></i>
- {_T string="Manage user's managed groups"}
- </a>
- {/if}
- <span id="usergroups_form">
- {if $member->id}
- {foreach from=$groups item=group}
- {if $member->isGroupMember($group->getName())}
- <input type="hidden" name="groups_adh[]" value="{$group->getId()}|{$group->getName()}"/>
- {/if}
- {/foreach}
- {/if}
- </span>
- {if $login->isAdmin() or $login->isStaff() or $login->isGroupManager()}
- <span id="managedgroups_form">
- {if $member->id}
- {foreach from=$groups item=group}
- {if $member->isGroupManager($group->getName())}
- <input type="hidden" name="groups_managed_adh[]" value="{$group->getId()}|{$group->getName()}"/>
- {/if}
- {/foreach}
- {/if}
- </span>
- {/if}
- {if $login->isAdmin() or $login->isStaff() or $login->isGroupManager()}<br/>{/if}
- <span id="usergroups">
- {if $member->id}
- {foreach from=$groups item=group name=groupsiterate}
- {if $member->isGroupMember($group->getName())}
- {if isset($isnotfirst)}, {else}<strong>{_T string="Member of:"}</strong>{/if}
- {assign var=isnotfirst value=true}
- {$group->getName()}
- {/if}
- {/foreach}
- {/if}
- </span>
- {if isset($isnotfirst)}<br/>{/if}
- <span id="managedgroups">
- {if $member->id}
- {foreach from=$groups item=group name=groupsmiterate}
- {if $member->isGroupManager($group->getName())}
- {if isset($isnotfirstm)}, {else}<strong>{_T string="Manager for:"}</strong>{/if}
- {assign var=isnotfirstm value=true}
- {$group->getName()}
- {/if}
- {/foreach}
- {/if}
- </span>
-</div>
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-
-{block name="component"}
- {assign var="type" value="hidden"}
- {assign var="notag" value="true"}
- {assign var="title" value=""}
- {assign var="required" value=""}
- {assign var="disabled" value=""}
- {$smarty.block.parent}
-{/block}
-{block name="label"}{/block}
+++ /dev/null
-{block component}
-{if not isset($notag)}
-<div{if isset($component_id)} id="{$component_id}"{/if}{if isset($component_class)} class="{$component_class}"{/if}>
-{/if}
- {block name="label"}
- <label for="{$id}"{if isset($title)} title="{$title}"{/if}{if isset($tip) or isset($labelclass)} class="{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}
- {block name="element"}<input
- type="{$type}"
- name="{$name}"
- id="{$id}"
- value="{if null !== $value}{$value}{/if}"
- {if isset($required) and $required == true} required="required"{/if}
- {if isset($readonly) and $readonly == true} readonly="readonly"{/if}
- {if isset($disabled) and $disabled == true} disabled="disabled"{/if}
- {if isset($title)} title="{$title}"{/if}
- {if isset($maxlength)} maxlength="{$maxlength}"{/if}
- {if isset($elt_class)} class="{$elt_class}"{/if}
- {if isset($autocomplete)} autocomplete="{$autocomplete}"{/if}
- {if isset($size)} size="{$size}"{/if}
- {if isset($checked) and $checked eq true} checked="checked"{/if}
- />
- {/block}
- {if isset($tip)}<i class="circular inverted primary small icon info tooltip" data-html="{$tip}"></i>{/if}
- {if isset($example)}<span class="exemple">{$example}</span>{/if}
-{if not isset($notag)}
-</div>
-{/if}
-{/block}
+++ /dev/null
-{extends file="forms_types/select.tpl"}
-
-{block name="element"}
- <select name="pref_lang" id="pref_lang" class="ui dropdown nochosen lang"{if isset($disabled) and $disabled == true} disabled="disabled"{/if}{if isset($required.pref_lang) and $required.pref_lang eq 1} required="required"{/if}>
- {foreach item=langue from=$languages}
- <option value="{$langue->getID()}"{if $member->language eq $langue->getID()} selected="selected"{/if}>{$langue->getName()}</option>
- {/foreach}
- </select>
-{/block}
+++ /dev/null
-{include
- file="forms_types/input.tpl"
- type="password"
- name=$entry->field_id
- id=$entry->field_id
- required=$entry->required
- disabled=$entry->disabled
- label=$entry->label
- autocomplete="off"
- value=null
- component_class="field"
-}
-{include
- file="forms_types/input.tpl"
- type="password"
- name="mdp_adh2"
- id="mdp_adh2"
- required=$entry->required
- disabled=$entry->disabled
- label={_T string="Password confirmation:"}
- autocomplete="off"
- elt_class="labelalign"
- value=null
- component_class="field"
-}
-<script type="text/javascript">
- $(function() {
- {% include "elements/js/pwdcheck.html.twig" with { selector: '#' ~ entry.field_id } %}
- });
-</script>
+++ /dev/null
-{if !isset($show_inline)}
-<div class="field">
-{else}
-<div class="field inline">
-{/if}
- <label for="{$varname}">{if isset($label)}{$label}{else}{_T string="Payment type:"}{/if}</label>
- <select name="{$varname}" id="{$varname}" class="ui search dropdown nochosen">
-{if isset($empty)}
- <option value="{$empty.value}">{$empty.label}</option>
-{/if}
-{assign var="ptypes" value=\Galette\Repository\PaymentTypes::getAll()}
-{foreach from=$ptypes item=ptype}
- <option value="{$ptype->id}"{if $current eq $ptype->id} selected="selected"{/if}>{$ptype->getName()}</option>
-{/foreach}
- </select>
-</div>
+++ /dev/null
-<div class="field">
- <label>{_T string="Picture:"}</label>
- {if $member->id}
- {assign var="photo_id" value=$member->id}
- {else}
- {assign var="photo_id" value=0}
- {/if}
- <img id="photo_adh" src="{path_for name="photo" data=["id" => $photo_id, "rand" => $time]}" class="picture" width="{$member->picture->getOptimalWidth()}" height="{$member->picture->getOptimalHeight()}" alt="{_T string="Picture"}"/><br/>
-{if $member->hasPicture() eq 1 }
- <label for="del_photo" class="labelalign">{_T string="Delete image"}</label> <input type="checkbox" name="del_photo" id="del_photo" value="1"/><br/>
-{/if}
- <input class="labelalign" type="file" name="photo"/>
-</div>
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-
-{block name="component"}
- {if isset($masschange) and $masschange == true}
- {assign var="component_class" value="inline field{if $entry->required} required{/if}"}
- {else}
- {assign var="component_class" value="field{if $entry->required} required{/if}"}
- {/if}
- {$smarty.block.parent}
-{/block}
-
-{block name="element"}
- <select
- name="{$name}"
- id="{$id}"
- {if isset($required) and $required == true} required="required"{/if}
- {if isset($disabled) and $disabled == true} disabled="disabled"{/if}
- class="ui search dropdown nochosen"
- >
- {foreach item=label from=$values key=value}
- <option value="{$value}">{$label}</option>
- {/foreach}
- </select>
-{/block}
+++ /dev/null
-{extends file="forms_types/select.tpl"}
-
-{block name="element"}
- <select name="id_statut" id="id_statut" class="ui dropdown nochosen"{if isset($disabled) and $disabled == true} disabled="disabled"{/if}{if isset($required.id_statut) and $required.id_statut eq 1} required="required"{/if}>
- {html_options options=$statuts selected=$member->status}
- </select>
-{/block}
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-
-{block name="component"}
- {assign var="type" value="text"}
- {if isset($masschange) and $masschange == true}
- {assign var="component_class" value="inline field{if $entry->required} required{/if}"}
- {else}
- {assign var="component_class" value="field{if $entry->required} required{/if}"}
- {/if}
- {$smarty.block.parent}
-{/block}
+++ /dev/null
-{extends file="forms_types/input.tpl"}
-
-{block name="component"}
- {assign var="component_class" value="field"}
- {$smarty.block.parent}
-{/block}
-
-{block name="label"}
- {*assign var="labelclass" value="vtop"*}
- {$smarty.block.parent}
-{/block}
-
-{block name="element"}
- <textarea
- name="{$name}"
- id="{$id}"
- cols="50"
- rows="6"
- {if isset($required) and $required == true} required="required"{/if}
- {if isset($disabled) and $disabled == true} disabled="disabled"{/if}
- {if isset($title)} title="{$title}"{/if}
- {if isset($maxlength)} maxlength="{$maxlength}"{/if}
- {if isset($elt_class)} class="{$elt_class}"{/if}
- {if isset($autocomplete)} autocomplete="{$autocomplete}"{/if}
- {if isset($size)} size="{$size}"{/if}
- >{if null !== $value}{$value}{/if}</textarea><br/>
-{/block}
+++ /dev/null
-{extends file="forms_types/select.tpl"}
-
-{block name="element"}
- {assign var="values" value=""}
- <select name="titre_adh" id="titre_adh" class="ui dropdown nochosen"{if isset($disabled) and $disabled == true} disabled="disabled"{/if}{if isset($required) and $required == true} required="required"{/if}>
- <option value="{if isset($required) and $required == true}-1{/if}">{_T string="Not supplied"}</option>
-{foreach item=title from=$titles_list}
- <option value="{$title->id}"{if $member->title neq null and $member->title->id eq $title->id} selected="selected"{/if}>{$title->long}</option>
-{/foreach}
- </select>
-{/block}
+++ /dev/null
-{extends file="page.tpl"}
-
-
-{function name=draw_actions}
- <td class="{$rclass} center actions_row">
-{if $member->canEdit($login)}
- <a
- href="{path_for name="editMember" data=["id" => $member->id]}"
- class="tooltip action"
- >
- <i class="ui user edit icon" aria-hidden="true"></i>
- <span class="sr-only">{_T string="%membername: edit information" pattern="/%membername/" replace=$member->sname}</span>
- </a>
-{/if}
-{if $login->isAdmin() or $login->isStaff()}
- <a
- href="{path_for name="contributions" data=["type" => "contributions", "option" => "member", "value" => $member->id]}"
- class="tooltip"
- >
- <i class="ui cookie green icon" aria-hidden="true"></i>
- <span class="sr-only">{_T string="%membername: contributions" pattern="/%membername/" replace=$member->sname}</span>
- </a>
- <a
- href="{path_for name="removeMember" data=["id" => $member->id]}"
- class="delete tooltip"
- >
- <i class="ui user times red icon" aria-hidden="true"></i>
- <span class="sr-only">{_T string="%membername: remove from database" pattern="/%membername/" replace=$member->sname}</span>
- </a>
-{/if}
-{if $login->isSuperAdmin()}
- <a
- href="{path_for name="impersonate" data=["id" => $member->id]}"
- class="tooltip"
- >
- <i class="ui user secret grey icon" aria-hidden="true"></i>
- <span class="sr-only">{_T string="Log in in as %membername" pattern="/%membername/" replace=$member->sname}</span>
- </a>
-{/if}
-{* If some additionnals actions 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 $plugin_actions|@count != 0}
- {foreach from=$plugin_actions key=plugin_name item=action}
- {include file=$action module_id=$plugin_name|replace:'actions_':''}
- {/foreach}
-{/if}
- </td>
-{/function}
-
-{block name="content"}
- <form action="{path_for name="filter-memberslist"}" method="post" id="filtre" class="ui form">
- <div class="ui segment">
-{if !isset($adv_filters) || !$adv_filters}
- <div class="five fields">
- <div class="field">
- <label for="filter_str">{_T string="Search:"}</label>
- <input type="text" name="filter_str" id="filter_str" value="{$filters->filter_str}" type="search" placeholder="{_T string="Enter a value"}"/>
- </div>
- <div class="field">
- <label for="field_filter">{_T string="in:"}</label>
- <select name="field_filter" id"=field_filter" class="ui search dropdown nochosen">
- {html_options options=$field_filter_options selected=$filters->field_filter}
- </select>
- </div>
- <div class="field">
- <label for="filter_str">{_T string="among:"}</label>
- <select name="membership_filter" onchange="form.submit()" class="ui search dropdown nochosen">
- {html_options options=$membership_filter_options selected=$filters->membership_filter}
- </select>
- </div>
- <div class="flexend field">
- <label for="filter_account" class="hidden">{_T string="among:"}</label>
- <select name="filter_account" onchange="form.submit()" class="ui search dropdown nochosen">
- {html_options options=$filter_accounts_options selected=$filters->filter_account}
- </select>
- </div>
- <div class="flexend field">
- <label for="group_filter" class="hidden">{_T string="among:"}</label>
- <select name="group_filter" onchange="form.submit()" class="ui search dropdown nochosen">
- <option value="0">{_T string="Select a group"}</option>
- {foreach from=$filter_groups_options item=group}
- <option value="{$group->getId()}"{if $filters->group_filter eq $group->getId()} selected="selected"{/if}>{$group->getIndentName()}</option>
- {/foreach}
- </select>
- </div>
- </div>
- <div class="two fields">
- <div class="field">
- <div class="inline fields">
- <label for="email_filter">{_T string="Members that have an email address:"}</label>
- <div class="field inline">
- <div class="ui radio checkbox">
- <input type="radio" name="email_filter" id="filter_dc_email" value="{Galette\Repository\Members::FILTER_DC_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_DC_EMAIL')} checked="checked"{/if}>
- <label for="filter_dc_email">{_T string="Don't care"}</label>
- </div>
- </div>
- <div class="field inline">
- <div class="ui radio checkbox">
- <input type="radio" name="email_filter" id="filter_with_email" value="{Galette\Repository\Members::FILTER_W_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_W_EMAIL')} checked="checked"{/if}>
- <label for="filter_with_email">{_T string="With"}</label>
- </div>
- </div>
- <div class="field inline">
- <div class="ui radio checkbox">
- <input type="radio" name="email_filter" id="filter_without_email" value="{Galette\Repository\Members::FILTER_WO_EMAIL}"{if $filters->email_filter eq constant('Galette\Repository\Members::FILTER_WO_EMAIL')} checked="checked"{/if}>
- <label for="filter_without_email">{_T string="Without"}</label>
- </div>
- </div>
- </div>
- </div>
- <div class="right aligned field">
- <button type="submit" class="tooltip action ui primary button" title="{_T string="Apply filters"}" name="filter">
- <i class="search icon"></i>
- {_T string="Filter"}
- </button>
- <button type="submit" class="tooltip action ui button" title="{_T string="Save selected criteria"}" name="savesearch" id="savesearch">
- <i class="save blue icon"></i>
- {_T string="Save"}
- </button>
- <input type="submit" name="clear_filter" class="tooltip ui button" value="{_T string="Clear filter"}" title="{_T string="Reset all filters to defaults"}"/>
- </div>
- </div>
-{else}
- <div class="field">
- <span class="ui primary ribbon label">{_T string="Advanced search mode"}</span>
- <button type="submit" class="tooltip action ui primary button" title="{_T string="Save current advanced search criteria"}" name="savesearch" id="savesearch">
- <i class="save icon"></i>
- {_T string="Save"}
- </button>
- <button type="submit" class="tooltip action ui button" title="{_T string="Change search criteria"}" name="adv_criteria">
- <i class="edit blue icon"></i>
- {_T string="Change criteria"}
- </button>
- <input type="hidden" name="advanced_search" value="1" class="ui button"/>
- <input type="submit" name="clear_filter" class="tooltip ui button" value="{_T string="Clear filter"}" title="{_T string="Reset all filters to defaults"}"/>
- <div class="ui basic fluid accordion">
- <div class="title">
- <i class="dropdown icon"></i>
- {_T string="Show/hide query"}
- </div>
- <div class="content">
- <pre id="sql_qry" class="hidden">{$filters->query}</pre>
- </div>
- </div>
- </div>
-{/if}
- {include file="forms_types/csrf.tpl"}
- </div>
-
-
- <div class="infoline">
- <div class="ui basic horizontal segments">
- <div class="ui basic fitted segment">
- <div class="ui label">{_T string="%count member" plural="%count members" count=$nb_members pattern="/%count/" replace=$nb_members}</div>
- </div>
- <div class="ui basic right aligned fitted segment">
- <div class="inline field">
- <label for="nbshow">{_T string="Records per page:"}</label>
- <select name="nbshow" id="nbshow" class="ui dropdown nochosen">
- {html_options options=$nbshow_options selected=$numrows}
- </select>
- <noscript> <span><input type="submit" value="{_T string="Change"}" /></span></noscript>
- </div>
- </div>
- </div>
- </div>
- </form>
- <form action="{path_for name="batch-memberslist"}" method="post" id="listform" class="ui form">
- <div class="ui basic fitted segment">
- <table class="listing ui celled table">
- <thead>
- <tr>
-{foreach item=column from=$galette_list}
- {if $column->field_id eq 'id_adh'}
- {if $preferences->pref_show_id}
- <th class="id_row">
- <a href="{path_for name="members" data=["option" => "order", "value" => "Galette\Repository\Members::ORDERBY_ID"|constant]}">
- {_T string="Mbr id"}
- {if $filters->orderby eq constant('galette\Repository\Members::ORDERBY_ID')}
- {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
- <i class="ui angle down icon tooltip"></i>
- {else}
- <i class="ui angle up icon tooltip"></i>
- {/if}
- {/if}
- </a>
- </th>
- {else}
- <th class="id_row">#</th>
- {/if}
- {else}
- <th class="left">
- <a href="{path_for name="members" data=["option" => "order", "value" => $column->field_id]}">
- {$column->label}
- {if $filters->orderby eq $column->field_id}
- {if $filters->ordered eq constant('Galette\Filters\MembersList::ORDER_ASC')}
- <i class="ui angle down icon tooltip"></i>
- {else}
- <i class="ui angle up icon tooltip"></i>
- {/if}
- {/if}
- </a>
- </th>
- {/if}
-{/foreach}
- <th class="actions_row">{_T string="Actions"}</th>
- </tr>
- </thead>
- <tbody>
-{foreach from=$members item=member key=ordre}
- {assign var=rclass value=$member->getRowClass() }
- <tr>
- {foreach item=column from=$galette_list}
- {if $column->field_id eq 'id_adh'}
- <td class="{$rclass} right" data-scope="id">
- {if $preferences->pref_show_id}
- {$member->id}
- {else}
- {$ordre+1+($filters->current_page - 1)*$numrows}
- {/if}
- </td>
- {elseif $column->field_id eq 'list_adh_name'}
- <td class="{$rclass} username_row" data-scope="row">
- <input type="checkbox" name="member_sel[]" value="{$member->id}"/>
- {if $member->isCompany()}
- <i class="ui building outline icon tooltip"><span class="sr-only">{_T string="Is a company"}</span></i>
- {elseif $member->isMan()}
- <i class="ui male icon tooltip"><span class="sr-only">{_T string="Is a man"}</span></i>
- {elseif $member->isWoman()}
- <i class="ui female icon tooltip"><span class="sr-only">{_T string="Is a woman"}</span></i>
- {else}
- <i class="ui icon"></i>
- {/if}
- {if $member->email != ''}
- <a href="mailto:{$member->email}" class="tooltip">
- <i class="ui envelope outline teal icon" aria-hidden="true"></i>
- <span class="sr-only">{_T string="Mail"}</span>
- </a>
- {else}
- <i class="ui icon"></i>
- {/if}
- {if $member->isAdmin()}
- <span class="tooltip">
- <i class="ui user shield red icon" aria-hidden="true"></i>
- <span class="sr-only">{_T string="Admin"}</span>
- </span>
- {elseif $member->isStaff()}
- <span class="tooltip">
- <i class="ui id card alternate orange icon" aria-hidden="true"></i>
- <span class="sr-only">{_T string="Staff member"}</span>
- </span>
- {else}
- <i class="ui icon"></i>
- {/if}
- {assign var="mid" value=$member->id}
- <a href="{path_for name="member" data=["id" => $member->id]}">{$member->sname}{if $member->company_name} ({$member->company_name}){/if}</a>
- </td>
- {else}
- {assign var="lrclass" value=$rclass}
- {assign var="propname" value=$column->propname}
- {assign var="propvalue" value=$member->$propname}
- {assign var="value" value=null}
-
- {if $column->field_id eq 'nom_adh'}
- {assign var="value" value=$member->sfullname}
- {elseif $column->field_id eq 'pseudo_adh'}
- {assign var="lrclass" value="$rclass"}
- {assign var=value value=$member->$propname}
- {elseif $column->field_id eq 'tel_adh' or $column->field_id eq 'gsm_adh'}
- {assign var="lrclass" value="$rclass"}
- {elseif $column->field_id eq 'id_statut'}
- {assign var="lrclass" value="$rclass"}
- {assign var=value value={statusLabel id=$member->$propname}}
- {elseif $column->field_id eq 'titre_adh'}
- {if is_object($member->title)}
- {assign var=value value=$member->title->long}
- {/if}
- {elseif $column->field_id eq 'pref_lang'}
- {assign var="value" value=$i18n->getNameFromId($member->language)}
- {elseif $column->field_id eq 'adresse_adh'}
- {assign var="value" value=$member->saddress|escape|nl2br}
- {assign var="escaped" value=true}
- {elseif $column->field_id eq 'bool_display_info'}
- {assign var="value" value=$member->sappears_in_list}
- {elseif $column->field_id eq 'activite_adh'}
- {assign var="value" value=$member->sactive}
- {elseif $column->field_id eq 'id_statut'}
- {assign var="value" value=$member->sstatus}
- {elseif $column->field_id eq 'bool_admin_adh'}
- {assign var="value" value=$member->sadmin}
- {elseif $column->field_id eq 'bool_exempt_adh'}
- {assign var="value" value=$member->sdue_free}
- {elseif $column->field_id eq 'sexe_adh'}
- {assign var="value" value=$member->sgender}
- {/if}
-
- {* If value has not been set, take the generic value *}
- {if !$value}
- {if $propvalue}
- {assign var=value value=$propvalue|escape}
- {else}
- {assign var=value value=$propvalue}
- {/if}
- {elseif !isset($escaped)}
- {assign var=value value=$value|escape}
- {/if}
-
- <td class="{$lrclass}" data-title="{$column->label}">
- {* Display column.
- A check is done here to adapt display, this is may not the best way to go
- but for notw, that works as excpected.
- *}
- {if not empty($value)}
- {if $column->field_id eq 'email_adh'}
- <a href="mailto:{$value}">{$value}</a>
- {elseif $column->field_id eq 'tel_adh' or $column->field_id eq 'gsm_adh'}
- <a href="tel:{$value}">{$value}</a>
- {elseif $column->field_id eq 'parent_id'}
- <a href="{path_for name="member" data=["id" => $member->parent]}">{memberName id=$member->parent}</a>
- {elseif $column->field_id eq 'ddn_adh'}
- {$value} {$member->getAge()}
- {else}
- {$value}
- {/if}
- {/if}
- </td>
- {/if}
- {/foreach}
- {draw_actions class=$rclass member=$member login=$login plugin_actions=$plugin_actions}
- </tr>
-{foreachelse}
- <tr><td colspan="{$galette_list|count}" class="emptylist">{_T string="No member has been found"}</td></tr>
-{/foreach}
- </tbody>
- </table>
- </div>
-{if $nb_members != 0 && ($login->isGroupManager() && $preferences->pref_bool_groupsmanagers_exports || $login->isAdmin() || $login->isStaff())}
- <div class="ui bottom attached segment screen-only">
- <div class="ui horizontal list">
- <span class="ui primary ribbon label">{_T string="For the selection:"}</span>
- {if $login->isAdmin() or $login->isStaff()}
- <div class="item">
- <button type="submit" id="masschange" name="masschange" class="action ui labeled icon tiny button">
- <i class="user edit blue icon"></i> {_T string="Mass change"}
- </button>
- </div>
- <div class="item">
- <button type="submit" id="masscontributions" name="masscontributions" class="action ui labeled icon tiny button">
- <i class="ui cookie bite green icon"></i> {_T string="Mass add contributions"}
- </button>
- </div>
- <div class="item">
- <button type="submit" id="delete" name="delete" class="ui labeled icon tiny button">
- <i class="user times red icon"></i> {_T string="Delete"}
- </button>
- </div>
- {/if}
- {if $login->isAdmin() or $login->isStaff() or $login->isGroupManager() and $preferences->pref_bool_groupsmanagers_mailings}
- {if $pref_mail_method neq constant('Galette\Core\GaletteMail::METHOD_DISABLED')}
- <div class="item">
- <button type="submit" id="sendmail" name="mailing" class="ui labeled icon tiny button">
- <i class="mail bulk icon"></i> {_T string="Mail"}
- </button>
- </div>
- {/if}
- {/if}
-
- {if $login->isGroupManager() && $preferences->pref_bool_groupsmanagers_exports || $login->isAdmin() || $login->isStaff()}
- <div class="item">
- <button type="submit" id="attendance_sheet" name="attendance_sheet" class="ui labeled icon tiny button">
- <i class="file alternate icon"></i> {_T string="Attendance sheet"}
- </button>
- </div>
- <div class="item">
- <button type="submit" id="labels" name="labels" class="ui labeled icon tiny button">
- <i class="address card icon"></i> {_T string="Generate labels"}
- </button>
- </div>
- <div class="item">
- <button type="submit" id="cards" name="cards" class="ui labeled icon tiny button">
- <i class="id badge icon"></i> {_T string="Generate Member Cards"}
- </button>
- </div>
- <div class="item">
- <button type="submit" id="csv" name="csv" class="ui labeled icon tiny button">
- <i class="file csv icon"></i> {_T string="Export as CSV"}
- </button>
- </div>
- {/if}
- {if $plugin_batch_actions|@count != 0}
- {foreach from=$plugin_batch_actions key=plugin_name item=action}
- {include file=$action module_id=$plugin_name|replace:'batch_action_':''}
- {/foreach}
- {/if}
- </div>
- </div>
- <div class="ui basic center aligned fitted segment">
- <div class="ui inverted pagination menu">
- <div class="header item">
- {_T string="Pages:"}
- </div>
- {$pagination}
- </div>
- </div>
-{/if}
- {include file="forms_types/csrf.tpl"}
- </form>
-{if $nb_members != 0}
- <div id="legende" title="{_T string="Legend"}" class="ui modal">
- <div class="header">{_T string="Legend"}</div>
- <div class="content">
- <table class="ui stripped table">
- <thead>
- <tr>
- <th class="" colspan="4">{_T string="Reading the list"}</th>
- </tr>
- <thead>
- <tbody>
- <tr>
- <th class="back">{_T string="Name"}</th>
- <td class="back">{_T string="Active account"}</td>
- <th class="inactif back">{_T string="Name"}</th>
- <td class="back">{_T string="Inactive account"}</td>
- </tr>
- <tr>
- <th class="cotis-ok color-sample"> </th>
- <td class="back">{_T string="Membership in order"}</td>
- <th class="cotis-soon color-sample"> </th>
- <td class="back">{_T string="Membership will expire soon (<30d)"}</td>
- </tr>
- <tr>
- <th class="cotis-never color-sample"> </th>
- <td class="back">{_T string="Never contributed"}</td>
- <th class="cotis-late color-sample"> </th>
- <td class="back">{_T string="Lateness in fee"}</td>
- </tr>
- </tbody>
- </table>
- <table class="ui stripped table">
- <thead>
- <tr>
- <th class="" colspan="4">{_T string="Actions"}</th>
- </tr>
- <thead>
- <tbody>
- <tr>
- <th class="action">
- <i class="ui user edit icon"></i>
- </th>
- <td class="back">{_T string="Modification"}</td>
- <th>
- <i class="ui cookie icon"></i>
- </th>
- <td class="back">{_T string="Contributions"}</td>
- </tr>
- <tr>
- <th class="delete">
- <i class="ui user times red icon"></i>
- </th>
- <td class="back">{_T string="Deletion"}</td>
- </tr>
- </tbody>
- </table>
- <table class="ui stripped table">
- <thead>
- <tr>
- <th colspan="4">{_T string="User status/interactions"}</th>
- </tr>
- <thead>
- <tbody>
- <tr>
- <th><i class="ui envelope outline teal icon"></i></th>
- <td class="back">{_T string="Send an email"}</td>
- <th><i class="ui building icon"></i></th>
- <td class="back">{_T string="Is a company"}</td>
- </tr>
-
- <tr>
- <th><i class="ui male icon"></i></th>
- <td class="back">{_T string="Is a man"}</td>
- <th><i class="ui female icon"></i></th>
- <td class="back">{_T string="Is a woman"}</td>
- </tr>
- <tr>
- <th><i class="ui user shield red icon"></i></th>
- <td class="back">{_T string="Admin"}</td>
- <th><i class="ui id card alternate orange icon"></i></th>
- <td class="back">{_T string="Staff member"}</td>
-
- </tr>
- </tbody>
- </table>
- </div>
- <div class="actions"><div class="ui labeled icon deny button"><i class="times icon"></i> {_T string="Close"}</div></div>
- </div>
-{/if}
-{/block}
-
-{block name="javascripts"}
- <script type="text/javascript">
-{if $nb_members != 0}
- var _checkselection = function() {
- var _checkeds = $('table.listing').find('input[type=checkbox]:checked').length;
- if ( _checkeds == 0 ) {
- var _el = $('<div id="pleaseselect" title="{_T string="No member selected" escape="js"}">{_T string="Please make sure to select at least one member from the list to perform this action." escape="js"}</div>');
- _el.appendTo('body').dialog({
- modal: true,
- buttons: {
- Ok: function() {
- $(this).dialog( "close" );
- }
- },
- close: function(event, ui){
- _el.remove();
- }
- });
- return false;
- }
- return true;
- }
-{/if}
- {* Use of Javascript to draw specific elements that are not relevant is JS is inactive *}
- $(function(){
-{if $nb_members != 0}
- var _checklinks = '<div class="checkboxes ui basic horizontal segments"><div class="ui basic fitted segment"><a href="#" class="checkall ui blue tertiary button">{_T string="(Un)Check all" escape="js"}</a> | <a href="#" class="checkinvert ui blue tertiary button">{_T string="Invert selection" escape="js"}</a></div><div class="ui basic right aligned fitted segment"><a href="#" class="show_legend ui blue tertiary button">{_T string="Show legend" escape="js"}</a></div></div>';
- $('.listing').before(_checklinks);
- $('.listing').after(_checklinks);
- _bind_check();
- _bind_legend();
-
- $('.selection_menu *[type="submit"], .selection_menu *[type="button"]').click(function(event){
- if ( this.id == 'delete' || this.id == 'masschange' ) {
- //mass removal is handled from 2 steps removal
- //mass change is specifically handled below
- return;
- }
-
- if (!_checkselection()) {
- return false;
- } else {
- {if $existing_mailing eq true}
- if (this.id == 'sendmail') {
- var _el = $('<div id="existing_mailing" title="{_T string="Existing mailing" escape="js"}">{_T string="A mailing already exists. Do you want to create a new one or resume the existing?" escape="js"}</div>');
- _el.appendTo('body').dialog({
- modal: true,
- hide: 'fold',
- width: '25em',
- height: 150,
- close: function(event, ui){
- _el.remove();
- },
- buttons: {
- '{_T string="Resume"}': function() {
- $(this).dialog( "close" );
- location.href = '{path_for name="mailing"}';
- },
- '{_T string="New"}': function() {
- $(this).dialog( "close" );
- //add required controls to the form, change its action URI, and send it.
- var _form = $('#listform');
- _form.append($('<input type="hidden" name="mailing_new" value="true"/>'));
- _form.append($('<input type="hidden" name="mailing" value="true"/>'));
- _form.submit();
- }
- }
- });
- return false;
- }
- {/if}
- if (this.id == 'attendance_sheet') {
- _attendance_sheet_details();
- return false;
- }
-
- if (this.id == 'masscontributions') {
- event.preventDefault();
- $.ajax({
- url: '{path_for name="batch-memberslist"}',
- type: "POST",
- data: {
- ajax: true,
- masscontributions: 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);
- $('body').append(_res);
-
- _initTooltips('#mass_contributions');
- _massCheckboxes('#mass_contributions');
-
- _res.dialog({
- width: 'auto',
- modal: true,
- close: function(event, ui){
- $(this).dialog('destroy').remove()
- }
- });
- },
- error: function() {
- alert("{_T string="An error occurred :(" escape="js"}");
- }
- });
- }
-
- return true;
- }
- });
-{/if}
- if ( _shq = $('#showhideqry') ) {
- _shq.click(function(){
- $('#sql_qry').toggleClass('hidden');
- return false;
- });
- }
-
- $('#savesearch').on('click', function(e) {
- e.preventDefault();
-
- var _el = $('<div id="savedsearch_details" title="{_T string="Search title" escape="js"}"><input type="text" name="search_title" id="search_title"/></div>');
- _el.appendTo('body').dialog({
- modal: true,
- hide: 'fold',
- width: '40%',
- height: 200,
- close: function(event, ui){
- _el.remove();
- },
- buttons: {
- '{_T string="Ok" escape="js"}': function() {
- var _form = $('#filtre');
- var _data = _form.serialize();
- _data = _data + "&search_title=" + $('#search_title').val();
- $.ajax({
- url: '{path_for name="saveSearch"}',
- type: "POST",
- data: _data,
- datatype: 'json',
- {include file="js_loader.tpl"},
- success: function(res) {
- $.ajax({
- url: '{path_for name="ajaxMessages"}',
- method: "GET",
- success: function (message) {
- $('#asso_name').after(message);
- }
- });
- }
- });
-
- $(this).dialog( "close" );
- },
- '{_T string="Cancel" escape="js"}': function() {
- $(this).dialog( "close" );
- }
- }
- });
- });
-
- });
-{if $nb_members != 0}
- {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();
-
- res.find('select:not(.nochosen)').selectize({
- maxItems: 1
- });
- }
-
- $('#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 occurred :(" 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 occurred :(" escape="js"}");
- }
- });
- });
-
- var _attendance_sheet_details = function(){
- var _selecteds = [];
- $('table.listing').find('input[type=checkbox]:checked').each(function(){
- _selecteds.push($(this).val());
- });
- $.ajax({
- url: '{path_for name="attendance_sheet_details"}',
- type: "POST",
- data: {
- ajax: true,
- selection: _selecteds
- },
- dataType: 'html',
- success: function(res){
- var _el = $('<div id="attendance_sheet_details" title="{_T string="Attendance sheet details" escape="js"}"> </div>');
- _el.appendTo('body').dialog({
- modal: true,
- hide: 'fold',
- width: '60%',
- height: 400,
- close: function(event, ui){
- _el.remove();
- },
- buttons: {
- Ok: function() {
- $('#sheet_details_form').submit();
- $(this).dialog( "close" );
- },
- Cancel: function() {
- $(this).dialog( "close" );
- }
- }
- }).append(res);
- /*$('#sheet_date').datepicker({
- changeMonth: true,
- changeYear: true,
- showOn: 'button',
- yearRange: 'c:c+5',
- buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
- });*/
- },
- error: function() {
- alert("{_T string="An error occurred displaying attendance sheet details interface :(" escape="js"}");
- }
- });
- }
-{/if}
- </script>
-{/block}
+++ /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" class="ui form">
- {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}
- {if !isset($changes)}
- {* Form entries*}
- {include file="forms_types.tpl" masschange=true}
- {* Dynamic entries *}
- {include file="edit_dynamic_fields.tpl" object=$member masschange=true}
- {/if}
- <div class="button-container">
- <input type="submit" id="masschange" class="ui button" value="{if !isset($changes)}{_T string="Edit"}{else}{_T string="OK"}{/if}"/>
- <a href="{$cancel_uri}" class="ui 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}
- {include file="forms_types/csrf.tpl"}
- </div>
- </form>
- </div>
-{/block}
+++ /dev/null
-{extends file="page.tpl"}
-{block name="content"}
- <div id="sysinfos">
- <pre>{$rawinfos}</pre>
- </div>
-{/block}
--- /dev/null
+{% if object.getDynamicFields() is not empty %}
+ {% set fields = object.getDynamicFields().getFields() %}
+
+ {% if masschange is not defined %}
+ {% set masschange = false %}
+ {% endif %}
+
+ {% if fields is not empty %}
+
+{% macro draw_field(field, field_data, disabled, loop, object, masschange) %}
+ {% set valuedata = field_data.field_val|escape %}
+ {% if get_class(field) == 'Galette\\DynamicFields\\File' %}
+ <label>{{ field.getName()|escape }}</label>
+ {% else %}
+ <label for="info_field_{{ field.getId() }}_{{ loop }}">
+ {% if masschange is defined %}
+ {# Add a checkbox for fields to change on mass edition #}
+ <input type="checkbox" name="mass_info_field_{{ field.getId() }}" class="mass_checkbox"/>
+ {% endif %}
+ {{ field.getName()|escape }}
+ </label>
+ {% endif %}
+ {% if get_class(field) == 'Galette\\DynamicFields\\Text' %}
+ <textarea name="info_field_{{ field.getId() }}_{{ loop }}" id="info_field_{{ field.getId() }}_{{ loop }}"
+ cols="{% if field.getWidth() > 0 %}{{ field.getWidth() }}{else}61{% endif %}"
+ rows="{% if field.getHeight() > 0 %}{{ field.getHeight() }}{else}6{% endif %}"
+ {% if field.isRepeatable() %} data-maxrepeat="{{ field.getRepeat() }}"{% endif %}
+ {% if not masschange %}
+ {% if field.isRequired() %} required="required"{% endif %}
+ {% endif %}
+ {% if disabled %} disabled="disabled"{% endif %}>{{ valuedata }}</textarea>
+ {% elseif get_class(field) == 'Galette\\DynamicFields\\Line' %}
+ <input type="text" name="info_field_{{ field.getId() }}_{{ loop }}" id="info_field_{{ field.getId() }}_{{ loop }}"
+ {% if field.getWidth() > 0 %}size="{{ field.getWidth() }}"{% endif %}
+ {% if field.getSize() > 0 %}maxlength="{{ field.getSize() }}"{% endif %}
+ value="{{ valuedata }}"
+ {% if not masschange %}
+ {% if field.isRequired() %} required="required"{% endif %}
+ {% endif %}
+ {% if field.isRepeatable() %} data-maxrepeat="{{ field.getRepeat() }}"{% endif %}
+ {% if disabled %} disabled="disabled"{% endif %}
+ />
+ {% elseif get_class(field) == 'Galette\\DynamicFields\\Choice' %}
+ <select name="info_field_{{ field.getId() }}_{{ loop }}" id="info_field_{{ field.getId() }}_{{ loop }}"
+ {% if not masschange %}
+ {% if field.isRequired() %} required="required"{% endif %}
+ {% endif %}
+ {% if field.isRepeatable() %} data-maxrepeat="{{ field.getRepeat() }}"{% endif %}
+ {% if disabled %} disabled="disabled"{% endif %}
+ >
+ <!-- If no option is present, page is not XHTML compliant -->
+ <option value="">{{ _T("Select an option") }}</option>
+ {% for key, value in field.getValues() %}
+ <option value="{{ key }}"{% if key == valuedata %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ {% elseif get_class(field) == 'Galette\\DynamicFields\\Date' %}
+ <input type="text" name="info_field_{{ field.getId() }}_{{ loop }}" id="info_field_{{ field.getId() }}_{{ loop }}" maxlength="10"
+ value="{{ valuedata }}" class="dynamic_date modif_date"
+ {% if field.isRepeatable() %} data-maxrepeat="{field.getRepeat()}"{% endif %}
+ {% if not masschange %}
+ {% if field.isRequired() %} required="required"{% endif %}
+ {% endif %}
+ {% if disabled %} disabled="disabled"{% endif %}
+ />
+ <span class="exemple">{{ _T("(yyyy-mm-dd format)") }}</span>
+ {% elseif get_class(field) == 'Galette\\DynamicFields\\Boolean' %}
+ <input type="checkbox" name="info_field_{{ field.getId() }}_{{ loop }}" id="info_field_{{ field.getId() }}_{{ loop }}" value="1"
+ {% if valuedata == 1%} checked="checked"{% endif %}
+ {% if field.isRepeatable() %} data-maxrepeat="{{ field.getRepeat() }}"{% endif %}
+ {% if not masschange %}
+ {% if field.isRequired() %} required="required"{% endif %}
+ {% endif %}
+ {% if disabled %} disabled="disabled"{% endif %}
+ />
+ {% elseif get_class(field) == 'Galette\\DynamicFields\\File' %}
+ {% if object.id %}
+ <label class="labelalign" for="info_field_{{ field.getId() }}_{{ loop }}_new">{{ _T("new") }}</label>
+ {% endif %}
+ <input
+ type="file"
+ name="info_field_{{ field.getId() }}_{{ loop }}"
+ id="info_field_{{ field.getId() }}_{{ loop }}_new"
+ {% if field.isRequired() and valuedata == '' %} required="required"{% endif %}
+ {% if disabled %} disabled="disabled"{% endif %}
+ />
+ {% if object.id %}
+ <label class="labelalign" for="info_field_{{ field.getId() }}_{{ loop }}_current">{{ _T("current") }}</label>
+ <a href="{{ path_for("getDynamicFile", { "id": object.id, "fid": field.getId(), "pos": loop, "name": valuedata }) }}">
+ {{ valuedata }}
+ </a>
+ - <label class="labelalign" for="info_field_{{ field.getId() }}_{{ loop }}_delete">
+ {{ _T("delete") }}
+ </label>
+ <input
+ type="checkbox"
+ name="info_field_{{ field.getId() }}_{{ loop }}"
+ id="info_field_{{ field.getId() }}_{{ loop }}_delete"
+ onclick="this.form.info_field_{{ field.getId() }}_{{ loop }}_new.disabled = this.checked;"
+ />
+ {% endif %}
+ {% endif %}
+{% endmacro %}
+
+<div class="ui styled fluid accordion field">
+ <div class="active title">
+ <i class="icon dropdown"></i>
+ {{ _T("Additionnal fields:") }}
+ </div>
+ <div class="active content field">
+ {% set access_level = login.getAccessLevel() %}
+ {% for field in fields %}
+ {% if field.getInformation() %}
+ <div>{{ field.getInformation()|raw }}</div>
+ {% endif %}
+
+ {% set perm = field.getPerm() %}
+ {% if get_class(field) == 'Galette\\DynamicFields\\Separator' %}
+ <div class="ui horizontal divider">{{ field.getName()|escape }}</div>
+ {% elseif (get_class(field) == 'Galette\\DynamicFields\\File' or field.isRepeatable()) and masschange %}
+ <!-- File and repeatable fields not shown in mass changes form -->
+ {% else %}
+ <div class="field{% if field.isRepeatable() %} repetable{% endif %}">
+ {% set disabled = false %}
+ {% if perm == constant('Galette\\DynamicFields\\DynamicField::PERM_USER_READ') and access_level == constant('Galette\\Core\\Authentication::ACCESS_USER') %}
+ {% set disabled = true %}
+ {% endif %}
+ {% set values = object.getDynamicFields().getValues(field.getId()) %}
+ {% set can_add = false %}
+ {% if field.getRepeat() == 0 or values is not iterable or values|length < field.getRepeat() or values|length == 0 %}
+ {% set can_add = true %}
+ {% endif %}
+ {% for field_data in values %}
+ {% if not loop.first %}<br/>{% endif %}
+ {{ _self.draw_field(field, field_data, disabled, loop.index, object, masschange) }}
+ {% endfor %}
+ {% if values is not iterable or values|length == 0 %}
+ {% set field_data = { 'field_val': ''} %}
+ {% if values is iterable %}
+ {% set current_count = values|length %}
+ {% else %}
+ {% set current_count = 0 %}
+ {% endif %}
+ {{ _self.draw_field(field, field_data, disabled, current_count + 1, object, masschange) }}
+ {% endif %}
+ </div>
+ {% if field.isRepeatable() %}
+ {% if field.getRepeat() == 0 %}
+ <p class="exemple" id="repeat_msg">{{ _T("Enter as many occurences you want.") }}</p>
+ {% elseif values is not iterable or values|length < field.getRepeat() or values|length == 0 %}
+ {% if values is iterable %}
+ {% set current_count = values|length %}
+ {% else %}
+ {% set current_count = 1 %}
+ {% endif %}
+ {% set remaining = field.getRepeat() - current_count %}
+ <p class="exemple" id="repeat_msg">{{ _T("Enter up to %count more occurences.")|replace({ "%count": remaining}) }}</p>
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ </div>
+</div>
+<script type="text/javascript">
+ {% if not masschange %}
+ var _addLnk = function(){
+ return $('<a class="ui small compact icon green button" href="#"><i class="plus icon" title="{{ _T("New occurrence") }}"></i> <span class="sr-only">{{ _T("New occurrence") }}"</span></a>');
+ };
+
+ var _lnkEvent = function(_a, _input, _parent) {
+ var _vals = _input[0].id.split(/_/);
+ var _total = $(_input[0]).data('maxrepeat'); //max number of occurrences
+ var _current = _vals[_vals.length-1]; //current occurrence
+
+ _a.click(function(e) {
+ var _new = _input.clone();
+
+ var _id = '';
+
+ for ( var i = 0 ; i < _vals.length -1 ; i++ ) {
+ _id += _vals[i] + '_';
+ }
+
+ _current = Number(_current) + 1;
+ _new.attr('id', _id + _current);
+ _new.attr('name', _id + _current);
+ _new.val('');
+ _a.remove();
+ _parent.append('<br/>');
+ _parent.append(_new);
+ _new.focus();
+ if( _total == '0' || _current < _total ) {
+ var _b = _addLnk();
+ _lnkEvent(_b, _new, _parent);
+ _parent.append(_b);
+ if (_current < _total) {
+ $('#repeat_msg').html('{{ _T("Enter up to %count more occurrences.")|replace({ "%count": "COUNT"})|e('js') }}'.replace(/COUNT/, _total - _current));
+ }
+ } else if (_current == _total) {
+ $('#repeat_msg').remove();
+ }
+ return false;
+ });
+ }
+ {% endif %}
+
+ $(function(){
+ {% if not masschange %}
+ $('.repetable').each(function(){
+ var _total;
+ var _current;
+ var _parent = $(this);
+
+ var _input = $(this).find('input:last');
+ if ( _input.length > 0 ) {
+ while ( $(this).find('input').length > 1 && _input.val() == '' ) {
+ _input.prev('br').remove();
+ _input.remove();
+ _input = $(this).find('input:last')
+ }
+ var _vals = _input[0].id.split(/_/);
+ var _total = $(_input[0]).data('maxrepeat'); //max number of occurrences
+ var _current = _vals[_vals.length-1]; //current occurrence
+
+ if ( _total == '0' || _current < _total ) {
+ var _a = _addLnk();
+ $(this).append(_a);
+ _lnkEvent(_a, _input, _parent);
+ }
+ }
+ });
+ {% endif %}
+ /*$('.dynamic_date').datepicker({
+ changeMonth: true,
+ changeYear: true,
+ showOn: 'button',
+ buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{{ _T("Select a date")|e('js') }}</span>'
+ });*/
+ });
+</script>
+ {% endif %}
+{% endif %}
--- /dev/null
+ {% for fieldset in fieldsets %}
+ <div class="galetteform ui styled fluid accordion field">
+ <div class="active title">
+ <i class="icon dropdown"></i>
+ {{ _T(fieldset.label) }}
+ </div>
+ <div class="active content field">
+ {% if masschange is not defined and not self_adh and loop.first %}
+ {% include "components/forms/picture.html.twig" %}
+ {% endif %}
+ {% for entry in fieldset.elements %}
+ {% set template = "text.html.twig" %}
+ {% set title = null %}
+ {% set tip = null %}
+ {% set size = null %}
+ {% set propname = entry.propname %}
+ {% set value = null %}
+ {% set checked = null %}
+ {% set example = null %}
+
+ {% if entry.type == constant('Galette\\Entity\\FieldsConfig::TYPE_BOOL') %}
+ {% set template = "checkbox.html.twig" %}
+ {% set value = "1" %}
+ {% endif %}
+ {% if entry.field_id == 'titre_adh' %}
+ {% set template = "titles.html.twig" %}
+ {% set value = member.title %}
+ {% endif %}
+ {% if entry.field_id == 'pref_lang' %}
+ {% set template = "lang.html.twig" %}
+ {% endif %}
+ {% if entry.field_id == 'sexe_adh' %}
+ {% set template = "gender.html.twig" %}
+ {% endif %}
+ {% if entry.field_id == 'societe_adh' %}
+ {% set template = "company.html.twig" %}
+ {% endif %}
+ {% if entry.field_id starts with 'date_' or entry.field_id == 'ddn_adh' %}
+ {% set template = "date.html.twig" %}
+ {% endif %}
+ {% if entry.field_id == 'adresse_adh' %}
+ {% set template = "address.html.twig" %}
+ {% endif %}
+ {% if entry.field_id == 'mdp_adh' %}
+ {% if not self_adh %}
+ {% set template = "password.html.twig" %}
+ {% else %}
+ {% set template = "captcha.html.twig" %}
+ {% endif %}
+ {% endif %}
+ {% if entry.field_id == 'info_adh' or entry.field_id == 'info_public_adh' %}
+ {% set template = "textarea.html.twig" %}
+ {% if entry.field_id == 'info_adh' %}
+ {% set example = _T("This comment is only displayed for admins and staff members.") %}
+ {% else %}
+ {% if login.isAdmin() or login.isStaff() %}
+ {% set example = _T("This comment is reserved to the member.") %}
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ {% if entry.field_id == 'activite_adh' %}
+ {% set template = "account.html.twig" %}
+ {% endif %}
+ {% if entry.field_id == 'id_statut' %}
+ {% set template = "status.html.twig" %}
+ {% endif %}
+
+ {% if entry.field_id == 'gpgid' %}
+ {% set size = "8" %}
+ {% endif %}
+ {% if entry.field_id == 'email_adh' %}
+ {% set size = "30" %}
+ {% endif %}
+ {% if entry.field_id == 'fingerprint' %}
+ {% set size = "40" %}
+ {% endif %}
+ {% if entry.field_id == 'bool_display_info' %}
+ {% set title = _T("Do member want to appear publically?") %}
+ {% set tip = _T("If you check this box (and if you are up to date with your contributions), your full name and other information 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.") %}
+ {% set checked = member.appearsInMembersList() %}
+ {% endif %}
+ {% if entry.field_id == 'login_adh' %}
+ {% set example = _T("(at least %i characters)")|replace({ "%i": 2}) %}
+ {% endif %}
+
+ {% if entry.field_id == 'bool_admin_adh' %}
+ {% set checked = member.isAdmin() %}
+ {% endif %}
+ {% if entry.field_id == 'bool_exempt_adh' %}
+ {% set checked = member.isDueFree() %}
+ {% endif %}
+ {% if entry.field_id == 'parent_id' %}
+ {% set value = member.parent.id %}
+ {% endif %}
+ {% if entry.field_id == 'activite_adh' %}
+ {% set value = member.isActive() %}
+ {% endif %}
+
+ {# If value has not been set, take the generic value #}
+ {% if not value and propname != 'password' %}
+ {% set value = attribute(member, propname) %}
+ {% endif %}
+
+ {% if masschange is not defined %}
+ {% set masschange = false %}
+ {% endif %}
+
+ {% include "components/forms/" ~ template with {
+ 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
+ }
+ %}
+ {% endfor %}
+ {% if groups is defined and groups|length != 0 and loop.last and (masschange is not defined or masschange == false) %}
+ {% include "components/forms/groups.html.twig" %}
+ {% endif %}
+ </div>
+ </div>
+ {% endfor %}
--- /dev/null
+{% extends "components/forms/select.html.twig" %}
+
+{% block element %}
+ <select name="activite_adh" id="activite_adh" class="ui dropdown nochosen"{% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}{% if required is defined and required == 1 %} required="required"{% endif %}>
+ <option value="1" {% if member.isActive() == 1 %}selected="selected"{% endif %}>{{ _T("Active") }}</option>
+ <option value="0" {% if member.isActive() == 0 %}selected="selected"{% endif %}>{{ _T("Inactive") }}</option>
+ </select>
+{% endblock %}
--- /dev/null
+<div class="grouped fields">
+ <div class="field required">
+{% include "components/forms/textarea.html.twig"
+ name: entry.field_id,
+ id: entry.field_id,
+ value: member.address|escape,
+ required: entry.required,
+ disabled: entry.disabled,
+ label: entry.label,
+ notag: true,
+ elt_class: "large",
+%}
+ </div>
+</div>
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+
+{% block component %}
+ {% set required = true %}
+ {% set type = "gaptcha" %}
+ {% set name = "gaptcha" %}
+ {% set id = "gaptcha" %}
+ {% set value = null %}
+ {% set example = _T("(numbers only)") %}
+ {% set tip = _T("This field is required trying to avoid registration spam. We are sorry for the inconvennience.") %}
+ {% set component_class = "field required" %}
+ {{ parent() }}
+{% endblock %}
+
+{% block label %}
+ {% set label = _T("Captcha") %}
+ {{ parent() }}
+ {{ gaptcha.generateQuestion() }}
+{% endblock %}
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+{% set inline = true %}
+
+{% block component %}
+ {% set type = "checkbox" %}
+ {% if masschange is defined and masschange == true %}
+ {% set component_class = "inline field" %}
+ {% else %}
+ {% set component_class = "field" %}
+ {% endif %}
+ {{ parent() }}
+{% endblock %}
--- /dev/null
+<div class="grouped fields">
+{include
+ file="forms_types/checkbox.tpl"
+ name="is_company"
+ id="is_company"
+ value="1"
+ label={_T string="Is company?"}
+ title={_T string="Is member a company?"}
+ tip={_T string="Do you manage a non profit organization, or a company? If you do so, check the box, and then enter its name in the field that will appear."}
+ checked=$member->isCompany()
+ component_class="field"
+}
+ <div class="field">
+{include
+ file="forms_types/text.tpl"
+ name=$entry->field_id
+ id=$entry->field_id
+ value=$member->company_name
+ required=$entry->required
+ disabled=$entry->disabled
+ label=$entry->label
+ component_id="company_field"
+ component_class="{if not $member->isCompany()}hidden{/if}"
+}
+ </div>
+</div>
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+
+{% block component %}
+ {% set type = "text" %}
+ {% set example = _T("(yyyy-mm-dd format)") %}
+ {% if id == 'ddn_adh' %}
+ {% set example = _T("(yyyy-mm-dd format)") ~ "<span id=\"member_age\">" ~ member.getAge() ~ "</span>" %}
+ {% endif %}
+ {% set component_class = "field" %}
+ {{ parent() }}
+{% endblock %}
+
+{% block element %}
+ <div class="ui calendar" id="birth-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ {{ parent() }}
+ </div>
+ </div>
+{% endblock %}
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+
+{% block component %}
+ <div class="grouped fields">
+ {% block label %}
+ <label>
+ {% if masschange %}
+ {# Add a checkbox for fields to change on mass edition #}
+ {# FIXME: use SUI capacitie to display that well #}
+ <input type="checkbox" name="mass_{{ entry.field_id }}" class="mass_checkbox"/>
+ {% endif %}
+ {{ label }}
+ </label>
+ {% endblock %}
+
+ {% block element %}
+ <div class="field inline">
+ <input type="radio" name="sexe_adh" id="gender_nc" value="{{ constant("Galette\\Entity\\Adherent::NC") }}"{% if not member.isMan() and not member.isWoman() %} checked="checked"{% endif %}{% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}/>
+ <label for="gender_nc">{{ _T("Unspecified") }}</label>
+ </div>
+ <div class="field inline">
+ <input type="radio" name="sexe_adh" id="gender_man" value="{{ constant("Galette\\Entity\\Adherent::MAN") }}"{% if member.isMan() %} checked="checked"{% endif %}{% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}/>
+ <label for="gender_man">{{ _T("Man") }}</label>
+ </div>
+ <div class="field inline">
+ <input type="radio" name="sexe_adh" id="gender_woman" value="{{ constant("Galette\\Entity\\Adherent::WOMAN") }}"{% if member.isWoman() %} checked="checked"{% endif %}{% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}/>
+ <label for="gender_woman">{{ _T("Woman") }}</label>
+ </div>
+ {% endblock %}
+ </div>
+{% endblock %}
--- /dev/null
+<div class="field">
+ <label>{_T string="Groups:"}</label>
+ {if $login->isGroupManager()}
+ <a class="ui icon button" id="btngroups">
+ <i class="user tag icon" aria-hidden="true"></i>
+ {_T string="Manage user's groups"}
+ </a>
+ {/if}
+ {if $login->isAdmin() or $login->isStaff()}
+ <a class="ui icon button" id="btnmanagedgroups">
+ <i class="user shield icon" aria-hidden="true"></i>
+ {_T string="Manage user's managed groups"}
+ </a>
+ {/if}
+ <span id="usergroups_form">
+ {if $member->id}
+ {foreach from=$groups item=group}
+ {if $member->isGroupMember($group->getName())}
+ <input type="hidden" name="groups_adh[]" value="{$group->getId()}|{$group->getName()}"/>
+ {/if}
+ {/foreach}
+ {/if}
+ </span>
+ {if $login->isAdmin() or $login->isStaff() or $login->isGroupManager()}
+ <span id="managedgroups_form">
+ {if $member->id}
+ {foreach from=$groups item=group}
+ {if $member->isGroupManager($group->getName())}
+ <input type="hidden" name="groups_managed_adh[]" value="{$group->getId()}|{$group->getName()}"/>
+ {/if}
+ {/foreach}
+ {/if}
+ </span>
+ {/if}
+ {if $login->isAdmin() or $login->isStaff() or $login->isGroupManager()}<br/>{/if}
+ <span id="usergroups">
+ {if $member->id}
+ {foreach from=$groups item=group name=groupsiterate}
+ {if $member->isGroupMember($group->getName())}
+ {if isset($isnotfirst)}, {else}<strong>{_T string="Member of:"}</strong>{/if}
+ {assign var=isnotfirst value=true}
+ {$group->getName()}
+ {/if}
+ {/foreach}
+ {/if}
+ </span>
+ {if isset($isnotfirst)}<br/>{/if}
+ <span id="managedgroups">
+ {if $member->id}
+ {foreach from=$groups item=group name=groupsmiterate}
+ {if $member->isGroupManager($group->getName())}
+ {if isset($isnotfirstm)}, {else}<strong>{_T string="Manager for:"}</strong>{/if}
+ {assign var=isnotfirstm value=true}
+ {$group->getName()}
+ {/if}
+ {/foreach}
+ {/if}
+ </span>
+</div>
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+
+{% block component %}
+ {% set type = "hidden" %}
+ {% set notag = true %}
+ {% set title = "" %}
+ {% set required = "" %}
+ {% set disabled = "" %}
+ {{ parent() }}
+{% endblock %}
+{% block label %}{% endblock %}
--- /dev/null
+{% block component %}
+{% if notag is not defined %}
+<div{% if component_id is defined %} id="{{ component_id }}"{% endif %}{% if component_class is defined %} class="{{ component_class }}"{% endif %}>
+{% endif %}
+ {% block label %}
+ <label for="{{ id }}"{% if title is defined %} title="{{ title }}"{% endif %}{% if labelclass is defined %} class="{% if labelclass is defined %}{{ labelclass }}{% endif %}"{% endif %}>
+ {% if masschange %}
+ {# Add a checkbox for fields to change on mass edition #}
+ <input type="checkbox" name="mass_{{ entry.field_id }}" class="mass_checkbox"/>
+ {% endif %}
+ {{ label }}
+ </label>
+ {% endblock %}
+ {% block element %}<input
+ type="{{ type }}"
+ name="{{ name }}"
+ id="{{ id }}"
+ value="{% if value is same as null %}{{ value }}{% endif %}"
+ {% if required is defined and required == true %} required="required"{% endif %}
+ {% if readonly is defined and readonly == true %} readonly="readonly"{% endif %}
+ {% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}
+ {% if title is defined %} title="{{ title }}"{% endif %}
+ {% if maxlength is defined %} maxlength="{{ maxlength }}"{% endif %}
+ {% if elt_class is defined %} class="{{ elt_class }}"{% endif %}
+ {% if autocomplete is defined %} autocomplete="{{ autocomplete }}"{% endif %}
+ {% if size is defined %} size="{{ size }}"{% endif %}
+ {% if checked is defined and checked == true %} checked="checked"{% endif %}
+ />
+ {% endblock %}
+ {% if tip is defined %}<i class="circular inverted primary small icon info tooltip" data-html="{{ tip }}"></i>{% endif %}
+ {% if example is defined %}<span class="exemple">{{ example }}</span>{% endif %}
+{% if notag is not defined %}
+</div>
+{% endif %}
+{% endblock %}
--- /dev/null
+{% extends "components/forms/select.html.twig" %}
+
+{% block element %}
+ <select name="pref_lang" id="pref_lang" class="ui dropdown nochosen lang"{% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}{% if required.pref_lang is defined and required.pref_lang == 1 %} required="required"{% endif %}>
+ {% for langue in languages %}
+ <option value="{{ langue.getID() }}"{% if member.language == langue.getID() %} selected="selected"{% endif %}>{{ langue.getName() }}</option>
+ {% endfor %}
+ </select>
+{% endblock %}
--- /dev/null
+{include
+ file="forms_types/input.tpl"
+ type="password"
+ name=$entry->field_id
+ id=$entry->field_id
+ required=$entry->required
+ disabled=$entry->disabled
+ label=$entry->label
+ autocomplete="off"
+ value=null
+ component_class="field"
+}
+{include
+ file="forms_types/input.tpl"
+ type="password"
+ name="mdp_adh2"
+ id="mdp_adh2"
+ required=$entry->required
+ disabled=$entry->disabled
+ label={_T string="Password confirmation:"}
+ autocomplete="off"
+ elt_class="labelalign"
+ value=null
+ component_class="field"
+}
+<script type="text/javascript">
+ $(function() {
+ {% include "elements/js/pwdcheck.js.twig" with { selector: '#' ~ entry.field_id } %}
+ });
+</script>
--- /dev/null
+{if !isset($show_inline)}
+<div class="field">
+{else}
+<div class="field inline">
+{/if}
+ <label for="{$varname}">{if isset($label)}{$label}{else}{_T string="Payment type:"}{/if}</label>
+ <select name="{$varname}" id="{$varname}" class="ui search dropdown nochosen">
+{if isset($empty)}
+ <option value="{$empty.value}">{$empty.label}</option>
+{/if}
+{assign var="ptypes" value=\Galette\Repository\PaymentTypes::getAll()}
+{foreach from=$ptypes item=ptype}
+ <option value="{$ptype->id}"{if $current eq $ptype->id} selected="selected"{/if}>{$ptype->getName()}</option>
+{/foreach}
+ </select>
+</div>
--- /dev/null
+<div class="field">
+ <label>{{ _T("Picture:") }}</label>
+ {% if member.id %}
+ {% set photo_id = member.id %}
+ {% else %}
+ {% set photo_id = 0 %}
+ {% endif %}
+ <img id="photo_adh" src="{{ path_for("photo", {"id": photo_id, "rand": time}) }}" class="picture" width="{{ member.picture.getOptimalWidth() }}" height="{{ member.picture.getOptimalHeight() }}" alt="{{ _T("Picture") }}"/><br/>
+{% if member.hasPicture() == 1 %}
+ <label for="del_photo" class="labelalign">{{ _T("Delete image") }}</label> <input type="checkbox" name="del_photo" id="del_photo" value="1"/><br/>
+{% endif %}
+ <input class="labelalign" type="file" name="photo"/>
+</div>
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+
+{% block component %}
+ {% if masschange is defined and masschange == true %}
+ {% set component_class = "inline field" %}
+ {% else %}
+ {% set component_class = "field" %}
+ {% endif %}
+ {% if entry.required %}
+ {% set component_class = component_class ~ ' required' %}
+ {% endif %}
+ {{ parent() }}
+{% endblock %}
+
+{% block element %}
+ <select
+ name="{{ name }}"
+ id="{{ id }}"
+ {% if required is defined and required == true %} required="required"{% endif %}
+ {% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}
+ class="ui search dropdown nochosen"
+ >
+ {% for value, label in values %}
+ <option value="{{ value }}">{{ label }}</option>
+ {% endfor %}
+ </select>
+{% endblock %}
--- /dev/null
+{% extends "components/forms/select.html.twig" %}
+
+{% block element %}
+ <select name="id_statut" id="id_statut" class="ui dropdown nochosen"{% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}{% if required.id_statut is defined and required.id_statut == 1 %} required="required"{% endif %}>
+ {% for key, value in statuts %}
+ <option value="{{ key }}"{% if key == member.status %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+{% endblock %}
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+
+{% block component %}
+ {% set type = "text" %}
+ {% if masschange is defined and masschange == true %}
+ {% set component_class = "inline field" %}
+ {% else %}
+ {% set component_class = 'field' %}
+ {% endif %}
+ {% if entry.required %}
+ {% set component_class = component_class ~ ' required' %}
+ {% endif %}
+ {{ parent() }}
+{% endblock %}
--- /dev/null
+{% extends "components/forms/input.html.twig" %}
+
+{% block component %}
+ {% set component_class = "field" %}
+ {{ parent() }}
+{% endblock %}
+
+{% block label %}
+ {# assign var="labelclass" value="vtop" #}
+ {{ parent() }}
+{% endblock %}
+
+{% block element %}
+ <textarea
+ name="{{ name }}"
+ id="{{ id }}"
+ cols="50"
+ rows="6"
+ {% if required is defined and required == true %} required="required"{% endif %}
+ {% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}
+ {% if title is defined %} title="{{ title }}"{% endif %}
+ {% if maxlength is defined %} maxlength="{{ maxlength }}"{% endif %}
+ {% if elt_class is defined %} class="{{ elt_class }}"{% endif %}
+ {% if autocomplete is defined %} autocomplete="{{ autocomplete }}"{% endif %}
+ {% if size is defined %} size="{$size}"{% endif %}
+ >{% if value is not sameas(null) %}{{ value }}{% endif %}</textarea><br/>
+{% endblock %}
--- /dev/null
+{% extends "components/forms/select.html.twig" %}
+
+{% block element %}
+ {% set values = "" %}
+ <select name="titre_adh" id="titre_adh" class="ui dropdown nochosen"{% if disabled is defined and disabled == true %} disabled="disabled"{% endif %}{% if required is defined and required == true %} required="required"{% endif %}>
+ <option value="{% if required is defined and required == true %}-1{% endif %}">{{ _T("Not supplied") }}</option>
+{% for title in titles_list %}
+ <option value="{{ title.id }}"{% if member.title != null and member.title.id == title.id %} selected="selected"{% endif %}>{{ title.long }}</option>
+{% endfor %}
+ </select>
+{% endblock %}
{# This file contains common html headers to include for Galette Twig rendering. #}
- <title>{% if pref_slogan != "" %}{{ pref_slogan }} - {% endif %}{% if page_title != "" %}{{ page_title }} - {% endif %}Galette {{ constant('GALETTE_VERSION') }}</title>
+ <title>{% if preferences.pref_slogan != "" %}{{ preferences.pref_slogan }} - {% endif %}{% if page_title != "" %}{{ page_title }} - {% endif %}Galette {{ constant('GALETTE_VERSION') }}</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
- <link rel="stylesheet" type="text/css" href="{{ base_url }}/assets/css/galette-main.bundle.min.css" />
- <link rel="stylesheet" type="text/css" href="{{ base_url }}/assets/ui/semantic.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ base_url() }}/assets/css/galette-main.bundle.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ base_url() }}/assets/ui/semantic.min.css" />
{# Let's see if a local CSS exists and include it #}
{% set localstylesheet = constant('_CURRENT_THEME_PATH') ~ "galette_local.css" %}
{% if file_exists(localstylesheet) %}
- <link rel="stylesheet" type="text/css" href="{{ base_url }}/{{ constant('GALETTE_THEME') }}/galette_local.css" />
+ <link rel="stylesheet" type="text/css" href="{{ base_url() }}/{{ constant('GALETTE_THEME') }}/galette_local.css" />
{% endif %}
- <script type="text/javascript" src="{{ base_url }}/assets/js/galette-main.bundle.min.js"></script>
+ <script type="text/javascript" src="{{ base_url() }}/assets/js/galette-main.bundle.min.js"></script>
{% if require_charts %}
- <link rel="stylesheet" type="text/css" href="{{ base_url }}/assets/css/galette-jqplot.bundle.min.css" />
+ <link rel="stylesheet" type="text/css" href="{{ base_url() }}/assets/css/galette-jqplot.bundle.min.css" />
{% endif %}
- <script type="text/javascript" src="{{ base_url }}/assets/ui/semantic.min.js"></script>
- <link rel="stylesheet" type="text/css" href="{{ base_url }}/{{ constant('GALETTE_THEME') }}galette_print.css" media="print" />
+ <script type="text/javascript" src="{{ base_url() }}/assets/ui/semantic.min.js"></script>
+ <link rel="stylesheet" type="text/css" href="{{ base_url() }}/{{ constant('GALETTE_THEME') }}galette_print.css" media="print" />
{# Let's see if a local print CSS exists and include it #}
{% set localprintstylesheet = constant('_CURRENT_THEME_PATH') ~ "galette_print_local.css" %}
{% if file_exists(localprintstylesheet) %}
- <link rel="stylesheet" type="text/css" href="{{ base_url }}/{{ constant('GALETTE_THEME') }}/galette_print_local.css" media="print" />
+ <link rel="stylesheet" type="text/css" href="{{ base_url() }}/{{ constant('GALETTE_THEME') }}/galette_print_local.css" media="print" />
{% endif %}
- <link rel="shortcut icon" href="{{ base_url }}/{{ constant('GALETTE_THEME') }}images/favicon.png" />
+ <link rel="shortcut icon" href="{{ base_url() }}/{{ constant('GALETTE_THEME') }}images/favicon.png" />
{#
{* If some additional headers should be added from plugins, we load the relevant template file
We have to use a template file, so Twig will do its work (like replacing variables). *}
+++ /dev/null
-{% if extra_data is not defined %}
- {% set extra_data = '' %}
-{% endif %}
-$('{{ selector }}').parent('p').append($('<meter max="4" class="password-strength-meter"></meter><span class="password-strength-text"></span>'));
-$('{{ selector }}').on('keyup', function() {
- var _this = $(this);
- $.ajax({
- url: '{{ path_for("checkPassword") }}',
- type: 'POST',
- data: {
- value: $('{{ selector }}').val(),
- {{ extra_data|raw }}
- },
- {% include "elements/js/loader.js.twig" %},
- success: function(res) {
- var _p = _this.parent('p');
- var _meter = _p.find('.password-strength-meter');
-
- _meter.val(res.score);
- var _txt = _p.find('span.password-strength-text');
-
- //reset
- _p.find('.passtips').remove();
- _txt.attr('class', 'password-strength-text');
- _txt.html('');
- _meter.attr('class', 'password-strength-meter');
- _meter.attr('title', '');
-
- if (res.valid) {
- _txt.append($('<i class="ui check circle green icon"></i> <span>{{ _T("Password is valid :)")|e('js') }}</span>'));
- _txt.addClass('use');
- } else {
- _txt.append($('<i class="ui times circle red icon"></i> <span>{{ _T("Password is not valid!")|e('js') }}</span>'));
-
- _txt.append(' (');
- for (i = 0; i < res.errors.length; i++) {
- if (i > 0) {
- _txt.append(', ');
- }
- _txt.append(res.errors[i]);
- }
- _txt.append(')');
- _txt.addClass('delete');
- }
-
- if (res.warnings) {
- _meter.addClass('tooltip');
- var _tip = $('<span class="passtips tip"></span>');
- _tip.hide();
- for (i = 0; i < res.warnings.length; i++) {
- if (i > 0) {
- _tip.append('<br/>');
- }
- _tip.append(res.warnings[i]);
- }
- _meter.after(_tip);
- }
- },
- error: function () {
- alert('{{ _T("An error occured checking password :(")|e('js') }}');
- }
- });
-
-});
-
--- /dev/null
+{% if extra_data is not defined %}
+ {% set extra_data = '' %}
+{% endif %}
+$('{{ selector }}').parent('p').append($('<meter max="4" class="password-strength-meter"></meter><span class="password-strength-text"></span>'));
+$('{{ selector }}').on('keyup', function() {
+ var _this = $(this);
+ $.ajax({
+ url: '{{ path_for("checkPassword") }}',
+ type: 'POST',
+ data: {
+ value: $('{{ selector }}').val(),
+ {{ extra_data|raw }}
+ },
+ {% include "elements/js/loader.js.twig" %},
+ success: function(res) {
+ var _p = _this.parent('p');
+ var _meter = _p.find('.password-strength-meter');
+
+ _meter.val(res.score);
+ var _txt = _p.find('span.password-strength-text');
+
+ //reset
+ _p.find('.passtips').remove();
+ _txt.attr('class', 'password-strength-text');
+ _txt.html('');
+ _meter.attr('class', 'password-strength-meter');
+ _meter.attr('title', '');
+
+ if (res.valid) {
+ _txt.append($('<i class="ui check circle green icon"></i> <span>{{ _T("Password is valid :)")|e('js') }}</span>'));
+ _txt.addClass('use');
+ } else {
+ _txt.append($('<i class="ui times circle red icon"></i> <span>{{ _T("Password is not valid!")|e('js') }}</span>'));
+
+ _txt.append(' (');
+ for (i = 0; i < res.errors.length; i++) {
+ if (i > 0) {
+ _txt.append(', ');
+ }
+ _txt.append(res.errors[i]);
+ }
+ _txt.append(')');
+ _txt.addClass('delete');
+ }
+
+ if (res.warnings) {
+ _meter.addClass('tooltip');
+ var _tip = $('<span class="passtips tip"></span>');
+ _tip.hide();
+ for (i = 0; i < res.warnings.length; i++) {
+ if (i > 0) {
+ _tip.append('<br/>');
+ }
+ _tip.append(res.warnings[i]);
+ }
+ _meter.after(_tip);
+ }
+ },
+ error: function () {
+ alert('{{ _T("An error occured checking password :(")|e('js') }}');
+ }
+ });
+
+});
+
});
</script>
{% if require_charts %}
- <script type="text/javascript" src="{{ base_url }}/assets/js/galette-jqplot.bundle.min.js"></script>
+ <script type="text/javascript" src="{{ base_url() }}/assets/js/galette-jqplot.bundle.min.js"></script>
{% endif %}
{% if require_mass %}
- <script type="text/javascript" src="{{ base_url }}/{$scripts_dir}mass_changes.js"></script>
+ <script type="text/javascript" src="{{ base_url() }}/{$scripts_dir}mass_changes.js"></script>
{% endif %}
{% if html_editor %}
- <script src="{{ base_url }}/assets/js/lang/summernote-{$i18n->getID()|replace:'_':'-'}.min.js"></script>
+ <script src="{{ base_url() }}/assets/js/lang/summernote-{$i18n->getID()|replace:'_':'-'}.min.js"></script>
<script language="javascript">
function activateMailingEditor(id) {
if(!$('#mailing_html').attr('checked')){
{% endif %}
{% set localjstracking = constant('_CURRENT_THEME_PATH') ~ "tracking.js" %}
{% if file_exists(localjstracking) %}
- <script type="text/javascript" src="{{ base_url }}/{{ constant('GALETTE_THEME') }}/tracking.js"></script>
+ <script type="text/javascript" src="{{ base_url() }}/{{ constant('GALETTE_THEME') }}/tracking.js"></script>
{% endif %}
--- /dev/null
+{% extends (mode == 'ajax') ? "ajax.html.twig" : "page.html.twig" %}
+
+{% block content %}
+ <div id="mass_change"{% if mode != 'ajax' %} class="center"{% else %} title="{{ page_title }}"{% endif %}>
+ <form action="{{ form_url }}" method="post" class="ui form">
+ {% if mode != 'ajax' %}<h2>{{ page_title }}</h2>{% endif %}
+ {% if changes is not defined %}
+ <p>{{ _T("Only checked fields will be updated.") }}</p>
+ {# Form entries #}
+ {% include "components/form.html.twig" with { masschange: true } %}
+ {# Dynamic entries #}
+ {% include "components/edit_dynamic_fields.html.twig" with { object: member, masschange: true} %}
+ {% else %}
+ <p>{{ _T("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("Unspecified") }}}
+ {/if}
+ {if $display_value eq {Galette\Entity\Adherent::WOMAN}}
+ {assign var="display_value" value={{ _T("Woman") }}}
+ {/if}
+ {if $display_value eq {Galette\Entity\Adherent::MAN}}
+ {assign var="display_value" value={{ _T("Man") }}}
+ {/if}
+ {/if}
+ <li>
+ <input type="hidden" name="{$field}" value="{$change.value}"/>
+ {$change.label} {$display_value}
+ </li>
+ {/foreach}
+ </ul>
+ {% endif %}
+ <div class="button-container">
+ <input type="submit" id="masschange" class="ui button" value="{% if changes is not defined %}{{ _T("Edit") }}{% else %}{{ _T("OK") }}{% endif %}"/>
+ <a href="{{ cancel_uri }}" class="ui button" id="btncancel">{{ _T("Cancel") }}</a>
+ <input type="hidden" name="confirm" value="1"/>
+ {% if mode == 'ajax' %}<input type="hidden" name="ajax" value="true"/>{% endif %}
+ {% for key, value in data %}
+ {% if value is iterable %}
+ {% for val in value %}
+ <input type="hidden" name="{{ key }}[]" value="{{ val }}"/>
+ {% endfor %}
+ {% else %}
+ <input type="hidden" name="{{ key }}" value="{{ value }}"/>
+ {% endif %}
+ {% endfor %}
+ {% include "components/forms/csrf.html.twig" %}
+ </div>
+ </form>
+ </div>
+{% endblock %}
{% if login.isLogged() %}
{% include 'elements/navigation/navigation_aside.html.twig' %}
{% endif %}
- <section class="content{% if contentcls %} {{ contentcls }}{% endif %}">
+ <section class="content{% if contentcls is defined %} {{ contentcls }}{% endif %}">
{% if not login.isLogged() %}
<div class="ui basic center aligned fitted segment">
<img src="{path_for name="logo"}" width="{{ logo.getOptimalWidth() }}" height="{{ logo.getOptimalHeight() }}" alt="{{ preferences.pref_nom }}" class="icon"/>
--- /dev/null
+{% extends 'page.html.twig' %}
+
+{% block content %}
+ <form action="{{ path_for('filter-memberslist') }}" method="post" id="filtre" class="ui form">
+ <div class="galetteform ui styled fluid accordion field">
+ <div class="active ui title">
+ <i class="dropdown icon"></i>
+ {{ _T('Simple search') }}
+ </div>
+ <div class="active content">
+ <div class="four fields">
+ <div class="field">
+ <label for="filter_str">{{ _T('Search:') }}</label>
+ <input type="text" name="filter_str" id="filter_str" value="{{ filters.filter_str }}" type="search" placeholder="{{ _T('Enter a value') }}"/>
+ </div>
+ <div class="field">
+ <label for="field_filter">{{ _T('in:') }}</label>
+ <select name="field_filter" class="ui search dropdown nochosen">
+ {% for key, value in field_filter_options %}
+ <option value="{{ key }}"{% if key == filters.field_filter %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="field">
+ <label for="membership_filter">{{ _T('Membership status') }}</label>
+ <select id="membership_filter" name="membership_filter" class="ui search dropdown nochosen">
+ {% for key, value in membership_filter_options %}
+ <option value="{{ key }}"{% if key == filters.membership_filter %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="field">
+ <label for="filter_account">{{ _T('Account activity') }}</label>
+ <select id="filter_account" name="filter_account" class="ui search dropdown nochosen">
+ {% for key, value in filter_accounts_options %}
+ <option value="{{ key }}"{% if key == filters.filter_account %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="field">
+ <label for="group_filter">{{ _T('Member of group') }}</label>
+ <select name="group_filter" id="group_filter" class="ui search dropdown nochosen">
+ <option value="0">{{ _T('Select a group') }}</option>
+{% for group in filter_groups_options %}
+ <option value="{{ group.getId() }}"{% if filters.group_filter == group.getId() %} selected="selected"{% endif %}>{{ group.getIndentName()|raw }}</option>
+{% endfor %}
+ </select>
+ </div>
+ </div>
+ <div class="inline fields">
+ <label for="email_filter">{{ _T('With email:') }}</label>
+ <div class="field">
+ <div class="ui radio checkbox">
+ <input type="radio" name="email_filter" id="filter_dc_email" value="{{ constant("Galette\\Repository\\Members::FILTER_DC_EMAIL") }}"{% if filters.email_filter == constant('Galette\\Repository\\Members::FILTER_DC_EMAIL') %} checked="checked"{% endif %}>
+ <label for="filter_dc_email">{{ _T("Don't care") }}</label>
+ </div>
+ </div>
+ <div class="field">
+ <div class="ui radio checkbox">
+ <input type="radio" name="email_filter" id="filter_with_email" value="{{ constant("Galette\\Repository\\Members::FILTER_W_EMAIL") }}"{% if filters.email_filter == constant("Galette\\Repository\\Members::FILTER_W_EMAIL") %} checked="checked"{% endif %}>
+ <label for="filter_with_email">{{ _T('With') }}</label>
+ </div>
+ </div>
+ <div class="field">
+ <div class="ui radio checkbox">
+ <input type="radio" name="email_filter" id="filter_without_email" value="{{ constant("Galette\\Repository\\Members::FILTER_WO_EMAIL") }}"{% if filters.email_filter == constant("Galette\\Repository\\Members::FILTER_WO_EMAIL") %} checked="checked"{% endif %}>
+ <label for="filter_without_email">{{ _T('Without') }}</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="galetteform ui styled fluid accordion field">
+ <div class="active ui title">
+ <i class="dropdown icon"></i>
+ {{ _T('Advanced search') }}
+ </div>
+ <div class="active content">
+ <div class="two fields">
+ <div class="field">
+ <label>{{ _T('Birth date') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="birth_date_begin">{{ _T('beetween') }}</label>
+ <div class="ui calendar" id="birth-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="birth_date_begin" name="birth_date_begin" type="text" class="birth_date" maxlength="10" size="10" value="{$filters->birth_date_begin}" placeholder="{{ _T('(yyyy-mm-dd format)') }}" />
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="birth_date_end">{{ _T('and') }}</label>
+ <div class="ui calendar" id="birth-rangeend">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="birth_date_end" name="birth_date_end" type="text" class="birth_date" maxlength="10" size="10" value="{$filters->birth_date_end}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label>{{ _T('Creation date') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="creation_date_begin">{{ _T('beetween') }}</label>
+ <div class="ui calendar" id="creation-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="creation_date_begin" name="creation_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->creation_date_begin}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="creation_date_end">{{ _T('and') }}</label>
+ <div class="ui calendar" id="creation-rangeend">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="creation_date_end" name="creation_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->creation_date_end}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="two fields">
+ <div class="field">
+ <label>{{ _T('Modification date') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="modif_date_begin">{{ _T('beetween') }}</label>
+ <div class="ui calendar" id="modification-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="modif_date_begin" name="modif_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->modif_date_begin}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="modif_date_end">{{ _T('and') }}</label>
+ <div class="ui calendar" id="modification-rangeend">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="modif_date_end" name="modif_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{$filters->modif_date_end}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label>{{ _T('Due date') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="due_date_begin">{{ _T('beetween') }}</label>
+ <div class="ui calendar" id="due-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="due_date_begin" name="due_date_begin" type="text" class="due_date" maxlength="10" size="10" value="{$filters->due_date_begin}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="due_date_end">{{ _T('and') }}</label>
+ <div class="ui calendar" id="due-rangeend">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="due_date_end" name="due_date_end" type="text" class="due_date" maxlength="10" size="10" value="{$filters->due_date_end}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="two fields">
+ <div class="field">
+ <div class="grouped fields">
+ <label for="show_public_infos">{{ _T('Show public infos') }}</label>
+ <div class="field">
+ <div class="ui radio checkbox">
+ <input type="radio" name="show_public_infos" id="show_public_infos_dc" value="{{ constant("Galette\\Repository\\Members::FILTER_DC_PUBINFOS") }}"{% if filters.show_public_infos == constant("Galette\\Repository\\Members::FILTER_DC_PUBINFOS") %} checked="checked"{% endif %}>
+ <label for="show_public_infos_dc" >{{ _T("Don't care") }}</label>
+ </div>
+ </div>
+ <div class="field">
+ <div class="ui radio checkbox">
+ <input type="radio" name="show_public_infos" id="show_public_infos_yes" value="{{ constant("Galette\\Repository\\Members::FILTER_W_PUBINFOS") }}"{% if filters.show_public_infos == constant("Galette\\Repository\\Members::FILTER_W_PUBINFOS") %} checked="checked"{% endif %}>
+ <label for="show_public_infos_yes" >{{ _T('Yes') }}</label>
+ </div>
+ </div>
+ <div class="field">
+ <div class="ui radio checkbox">
+ <input type="radio" name="show_public_infos" id="show_public_infos_no" value="{{ constant("Galette\\Repository\\Members::FILTER_WO_PUBINFOS") }}"{% if filters.show_public_infos == constant("Galette\\Repository\\Members::FILTER_WO_PUBINFOS") %} checked="checked"{% endif %}>
+ <label for="show_public_infos_no" >{{ _T('No') }}</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="status">{{ _T('Status') }}</label>
+ <select name="status[]" id="status" multiple="" class="ui search dropdown nochosen">
+ <option value="">{{ _T('Status') }}</option>
+ {% for key, value in statuts %}
+ <option value="{{ key }}"{% if key == filters.status %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="galetteform ui styled fluid accordion field">
+ <div class="active ui title">
+ <i class="dropdown icon"></i>
+ {{ _T('Advanced groups search') }} ({{ _T('Experimental') }})
+ <a
+ href="#"
+ id="addbutton_g"
+ class="ui tiny compact icon green button tab-button tooltip"
+ >
+ <i class="plus icon"></i>
+ <span class="hidden">{{ _T('Add new group search criteria') }}</span>
+ </a>
+ </div>
+ <div class="active content">
+ <select name="groups_logical_operator" class="operator_selector nochosen">
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_AND") }}"{% if filters.groups_search_log_op == constant("Galette\\Filters\\AdvancedMembersList::OP_AND") %} selected="selected"{% endif %}>{{ _T('In all selected groups') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_OR") }}"{% if filters.groups_search_log_op == constant("Galette\\Filters\\AdvancedMembersList::OP_OR") %} selected="selected"{% endif %}>{{ _T('In any of selected groups') }}</option>
+ </select>
+ <ul id="groups_search_list" class="fields_list">
+ {% for gs in filters.groups_search %}
+ <li>
+ <select name="groups_search[]" class="group_selector nochosen">
+ <option value="">{{ _T('Select a group') }}</option>
+ {% for group in filter_groups_options %}
+ <option value="{{ group.getId() }}"{% if gs.group == group.getId() %} selected="selected"{% endif %}>{{ group.getName() }}</option>
+ {% endfor %}
+ </select>
+ <a
+ href="#"
+ class="ui small compact red icon button fright tooltip delete delcriteria"
+ >
+ <i class="trash alt icon"></i>
+ <span class="sr-only">{{ _T('Remove criteria') }}</span>
+ </a>
+ </li>
+ {% endfor %}
+ </ul>
+ </div>
+ </div>
+
+ <div class="galetteform ui styled fluid accordion field">
+ <div class="active ui title">
+ <i class="dropdown icon"></i>
+ {{ _T('Within contributions') }}
+ </div>
+ <div class="active content">
+ <div class="two fields">
+ <div class="field">
+ <label>{{ _T('Creation date') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="contrib_creation_date_begin">{{ _T('beetween') }}</label>
+ <div class="ui calendar" id="contrib-creation-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="contrib_creation_date_begin" name="contrib_creation_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_creation_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="contrib_creation_date_end">{{ _T('and') }}</label>
+ <div class="ui calendar" id="contrib-creation-rangeend">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="contrib_creation_date_end" name="contrib_creation_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_creation_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label>{{ _T('Begin date') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="contrib_begin_date_begin">{{ _T('beetween') }}</label>
+ <div class="ui calendar" id="contrib-begin-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="contrib_begin_date_begin" name="contrib_begin_date_begin" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_begin_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="contrib_begin_date_end">{{ _T('and') }}</label>
+ <div class="ui calendar" id="contrib-begin-rangeend">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="contrib_begin_date_end" name="contrib_begin_date_end" type="text" class="modif_date" maxlength="10" size="10" value="{{ filters.contrib_begin_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="two fields">
+ <div class="field">
+ <label>{{ _T('End date') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="contrib_end_date_begin">{{ _T('beetween') }}</label>
+ <div class="ui calendar" id="contrib-end-rangestart">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="contrib_end_date_begin" name="contrib_end_date_begin" type="text" class="due_date" maxlength="10" size="10" value="{{ filters.contrib_end_date_begin }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label for="contrib_end_date_end">{{ _T('and') }}</label>
+ <div class="ui calendar" id="contrib-end-rangeend">
+ <div class="ui input left icon">
+ <i class="calendar icon"></i>
+ <input id="contrib_end_date_end" name="contrib_end_date_end" type="text" class="due_date" maxlength="10" size="10" value="{{ filters.contrib_end_date_end }}" placeholder="{{ _T('(yyyy-mm-dd format)') }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="field">
+ <label>{{ _T('Amount') }}</label>
+ <div class="two fields">
+ <div class="field">
+ <label for="contrib_min_amount">{{ _T('beetween') }}</label>
+ <input id="contrib_min_amount" name="contrib_min_amount" type="text" maxlength="10" size="10" value="{{ filters.contrib_min_amount }}"/>
+ </div>
+ <div class="field">
+ <label for="contrib_max_amount">{{ _T('and') }}</label>
+ <input id="contrib_max_amount" name="contrib_max_amount" type="text" maxlength="10" size="10" value="{{ filters.contrib_max_amount }}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="two fields">
+ <div class="field">
+ <label for="contributions_types">{{ _T('Type') }}</label>
+ <select name="contributions_types[]" id="contributions_types" multiple="" class="ui dropdown nochosen">
+ <option value="">{{ _T('Type') }}</option>
+
+ {% for key, value in contributions_types %}
+ <option value="{{ key }}"{% if key == filters.contributions_types %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="field">
+ <label for="payments_types">{{ _T('Payment type') }}</label>
+ <select name="payments_types[]" id="payments_types" multiple="" class="ui dropdown nochosen">
+ <option value="">{{ _T('Payment type') }}</option>
+ {% for key, value in payments_types %}
+ <option value="{{ key }}"{% if key == filters.payments_types %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+{% for field in contrib_dynamics %}
+ <div class="field">
+ {% set fid = field.getId() %}
+ {% if get_class(field) == "Galette\\DynamicFields\\Choice" %}
+ {% set rid = "cdsc_" ~ fid %}
+ {% else %}
+ {% set rid = "cds_" ~ fid %}
+ {% endif %}
+ <label for="cds{% if get_class(field) == "Galette\\DynamicFields\\Choice" %}c{% endif %}_{{ field.getId() }}">{{ field.getName() }}</label>
+ {% if get_class(field) == "Galette\\DynamicFields\\Line" %}
+ <input type="text" name="cds_{{ field.getId() }}" id="cds_{{ field.getId() }}" value="{% if attribute(filters.contrib_dynamic, rid) is defined %}{{ attribute(filters.contrib_dynamic, rid) }}{% endif %}" />
+ {% elseif get_class(field) == "Galette\\DynamicFields\\Text" %}
+ <textarea name="cds_{{ field.getId() }}" id="cds_{{ field.getId() }}">{% if attribute(filters.contrib_dynamic, rid) is defined %}{{ attribute(filters.contrib_dynamic, rid) }}{% endif %}</textarea>
+ {% elseif get_class(field) == "Galette\\DynamicFields\\Choice" %}
+ <select name="cdsc_{{ field.getId() }}[]" id="cdsc_{{ field.getId() }}" multiple="multiple" class="ui dropdown nochosen">
+ <option value="">{{ _T('Select') }}</option>
+ {% for k, choice in field.getValues() %}
+ <option value="{{ k }}"{% if cds.field is defined and cds.field == rid %} selected="selected"{% endif %}>{{ choice }}</option>
+ {% endfor %}
+ </select>
+ {% endif %}
+ </div>
+{% endfor %}
+ </div>
+ </div>
+ <div class="galetteform ui styled fluid accordion field">
+ <div class="active ui title">
+ <i class="dropdown icon"></i>
+ {{ _T('Free search') }}
+ <a
+ href="#"
+ id="addbutton"
+ class="ui tiny compact icon green button tab-button tooltip"
+ >
+ <i class="plus icon"></i>
+ <span class="hidden">{{ _T('Add new free search criteria') }}</span>
+ </a>
+ </div>
+ <div class="active content">
+ <ul id="fs_sortable" class="fields_list connectedSortable">
+{% for fs in filters.free_search %}
+ <li>
+ <select name="free_logical_operator[]" class="operator_selector nochosen">
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_AND") }}"{if $fs.log_op eq constant("Galette\\Filters\\AdvancedMembersList::OP_AND")} selected="selected"{/if}>{{ _T('and') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_OR") }}"{if $fs.log_op eq constant("Galette\\Filters\\AdvancedMembersList::OP_OR")} selected="selected"{/if}>{{ _T('or') }}</option>
+ </select>
+ <select name="free_field[]" class="field_selector nochosen">
+ <option value="">{{ _T('Select a field') }}</option>
+ {% for key, field in search_fields %}
+ {% if fs.field == key %}
+ {% if key starts with 'date_' or key == 'ddn_adh' %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::DATE") %}
+ {% elseif key == constant("Galette\\Entity\\Status::PK") %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
+ {% set fvalues = statuts %}
+ {% elseif key == 'sexe_adh' %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
+ {% set fvalues = {
+ (constant("Galette\\Entity\\Adherent::NC")): _T('Unspecified'),
+ (constant("Galette\\Entity\\Adherent::MAN")): _T('Man'),
+ (constant("Galette\\Entity\\Adherent::WOMAN")): _T('Woman')
+ }
+ %}
+ {% else %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::LINE") %}
+ {% endif %}
+ {% endif %}
+ <option value="{{ key }}"{% if fs.field == key %} selected="selected"{% endif %}>{{ field.label }}</option>
+ {% endfor %}
+ {% for field in adh_dynamics %}
+ {% if get_class(field) != "Galette\\DynamicFields\\Separator" %}
+ {% set fid = field.getId() %}
+ {% set rid = "dyn_" ~ fid %}
+ {% if fs.field == rid %}
+ {% set cur_field = field %}
+ {% endif %}
+ {% endif %}
+ <option value="dyn_{{ field.getId() }}"{% if fs.field == rid %} selected="selected"{% endif %}>{{ field.getName() }}</option>
+ {% endfor %}
+ {% for type, label in adh_socials %}
+ {% set rid = "socials_" ~ type %}
+ {% if fs.field == rid %}
+ {% set cur_field = type %}
+ {% endif %}
+ <option value="socials_{{ type }}"{% if fs.field == rid %} selected="selected"{% endif %}>{{ label }}</option>
+ {% endfor %}
+
+ </select>
+ {# may not be defined #}
+ {# #}
+ {% if type is not defined %}{% set type = null %}{% endif %}
+ <span class="data">
+ <input type="hidden" name="free_type[]" value="{if isset($cur_field)}{$cur_field->getType()}{/if}"/>
+ {% if cur_field is defined and (get_class(cur_field) == "Galette\\DynamicFields\\Choice" or type == constant("Galette\\DynamicFields\\DynamicField::CHOICE")) %}
+ <select name="free_query_operator[]" class="free_operator nochosen">
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") %} selected="selected"{% endif %}>{{ _T('is not') }}</option>
+ </select>
+ <select name="free_text[]" class="free_text nochosen">
+ {% if cur_field is defined and get_class(cur_field) == "Galette\\DynamicFields\\Choice" %}
+ {% for key, value in cur_field.getValues() %}
+ <option value="{{ key }}"{% if key == fs.search %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ {% else %}
+ {% for key, value in fvalues %}
+ <option value="{{ key }}"{% if key == fs.search %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ {% endif %}
+ </select>
+ {% elseif cur_field is defined and (get_class(cur_field) == "Galette\\DynamicFields\\Date" or type == constant("Galette\\DynamicFields\\DynamicField::DATE")) %}
+ <select name="free_query_operator[]" class="free_operator nochosen">
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_BEFORE") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_BEFORE") %} selected="selected"{% endif %}>{{ _T('before') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_AFTER") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_AFTER") %} selected="selected"{% endif %}>{{ _T('after') }}</option>
+ </select>
+ <input type="text" name="free_text[]" value="{{ fs.search|date(_T('Y-m-d')) }}" class="modif_date" maxlength="10" size="10"/>
+ <span class="exemple">{{ _T('(yyyy-mm-dd format)') }}</span>
+ {% elseif cur_field is defined and (get_class(cur_field) == "Galette\\DynamicFields\\Boolean" or type == constant("Galette\\DynamicFields\\DynamicField::BOOLEAN")) %}
+ <select name="free_query_operator[]" class="free_operator nochosen">
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
+ </select>
+ <input type="radio" name="free_text[]" id="free_text_yes" value="1"{% if fs.search == 1 %} checked="checked"{% endif %}/><label for="free_text_yes">{{ _T('Yes') }}</label>
+ <input type="radio" name="free_text[]" id="free_text_no" value="0"{% if fs.search == 0 %} checked="checked"{% endif %}/><label for="free_text_no">{{ _T('No') }}</label>
+ {% else %}
+ <select name="free_query_operator[]" class="free_operator nochosen">
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") %} selected="selected"{% endif %}>{{ _T('is') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_CONTAINS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_CONTAINS") %} selected="selected"{% endif %}>{{ _T('contains') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") %} selected="selected"{% endif %}>{{ _T('is not') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_CONTAINS") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_NOT_CONTAINS") %} selected="selected"{% endif %}>{{ _T('do not contains') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_STARTS_WITH") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_STARTS_WITH") %} selected="selected"{% endif %}>{{ _T('starts with') }}</option>
+ <option value="{{ constant("Galette\\Filters\\AdvancedMembersList::OP_ENDS_WITH") }}"{% if fs.qry_op == constant("Galette\\Filters\\AdvancedMembersList::OP_ENDS_WITH") %} selected="selected"{% endif %}>{{ _T('ends with') }}</option>
+ </select>
+ <input type="text" name="free_text[]" value="{{ fs.search }}"{% if cur_field is defined and get_class(cur_field) == "Galette\\DynamicFields\\Text" %} class="large"{% endif %}/>
+ {% endif %}
+ </span>
+ <a
+ href="#"
+ class="ui small compact red icon button fright tooltip delete delcriteria"
+ >
+ <i class="trash alt icon"></i>
+ <span class="sr-only">{{ _T('Remove criteria') }}</span>
+ </a>
+ </li>
+{% endfor %}
+ </ul>
+ </div>
+ </div>
+ <div class="ui basic center aligned segment">
+ <input type="submit" class="ui primary button" value="{{ _T('Filter') }}"/>
+ <input type="hidden" name="advanced_filtering" value="true" />
+ <input type="submit" name="clear_adv_filter" class="ui button" value="{{ _T('Clear filter') }}"/>
+ {% include "components/forms/csrf.html.twig" %}
+ </div>
+ </form>
+{% endblock %}
+
+{% block javascripts %}
+ <script type="text/javascript">
+ var _operators = {
+ op_equals: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_EQUALS") }},
+ name: "{{ _T('is') }}"
+ },
+ op_contains: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_CONTAINS") }},
+ name: "{{ _T('contains') }}"
+ },
+ op_not_equals: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_NOT_EQUALS") }},
+ name: "{{ _T('is not') }}"
+ },
+ op_not_contains: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_NOT_CONTAINS") }},
+ name: "{{ _T('do not contains') }}"
+ },
+ op_starts_with: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_STARTS_WITH") }},
+ name: "{{ _T('starts with') }}"
+ },
+ op_ends_with: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_ENDS_WITH") }},
+ name: "{{ _T('ends with') }}"
+ },
+ op_before: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_BEFORE") }},
+ name: "{{ _T('before') }}"
+ },
+ op_after: {
+ id: {{ constant ("Galette\\Filters\\AdvancedMembersList::OP_AFTER") }},
+ name: "{{ _T('after') }}"
+ },
+ };
+
+ var _fields = {
+{% for key, field in search_fields %}
+ {% if key starts with 'date_' or key == 'ddn_adh' %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::DATE") %}
+ {% elseif key == constant("Galette\\Entity\\Status::PK") %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
+ {% set fvalues = statuts %}
+ {% elseif key == 'sexe_adh' %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::CHOICE") %}
+ {% set fvalues = {
+ (constant("Galette\\Entity\\Adherent::NC")): _T('Unspecified'),
+ (constant("Galette\\Entity\\Adherent::MAN")): _T('Man'),
+ (constant("Galette\\Entity\\Adherent::WOMAN")): _T('Woman')
+ }
+ %}
+ {% else %}
+ {% set type = constant("Galette\\DynamicFields\\DynamicField::LINE") %}
+ {% endif %}
+ {{ key }}: { type:'{{ type }}'{% if fvalues is defined %}, values: {{ fvalues|json_encode }}{% endif %} },
+{% endfor %}
+{% for field in adh_dynamics %}
+ {% if get_class(field) == "Galette\\DynamicFields\\Separator" %}
+ {# do nothing #}
+ {% elseif get_class(field) == "Galette\\DynamicFields\\Choice" %}
+ dyn_{{ field.getId() }}: { type:'{{ field.getType() }}', values: {{ field.getValues()|json_encode }} },
+ {% else %}
+ dyn_{{ field.getId() }}: { type:'{{ field.getType() }}' },
+ {% endif %}
+{% endfor %}
+ };
+
+ var _newFilter = function(elt) {
+ elt.find('span').html('');
+ elt.find('select.operator_selector').val(0);
+ elt.find('select.field_selector').val('');
+ }
+ var _rmFilter = function(elt) {
+ if ( !elt ) {
+ elt = $('li');
+ }
+ elt.find('.delcriteria').click(function(){
+ var _this = $(this);
+ if ( _this.parents('ul').find('li').length > 1 ) {
+ _this.parent('li').remove();
+ } else {
+ _newFilter(_this.parent('li'));
+ }
+ return false;
+ });
+ }
+ var _getOperatorSelector = function(list) {
+ var _options = '';
+ for (var i = 0; i < list.length; i++) {
+ var _operator = _operators[list[i]];
+ _options += '<option value="' + _operator.id + '">' + _operator.name + '</option>';
+ }
+ return '<select name="free_query_operator[]" class="free_operator newselectize">' + _options + '</select>';
+ }
+
+ /*var _datePickers = function() {
+ $('.modif_date').datepicker({
+ changeMonth: true,
+ changeYear: true,
+ showOn: 'button',
+ maxDate: '-0d',
+ yearRange: 'c-10:c+0',
+ buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{{ _T("Select a date")|e('js') }}</span>'
+ });
+ $('.due_date').datepicker({
+ changeMonth: true,
+ changeYear: true,
+ showOn: 'button',
+ yearRange: 'c-10:c+5',
+ buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{{ _T("Select a date")|e('js') }}</span>'
+ });
+ }*/
+
+ var _selectize = function(selector) {
+ if ( !selector ) {
+ selector = '.operator_selector,.field_selector,.free_operator,.free_text,.group_selector';
+ }
+
+ $(selector).selectize({
+ maxItems: 1
+ });
+ }
+
+ var _initFieldSelector = function(parent) {
+ if (typeof parent == 'undefined') {
+ parent = '';
+ }
+ $(parent + '.field_selector').change(function () {
+ var _field_id = $(this).val();
+ var _field = _fields[_field_id];
+ var _type = _field.type;
+
+ if (!_type) {
+ return false;
+ }
+
+ var _html;
+ switch(_type) {
+ case '{{ constant('Galette\\DynamicFields\\DynamicField::BOOLEAN') }}':
+ _html = _getOperatorSelector(['op_equals']);
+
+ _html += '<input type="radio" name="free_text[]" id="free_text_yes" value="1"{if fs.search eq 1} checked="checked"{/if}/><label for="free_text_yes">{{ _T('Yes') }}</label><input type="radio" name="free_text[]" id="free_text_no" value="0"{if fs.search eq 0} checked="checked"{/if}/><label for="free_text_no">{{ _T('No') }}</label>';
+ break;
+ case '{{ constant('Galette\\DynamicFields\\DynamicField::CHOICE') }}':
+ _html = _getOperatorSelector(['op_equals', 'op_not_equals']);
+ var _options = '';
+ if (Array.isArray(_field.values)) {
+ for (var i = 0; i < _field.values.length; i++) {
+ _options += '<option value="' + i + '">' + _field.values[i] + '</option>';
+ }
+ } else {
+ for (key in _field.values) {
+ _options += '<option value="' + key + '">' + _field.values[key] + '</option>';
+ }
+ }
+ _html += '<select name="free_text[]" class="newselectize">' + _options + '</select>';
+ break;
+ case '{{ constant('Galette\\DynamicFields\\DynamicField::DATE') }}':
+ _html = _getOperatorSelector(['op_equals', 'op_before', 'op_after']);
+ _html += '<input type="text" name="free_text[]" class="modif_date" maxlength="10" size="10"/>';
+ _html += '<span class="exemple">{{ _T('(yyyy-mm-dd format)') }}</span>';
+ break;
+ default:
+ _html = _getOperatorSelector(['op_equals', 'op_contains', 'op_not_equals', 'op_not_contains', 'op_starts_with', 'op_ends_with']);
+ _html += '<input type="text" name="free_text[]"';
+ if (_type == 'text') {
+ _html += ' class="large"';
+ }
+ _html += '/>';
+ break;
+
+ }
+ _html += '<input type="hidden" name="free_type[]" value="' + _type + '"/>';
+ $(this).parent().find('span.data').html(_html);
+ _selectize('.newselectize');
+ $('.newselectize').removeClass('newselectize');
+ //_datePickers();
+ _fieldsInSortable();
+ });
+ _rmFilter();
+ }
+
+ $(function(){
+ _initSortable();
+ //_datePickers();
+ _selectize();
+
+ $('#addbutton_g').click(function(){
+ $('.operator_selector,.group_selector').each(function(){ // do this for every select with the 'combobox' class
+ if ($(this)[0].selectize) { // requires [0] to select the proper object
+ var value = $(this).val(); // store the current value of the select/input
+ $(this)[0].selectize.destroy(); // destroys selectize()
+ $(this).val(value); // set back the value of the select/input
+ }
+ });
+
+ $('#groups_search_list li:first')
+ .clone() // copy
+ .insertAfter('#groups_search_list li:last'); // where
+ _selectize();
+ return false;
+ });
+
+ $('#addbutton').click(function(){
+ $('.operator_selector,.field_selector,.free_operator').each(function(){ // do this for every select with the 'combobox' class
+ if ($(this)[0].selectize) { // requires [0] to select the proper object
+ var value = $(this).val(); // store the current value of the select/input
+ $(this)[0].selectize.destroy(); // destroys selectize()
+ $(this).val(value); // set back the value of the select/input
+ }
+ });
+ $('#fs_sortable li:first')
+ .clone() // copy
+ .insertAfter('#fs_sortable li:last'); // where
+ _selectize();
+ //_datePickers();
+ _fieldsInSortable();
+ _initFieldSelector();
+ return false;
+ });
+
+ _initFieldSelector();
+
+ /*$('.birth_date').datepicker({
+ changeMonth: true,
+ changeYear: true,
+ showOn: 'button',
+ maxDate: '-0d',
+ yearRange: '-200:+0',
+ buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{{ _T("Select a date")|e('js') }}</span>'
+ });*/
+ });
+ </script>
+{% endblock %}
--- /dev/null
+{% extends 'page.html.twig' %}
+
+{% macro draw_actions(rclass, member, login, plugin_actions) %}
+ <td class="{$rclass} center actions_row">
+ {% if member.canEdit(login) %}
+ <a
+ href="{{ path_for("editMember", { "id": member.id }) }}"
+ class="tooltip action"
+ >
+ <i class="ui user edit icon" aria-hidden="true"></i>
+ <span class="sr-only">{{ _T("%membername: edit information")|replace({ "%membername": member.sname }) }}</span>
+ </a>
+ {% endif %}
+ {% if login.isAdmin() or login.isStaff() %}
+ <a
+ href="{{ path_for("contributions", { "type": "contributions", "option": "member", "value": member.id }) }}"
+ class="tooltip"
+ >
+ <i class="ui cookie green icon" aria-hidden="true"></i>
+ <span class="sr-only">{{ _T("%membername: contributions")|replace({ "%membername": member.sname }) }}</span>
+ </a>
+ <a
+ href="{{ path_for("removeMember", { "id": member.id }) }}"
+ class="delete tooltip"
+ >
+ <i class="ui user times red icon" aria-hidden="true"></i>
+ <span class="sr-only">{{ _T("%membername: remove from database")|replace({ "%membername": member.sname }) }}</span>
+ </a>
+ {% endif %}
+ {% if login.isSuperAdmin() %}
+ <a
+ href="{{ path_for("impersonate", { "id": member.id }) }}"
+ class="tooltip"
+ >
+ <i class="ui user secret grey icon" aria-hidden="true"></i>
+ <span class="sr-only">{{ _T("Log in in as %membername")|replace({ "%membername": member.sname }) }}</span>
+ </a>
+ {% endif %}
+ {# If some additionnals actions 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 plugin_actions|length != 0 %}
+ {% for plugin_name, action in plugin_actions %}
+ {% include action with { module_id: plugin_name|replace({'actions_': ''}) } %}
+ {% endfor %}
+ {% endif %}
+ </td>
+{% endmacro %}
+
+{% block content %}
+ <form action="{{ path_for('filter-memberslist') }}" method="post" id="filtre" class="ui form">
+ <div class="ui segment">
+{% if adv_filters is not defined or not adv_filters %}
+ <div class="five fields">
+ <div class="field">
+ <label for="filter_str">{{ _T('Search:') }}</label>
+ <input type="text" name="filter_str" id="filter_str" value="{{ filters.filter_str }}" type="search" placeholder="{{ _T('Enter a value') }}"/>
+ </div>
+ <div class="field">
+ <label for="field_filter">{{ _T('in:') }}</label>
+ <select name="field_filter" id="field_filter" class="ui search dropdown nochosen">
+ {% for key, value in field_filter_options %}
+ <option value="{{ key }}"{% if key == filters.field_filter %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="field">
+ <label for="filter_str">{{ _T('among:') }}</label>
+ <select name="membership_filter" onchange="form.submit()" class="ui search dropdown nochosen">
+ {% for key, value in membership_filter_options %}
+ <option value="{{ key }}"{% if key == filters.membership_filter %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="flexend field">
+ <label for="filter_account" class="hidden">{{ _T('among:') }}</label>
+ <select name="filter_account" onchange="form.submit()" class="ui search dropdown nochosen">
+ {% for key, value in filter_accounts_options %}
+ <option value="{{ key }}"{% if key == filters.filter_account %} selected="selected"{% endif %}>{{ value }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ <div class="flexend field">
+ <label for="group_filter" class="hidden">{{ _T('among:') }}</label>
+ <select name="group_filter" onchange="form.submit()" class="ui search dropdown nochosen">
+ <option value="0">{{ _T('Select a group') }}</option>
+ {% for group in filter_groups_options %}
+ <option value="{{ group.getId() }}"{% if filters.group_filter == group.getId() %} selected="selected"{% endif %}>{{ group.getIndentName()|raw }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ <div class="two fields">
+ <div class="field">
+ <div class="inline fields">
+ <label for="email_filter">{{ _T('Members that have an email address:') }}</label>
+ <div class="field inline">
+ <div class="ui radio checkbox">
+ <input type="radio" name="email_filter" id="filter_dc_email" value="{{ constant('Galette\\Repository\\Members::FILTER_DC_EMAIL') }}"{% if filters.email_filter == constant('Galette\\Repository\\Members::FILTER_DC_EMAIL') %} checked="checked"{% endif %}>
+ <label for="filter_dc_email">{{ _T("Don't care") }}</label>
+ </div>
+ </div>
+ <div class="field inline">
+ <div class="ui radio checkbox">
+ <input type="radio" name="email_filter" id="filter_with_email" value="{{ constant('Galette\\Repository\\Members::FILTER_W_EMAIL') }}"{% if filters.email_filter == constant('Galette\\Repository\\Members::FILTER_W_EMAIL') %} checked="checked"{% endif %}>
+ <label for="filter_with_email">{{ _T('With') }}</label>
+ </div>
+ </div>
+ <div class="field inline">
+ <div class="ui radio checkbox">
+ <input type="radio" name="email_filter" id="filter_without_email" value="{{ constant('Galette\\Repository\\Members::FILTER_WO_EMAIL') }}"{% if filters.email_filter == constant('Galette\\Repository\\Members::FILTER_WO_EMAIL') %} checked="checked"{% endif %}>
+ <label for="filter_without_email">{{ _T('Without') }}</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="right aligned field">
+ <button type="submit" class="tooltip action ui primary button" title="{{ _T('Apply filters') }}" name="filter">
+ <i class="search icon"></i>
+ {{ _T('Filter') }}
+ </button>
+ <button type="submit" class="tooltip action ui button" title="{{ _T('Save selected criteria') }}" name="savesearch" id="savesearch">
+ <i class="save blue icon"></i>
+ {{ _T('Save') }}
+ </button>
+ <input type="submit" name="clear_filter" class="tooltip ui button" value="{{ _T('Clear filter') }}" title="{{ _T('Reset all filters to defaults') }}"/>
+ </div>
+ </div>
+{% else %}
+ <div class="field">
+ <span class="ui primary ribbon label">{{ _T('Advanced search mode') }}</span>
+ <button type="submit" class="tooltip action ui primary button" title="{{ _T('Save current advanced search criteria') }}" name="savesearch" id="savesearch">
+ <i class="save icon"></i>
+ {{ _T('Save') }}
+ </button>
+ <button type="submit" class="tooltip action ui button" title="{{ _T('Change search criteria') }}" name="adv_criteria">
+ <i class="edit blue icon"></i>
+ {{ _T('Change criteria') }}
+ </button>
+ <input type="hidden" name="advanced_search" value="1" class="ui button"/>
+ <input type="submit" name="clear_filter" class="tooltip ui button" value="{{ _T('Clear filter') }}" title="{{ _T('Reset all filters to defaults') }}"/>
+ <div class="ui basic fluid accordion">
+ <div class="title">
+ <i class="dropdown icon"></i>
+ {{ _T('Show/hide query') }}
+ </div>
+ <div class="content">
+ <pre id="sql_qry" class="hidden">{{ filters.query }}</pre>
+ </div>
+ </div>
+ </div>
+{% endif %}
+ {% include "components/forms/csrf.html.twig" %}
+ </div>
+
+ <div class="infoline">
+ <div class="ui basic horizontal segments">
+ <div class="ui basic fitted segment">
+ <div class="ui label">{{ _Tn("%count member", "%count members", nb_members)|replace({ '%count': nb_members }) }}</div>
+ </div>
+ <div class="ui basic right aligned fitted segment">
+ <div class="inline field">
+ <label for="nbshow">{{ _T('Records per page:') }}</label>
+ <select name="nbshow" id="nbshow" class="ui dropdown nochosen">
+ {html_options options=$nbshow_options selected=$numrows}
+ </select>
+ <noscript> <span><input type="submit" value="{{ _T('Change') }}" /></span></noscript>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+ <form action="{{ path_for('batch-memberslist') }}" method="post" id="listform" class="ui form">
+ <div class="ui basic fitted segment">
+ <table class="listing ui celled table">
+ <thead>
+ <tr>
+{% for column in galette_list %}
+ {% if column.field_id == 'id_adh' %}
+ {% if preferences.pref_show_id %}
+ <th class="id_row">
+ <a href="{{ path_for("members", { "option": "order", "value": constant("Galette\\Repository\\Members::ORDERBY_ID") }) }}">
+ {{ _T('Mbr id') }}
+ {% if filters.orderby == constant('Galette\\Repository\\Members::ORDERBY_ID') %}
+ {% if filters.ordered == constant('Galette\Filters\MembersList::ORDER_ASC') %}
+ <i class="ui angle down icon tooltip"></i>
+ {% else %}
+ <i class="ui angle up icon tooltip"></i>
+ {% endif %}
+ {% endif %}
+ </a>
+ </th>
+ {% else %}
+ <th class="id_row">#</th>
+ {% endif %}
+ {% else %}
+ <th class="left">
+ <a href="{{ path_for("members", {"option": "order", "value": column.field_id}) }}">
+ {{ column.label }}
+ {% if filters.orderby == column.field_id %}
+ {% if filters.ordered == constant('Galette\Filters\MembersList::ORDER_ASC') %}
+ <i class="ui angle down icon tooltip"></i>
+ {% else %}
+ <i class="ui angle up icon tooltip"></i>
+ {% endif %}
+ {% endif %}
+ </a>
+ </th>
+ {% endif %}
+{% endfor %}
+ <th class="actions_row">{{ _T('Actions') }}</th>
+ </tr>
+ </thead>
+ <tbody>
+{% for ordre, member in members %}
+ {% set rclass = member.getRowClass() %}
+ <tr>
+ {% for column in galette_list %}
+ {% if column.field_id == 'id_adh' %}
+ <td class="{{ rclass }} right" data-scope="id">
+ {% if preferences.pref_show_id %}
+ {{ member.id }}
+ {% else %}
+ {{ ordre + 1 + (filters.current_page - 1) * numrows }}
+ {% endif %}
+ </td>
+ {% elseif column.field_id == 'list_adh_name' %}
+ <td class="{{ rclass }} username_row" data-scope="row">
+ <input type="checkbox" name="member_sel[]" value="{$member->id}"/>
+ {% if member.isCompany() %}
+ <i class="ui building outline icon tooltip"><span class="sr-only">{{ _T('Is a company') }}</span></i>
+ {% elseif member.isMan() %}
+ <i class="ui male icon tooltip"><span class="sr-only">{{ _T('Is a man') }}</span></i>
+ {% elseif member.isWoman() %}
+ <i class="ui female icon tooltip"><span class="sr-only">{{ _T('Is a woman') }}</span></i>
+ {% else %}
+ <i class="ui icon"></i>
+ {% endif %}
+ {% if member.email != '' %}
+ <a href="mailto:{$member->email}" class="tooltip">
+ <i class="ui envelope outline teal icon" aria-hidden="true"></i>
+ <span class="sr-only">{{ _T('Mail') }}</span>
+ </a>
+ {% else %}
+ <i class="ui icon"></i>
+ {% endif %}
+ {% if member.isAdmin() %}
+ <span class="tooltip">
+ <i class="ui user shield red icon" aria-hidden="true"></i>
+ <span class="sr-only">{{ _T('Admin') }}</span>
+ </span>
+ {% elseif member.isStaff() %}
+ <span class="tooltip">
+ <i class="ui id card alternate orange icon" aria-hidden="true"></i>
+ <span class="sr-only">{{ _T('Staff member') }}</span>
+ </span>
+ {# TODO: display for group managers #}
+ {% else %}
+ <i class="ui icon"></i>
+ {% endif %}
+ {% set mid = member.id %}
+ <a href="{{ path_for("member", {"id": member.id}) }}">{{ member.sname }}{% if member.company_name %} ({{ member.company_name }}){% endif %}</a>
+ </td>
+ {% else %}
+ {% set lrclass = rclass %}
+ {% set propname = column.propname %}
+ {% set propvalue = attribute(member, propname) %}
+ {% set value = null %}
+
+ {% if column.field_id == 'nom_adh' %}
+ {% set value = member.sfullname %}
+ {% elseif column.field_id == 'pseudo_adh' %}
+ {% set lrclass = rclass %}
+ {% set value = attribute(member, propname) %}
+ {% elseif column.field_id == 'tel_adh' or column.field_id == 'gsm_adh' %}
+ {% set lrclass = rclass %}
+ {% elseif column.field_id == 'id_statut' %}
+ {% set lrclass = rclass %}
+ {% set value = member.sstatus %}
+ {% elseif column.field_id == 'titre_adh' %}
+ {% if member.title is iterable %}
+ {% set value = member.title.long %}
+ {% endif %}
+ {% elseif column.field_id == 'pref_lang' %}
+ {% set value = i18n.getNameFromId(member.language) %}
+ {% elseif column.field_id == 'adresse_adh' %}
+ {% set value = member.saddress|e('html')|nl2br %}
+ {% set escaped = true %}
+ {% elseif column.field_id == 'bool_display_info' %}
+ {% set value = member.sappears_in_list %}
+ {% elseif column.field_id == 'activite_adh' %}
+ {% set value = member.sactive %}
+ {% elseif column.field_id == 'id_statut' %}
+ {% set value = member.sstatus %}
+ {% elseif column.field_id == 'bool_admin_adh' %}
+ {% set value = member.sadmin %}
+ {% elseif column.field_id == 'bool_exempt_adh' %}
+ {% set value = member.sdue_free %}
+ {% elseif column.field_id == 'sexe_adh' %}
+ {% set value = member.sgender %}
+ {% endif %}
+
+ {# If value has not been set, take the generic value #}
+ {% if not value %}
+ {% if propvalue %}
+ {% set value = propvalue|e('html') %}
+ {% else %}
+ {% set value = propvalue %}
+ {% endif %}
+ {% elseif escaped is not defined %}
+ {% set value = value|e('html') %}
+ {% endif %}
+
+ <td class="{{ lrclass }}" data-title="{{ column.label }}">
+ {# Display column.
+ A check is done here to adapt display, this is may not the best way to go
+ but for now, that works as expected.
+ #}
+ {% if value %}
+ {% if column.field_id == 'email_adh' %}
+ <a href="mailto:{{ value }}">{{ value }}</a>
+ {% elseif column.field_id == 'tel_adh' or column.field_id == 'gsm_adh' %}
+ <a href="tel:{{ value }}">{{ value }}</a>
+ {% elseif column.field_id == 'parent_id' %}
+ <a href="{{ path_for("member", {"id": member.parent}) }}">{{ memberName(member.parent) }}</a>
+ {% elseif column.field_id == 'ddn_adh' %}
+ {{ value }} {{ member.getAge() }}
+ {% else %}
+ {{ value }}
+ {% endif %}
+ {% endif %}
+ </td>
+ {% endif %}
+ {% endfor %}
+ {{ _self.draw_actions(rclass, member, login, plugin_actions) }}
+ </tr>
+{% else %}
+ <tr><td colspan="{{ galette_list|length }}" class="emptylist">{{ _T('No member has been found') }}</td></tr>
+{% endfor %}
+ </tbody>
+ </table>
+ </div>
+{% if nb_members != 0 and (login.isGroupManager() and preferences.pref_bool_groupsmanagers_exports or login.isAdmin() or login.isStaff()) %}
+ <div class="ui bottom attached segment screen-only">
+ <div class="ui horizontal list">
+ <span class="ui primary ribbon label">{{ _T('For the selection:') }}</span>
+ {% if login.isAdmin() or login.isStaff() %}
+ <div class="item">
+ <button type="submit" id="masschange" name="masschange" class="action ui labeled icon tiny button">
+ <i class="user edit blue icon"></i> {{ _T('Mass change') }}
+ </button>
+ </div>
+ <div class="item">
+ <button type="submit" id="masscontributions" name="masscontributions" class="action ui labeled icon tiny button">
+ <i class="ui cookie bite green icon"></i> {{ _T('Mass add contributions') }}
+ </button>
+ </div>
+ <div class="item">
+ <button type="submit" id="delete" name="delete" class="ui labeled icon tiny button">
+ <i class="user times red icon"></i> {{ _T('Delete') }}
+ </button>
+ </div>
+ {% endif %}
+ {% if login.isAdmin() or login.isStaff() or login.isGroupManager() and preferences.pref_bool_groupsmanagers_mailings %}
+ {% if preferences.pref_mail_method != constant('Galette\\Core\\GaletteMail::METHOD_DISABLED') %}
+ <div class="item">
+ <button type="submit" id="sendmail" name="mailing" class="ui labeled icon tiny button">
+ <i class="mail bulk icon"></i> {{ _T('Mail') }}
+ </button>
+ </div>
+ {% endif %}
+ {% endif %}
+
+ {% if login.isGroupManager() and preferences.pref_bool_groupsmanagers_exports or login.isAdmin() or login.isStaff() %}
+ <div class="item">
+ <button type="submit" id="attendance_sheet" name="attendance_sheet" class="ui labeled icon tiny button">
+ <i class="file alternate icon"></i> {{ _T('Attendance sheet') }}
+ </button>
+ </div>
+ <div class="item">
+ <button type="submit" id="labels" name="labels" class="ui labeled icon tiny button">
+ <i class="address card icon"></i> {{ _T('Generate labels') }}
+ </button>
+ </div>
+ <div class="item">
+ <button type="submit" id="cards" name="cards" class="ui labeled icon tiny button">
+ <i class="id badge icon"></i> {{ _T('Generate Member Cards') }}
+ </button>
+ </div>
+ <div class="item">
+ <button type="submit" id="csv" name="csv" class="ui labeled icon tiny button">
+ <i class="file csv icon"></i> {{ _T('Export as CSV') }}
+ </button>
+ </div>
+ {% endif %}
+ {% if plugin_batch_actions|length != 0 %}
+ {foreach from=$plugin_batch_actions key=plugin_name item=action}
+ {include file=$action module_id=$plugin_name|replace:'batch_action_':''}
+ {/foreach}
+ {% endif %}
+ </div>
+ </div>
+ <div class="ui basic center aligned fitted segment">
+ <div class="ui inverted pagination menu">
+ <div class="header item">
+ {{ _T('Pages:') }}
+ </div>
+ {{ pagination|raw }}
+ </div>
+ </div>
+{% endif %}
+ {% include "components/forms/csrf.html.twig" %}
+ </form>
+ {% if nb_members != 0 %}
+ <div id="legende" title="{{ _T('Legend') }}" class="ui modal">
+ <div class="header">{{ _T('Legend') }}</div>
+ <div class="content">
+ <table class="ui stripped table">
+ <thead>
+ <tr>
+ <th class="" colspan="4">{{ _T('Reading the list') }}</th>
+ </tr>
+ <thead>
+ <tbody>
+ <tr>
+ <th class="back">{{ _T('Name') }}</th>
+ <td class="back">{{ _T('Active account') }}</td>
+ <th class="inactif back">{{ _T('Name') }}</th>
+ <td class="back">{{ _T('Inactive account') }}</td>
+ </tr>
+ <tr>
+ <th class="cotis-ok color-sample"> </th>
+ <td class="back">{{ _T('Membership in order') }}</td>
+ <th class="cotis-soon color-sample"> </th>
+ <td class="back">{{ _T('Membership will expire soon (<30d)') }}</td>
+ </tr>
+ <tr>
+ <th class="cotis-never color-sample"> </th>
+ <td class="back">{{ _T('Never contributed') }}</td>
+ <th class="cotis-late color-sample"> </th>
+ <td class="back">{{ _T('Lateness in fee') }}</td>
+ </tr>
+ </tbody>
+ </table>
+ <table class="ui stripped table">
+ <thead>
+ <tr>
+ <th class="" colspan="4">{{ _T('Actions') }}</th>
+ </tr>
+ <thead>
+ <tbody>
+ <tr>
+ <th class="action">
+ <i class="ui user edit icon"></i>
+ </th>
+ <td class="back">{{ _T('Modification') }}</td>
+ <th>
+ <i class="ui cookie icon"></i>
+ </th>
+ <td class="back">{{ _T('Contributions') }}</td>
+ </tr>
+ <tr>
+ <th class="delete">
+ <i class="ui user times red icon"></i>
+ </th>
+ <td class="back">{{ _T('Deletion') }}</td>
+ </tr>
+ </tbody>
+ </table>
+ <table class="ui stripped table">
+ <thead>
+ <tr>
+ <th colspan="4">{{ _T('User status/interactions') }}</th>
+ </tr>
+ <thead>
+ <tbody>
+ <tr>
+ <th><i class="ui envelope outline teal icon"></i></th>
+ <td class="back">{{ _T('Send an email') }}</td>
+ <th><i class="ui building icon"></i></th>
+ <td class="back">{{ _T('Is a company') }}</td>
+ </tr>
+
+ <tr>
+ <th><i class="ui male icon"></i></th>
+ <td class="back">{{ _T('Is a man') }}</td>
+ <th><i class="ui female icon"></i></th>
+ <td class="back">{{ _T('Is a woman') }}</td>
+ </tr>
+ <tr>
+ <th><i class="ui user shield red icon"></i></th>
+ <td class="back">{{ _T('Admin') }}</td>
+ <th><i class="ui id card alternate orange icon"></i></th>
+ <td class="back">{{ _T('Staff member') }}</td>
+
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="actions"><div class="ui labeled icon deny button"><i class="times icon"></i> {{ _T('Close') }}</div></div>
+ </div>
+ {% endif %}
+{% endblock %}
+
+{% block javascripts %}
+ <script type="text/javascript">
+{if $nb_members != 0}
+ var _checkselection = function() {
+ var _checkeds = $('table.listing').find('input[type=checkbox]:checked').length;
+ if ( _checkeds == 0 ) {
+ var _el = $('<div id="pleaseselect" title="{_T string="No member selected" escape="js"}">{_T string="Please make sure to select at least one member from the list to perform this action." escape="js"}</div>');
+ _el.appendTo('body').dialog({
+ modal: true,
+ buttons: {
+ Ok: function() {
+ $(this).dialog( "close" );
+ }
+ },
+ close: function(event, ui){
+ _el.remove();
+ }
+ });
+ return false;
+ }
+ return true;
+ }
+{/if}
+ {# Use of Javascript to draw specific elements that are not relevant is JS is inactive #}
+ $(function(){
+{if $nb_members != 0}
+ var _checklinks = '<div class="checkboxes ui basic horizontal segments"><div class="ui basic fitted segment"><a href="#" class="checkall ui blue tertiary button">{_T string="(Un)Check all" escape="js"}</a> | <a href="#" class="checkinvert ui blue tertiary button">{_T string="Invert selection" escape="js"}</a></div><div class="ui basic right aligned fitted segment"><a href="#" class="show_legend ui blue tertiary button">{_T string="Show legend" escape="js"}</a></div></div>';
+ $('.listing').before(_checklinks);
+ $('.listing').after(_checklinks);
+ _bind_check();
+ _bind_legend();
+
+ $('.selection_menu *[type="submit"], .selection_menu *[type="button"]').click(function(event){
+ if ( this.id == 'delete' || this.id == 'masschange' ) {
+ //mass removal is handled from 2 steps removal
+ //mass change is specifically handled below
+ return;
+ }
+
+ if (!_checkselection()) {
+ return false;
+ } else {
+ {if $existing_mailing eq true}
+ if (this.id == 'sendmail') {
+ var _el = $('<div id="existing_mailing" title="{_T string="Existing mailing" escape="js"}">{_T string="A mailing already exists. Do you want to create a new one or resume the existing?" escape="js"}</div>');
+ _el.appendTo('body').dialog({
+ modal: true,
+ hide: 'fold',
+ width: '25em',
+ height: 150,
+ close: function(event, ui){
+ _el.remove();
+ },
+ buttons: {
+ '{{ _T('Resume') }}': function() {
+ $(this).dialog( "close" );
+ location.href = '{{ path_for('mailing') }}';
+ },
+ '{{ _T('New') }}': function() {
+ $(this).dialog( "close" );
+ //add required controls to the form, change its action URI, and send it.
+ var _form = $('#listform');
+ _form.append($('<input type="hidden" name="mailing_new" value="true"/>'));
+ _form.append($('<input type="hidden" name="mailing" value="true"/>'));
+ _form.submit();
+ }
+ }
+ });
+ return false;
+ }
+ {/if}
+ if (this.id == 'attendance_sheet') {
+ _attendance_sheet_details();
+ return false;
+ }
+
+ if (this.id == 'masscontributions') {
+ event.preventDefault();
+ $.ajax({
+ url: '{{ path_for('batch-memberslist') }}',
+ type: "POST",
+ data: {
+ ajax: true,
+ masscontributions: 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);
+ $('body').append(_res);
+
+ _initTooltips('#mass_contributions');
+ _massCheckboxes('#mass_contributions');
+
+ _res.dialog({
+ width: 'auto',
+ modal: true,
+ close: function(event, ui){
+ $(this).dialog('destroy').remove()
+ }
+ });
+ },
+ error: function() {
+ alert("{_T string="An error occurred :(" escape="js"}");
+ }
+ });
+ }
+
+ return true;
+ }
+ });
+{/if}
+ if ( _shq = $('#showhideqry') ) {
+ _shq.click(function(){
+ $('#sql_qry').toggleClass('hidden');
+ return false;
+ });
+ }
+
+ $('#savesearch').on('click', function(e) {
+ e.preventDefault();
+
+ var _el = $('<div id="savedsearch_details" title="{_T string="Search title" escape="js"}"><input type="text" name="search_title" id="search_title"/></div>');
+ _el.appendTo('body').dialog({
+ modal: true,
+ hide: 'fold',
+ width: '40%',
+ height: 200,
+ close: function(event, ui){
+ _el.remove();
+ },
+ buttons: {
+ '{_T string="Ok" escape="js"}': function() {
+ var _form = $('#filtre');
+ var _data = _form.serialize();
+ _data = _data + "&search_title=" + $('#search_title').val();
+ $.ajax({
+ url: '{{ path_for('saveSearch') }}',
+ type: "POST",
+ data: _data,
+ datatype: 'json',
+ {include file="js_loader.tpl"},
+ success: function(res) {
+ $.ajax({
+ url: '{{ path_for('ajaxMessages') }}',
+ method: "GET",
+ success: function (message) {
+ $('#asso_name').after(message);
+ }
+ });
+ }
+ });
+
+ $(this).dialog( "close" );
+ },
+ '{_T string="Cancel" escape="js"}': function() {
+ $(this).dialog( "close" );
+ }
+ }
+ });
+ });
+
+ });
+{if $nb_members != 0}
+ {include file="js_removal.tpl"}
+ {include file="js_removal.tpl" selector="#delete" deleteurl="'{{ path_for('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();
+
+ res.find('select:not(.nochosen)').selectize({
+ maxItems: 1
+ });
+ }
+
+ $('#masschange').off('click').on('click', function(event) {
+ event.preventDefault();
+ var _this = $(this);
+
+ if (!_checkselection()) {
+ return false;
+ }
+ $.ajax({
+ url: '{{ path_for('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('ajaxMessages') }}',
+ method: "GET",
+ success: function (message) {
+ $('#asso_name').after(message);
+ }
+ });
+ }
+ }
+ });
+ });
+ },
+ error: function() {
+ alert("{_T string="An error occurred :(" 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 occurred :(" escape="js"}");
+ }
+ });
+ });
+
+ var _attendance_sheet_details = function(){
+ var _selecteds = [];
+ $('table.listing').find('input[type=checkbox]:checked').each(function(){
+ _selecteds.push($(this).val());
+ });
+ $.ajax({
+ url: '{{ path_for('attendance_sheet_details') }}',
+ type: "POST",
+ data: {
+ ajax: true,
+ selection: _selecteds
+ },
+ dataType: 'html',
+ success: function(res){
+ var _el = $('<div id="attendance_sheet_details" title="{_T string="Attendance sheet details" escape="js"}"> </div>');
+ _el.appendTo('body').dialog({
+ modal: true,
+ hide: 'fold',
+ width: '60%',
+ height: 400,
+ close: function(event, ui){
+ _el.remove();
+ },
+ buttons: {
+ Ok: function() {
+ $('#sheet_details_form').submit();
+ $(this).dialog( "close" );
+ },
+ Cancel: function() {
+ $(this).dialog( "close" );
+ }
+ }
+ }).append(res);
+ /*$('#sheet_date').datepicker({
+ changeMonth: true,
+ changeYear: true,
+ showOn: 'button',
+ yearRange: 'c:c+5',
+ buttonText: '<i class="ui calendar alt icon"></i> <span class="sr-only">{_T string="Select a date" escape="js"}</span>'
+ });*/
+ },
+ error: function() {
+ alert("{_T string="An error occurred displaying attendance sheet details interface :(" escape="js"}");
+ }
+ });
+ }
+{/if}
+ </script>
+{% endblock %}
\ No newline at end of file
<img src="{{ path_for('logo') }}" class="picture" width="{{ logo.getOptimalWidth() }}" height="{{ logo.getOptimalHeight() }}" alt="{{ _T("Current logo") }}"/><br/>
<label for="del_logo">{{ _T("Delete image") }}</label><input type="checkbox" name="del_logo" id="del_logo" value="1" /><br />
{% endif %}
- <input type="file" name="logo" id="logo_picture"{% if GALETTE_MODE == 'DEMO' %} disabled="disabled"{% endif %}/>
+ <input type="file" name="logo" id="logo_picture"{% if constant('GALETTE_MODE') == constant('\\Galette\\Core\\Galette::MODE_DEMO') %} disabled="disabled"{% endif %}/>
</div>
</div>
</div>
<label for="pref_galette_url" class="tooltip">{{ _T("Galette base URL") }}</label>
<div class="ui right corner labeled input">
<div class="ui corner label">
- <i class="circular inverted primary link icon info tooltip" data-html="{{ _T("Enter the base URL to your Galette instance. You should only change this parameter if the current page URL is not:<br/>%galette_url")|replace({ "%galette_url": preferences.getDefaultURL() }) }}"></i> {# |cat:{path_for name="preferences")#}
+ <i class="circular inverted primary link icon info tooltip" data-html="{{ _T("Enter the base URL to your Galette instance. You should only change this parameter if the current page URL is not:<br/>%galette_url")|replace({ "%galette_url": preferences.getDefaultURL() ~ path_for('preferences') }) }}"></i>
</div>
<input type="text" name="pref_galette_url" id="pref_galette_url" placeholder="{{ preferences.getDefaultURL() }}" value="{{ pref.pref_galette_url }}"{% if required.pref_galette_url is defined and required.pref_galette_url == 1 %} required="required"{% endif %}/>
</div>
<div class="ui tab segment" data-tab="mail">
<div class="ui stackable two column grid">
<div class="column">
- {% if constant('GALETTE_MODE') == 'DEMO' %}
+ {% if constant('GALETTE_MODE') == constant('\\Galette\\Core\\Galette::MODE_DEMO') %}
<div class="ui negative message">
<p>{{ _T("Application runs under demo mode. This functionnality is not enabled, sorry.") }}</p>
</div>
<div class="ui corner label">
<i class="circular inverted primary link icon info tooltip" data-html="{{ _T("Recipient of new online registation and edition emails") }}"></i>
</div>
- <input type="text" name="pref_email_newadh" id="pref_email_newadh" value="{{ pref_email_newadh }}" maxlength="100" size="30"{% if required.pref_email_newadh is defined and required.pref_email_newadh == 1 %} required="required"{% endif %}/>
+ <input type="text" name="pref_email_newadh" id="pref_email_newadh" value="{{ pref.pref_email_newadh }}" maxlength="100" size="30"{% if required.pref_email_newadh is defined and required.pref_email_newadh == 1 %} required="required"{% endif %}/>
</div>
<span class="exemple">{{ _T("(You can enter several emails separated with a comma. First address will be the default one.)") }}</span>
</div>
<img src="{{ path_for('printLogo') }}" class="picture" width="{{ print_logo.getOptimalWidth() }}" height="{{ print_logo.getOptimalHeight() }}" alt="{{ _T("Current logo for printing") }}"/><br/>
<label for="del_card_logo">{{ _T("Delete image") }}</label><input type="checkbox" name="del_card_logo" id="del_card_logo" value="1" /><br />
{% endif %}
- <input type="file" name="card_logo" id="card_logo"{% if GALETTE_MODE == 'DEMO' %} disabled="disabled"{% endif %}/>
+ <input type="file" name="card_logo" id="card_logo"{% if constant('GALETTE_MODE') == constant('\\Galette\\Core\\Galette::MODE_DEMO') %} disabled="disabled"{% endif %}/>
</div>
</div>{# /column #}
<div class="column">
{% endif %}
{% if login.isSuperAdmin() %}
<div class="ui tab red inverted segment" data-tab="admin">
- {% if GALETTE_MODE == 'DEMO' %}
+ {% if constant('GALETTE_MODE') == constant('\\Galette\\Core\\Galette::MODE_DEMO') %}
<div class="ui negative message">
{{ _T("Application runs under demo mode. This functionnality is not enabled, sorry.") }}
</div>
_addLegenButton('#mail_sign');
_handleLegend();
- {% include "elements/js/pwdcheck.html.twig" with { selector: "#pref_admin_pass" } %}
- {% include "elements/js/pwdcheck.html.twig" with {
+ {% include "elements/js/pwdcheck.js.twig" with { selector: "#pref_admin_pass" } %}
+ {% include "elements/js/pwdcheck.js.twig" with {
selector: "#test_password_strength",
extra_data: "pref_password_length: \$('#pref_password_length').val(),pref_password_blacklist: \$('#pref_password_blacklist').is(':checked'),pref_password_strength: \$('#pref_password_strength').val(),"
}
<!DOCTYPE html>
-<html lang="{{ galette_lang }}" class="public_page{% if additionnal_html_class %} {{ additionnal_html_class }}{% endif %}">
+<html lang="{{ galette_lang }}" class="public_page{% if additionnal_html_class is defined %} {{ additionnal_html_class }}{% endif %}">
<head>
{% include 'elements/header.html.twig' %}
</head>