'setRegistered' => 'admin',
'masschangeMembers' => 'groupmanager',
'massstoremembers' => 'groupmanager',
- 'masschangeMembersReview' => 'groupmanager'
+ 'masschangeMembersReview' => 'groupmanager',
+ 'duplicateMember' => 'staff'
];
foreach ($c['plugins']->getModules() as $plugin) {
}
}
)->setName('massstoremembers')->add($authenticate);
+
+//Duplicate member
+$app->get(
+ __('/members', 'routes') . __('/duplicate', 'routes') . '/{' . Adherent::PK . ':\d+}',
+ function ($request, $response, $args) {
+ $id_adh = (int)$args[Adherent::PK];
+ $adh = new Adherent($this->zdb, $id_adh, ['dynamics' => true]);
+ $adh->setDuplicate();
+
+ //store entity in session
+ $this->session->member = $adh;
+
+ return $response
+ ->withStatus(301)
+ ->withHeader('Location', $this->router->pathFor('editmember', ['action' => __('add', 'routes')]));
+ }
+)->setName('duplicateMember')->add($authenticate);
return true;
}
}
+
+ /**
+ * Set member as duplicate
+ *
+ * @return void
+ */
+ public function setDuplicate()
+ {
+ //mark as duplicated
+ $infos = $this->_others_infos_admin;
+ $this->_others_infos_admin = str_replace(
+ ['%name', '%id'],
+ [$this->sname, $this->_id],
+ _T('Duplicated from %name (%id)')
+ );
+ if (!empty($infos)) {
+ $this->_others_infos_admin .= "\n" . $infos;
+ }
+ //drop id_adh
+ $this->_id = null;
+ //drop mail, must be unique
+ $this->_email = null;
+ }
}
<li>
<a class="button" id="btn_addcontrib" href="{path_for name="contribution" data=["type" => {_T string="donation" domain="routes"}, "action" => {_T string="add" domain="routes"}]}?id_adh={$member->id}">{_T string="Add a donation"}</a>
</li>
+ <li>
+ <a class="button" href="{path_for name="duplicateMember" data=["id_adh" => $member->id]}" id="btn_duplicate" title="{_T string="Create a new member with %name information." pattern="/%name/" replace=$member->sname}">{_T string="Duplicate"}</a>
+ </li>
{/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). *}
background-image:url(images/printer.png), url("jquery-ui/images/ui-bg_glass_75_ffb619_1x400.png");
}
-#btn_membercard, #btn_edit, #btn_contrib, #btn_addcontrib, #btn_lostpassword, #btn_adhesionform {
+#btn_membercard, #btn_edit, #btn_contrib, #btn_addcontrib, #btn_lostpassword, #btn_adhesionform, #btn_duplicate {
padding-top:30px!important;
padding-left: 0!important;
display: block;
background-image: url(images/add_contribution.png), url("jquery-ui/images/ui-bg_glass_75_ffb619_1x400.png");
}
+#btn_duplicate {
+ background-image:url(images/duplicate.png), url("jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png");
+}
+#btn_duplicate.ui-state-hover {
+ background-image: url(images/duplicate.png), url("jquery-ui/images/ui-bg_glass_75_ffb619_1x400.png");
+}
+
.ui-state-default.btn_pdf {
background-image: url(images/icon-pdf.png), url("jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png");
}