'member' => 'member',
'pdf-members-cards' => 'member',
'editMember' => 'member',
+ 'addMemberChild' => 'member',
//most of members routes are accessible to groups manager, including mass changes pages
'/(.+)?member(.+)?/i' => 'groupmanager',
'ajaxGroupMembers' => 'staff',
[Crud\MembersController::class, 'add']
)->setName('addMember')->add($authenticate)->add(MembersNavigate::class);
+$app->get(
+ '/member/add/child',
+ [Crud\MembersController::class, 'addChild']
+)->setName('addMemberChild')->add($authenticate);
+
$app->post(
'/subscribe/store',
[Crud\MembersController::class, 'doSelfSubscribe']
return $this->edit($request, $response, null, 'add');
}
+ /**
+ * Add child page
+ *
+ * @param Request $request PSR Request
+ * @param Response $response PSR Response
+ *
+ * @return Response
+ */
+ public function addChild(Request $request, Response $response): Response
+ {
+ return $this->edit($request, $response, null, 'addchild');
+ }
+
/**
* Self subscription page
*
//retrieve from session, in add or edit
$member = $this->session->member;
$this->session->member = null;
- } elseif ($id !== null) {
+ $id = $member->id;
+ }
+
+ if ($id !== null) {
//load requested member
$member->load($id);
- if (!$member->canEdit($this->login)) {
- $this->flash->addMessage(
- 'error_detected',
- _T("You do not have permission for requested URL.")
+ $can = $member->canEdit($this->login);
+ } else {
+ $can = $member->canCreate($this->login);
+ }
+
+ if (!$can) {
+ $this->flash->addMessage(
+ 'error_detected',
+ _T("You do not have permission for requested URL.")
+ );
+
+ return $response
+ ->withStatus(403)
+ ->withHeader(
+ 'Location',
+ $this->router->pathFor('me')
);
+ }
- return $response
- ->withStatus(403)
- ->withHeader(
- 'Location',
- $this->router->pathFor('me')
- );
- }
+ //if adding a child, force parent here
+ if ($action === 'addchild') {
+ $member->setParent((int)$this->login->id);
}
// flagging required fields
$fc = $this->fields_config;
// password required if we create a new member
- if ($member->id != '') {
+ if ($id === null) {
$fc->setNotRequired('mdp_adh');
}
$form_elements = $fc->getFormElements(
$this->login,
- $member->id == ''
+ $id === null
);
// members
$m = new Members();
- $id = null;
+ $pid = null;
if ($member->hasParent()) {
- $id = ($member->parent instanceof Adherent ? $member->parent->id : $member->parent);
+ $pid = ($member->parent instanceof Adherent ? $member->parent->id : $member->parent);
}
$members = $m->getSelectizedMembers(
$this->zdb,
- $id
+ $pid
);
$route_params['members'] = [
'groups' => $groups_list,
'fieldsets' => $form_elements['fieldsets'],
'hidden_elements' => $form_elements['hiddens'],
- 'parent_fields' => $tpl_parent_fields
+ 'parent_fields' => $tpl_parent_fields,
+ 'addchild' => ($action === 'addchild')
) + $route_params
);
return $response;
use Galette\Entity\PaymentType;
use Throwable;
use Analog\Analog;
-use Galette\Core\Galette;
use Galette\Entity\Adherent;
use Galette\Entity\Status;
use Galette\IO\PdfMembersCards;
'pref_password_length' => 6,
'pref_password_blacklist' => false,
'pref_password_strength' => self::PWD_NONE,
- 'pref_default_paymenttype' => PaymentType::CHECK
+ 'pref_default_paymenttype' => PaymentType::CHECK,
+ 'pref_bool_create_member' => false
);
// flagging required fields
}
/**
- * Can current logged in user edit member
+ * Can current logged-in user create member
+ *
+ * @param Login $login Login instance
+ *
+ * @return boolean
+ */
+ public function canCreate(Login $login)
+ {
+ global $preferences;
+
+ if ($this->id && $login->id == $this->id || $login->isAdmin() || $login->isStaff()) {
+ return true;
+ }
+
+ if ($preferences->pref_bool_create_member && $login->isLogged()) {
+ return true;
+ }
+ }
+
+ /**
+ * Can current logged-in user edit member
*
* @param Login $login Login instance
*
{
return $this->sendmail;
}
+
+ /**
+ * Set member parent
+ *
+ * @param integer $id Parent identifier
+ *
+ * @return $this
+ */
+ public function setParent(int $id): self
+ {
+ $this->_parent = $id;
+ $this->loadParent();
+ return $this;
+ }
}
<div>
{if $member->hasParent() && !$member->isDuplicate()}
<strong>{_T string="Attached to:"}
- <a href="{path_for name="member" data=["id" => $member->parent->id]}">{$member->parent->sfullname}</a></strong><br/>
- {if $login->isAdmin() or $login->isStaff() or $login->id eq $member->parent->id}
- <label for="detach_parent">{_T string="Detach?"}</label>
+ <a href="{path_for name="member" data=["id" => $member->parent->id]}">{$member->parent->sfullname}</a></strong>
+ {if $login->isAdmin() or $login->isStaff() && (!isset($addchild) || !$addchild)}
+ <br/><label for="detach_parent">{_T string="Detach?"}</label>
<input type="checkbox" name="detach_parent" id="detach_parent" value="1"/>
{/if}
{else if ($login->isAdmin() or $login->isStaff()) and !$member->hasChildren() and isset($members.list)}
{foreach from=$member->children item=child}
<a href="{path_for name="member" data=["id" => $child->id]}">{$child->sfullname}</a>{if not $child@last}, {/if}
{/foreach}
- </tr>
{/if}
</div>
{/if}
<h1 class="nojs">{_T string="Navigation"}</h1>
<ul>
<li{if $cur_route eq "dashboard"} class="selected"{/if}><a href="{path_for name="dashboard"}" title="{_T string="Go to Galette's dashboard"}">{_T string="Dashboard"}</a></li>
+ {if $preferences->pref_bool_create_member}
+ <li{if $cur_route eq "addMemberChild"} class="selected"{/if}><a href="{path_for name="addMemberChild"}" title="{_T string="Add new child member in database"}">{_T string="Add a child member"}</a></li>
+ {/if}
{if $login->isAdmin() or $login->isStaff() or $login->isGroupManager()}
<li{if $cur_route eq "members"} class="selected"{/if}><a href="{path_for name="members"}" title="{_T string="View, search into and filter member's list"}">{_T string="List of members"}</a></li>
<li{if $cur_route eq "advanced-search"} class="selected"{/if}><a href="{path_for name="advanced-search"}" title="{_T string="Perform advanced search into members list"}">{_T string="Advanced search"}</a></li>
{html_options options=$pref_numrows_options selected=$pref.pref_numrows}
</select>
</p>
+ <p>
+ <label for="pref_bool_create_member" class="bline tooltip">{_T string="Can members create child?"}</label>
+ <span class="tip">{_T string="Any logged in member will be able to create his own child cards"}</span>
+ <input type="checkbox" name="pref_bool_create_member" id="pref_bool_create_member" value="1" {if $pref.pref_bool_create_member eq 1}checked="checked"{/if}{if isset($required.pref_bool_create_member) and $required.pref_bool_create_member eq 1} required="required"{/if}/>
+ </p>
<p>
<label for="pref_redirect_on_create" class="bline">{_T string="After member creation:"}</label>