| Total Complexity | 1417 |
| Total Lines | 7605 |
| Duplicated Lines | 0 % |
| Changes | 1 | ||
| Bugs | 0 | Features | 0 |
Complex classes like AdherentController often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use AdherentController, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 104 | class AdherentController extends DolibarrController |
||
| 105 | { |
||
| 106 | /** |
||
| 107 | * \file htdocs/adherents/agenda.php |
||
| 108 | * \ingroup member |
||
| 109 | * \brief Page of members events |
||
| 110 | */ |
||
| 111 | public function agenda() |
||
| 112 | { |
||
| 113 | global $conf; |
||
| 114 | global $db; |
||
| 115 | global $user; |
||
| 116 | global $hookmanager; |
||
| 117 | global $user; |
||
| 118 | global $menumanager; |
||
| 119 | global $langs; |
||
| 120 | |||
| 121 | // Load translation files required by the page |
||
| 122 | $langs->loadLangs(array('companies', 'members')); |
||
| 123 | |||
| 124 | // Get Parameters |
||
| 125 | $id = GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('rowid'); |
||
| 126 | |||
| 127 | // Pagination |
||
| 128 | $limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; |
||
| 129 | $sortfield = GETPOST('sortfield', 'aZ09comma'); |
||
| 130 | $sortorder = GETPOST('sortorder', 'aZ09comma'); |
||
| 131 | $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); |
||
| 132 | if (empty($page) || $page == -1) { |
||
| 133 | $page = 0; |
||
| 134 | } // If $page is not defined, or '' or -1 |
||
| 135 | $offset = $limit * $page; |
||
| 136 | $pageprev = $page - 1; |
||
| 137 | $pagenext = $page + 1; |
||
| 138 | if (!$sortfield) { |
||
| 139 | $sortfield = 'a.datep,a.id'; |
||
| 140 | } |
||
| 141 | if (!$sortorder) { |
||
| 142 | $sortorder = 'DESC'; |
||
| 143 | } |
||
| 144 | |||
| 145 | if (GETPOST('actioncode', 'array')) { |
||
| 146 | $actioncode = GETPOST('actioncode', 'array', 3); |
||
| 147 | if (!count($actioncode)) { |
||
| 148 | $actioncode = '0'; |
||
| 149 | } |
||
| 150 | } else { |
||
| 151 | $actioncode = GETPOST("actioncode", "alpha", 3) ? GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT')); |
||
| 152 | } |
||
| 153 | $search_rowid = GETPOST('search_rowid'); |
||
| 154 | $search_agenda_label = GETPOST('search_agenda_label'); |
||
| 155 | |||
| 156 | // Get object canvas (By default, this is not defined, so standard usage of dolibarr) |
||
| 157 | $objcanvas = null; |
||
| 158 | |||
| 159 | // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context |
||
| 160 | $hookmanager->initHooks(array('memberagenda', 'globalcard')); |
||
| 161 | |||
| 162 | // Security check |
||
| 163 | $result = restrictedArea($user, 'adherent', $id); |
||
| 164 | |||
| 165 | // Initialize technical objects |
||
| 166 | $object = new Adherent($db); |
||
| 167 | $result = $object->fetch($id); |
||
| 168 | if ($result > 0) { |
||
| 169 | $object->fetch_thirdparty(); |
||
| 170 | |||
| 171 | $adht = new AdherentType($db); |
||
| 172 | $result = $adht->fetch($object->typeid); |
||
| 173 | } |
||
| 174 | |||
| 175 | |||
| 176 | /* |
||
| 177 | * Actions |
||
| 178 | */ |
||
| 179 | |||
| 180 | $parameters = array('id' => $id, 'objcanvas' => $objcanvas); |
||
| 181 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 182 | if ($reshook < 0) { |
||
| 183 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 184 | } |
||
| 185 | |||
| 186 | if (empty($reshook)) { |
||
| 187 | // Cancel |
||
| 188 | if (GETPOST('cancel', 'alpha') && !empty($backtopage)) { |
||
| 189 | header("Location: " . $backtopage); |
||
| 190 | exit; |
||
| 191 | } |
||
| 192 | |||
| 193 | // Purge search criteria |
||
| 194 | if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All test are required to be compatible with all browsers |
||
| 195 | $actioncode = ''; |
||
| 196 | $search_rowid = ''; |
||
| 197 | $search_agenda_label = ''; |
||
| 198 | } |
||
| 199 | } |
||
| 200 | |||
| 201 | |||
| 202 | |||
| 203 | /* |
||
| 204 | * View |
||
| 205 | */ |
||
| 206 | |||
| 207 | $contactstatic = new Contact($db); |
||
| 208 | |||
| 209 | $form = new Form($db); |
||
| 210 | |||
| 211 | |||
| 212 | if ($object->id > 0) { |
||
| 213 | require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php'; |
||
| 214 | require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; |
||
| 215 | |||
| 216 | $langs->load("companies"); |
||
| 217 | |||
| 218 | $title = $langs->trans("Member") . " - " . $langs->trans("Agenda"); |
||
| 219 | |||
| 220 | $help_url = "EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder"; |
||
| 221 | |||
| 222 | llxHeader("", $title, $help_url); |
||
| 223 | |||
| 224 | if (isModEnabled('notification')) { |
||
| 225 | $langs->load("mails"); |
||
| 226 | } |
||
| 227 | $head = member_prepare_head($object); |
||
| 228 | |||
| 229 | print dol_get_fiche_head($head, 'agenda', $langs->trans("Member"), -1, 'user'); |
||
| 230 | |||
| 231 | $linkback = '<a href="' . DOL_URL_ROOT . '/adherents/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>'; |
||
| 232 | |||
| 233 | $morehtmlref = '<a href="' . DOL_URL_ROOT . '/adherents/vcard.php?id=' . $object->id . '" class="refid">'; |
||
| 234 | $morehtmlref .= img_picto($langs->trans("Download") . ' ' . $langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"'); |
||
| 235 | $morehtmlref .= '</a>'; |
||
| 236 | |||
| 237 | dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref); |
||
| 238 | |||
| 239 | print '<div class="fichecenter">'; |
||
| 240 | |||
| 241 | print '<div class="underbanner clearboth"></div>'; |
||
| 242 | |||
| 243 | $object->info($id); |
||
| 244 | dol_print_object_info($object, 1); |
||
| 245 | |||
| 246 | print '</div>'; |
||
| 247 | |||
| 248 | print dol_get_fiche_end(); |
||
| 249 | |||
| 250 | |||
| 251 | //print '<div class="tabsAction">'; |
||
| 252 | //print '</div>'; |
||
| 253 | |||
| 254 | |||
| 255 | $newcardbutton = ''; |
||
| 256 | if (isModEnabled('agenda')) { |
||
| 257 | $newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT . '/comm/action/card.php?action=create&backtopage=' . urlencode($_SERVER['PHP_SELF']) . ($object->id > 0 ? '?id=' . $object->id : '') . '&origin=member&originid=' . $id); |
||
| 258 | } |
||
| 259 | |||
| 260 | if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) { |
||
| 261 | print '<br>'; |
||
| 262 | |||
| 263 | $param = '&id=' . $id; |
||
| 264 | if (!empty($contextpage) && $contextpage != $_SERVER['PHP_SELF']) { |
||
| 265 | $param .= '&contextpage=' . $contextpage; |
||
| 266 | } |
||
| 267 | if ($limit > 0 && $limit != $conf->liste_limit) { |
||
| 268 | $param .= '&limit=' . $limit; |
||
| 269 | } |
||
| 270 | |||
| 271 | print_barre_liste($langs->trans("ActionsOnMember"), 0, $_SERVER['PHP_SELF'], '', $sortfield, $sortorder, '', 0, -1, '', '', $newcardbutton, '', 0, 1, 1); |
||
| 272 | |||
| 273 | // List of all actions |
||
| 274 | $filters = array(); |
||
| 275 | $filters['search_agenda_label'] = $search_agenda_label; |
||
| 276 | $filters['search_rowid'] = $search_rowid; |
||
| 277 | |||
| 278 | // TODO Replace this with same code than into list.php |
||
| 279 | show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); |
||
| 280 | } |
||
| 281 | } |
||
| 282 | |||
| 283 | // End of page |
||
| 284 | llxFooter(); |
||
| 285 | $db->close(); |
||
| 286 | } |
||
| 287 | |||
| 288 | /** |
||
| 289 | * \file htdocs/adherents/card.php |
||
| 290 | * \ingroup member |
||
| 291 | * \brief Page of a member |
||
| 292 | */ |
||
| 293 | public function card() |
||
| 294 | { |
||
| 295 | global $conf; |
||
| 296 | global $db; |
||
| 297 | global $user; |
||
| 298 | global $hookmanager; |
||
| 299 | global $user; |
||
| 300 | global $menumanager; |
||
| 301 | global $langs; |
||
| 302 | |||
| 303 | // Load translation files required by the page |
||
| 304 | $langs->loadLangs(array("companies", "bills", "members", "users", "other", "paypal")); |
||
| 305 | |||
| 306 | |||
| 307 | // Get parameters |
||
| 308 | $action = GETPOST('action', 'aZ09'); |
||
| 309 | $cancel = GETPOST('cancel', 'alpha'); |
||
| 310 | $backtopage = GETPOST('backtopage', 'alpha'); |
||
| 311 | $confirm = GETPOST('confirm', 'alpha'); |
||
| 312 | $rowid = GETPOSTINT('rowid'); |
||
| 313 | $id = GETPOST('id') ? GETPOSTINT('id') : $rowid; |
||
| 314 | $typeid = GETPOSTINT('typeid'); |
||
| 315 | $userid = GETPOSTINT('userid'); |
||
| 316 | $socid = GETPOSTINT('socid'); |
||
| 317 | $ref = GETPOST('ref', 'alpha'); |
||
| 318 | |||
| 319 | if (isModEnabled('mailmanspip')) { |
||
| 320 | include_once DOL_DOCUMENT_ROOT . '/mailmanspip/class/mailmanspip.class.php'; |
||
| 321 | |||
| 322 | $langs->load('mailmanspip'); |
||
| 323 | |||
| 324 | $mailmanspip = new MailmanSpip($db); |
||
| 325 | } |
||
| 326 | |||
| 327 | $object = new Adherent($db); |
||
| 328 | $extrafields = new ExtraFields($db); |
||
| 329 | |||
| 330 | // fetch optionals attributes and labels |
||
| 331 | $extrafields->fetch_name_optionals_label($object->table_element); |
||
| 332 | |||
| 333 | $socialnetworks = getArrayOfSocialNetworks(); |
||
| 334 | |||
| 335 | // Get object canvas (By default, this is not defined, so standard usage of dolibarr) |
||
| 336 | $object->getCanvas($id); |
||
| 337 | $canvas = $object->canvas ? $object->canvas : GETPOST("canvas"); |
||
| 338 | $objcanvas = null; |
||
| 339 | if (!empty($canvas)) { |
||
| 340 | require_once DOL_DOCUMENT_ROOT . '/core/class/canvas.class.php'; |
||
| 341 | $objcanvas = new Canvas($db, $action); |
||
| 342 | $objcanvas->getCanvas('adherent', 'membercard', $canvas); |
||
| 343 | } |
||
| 344 | |||
| 345 | // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context |
||
| 346 | $hookmanager->initHooks(array('membercard', 'globalcard')); |
||
| 347 | |||
| 348 | // Fetch object |
||
| 349 | if ($id > 0 || !empty($ref)) { |
||
| 350 | // Load member |
||
| 351 | $result = $object->fetch($id, $ref); |
||
| 352 | |||
| 353 | // Define variables to know what current user can do on users |
||
| 354 | $canadduser = ($user->admin || $user->hasRight('user', 'user', 'creer')); |
||
| 355 | // Define variables to know what current user can do on properties of user linked to edited member |
||
| 356 | if ($object->user_id) { |
||
| 357 | // $User is the user who edits, $object->user_id is the id of the related user in the edited member |
||
| 358 | $caneditfielduser = ((($user->id == $object->user_id) && $user->hasRight('user', 'self', 'creer')) |
||
| 359 | || (($user->id != $object->user_id) && $user->hasRight('user', 'user', 'creer'))); |
||
| 360 | $caneditpassworduser = ((($user->id == $object->user_id) && $user->hasRight('user', 'self', 'password')) |
||
| 361 | || (($user->id != $object->user_id) && $user->hasRight('user', 'user', 'password'))); |
||
| 362 | } |
||
| 363 | } |
||
| 364 | |||
| 365 | // Define variables to determine what the current user can do on the members |
||
| 366 | $canaddmember = $user->hasRight('adherent', 'creer'); |
||
| 367 | // Define variables to determine what the current user can do on the properties of a member |
||
| 368 | if ($id) { |
||
| 369 | $caneditfieldmember = $user->hasRight('adherent', 'creer'); |
||
| 370 | } |
||
| 371 | |||
| 372 | // Security check |
||
| 373 | $result = restrictedArea($user, 'adherent', $object->id, '', '', 'socid', 'rowid', 0); |
||
| 374 | |||
| 375 | if (!$user->hasRight('adherent', 'creer') && $action == 'edit') { |
||
| 376 | accessforbidden('Not enough permission'); |
||
| 377 | } |
||
| 378 | |||
| 379 | $linkofpubliclist = DOL_MAIN_URL_ROOT . '/public/members/public_list.php' . ((isModEnabled('multicompany')) ? '?entity=' . $conf->entity : ''); |
||
| 380 | |||
| 381 | |||
| 382 | /* |
||
| 383 | * Actions |
||
| 384 | */ |
||
| 385 | |||
| 386 | $parameters = array('id' => $id, 'rowid' => $id, 'objcanvas' => $objcanvas, 'confirm' => $confirm); |
||
| 387 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 388 | if ($reshook < 0) { |
||
| 389 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 390 | } |
||
| 391 | |||
| 392 | if (empty($reshook)) { |
||
| 393 | $backurlforlist = '/adherents/list.php'; |
||
| 394 | |||
| 395 | if (empty($backtopage) || ($cancel && empty($id))) { |
||
| 396 | if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) { |
||
| 397 | if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) { |
||
| 398 | $backtopage = $backurlforlist; |
||
| 399 | } else { |
||
| 400 | $backtopage = '/adherents/card.php?id=' . ((!empty($id) && $id > 0) ? $id : '__ID__'); |
||
| 401 | } |
||
| 402 | } |
||
| 403 | } |
||
| 404 | |||
| 405 | if ($cancel) { |
||
| 406 | if (!empty($backtopageforcancel)) { |
||
| 407 | header("Location: " . $backtopageforcancel); |
||
| 408 | exit; |
||
| 409 | } elseif (!empty($backtopage)) { |
||
| 410 | header("Location: " . $backtopage); |
||
| 411 | exit; |
||
| 412 | } |
||
| 413 | $action = ''; |
||
| 414 | } |
||
| 415 | |||
| 416 | if ($action == 'setuserid' && ($user->hasRight('user', 'self', 'creer') || $user->hasRight('user', 'user', 'creer'))) { |
||
| 417 | $error = 0; |
||
| 418 | if (!$user->hasRight('user', 'user', 'creer')) { // If can edit only itself user, we can link to itself only |
||
| 419 | if ($userid != $user->id && $userid != $object->user_id) { |
||
| 420 | $error++; |
||
| 421 | setEventMessages($langs->trans("ErrorUserPermissionAllowsToLinksToItselfOnly"), null, 'errors'); |
||
| 422 | } |
||
| 423 | } |
||
| 424 | |||
| 425 | if (!$error) { |
||
| 426 | if ($userid != $object->user_id) { // If link differs from currently in database |
||
| 427 | $result = $object->setUserId($userid); |
||
| 428 | if ($result < 0) { |
||
| 429 | dol_print_error($object->db, $object->error); |
||
| 430 | } |
||
| 431 | $action = ''; |
||
| 432 | } |
||
| 433 | } |
||
| 434 | } |
||
| 435 | |||
| 436 | if ($action == 'setsocid') { |
||
| 437 | $error = 0; |
||
| 438 | if (!$error) { |
||
| 439 | if ($socid != $object->socid) { // If link differs from currently in database |
||
| 440 | $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "adherent"; |
||
| 441 | $sql .= " WHERE socid = " . ((int) $socid); |
||
| 442 | $sql .= " AND entity = " . $conf->entity; |
||
| 443 | $resql = $db->query($sql); |
||
| 444 | if ($resql) { |
||
| 445 | $obj = $db->fetch_object($resql); |
||
| 446 | if ($obj && $obj->rowid > 0) { |
||
| 447 | $othermember = new Adherent($db); |
||
| 448 | $othermember->fetch($obj->rowid); |
||
| 449 | $thirdparty = new Societe($db); |
||
| 450 | $thirdparty->fetch($socid); |
||
| 451 | $error++; |
||
| 452 | setEventMessages($langs->trans("ErrorMemberIsAlreadyLinkedToThisThirdParty", $othermember->getFullName($langs), $othermember->login, $thirdparty->name), null, 'errors'); |
||
| 453 | } |
||
| 454 | } |
||
| 455 | |||
| 456 | if (!$error) { |
||
| 457 | $result = $object->setThirdPartyId($socid); |
||
| 458 | if ($result < 0) { |
||
| 459 | dol_print_error($object->db, $object->error); |
||
| 460 | } |
||
| 461 | $action = ''; |
||
| 462 | } |
||
| 463 | } |
||
| 464 | } |
||
| 465 | } |
||
| 466 | |||
| 467 | // Create user from a member |
||
| 468 | if ($action == 'confirm_create_user' && $confirm == 'yes' && $user->hasRight('user', 'user', 'creer')) { |
||
| 469 | if ($result > 0) { |
||
| 470 | // Creation user |
||
| 471 | $nuser = new User($db); |
||
| 472 | $tmpuser = dol_clone($object); |
||
| 473 | if (GETPOST('internalorexternal', 'aZ09') == 'internal') { |
||
| 474 | $tmpuser->fk_soc = 0; |
||
| 475 | } |
||
| 476 | |||
| 477 | $result = $nuser->create_from_member($tmpuser, GETPOST('login', 'alphanohtml')); |
||
| 478 | |||
| 479 | if ($result < 0) { |
||
| 480 | $langs->load("errors"); |
||
| 481 | setEventMessages($langs->trans($nuser->error), null, 'errors'); |
||
| 482 | } else { |
||
| 483 | setEventMessages($langs->trans("NewUserCreated", $nuser->login), null, 'mesgs'); |
||
| 484 | $action = ''; |
||
| 485 | } |
||
| 486 | } else { |
||
| 487 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 488 | } |
||
| 489 | } |
||
| 490 | |||
| 491 | // Create third party from a member |
||
| 492 | if ($action == 'confirm_create_thirdparty' && $confirm == 'yes' && $user->hasRight('societe', 'creer')) { |
||
| 493 | if ($result > 0) { |
||
| 494 | // User creation |
||
| 495 | $company = new Societe($db); |
||
| 496 | $result = $company->create_from_member($object, GETPOST('companyname', 'alpha'), GETPOST('companyalias', 'alpha')); |
||
| 497 | |||
| 498 | if ($result < 0) { |
||
| 499 | $langs->load("errors"); |
||
| 500 | setEventMessages($langs->trans($company->error), null, 'errors'); |
||
| 501 | setEventMessages($company->error, $company->errors, 'errors'); |
||
| 502 | } |
||
| 503 | } else { |
||
| 504 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 505 | } |
||
| 506 | } |
||
| 507 | |||
| 508 | if ($action == 'update' && !$cancel && $user->hasRight('adherent', 'creer')) { |
||
| 509 | require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; |
||
| 510 | |||
| 511 | $birthdate = ''; |
||
| 512 | if (GETPOSTINT("birthday") && GETPOSTINT("birthmonth") && GETPOSTINT("birthyear")) { |
||
| 513 | $birthdate = dol_mktime(12, 0, 0, GETPOSTINT("birthmonth"), GETPOSTINT("birthday"), GETPOSTINT("birthyear")); |
||
| 514 | } |
||
| 515 | $lastname = GETPOST("lastname", 'alphanohtml'); |
||
| 516 | $firstname = GETPOST("firstname", 'alphanohtml'); |
||
| 517 | $gender = GETPOST("gender", 'alphanohtml'); |
||
| 518 | $societe = GETPOST("societe", 'alphanohtml'); |
||
| 519 | $morphy = GETPOST("morphy", 'alphanohtml'); |
||
| 520 | $login = GETPOST("login", 'alphanohtml'); |
||
| 521 | if ($morphy != 'mor' && empty($lastname)) { |
||
| 522 | $error++; |
||
| 523 | $langs->load("errors"); |
||
| 524 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Lastname")), null, 'errors'); |
||
| 525 | } |
||
| 526 | if ($morphy != 'mor' && (!isset($firstname) || $firstname == '')) { |
||
| 527 | $error++; |
||
| 528 | $langs->load("errors"); |
||
| 529 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Firstname")), null, 'errors'); |
||
| 530 | } |
||
| 531 | if ($morphy == 'mor' && empty($societe)) { |
||
| 532 | $error++; |
||
| 533 | $langs->load("errors"); |
||
| 534 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Company")), null, 'errors'); |
||
| 535 | } |
||
| 536 | // Check if the login already exists |
||
| 537 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 538 | if (empty($login)) { |
||
| 539 | $error++; |
||
| 540 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Login")), null, 'errors'); |
||
| 541 | } |
||
| 542 | } |
||
| 543 | // Create new object |
||
| 544 | if ($result > 0 && !$error) { |
||
| 545 | $object->oldcopy = dol_clone($object, 2); |
||
| 546 | |||
| 547 | // Change values |
||
| 548 | $object->civility_id = trim(GETPOST("civility_id", 'alphanohtml')); |
||
| 549 | $object->firstname = trim(GETPOST("firstname", 'alphanohtml')); |
||
| 550 | $object->lastname = trim(GETPOST("lastname", 'alphanohtml')); |
||
| 551 | $object->gender = trim(GETPOST("gender", 'alphanohtml')); |
||
| 552 | $object->login = trim(GETPOST("login", 'alphanohtml')); |
||
| 553 | if (GETPOSTISSET('pass')) { |
||
| 554 | $object->pass = trim(GETPOST("pass", 'none')); // For password, we must use 'none' |
||
| 555 | } |
||
| 556 | |||
| 557 | $object->societe = trim(GETPOST("societe", 'alphanohtml')); // deprecated |
||
| 558 | $object->company = trim(GETPOST("societe", 'alphanohtml')); |
||
| 559 | |||
| 560 | $object->address = trim(GETPOST("address", 'alphanohtml')); |
||
| 561 | $object->zip = trim(GETPOST("zipcode", 'alphanohtml')); |
||
| 562 | $object->town = trim(GETPOST("town", 'alphanohtml')); |
||
| 563 | $object->state_id = GETPOSTINT("state_id"); |
||
| 564 | $object->country_id = GETPOSTINT("country_id"); |
||
| 565 | |||
| 566 | $object->phone = trim(GETPOST("phone", 'alpha')); |
||
| 567 | $object->phone_perso = trim(GETPOST("phone_perso", 'alpha')); |
||
| 568 | $object->phone_mobile = trim(GETPOST("phone_mobile", 'alpha')); |
||
| 569 | $object->email = preg_replace('/\s+/', '', GETPOST("member_email", 'alpha')); |
||
| 570 | $object->url = trim(GETPOST('member_url', 'custom', 0, FILTER_SANITIZE_URL)); |
||
| 571 | $object->socialnetworks = array(); |
||
| 572 | foreach ($socialnetworks as $key => $value) { |
||
| 573 | if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml') != '') { |
||
| 574 | $object->socialnetworks[$key] = trim(GETPOST($key, 'alphanohtml')); |
||
| 575 | } |
||
| 576 | } |
||
| 577 | $object->birth = $birthdate; |
||
| 578 | $object->default_lang = GETPOST('default_lang', 'alpha'); |
||
| 579 | $object->typeid = GETPOSTINT("typeid"); |
||
| 580 | //$object->note = trim(GETPOST("comment", "restricthtml")); |
||
| 581 | $object->morphy = GETPOST("morphy", 'alpha'); |
||
| 582 | |||
| 583 | if (GETPOST('deletephoto', 'alpha')) { |
||
| 584 | $object->photo = ''; |
||
| 585 | } elseif (!empty($_FILES['photo']['name'])) { |
||
| 586 | $object->photo = dol_sanitizeFileName($_FILES['photo']['name']); |
||
| 587 | } |
||
| 588 | |||
| 589 | // Get status and public property |
||
| 590 | $object->statut = GETPOSTINT("statut"); |
||
| 591 | $object->status = GETPOSTINT("statut"); |
||
| 592 | $object->public = GETPOSTINT("public"); |
||
| 593 | |||
| 594 | // Fill array 'array_options' with data from add form |
||
| 595 | $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET'); |
||
| 596 | if ($ret < 0) { |
||
| 597 | $error++; |
||
| 598 | } |
||
| 599 | |||
| 600 | // Check if we need to also synchronize user information |
||
| 601 | $nosyncuser = 0; |
||
| 602 | if ($object->user_id) { // If linked to a user |
||
| 603 | if ($user->id != $object->user_id && !$user->hasRight('user', 'user', 'creer')) { |
||
| 604 | $nosyncuser = 1; // Disable synchronizing |
||
| 605 | } |
||
| 606 | } |
||
| 607 | |||
| 608 | // Check if we need to also synchronize password information |
||
| 609 | $nosyncuserpass = 1; // no by default |
||
| 610 | if (GETPOSTISSET('pass')) { |
||
| 611 | if ($object->user_id) { // If member is linked to a user |
||
| 612 | $nosyncuserpass = 0; // We may try to sync password |
||
| 613 | if ($user->id == $object->user_id) { |
||
| 614 | if (!$user->hasRight('user', 'self', 'password')) { |
||
| 615 | $nosyncuserpass = 1; // Disable synchronizing |
||
| 616 | } |
||
| 617 | } else { |
||
| 618 | if (!$user->hasRight('user', 'user', 'password')) { |
||
| 619 | $nosyncuserpass = 1; // Disable synchronizing |
||
| 620 | } |
||
| 621 | } |
||
| 622 | } |
||
| 623 | } |
||
| 624 | |||
| 625 | if (!$error) { |
||
| 626 | $result = $object->update($user, 0, $nosyncuser, $nosyncuserpass); |
||
| 627 | |||
| 628 | if ($result >= 0 && !count($object->errors)) { |
||
| 629 | $categories = GETPOST('memcats', 'array'); |
||
| 630 | $object->setCategories($categories); |
||
| 631 | |||
| 632 | // Logo/Photo save |
||
| 633 | $dir = $conf->adherent->dir_output . '/' . get_exdir(0, 0, 0, 1, $object, 'member') . '/photos'; |
||
| 634 | $file_OK = is_uploaded_file($_FILES['photo']['tmp_name']); |
||
| 635 | if ($file_OK) { |
||
| 636 | if (GETPOST('deletephoto')) { |
||
| 637 | require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; |
||
| 638 | $fileimg = $conf->adherent->dir_output . '/' . get_exdir(0, 0, 0, 1, $object, 'member') . '/photos/' . $object->photo; |
||
| 639 | $dirthumbs = $conf->adherent->dir_output . '/' . get_exdir(0, 0, 0, 1, $object, 'member') . '/photos/thumbs'; |
||
| 640 | dol_delete_file($fileimg); |
||
| 641 | dol_delete_dir_recursive($dirthumbs); |
||
| 642 | } |
||
| 643 | |||
| 644 | if (image_format_supported($_FILES['photo']['name']) > 0) { |
||
| 645 | dol_mkdir($dir); |
||
| 646 | |||
| 647 | if (@is_dir($dir)) { |
||
| 648 | $newfile = $dir . '/' . dol_sanitizeFileName($_FILES['photo']['name']); |
||
| 649 | if (!dol_move_uploaded_file($_FILES['photo']['tmp_name'], $newfile, 1, 0, $_FILES['photo']['error']) > 0) { |
||
| 650 | setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors'); |
||
| 651 | } else { |
||
| 652 | // Create thumbs |
||
| 653 | $object->addThumbs($newfile); |
||
| 654 | } |
||
| 655 | } |
||
| 656 | } else { |
||
| 657 | setEventMessages("ErrorBadImageFormat", null, 'errors'); |
||
| 658 | } |
||
| 659 | } else { |
||
| 660 | switch ($_FILES['photo']['error']) { |
||
| 661 | case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini |
||
| 662 | case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form |
||
| 663 | $errors[] = "ErrorFileSizeTooLarge"; |
||
| 664 | break; |
||
| 665 | case 3: //uploaded file was only partially uploaded |
||
| 666 | $errors[] = "ErrorFilePartiallyUploaded"; |
||
| 667 | break; |
||
| 668 | } |
||
| 669 | } |
||
| 670 | |||
| 671 | $rowid = $object->id; |
||
| 672 | $id = $object->id; |
||
| 673 | $action = ''; |
||
| 674 | |||
| 675 | if (!empty($backtopage)) { |
||
| 676 | header("Location: " . $backtopage); |
||
| 677 | exit; |
||
| 678 | } |
||
| 679 | } else { |
||
| 680 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 681 | $action = ''; |
||
| 682 | } |
||
| 683 | } else { |
||
| 684 | $action = 'edit'; |
||
| 685 | } |
||
| 686 | } else { |
||
| 687 | $action = 'edit'; |
||
| 688 | } |
||
| 689 | } |
||
| 690 | |||
| 691 | if ($action == 'add' && $user->hasRight('adherent', 'creer')) { |
||
| 692 | if ($canvas) { |
||
| 693 | $object->canvas = $canvas; |
||
| 694 | } |
||
| 695 | $birthdate = ''; |
||
| 696 | if (GETPOSTISSET("birthday") && GETPOST("birthday") && GETPOSTISSET("birthmonth") && GETPOST("birthmonth") && GETPOSTISSET("birthyear") && GETPOST("birthyear")) { |
||
| 697 | $birthdate = dol_mktime(12, 0, 0, GETPOSTINT("birthmonth"), GETPOSTINT("birthday"), GETPOSTINT("birthyear")); |
||
| 698 | } |
||
| 699 | $datesubscription = ''; |
||
| 700 | if (GETPOSTISSET("reday") && GETPOSTISSET("remonth") && GETPOSTISSET("reyear")) { |
||
| 701 | $datesubscription = dol_mktime(12, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); |
||
| 702 | } |
||
| 703 | |||
| 704 | $typeid = GETPOSTINT("typeid"); |
||
| 705 | $civility_id = GETPOST("civility_id", 'alphanohtml'); |
||
| 706 | $lastname = GETPOST("lastname", 'alphanohtml'); |
||
| 707 | $firstname = GETPOST("firstname", 'alphanohtml'); |
||
| 708 | $gender = GETPOST("gender", 'alphanohtml'); |
||
| 709 | $societe = GETPOST("societe", 'alphanohtml'); |
||
| 710 | $address = GETPOST("address", 'alphanohtml'); |
||
| 711 | $zip = GETPOST("zipcode", 'alphanohtml'); |
||
| 712 | $town = GETPOST("town", 'alphanohtml'); |
||
| 713 | $state_id = GETPOSTINT("state_id"); |
||
| 714 | $country_id = GETPOSTINT("country_id"); |
||
| 715 | |||
| 716 | $phone = GETPOST("phone", 'alpha'); |
||
| 717 | $phone_perso = GETPOST("phone_perso", 'alpha'); |
||
| 718 | $phone_mobile = GETPOST("phone_mobile", 'alpha'); |
||
| 719 | $email = preg_replace('/\s+/', '', GETPOST("member_email", 'alpha')); |
||
| 720 | $url = trim(GETPOST('url', 'custom', 0, FILTER_SANITIZE_URL)); |
||
| 721 | $login = GETPOST("member_login", 'alphanohtml'); |
||
| 722 | $pass = GETPOST("password", 'none'); // For password, we use 'none' |
||
| 723 | $photo = GETPOST("photo", 'alphanohtml'); |
||
| 724 | $morphy = GETPOST("morphy", 'alphanohtml'); |
||
| 725 | $public = GETPOST("public", 'alphanohtml'); |
||
| 726 | |||
| 727 | $userid = GETPOSTINT("userid"); |
||
| 728 | $socid = GETPOSTINT("socid"); |
||
| 729 | $default_lang = GETPOST('default_lang', 'alpha'); |
||
| 730 | |||
| 731 | $object->civility_id = $civility_id; |
||
| 732 | $object->firstname = $firstname; |
||
| 733 | $object->lastname = $lastname; |
||
| 734 | $object->gender = $gender; |
||
| 735 | $object->societe = $societe; // deprecated |
||
| 736 | $object->company = $societe; |
||
| 737 | $object->address = $address; |
||
| 738 | $object->zip = $zip; |
||
| 739 | $object->town = $town; |
||
| 740 | $object->state_id = $state_id; |
||
| 741 | $object->country_id = $country_id; |
||
| 742 | $object->phone = $phone; |
||
| 743 | $object->phone_perso = $phone_perso; |
||
| 744 | $object->phone_mobile = $phone_mobile; |
||
| 745 | $object->socialnetworks = array(); |
||
| 746 | if (isModEnabled('socialnetworks')) { |
||
| 747 | foreach ($socialnetworks as $key => $value) { |
||
| 748 | if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml') != '') { |
||
| 749 | $object->socialnetworks[$key] = GETPOST("member_" . $key, 'alphanohtml'); |
||
| 750 | } |
||
| 751 | } |
||
| 752 | } |
||
| 753 | |||
| 754 | $object->email = $email; |
||
| 755 | $object->url = $url; |
||
| 756 | $object->login = $login; |
||
| 757 | $object->pass = $pass; |
||
| 758 | $object->birth = $birthdate; |
||
| 759 | $object->photo = $photo; |
||
| 760 | $object->typeid = $typeid; |
||
| 761 | //$object->note = $comment; |
||
| 762 | $object->morphy = $morphy; |
||
| 763 | $object->user_id = $userid; |
||
| 764 | $object->socid = $socid; |
||
| 765 | $object->public = $public; |
||
| 766 | $object->default_lang = $default_lang; |
||
| 767 | // Fill array 'array_options' with data from add form |
||
| 768 | $ret = $extrafields->setOptionalsFromPost(null, $object); |
||
| 769 | if ($ret < 0) { |
||
| 770 | $error++; |
||
| 771 | } |
||
| 772 | |||
| 773 | // Check parameters |
||
| 774 | if (empty($morphy) || $morphy == "-1") { |
||
| 775 | $error++; |
||
| 776 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("MemberNature")), null, 'errors'); |
||
| 777 | } |
||
| 778 | // Tests if the login already exists |
||
| 779 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 780 | if (empty($login)) { |
||
| 781 | $error++; |
||
| 782 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Login")), null, 'errors'); |
||
| 783 | } else { |
||
| 784 | $sql = "SELECT login FROM " . MAIN_DB_PREFIX . "adherent WHERE login='" . $db->escape($login) . "'"; |
||
| 785 | $result = $db->query($sql); |
||
| 786 | if ($result) { |
||
| 787 | $num = $db->num_rows($result); |
||
| 788 | } |
||
| 789 | if ($num) { |
||
| 790 | $error++; |
||
| 791 | $langs->load("errors"); |
||
| 792 | setEventMessages($langs->trans("ErrorLoginAlreadyExists", $login), null, 'errors'); |
||
| 793 | } |
||
| 794 | } |
||
| 795 | if (empty($pass)) { |
||
| 796 | $error++; |
||
| 797 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Password")), null, 'errors'); |
||
| 798 | } |
||
| 799 | } |
||
| 800 | if ($morphy == 'mor' && empty($societe)) { |
||
| 801 | $error++; |
||
| 802 | $langs->load("errors"); |
||
| 803 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Company")), null, 'errors'); |
||
| 804 | } |
||
| 805 | if ($morphy != 'mor' && empty($lastname)) { |
||
| 806 | $error++; |
||
| 807 | $langs->load("errors"); |
||
| 808 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Lastname")), null, 'errors'); |
||
| 809 | } |
||
| 810 | if ($morphy != 'mor' && (!isset($firstname) || $firstname == '')) { |
||
| 811 | $error++; |
||
| 812 | $langs->load("errors"); |
||
| 813 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Firstname")), null, 'errors'); |
||
| 814 | } |
||
| 815 | if (!($typeid > 0)) { // Keep () before ! |
||
| 816 | $error++; |
||
| 817 | setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); |
||
| 818 | } |
||
| 819 | if (getDolGlobalString('ADHERENT_MAIL_REQUIRED') && !isValidEmail($email)) { |
||
| 820 | $error++; |
||
| 821 | $langs->load("errors"); |
||
| 822 | setEventMessages($langs->trans("ErrorBadEMail", $email), null, 'errors'); |
||
| 823 | } |
||
| 824 | if (!empty($object->url) && !isValidUrl($object->url)) { |
||
| 825 | $langs->load("errors"); |
||
| 826 | setEventMessages($langs->trans("ErrorBadUrl", $object->url), null, 'errors'); |
||
| 827 | } |
||
| 828 | $public = 0; |
||
| 829 | if (isset($public)) { |
||
| 830 | $public = 1; |
||
| 831 | } |
||
| 832 | |||
| 833 | if (!$error) { |
||
| 834 | $db->begin(); |
||
| 835 | |||
| 836 | // Create the member |
||
| 837 | $result = $object->create($user); |
||
| 838 | if ($result > 0) { |
||
| 839 | // Foundation categories |
||
| 840 | $memcats = GETPOST('memcats', 'array'); |
||
| 841 | $object->setCategories($memcats); |
||
| 842 | |||
| 843 | $db->commit(); |
||
| 844 | |||
| 845 | $rowid = $object->id; |
||
| 846 | $id = $object->id; |
||
| 847 | |||
| 848 | $backtopage = preg_replace('/__ID__/', $id, $backtopage); |
||
| 849 | } else { |
||
| 850 | $db->rollback(); |
||
| 851 | |||
| 852 | $error++; |
||
| 853 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 854 | } |
||
| 855 | |||
| 856 | // Auto-create thirdparty on member creation |
||
| 857 | if (getDolGlobalString('ADHERENT_DEFAULT_CREATE_THIRDPARTY')) { |
||
| 858 | if ($result > 0) { |
||
| 859 | // Create third party out of a member |
||
| 860 | $company = new Societe($db); |
||
| 861 | $result = $company->create_from_member($object); |
||
| 862 | if ($result < 0) { |
||
| 863 | $langs->load("errors"); |
||
| 864 | setEventMessages($langs->trans($company->error), null, 'errors'); |
||
| 865 | setEventMessages($company->error, $company->errors, 'errors'); |
||
| 866 | } |
||
| 867 | } else { |
||
| 868 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 869 | } |
||
| 870 | } |
||
| 871 | } |
||
| 872 | $action = ($result < 0 || !$error) ? '' : 'create'; |
||
| 873 | |||
| 874 | if (!$error && $backtopage) { |
||
| 875 | header("Location: " . $backtopage); |
||
| 876 | exit; |
||
| 877 | } |
||
| 878 | } |
||
| 879 | |||
| 880 | if ($user->hasRight('adherent', 'supprimer') && $action == 'confirm_delete' && $confirm == 'yes') { |
||
| 881 | $result = $object->delete($user); |
||
| 882 | if ($result > 0) { |
||
| 883 | setEventMessages($langs->trans("RecordDeleted"), null, 'errors'); |
||
| 884 | if (!empty($backtopage) && !preg_match('/' . preg_quote($_SERVER['PHP_SELF'], '/') . '/', $backtopage)) { |
||
| 885 | header("Location: " . $backtopage); |
||
| 886 | exit; |
||
| 887 | } else { |
||
| 888 | header("Location: list.php"); |
||
| 889 | exit; |
||
| 890 | } |
||
| 891 | } else { |
||
| 892 | setEventMessages($object->error, null, 'errors'); |
||
| 893 | } |
||
| 894 | } |
||
| 895 | |||
| 896 | if ($user->hasRight('adherent', 'creer') && $action == 'confirm_valid' && $confirm == 'yes') { |
||
| 897 | $error = 0; |
||
| 898 | |||
| 899 | $db->begin(); |
||
| 900 | |||
| 901 | $adht = new AdherentType($db); |
||
| 902 | $adht->fetch($object->typeid); |
||
| 903 | |||
| 904 | $result = $object->validate($user); |
||
| 905 | |||
| 906 | if ($result >= 0 && !count($object->errors)) { |
||
| 907 | // Send confirmation email (according to parameters of member type. Otherwise generic) |
||
| 908 | if ($object->email && GETPOST("send_mail")) { |
||
| 909 | $subject = ''; |
||
| 910 | $msg = ''; |
||
| 911 | |||
| 912 | // Send subscription email |
||
| 913 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 914 | $formmail = new FormMail($db); |
||
| 915 | // Set output language |
||
| 916 | $outputlangs = new Translate('', $conf); |
||
| 917 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 918 | // Load traductions files required by page |
||
| 919 | $outputlangs->loadLangs(array("main", "members", "companies", "install", "other")); |
||
| 920 | // Get email content from template |
||
| 921 | $arraydefaultmessage = null; |
||
| 922 | $labeltouse = getDolGlobalString('ADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION'); |
||
| 923 | |||
| 924 | if (!empty($labeltouse)) { |
||
| 925 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 926 | } |
||
| 927 | |||
| 928 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 929 | $subject = $arraydefaultmessage->topic; |
||
| 930 | $msg = $arraydefaultmessage->content; |
||
| 931 | } |
||
| 932 | |||
| 933 | if (empty($labeltouse) || (int) $labeltouse === -1) { |
||
| 934 | //fallback on the old configuration. |
||
| 935 | $langs->load("errors"); |
||
| 936 | setEventMessages('<a href="' . DOL_URL_ROOT . '/adherents/admin/member_emails.php">' . $langs->trans('WarningMandatorySetupNotComplete') . '</a>', null, 'errors'); |
||
| 937 | $error++; |
||
| 938 | } else { |
||
| 939 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 940 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 941 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 942 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnValid()), $substitutionarray, $outputlangs); |
||
| 943 | |||
| 944 | $moreinheader = 'X-Dolibarr-Info: send_an_email by adherents/card.php' . "\r\n"; |
||
| 945 | |||
| 946 | $result = $object->sendEmail($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader); |
||
| 947 | if ($result < 0) { |
||
| 948 | $error++; |
||
| 949 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 950 | } |
||
| 951 | } |
||
| 952 | } |
||
| 953 | } else { |
||
| 954 | $error++; |
||
| 955 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 956 | } |
||
| 957 | |||
| 958 | if (!$error) { |
||
| 959 | $db->commit(); |
||
| 960 | } else { |
||
| 961 | $db->rollback(); |
||
| 962 | } |
||
| 963 | $action = ''; |
||
| 964 | } |
||
| 965 | |||
| 966 | if ($user->hasRight('adherent', 'supprimer') && $action == 'confirm_resiliate') { |
||
| 967 | $error = 0; |
||
| 968 | |||
| 969 | if ($confirm == 'yes') { |
||
| 970 | $adht = new AdherentType($db); |
||
| 971 | $adht->fetch($object->typeid); |
||
| 972 | |||
| 973 | $result = $object->resiliate($user); |
||
| 974 | |||
| 975 | if ($result >= 0 && !count($object->errors)) { |
||
| 976 | if ($object->email && GETPOST("send_mail")) { |
||
| 977 | $subject = ''; |
||
| 978 | $msg = ''; |
||
| 979 | |||
| 980 | // Send subscription email |
||
| 981 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 982 | $formmail = new FormMail($db); |
||
| 983 | // Set output language |
||
| 984 | $outputlangs = new Translate('', $conf); |
||
| 985 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 986 | // Load traductions files required by page |
||
| 987 | $outputlangs->loadLangs(array("main", "members", "companies", "install", "other")); |
||
| 988 | // Get email content from template |
||
| 989 | $arraydefaultmessage = null; |
||
| 990 | $labeltouse = getDolGlobalString('ADHERENT_EMAIL_TEMPLATE_CANCELATION'); |
||
| 991 | |||
| 992 | if (!empty($labeltouse)) { |
||
| 993 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 994 | } |
||
| 995 | |||
| 996 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 997 | $subject = $arraydefaultmessage->topic; |
||
| 998 | $msg = $arraydefaultmessage->content; |
||
| 999 | } |
||
| 1000 | |||
| 1001 | if (empty($labeltouse) || (int) $labeltouse === -1) { |
||
| 1002 | //fallback on the old configuration. |
||
| 1003 | setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); |
||
| 1004 | $error++; |
||
| 1005 | } else { |
||
| 1006 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 1007 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 1008 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 1009 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnResiliate()), $substitutionarray, $outputlangs); |
||
| 1010 | |||
| 1011 | $moreinheader = 'X-Dolibarr-Info: send_an_email by adherents/card.php' . "\r\n"; |
||
| 1012 | |||
| 1013 | $result = $object->sendEmail($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader); |
||
| 1014 | if ($result < 0) { |
||
| 1015 | $error++; |
||
| 1016 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 1017 | } |
||
| 1018 | } |
||
| 1019 | } |
||
| 1020 | } else { |
||
| 1021 | $error++; |
||
| 1022 | |||
| 1023 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 1024 | $action = ''; |
||
| 1025 | } |
||
| 1026 | } |
||
| 1027 | if (!empty($backtopage) && !$error) { |
||
| 1028 | header("Location: " . $backtopage); |
||
| 1029 | exit; |
||
| 1030 | } |
||
| 1031 | } |
||
| 1032 | |||
| 1033 | if ($user->hasRight('adherent', 'supprimer') && $action == 'confirm_exclude') { |
||
| 1034 | $error = 0; |
||
| 1035 | |||
| 1036 | if ($confirm == 'yes') { |
||
| 1037 | $adht = new AdherentType($db); |
||
| 1038 | $adht->fetch($object->typeid); |
||
| 1039 | |||
| 1040 | $result = $object->exclude($user); |
||
| 1041 | |||
| 1042 | if ($result >= 0 && !count($object->errors)) { |
||
| 1043 | if ($object->email && GETPOST("send_mail")) { |
||
| 1044 | $subject = ''; |
||
| 1045 | $msg = ''; |
||
| 1046 | |||
| 1047 | // Send subscription email |
||
| 1048 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 1049 | $formmail = new FormMail($db); |
||
| 1050 | // Set output language |
||
| 1051 | $outputlangs = new Translate('', $conf); |
||
| 1052 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 1053 | // Load traductions files required by page |
||
| 1054 | $outputlangs->loadLangs(array("main", "members", "companies", "install", "other")); |
||
| 1055 | // Get email content from template |
||
| 1056 | $arraydefaultmessage = null; |
||
| 1057 | $labeltouse = getDolGlobalString('ADHERENT_EMAIL_TEMPLATE_EXCLUSION'); |
||
| 1058 | |||
| 1059 | if (!empty($labeltouse)) { |
||
| 1060 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 1061 | } |
||
| 1062 | |||
| 1063 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 1064 | $subject = $arraydefaultmessage->topic; |
||
| 1065 | $msg = $arraydefaultmessage->content; |
||
| 1066 | } |
||
| 1067 | |||
| 1068 | if (empty($labeltouse) || (int) $labeltouse === -1) { |
||
| 1069 | //fallback on the old configuration. |
||
| 1070 | setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); |
||
| 1071 | $error++; |
||
| 1072 | } else { |
||
| 1073 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 1074 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 1075 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 1076 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnExclude()), $substitutionarray, $outputlangs); |
||
| 1077 | |||
| 1078 | $moreinheader = 'X-Dolibarr-Info: send_an_email by adherents/card.php' . "\r\n"; |
||
| 1079 | |||
| 1080 | $result = $object->sendEmail($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader); |
||
| 1081 | if ($result < 0) { |
||
| 1082 | $error++; |
||
| 1083 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 1084 | } |
||
| 1085 | } |
||
| 1086 | } |
||
| 1087 | } else { |
||
| 1088 | $error++; |
||
| 1089 | |||
| 1090 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 1091 | $action = ''; |
||
| 1092 | } |
||
| 1093 | } |
||
| 1094 | if (!empty($backtopage) && !$error) { |
||
| 1095 | header("Location: " . $backtopage); |
||
| 1096 | exit; |
||
| 1097 | } |
||
| 1098 | } |
||
| 1099 | |||
| 1100 | // SPIP Management |
||
| 1101 | if ($user->hasRight('adherent', 'supprimer') && $action == 'confirm_del_spip' && $confirm == 'yes') { |
||
| 1102 | if (!count($object->errors)) { |
||
| 1103 | if (!$mailmanspip->del_to_spip($object)) { |
||
| 1104 | setEventMessages($langs->trans('DeleteIntoSpipError') . ': ' . $mailmanspip->error, null, 'errors'); |
||
| 1105 | } |
||
| 1106 | } |
||
| 1107 | } |
||
| 1108 | |||
| 1109 | if ($user->hasRight('adherent', 'creer') && $action == 'confirm_add_spip' && $confirm == 'yes') { |
||
| 1110 | if (!count($object->errors)) { |
||
| 1111 | if (!$mailmanspip->add_to_spip($object)) { |
||
| 1112 | setEventMessages($langs->trans('AddIntoSpipError') . ': ' . $mailmanspip->error, null, 'errors'); |
||
| 1113 | } |
||
| 1114 | } |
||
| 1115 | } |
||
| 1116 | |||
| 1117 | // Actions when printing a doc from card |
||
| 1118 | include DOL_DOCUMENT_ROOT . '/core/actions_printing.inc.php'; |
||
| 1119 | |||
| 1120 | // Actions to build doc |
||
| 1121 | $upload_dir = $conf->adherent->dir_output; |
||
| 1122 | $permissiontoadd = $user->hasRight('adherent', 'creer'); |
||
| 1123 | include DOL_DOCUMENT_ROOT . '/core/actions_builddoc.inc.php'; |
||
| 1124 | |||
| 1125 | // Actions to send emails |
||
| 1126 | $triggersendname = 'MEMBER_SENTBYMAIL'; |
||
| 1127 | $paramname = 'id'; |
||
| 1128 | $mode = 'emailfrommember'; |
||
| 1129 | $trackid = 'mem' . $object->id; |
||
| 1130 | include DOL_DOCUMENT_ROOT . '/core/actions_sendmails.inc.php'; |
||
| 1131 | } |
||
| 1132 | |||
| 1133 | |||
| 1134 | /* |
||
| 1135 | * View |
||
| 1136 | */ |
||
| 1137 | |||
| 1138 | $form = new Form($db); |
||
| 1139 | $formfile = new FormFile($db); |
||
| 1140 | $formadmin = new FormAdmin($db); |
||
| 1141 | $formcompany = new FormCompany($db); |
||
| 1142 | |||
| 1143 | $title = $langs->trans("Member") . " - " . $langs->trans("Card"); |
||
| 1144 | $help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder'; |
||
| 1145 | llxHeader('', $title, $help_url); |
||
| 1146 | |||
| 1147 | $countrynotdefined = $langs->trans("ErrorSetACountryFirst") . ' (' . $langs->trans("SeeAbove") . ')'; |
||
| 1148 | |||
| 1149 | if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { |
||
| 1150 | // ----------------------------------------- |
||
| 1151 | // When used with CANVAS |
||
| 1152 | // ----------------------------------------- |
||
| 1153 | if (empty($object->error) && $id) { |
||
| 1154 | $object = new Adherent($db); |
||
| 1155 | $result = $object->fetch($id); |
||
| 1156 | if ($result <= 0) { |
||
| 1157 | dol_print_error(null, $object->error); |
||
| 1158 | } |
||
| 1159 | } |
||
| 1160 | $objcanvas->assign_values($action, $object->id, $object->ref); // Set value for templates |
||
| 1161 | $objcanvas->display_canvas($action); // Show template |
||
| 1162 | } else { |
||
| 1163 | // ----------------------------------------- |
||
| 1164 | // When used in standard mode |
||
| 1165 | // ----------------------------------------- |
||
| 1166 | |||
| 1167 | // Create mode |
||
| 1168 | if ($action == 'create') { |
||
| 1169 | $object->canvas = $canvas; |
||
| 1170 | $object->state_id = GETPOSTINT('state_id'); |
||
| 1171 | |||
| 1172 | // We set country_id, country_code and country for the selected country |
||
| 1173 | $object->country_id = GETPOSTINT('country_id') ? GETPOSTINT('country_id') : $mysoc->country_id; |
||
| 1174 | if ($object->country_id) { |
||
| 1175 | $tmparray = getCountry($object->country_id, 'all'); |
||
| 1176 | $object->country_code = $tmparray['code']; |
||
| 1177 | $object->country = $tmparray['label']; |
||
| 1178 | } |
||
| 1179 | |||
| 1180 | $soc = new Societe($db); |
||
| 1181 | if (!empty($socid)) { |
||
| 1182 | if ($socid > 0) { |
||
| 1183 | $soc->fetch($socid); |
||
| 1184 | } |
||
| 1185 | |||
| 1186 | if (!($soc->id > 0)) { |
||
| 1187 | $langs->load("errors"); |
||
| 1188 | print($langs->trans('ErrorRecordNotFound')); |
||
| 1189 | exit; |
||
|
|
|||
| 1190 | } |
||
| 1191 | } |
||
| 1192 | |||
| 1193 | $adht = new AdherentType($db); |
||
| 1194 | |||
| 1195 | print load_fiche_titre($langs->trans("NewMember"), '', $object->picto); |
||
| 1196 | |||
| 1197 | if ($conf->use_javascript_ajax) { |
||
| 1198 | print "\n" . '<script type="text/javascript">' . "\n"; |
||
| 1199 | print 'jQuery(document).ready(function () { |
||
| 1200 | jQuery("#selectcountry_id").change(function() { |
||
| 1201 | document.formsoc.action.value="create"; |
||
| 1202 | document.formsoc.submit(); |
||
| 1203 | }); |
||
| 1204 | function initfieldrequired() { |
||
| 1205 | jQuery("#tdcompany").removeClass("fieldrequired"); |
||
| 1206 | jQuery("#tdlastname").removeClass("fieldrequired"); |
||
| 1207 | jQuery("#tdfirstname").removeClass("fieldrequired"); |
||
| 1208 | if (jQuery("#morphy").val() == \'mor\') { |
||
| 1209 | jQuery("#tdcompany").addClass("fieldrequired"); |
||
| 1210 | } |
||
| 1211 | if (jQuery("#morphy").val() == \'phy\') { |
||
| 1212 | jQuery("#tdlastname").addClass("fieldrequired"); |
||
| 1213 | jQuery("#tdfirstname").addClass("fieldrequired"); |
||
| 1214 | } |
||
| 1215 | } |
||
| 1216 | jQuery("#morphy").change(function() { |
||
| 1217 | initfieldrequired(); |
||
| 1218 | }); |
||
| 1219 | initfieldrequired(); |
||
| 1220 | })'; |
||
| 1221 | print '</script>' . "\n"; |
||
| 1222 | } |
||
| 1223 | |||
| 1224 | print '<form name="formsoc" action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">'; |
||
| 1225 | print '<input type="hidden" name="token" value="' . newToken() . '">'; |
||
| 1226 | print '<input type="hidden" name="action" value="add">'; |
||
| 1227 | print '<input type="hidden" name="socid" value="' . $socid . '">'; |
||
| 1228 | if ($backtopage) { |
||
| 1229 | print '<input type="hidden" name="backtopage" value="' . ($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"]) . '">'; |
||
| 1230 | } |
||
| 1231 | |||
| 1232 | print dol_get_fiche_head(''); |
||
| 1233 | |||
| 1234 | print '<table class="border centpercent">'; |
||
| 1235 | print '<tbody>'; |
||
| 1236 | |||
| 1237 | // Login |
||
| 1238 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 1239 | print '<tr><td><span class="fieldrequired">' . $langs->trans("Login") . ' / ' . $langs->trans("Id") . '</span></td><td><input type="text" name="member_login" class="minwidth300" maxlength="50" value="' . (GETPOSTISSET("member_login") ? GETPOST("member_login", 'alphanohtml', 2) : $object->login) . '" autofocus="autofocus"></td></tr>'; |
||
| 1240 | } |
||
| 1241 | |||
| 1242 | // Password |
||
| 1243 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 1244 | require_once DOL_DOCUMENT_ROOT . '/core/lib/security2.lib.php'; |
||
| 1245 | $generated_password = getRandomPassword(false); |
||
| 1246 | print '<tr><td><span class="fieldrequired">' . $langs->trans("Password") . '</span></td><td>'; |
||
| 1247 | print '<input type="text" class="minwidth300" maxlength="50" name="password" value="' . dol_escape_htmltag($generated_password) . '">'; |
||
| 1248 | print '</td></tr>'; |
||
| 1249 | } |
||
| 1250 | |||
| 1251 | // Type |
||
| 1252 | print '<tr><td class="fieldrequired">' . $langs->trans("MemberType") . '</td><td>'; |
||
| 1253 | $listetype = $adht->liste_array(1); |
||
| 1254 | print img_picto('', $adht->picto, 'class="pictofixedwidth"'); |
||
| 1255 | if (count($listetype)) { |
||
| 1256 | print $form->selectarray("typeid", $listetype, (GETPOSTINT('typeid') ? GETPOSTINT('typeid') : $typeid), (count($listetype) > 1 ? 1 : 0), 0, 0, '', 0, 0, 0, '', '', 1); |
||
| 1257 | } else { |
||
| 1258 | print '<span class="error">' . $langs->trans("NoTypeDefinedGoToSetup") . '</span>'; |
||
| 1259 | } |
||
| 1260 | print "</td>\n"; |
||
| 1261 | |||
| 1262 | // Morphy |
||
| 1263 | $morphys = array(); |
||
| 1264 | $morphys["phy"] = $langs->trans("Physical"); |
||
| 1265 | $morphys["mor"] = $langs->trans("Moral"); |
||
| 1266 | print '<tr><td class="fieldrequired">' . $langs->trans("MemberNature") . "</td><td>\n"; |
||
| 1267 | print $form->selectarray("morphy", $morphys, (GETPOST('morphy', 'alpha') ? GETPOST('morphy', 'alpha') : $object->morphy), 1, 0, 0, '', 0, 0, 0, '', '', 1); |
||
| 1268 | print "</td>\n"; |
||
| 1269 | |||
| 1270 | // Company |
||
| 1271 | print '<tr><td id="tdcompany">' . $langs->trans("Company") . '</td><td><input type="text" name="societe" class="minwidth300" maxlength="128" value="' . (GETPOSTISSET('societe') ? GETPOST('societe', 'alphanohtml') : $soc->name) . '"></td></tr>'; |
||
| 1272 | |||
| 1273 | // Civility |
||
| 1274 | print '<tr><td>' . $langs->trans("UserTitle") . '</td><td>'; |
||
| 1275 | print $formcompany->select_civility(GETPOSTINT('civility_id') ? GETPOSTINT('civility_id') : $object->civility_id, 'civility_id', 'maxwidth150', 1) . '</td>'; |
||
| 1276 | print '</tr>'; |
||
| 1277 | |||
| 1278 | // Lastname |
||
| 1279 | print '<tr><td id="tdlastname">' . $langs->trans("Lastname") . '</td><td><input type="text" name="lastname" class="minwidth300" maxlength="50" value="' . (GETPOSTISSET('lastname') ? GETPOST('lastname', 'alphanohtml') : $object->lastname) . '"></td>'; |
||
| 1280 | print '</tr>'; |
||
| 1281 | |||
| 1282 | // Firstname |
||
| 1283 | print '<tr><td id="tdfirstname">' . $langs->trans("Firstname") . '</td><td><input type="text" name="firstname" class="minwidth300" maxlength="50" value="' . (GETPOSTISSET('firstname') ? GETPOST('firstname', 'alphanohtml') : $object->firstname) . '"></td>'; |
||
| 1284 | print '</tr>'; |
||
| 1285 | |||
| 1286 | // Gender |
||
| 1287 | print '<tr><td>' . $langs->trans("Gender") . '</td>'; |
||
| 1288 | print '<td>'; |
||
| 1289 | $arraygender = array('man' => $langs->trans("Genderman"), 'woman' => $langs->trans("Genderwoman"), 'other' => $langs->trans("Genderother")); |
||
| 1290 | print $form->selectarray('gender', $arraygender, GETPOST('gender', 'alphanohtml'), 1, 0, 0, '', 0, 0, 0, '', '', 1); |
||
| 1291 | print '</td></tr>'; |
||
| 1292 | |||
| 1293 | |||
| 1294 | print '<tr><td>' . (getDolGlobalString('ADHERENT_MAIL_REQUIRED') ? '<span class="fieldrequired">' : '') . $langs->trans("EMail") . (getDolGlobalString('ADHERENT_MAIL_REQUIRED') ? '</span>' : '') . '</td>'; |
||
| 1295 | print '<td>' . img_picto('', 'object_email') . ' <input type="text" name="member_email" class="minwidth300" maxlength="255" value="' . (GETPOSTISSET('member_email') ? GETPOST('member_email', 'alpha') : $soc->email) . '"></td></tr>'; |
||
| 1296 | |||
| 1297 | // Website |
||
| 1298 | print '<tr><td>' . $form->editfieldkey('Web', 'member_url', GETPOST('member_url', 'alpha'), $object, 0) . '</td>'; |
||
| 1299 | print '<td>' . img_picto('', 'globe') . ' <input type="text" class="maxwidth500 widthcentpercentminusx" name="member_url" id="member_url" value="' . (GETPOSTISSET('member_url') ? GETPOST('member_url', 'alpha') : $object->url) . '"></td></tr>'; |
||
| 1300 | |||
| 1301 | // Address |
||
| 1302 | print '<tr><td class="tdtop">' . $langs->trans("Address") . '</td><td>'; |
||
| 1303 | print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="2">' . (GETPOSTISSET('address') ? GETPOST('address', 'alphanohtml') : $soc->address) . '</textarea>'; |
||
| 1304 | print '</td></tr>'; |
||
| 1305 | |||
| 1306 | // Zip / Town |
||
| 1307 | print '<tr><td>' . $langs->trans("Zip") . ' / ' . $langs->trans("Town") . '</td><td>'; |
||
| 1308 | print $formcompany->select_ziptown((GETPOSTISSET('zipcode') ? GETPOST('zipcode', 'alphanohtml') : $soc->zip), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6); |
||
| 1309 | print ' '; |
||
| 1310 | print $formcompany->select_ziptown((GETPOSTISSET('town') ? GETPOST('town', 'alphanohtml') : $soc->town), 'town', array('zipcode', 'selectcountry_id', 'state_id')); |
||
| 1311 | print '</td></tr>'; |
||
| 1312 | |||
| 1313 | // Country |
||
| 1314 | if (empty($soc->country_id)) { |
||
| 1315 | $soc->country_id = $mysoc->country_id; |
||
| 1316 | $soc->country_code = $mysoc->country_code; |
||
| 1317 | $soc->state_id = $mysoc->state_id; |
||
| 1318 | } |
||
| 1319 | print '<tr><td>' . $langs->trans('Country') . '</td><td>'; |
||
| 1320 | print img_picto('', 'country', 'class="pictofixedwidth"'); |
||
| 1321 | print $form->select_country(GETPOSTISSET('country_id') ? GETPOST('country_id', 'alpha') : $soc->country_id, 'country_id'); |
||
| 1322 | if ($user->admin) { |
||
| 1323 | print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); |
||
| 1324 | } |
||
| 1325 | print '</td></tr>'; |
||
| 1326 | |||
| 1327 | // State |
||
| 1328 | if (!getDolGlobalString('MEMBER_DISABLE_STATE')) { |
||
| 1329 | print '<tr><td>' . $langs->trans('State') . '</td><td>'; |
||
| 1330 | if ($soc->country_id) { |
||
| 1331 | print img_picto('', 'state', 'class="pictofixedwidth"'); |
||
| 1332 | print $formcompany->select_state(GETPOSTISSET('state_id') ? GETPOSTINT('state_id') : $soc->state_id, $soc->country_code); |
||
| 1333 | } else { |
||
| 1334 | print $countrynotdefined; |
||
| 1335 | } |
||
| 1336 | print '</td></tr>'; |
||
| 1337 | } |
||
| 1338 | |||
| 1339 | // Pro phone |
||
| 1340 | print '<tr><td>' . $langs->trans("PhonePro") . '</td>'; |
||
| 1341 | print '<td>' . img_picto('', 'object_phoning', 'class="pictofixedwidth"') . '<input type="text" name="phone" size="20" value="' . (GETPOSTISSET('phone') ? GETPOST('phone', 'alpha') : $soc->phone) . '"></td></tr>'; |
||
| 1342 | |||
| 1343 | // Personal phone |
||
| 1344 | print '<tr><td>' . $langs->trans("PhonePerso") . '</td>'; |
||
| 1345 | print '<td>' . img_picto('', 'object_phoning', 'class="pictofixedwidth"') . '<input type="text" name="phone_perso" size="20" value="' . (GETPOSTISSET('phone_perso') ? GETPOST('phone_perso', 'alpha') : $object->phone_perso) . '"></td></tr>'; |
||
| 1346 | |||
| 1347 | // Mobile phone |
||
| 1348 | print '<tr><td>' . $langs->trans("PhoneMobile") . '</td>'; |
||
| 1349 | print '<td>' . img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"') . '<input type="text" name="phone_mobile" size="20" value="' . (GETPOSTISSET('phone_mobile') ? GETPOST('phone_mobile', 'alpha') : $object->phone_mobile) . '"></td></tr>'; |
||
| 1350 | |||
| 1351 | if (isModEnabled('socialnetworks')) { |
||
| 1352 | foreach ($socialnetworks as $key => $value) { |
||
| 1353 | if (!$value['active']) { |
||
| 1354 | break; |
||
| 1355 | } |
||
| 1356 | $val = (GETPOSTISSET('member_' . $key) ? GETPOST('member_' . $key, 'alpha') : (empty($object->socialnetworks[$key]) ? '' : $object->socialnetworks[$key])); |
||
| 1357 | print '<tr><td>' . $langs->trans($value['label']) . '</td><td><input type="text" name="member_' . $key . '" size="40" value="' . $val . '"></td></tr>'; |
||
| 1358 | } |
||
| 1359 | } |
||
| 1360 | |||
| 1361 | // Birth Date |
||
| 1362 | print "<tr><td>" . $langs->trans("DateOfBirth") . "</td><td>\n"; |
||
| 1363 | print img_picto('', 'object_calendar', 'class="pictofixedwidth"') . $form->selectDate(($object->birth ? $object->birth : -1), 'birth', 0, 0, 1, 'formsoc'); |
||
| 1364 | print "</td></tr>\n"; |
||
| 1365 | |||
| 1366 | // Public profil |
||
| 1367 | print "<tr><td>"; |
||
| 1368 | $htmltext = $langs->trans("Public", getDolGlobalString('MAIN_INFO_SOCIETE_NOM'), $linkofpubliclist); |
||
| 1369 | print $form->textwithpicto($langs->trans("MembershipPublic"), $htmltext, 1, 'help', '', 0, 3, 'membershippublic'); |
||
| 1370 | print "</td><td>\n"; |
||
| 1371 | print $form->selectyesno("public", $object->public, 1); |
||
| 1372 | print "</td></tr>\n"; |
||
| 1373 | |||
| 1374 | // Categories |
||
| 1375 | if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { |
||
| 1376 | print '<tr><td>' . $form->editfieldkey("Categories", 'memcats', '', $object, 0) . '</td><td>'; |
||
| 1377 | $cate_arbo = $form->select_all_categories(Categorie::TYPE_MEMBER, null, 'parent', null, null, 1); |
||
| 1378 | print img_picto('', 'category') . $form->multiselectarray('memcats', $cate_arbo, GETPOST('memcats', 'array'), null, null, 'quatrevingtpercent widthcentpercentminusx', 0, 0); |
||
| 1379 | print "</td></tr>"; |
||
| 1380 | } |
||
| 1381 | |||
| 1382 | // Other attributes |
||
| 1383 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_add.tpl.php'; |
||
| 1384 | |||
| 1385 | print '<tbody>'; |
||
| 1386 | print "</table>\n"; |
||
| 1387 | |||
| 1388 | print dol_get_fiche_end(); |
||
| 1389 | |||
| 1390 | print $form->buttonsSaveCancel("AddMember"); |
||
| 1391 | |||
| 1392 | print "</form>\n"; |
||
| 1393 | } |
||
| 1394 | |||
| 1395 | // Edit mode |
||
| 1396 | if ($action == 'edit') { |
||
| 1397 | $res = $object->fetch($id); |
||
| 1398 | if ($res < 0) { |
||
| 1399 | dol_print_error($db, $object->error); |
||
| 1400 | exit; |
||
| 1401 | } |
||
| 1402 | $res = $object->fetch_optionals(); |
||
| 1403 | if ($res < 0) { |
||
| 1404 | dol_print_error($db); |
||
| 1405 | exit; |
||
| 1406 | } |
||
| 1407 | |||
| 1408 | $adht = new AdherentType($db); |
||
| 1409 | $adht->fetch($object->typeid); |
||
| 1410 | |||
| 1411 | // We set country_id, and country_code, country of the chosen country |
||
| 1412 | $country = GETPOSTINT('country'); |
||
| 1413 | if (!empty($country) || $object->country_id) { |
||
| 1414 | $sql = "SELECT rowid, code, label from " . MAIN_DB_PREFIX . "c_country"; |
||
| 1415 | $sql .= " WHERE rowid = " . (int) (!empty($country) ? $country : $object->country_id); |
||
| 1416 | $resql = $db->query($sql); |
||
| 1417 | if ($resql) { |
||
| 1418 | $obj = $db->fetch_object($resql); |
||
| 1419 | } else { |
||
| 1420 | dol_print_error($db); |
||
| 1421 | } |
||
| 1422 | $object->country_id = $obj->rowid; |
||
| 1423 | $object->country_code = $obj->code; |
||
| 1424 | $object->country = $langs->trans("Country" . $obj->code) ? $langs->trans("Country" . $obj->code) : $obj->label; |
||
| 1425 | } |
||
| 1426 | |||
| 1427 | $head = member_prepare_head($object); |
||
| 1428 | |||
| 1429 | |||
| 1430 | if ($conf->use_javascript_ajax) { |
||
| 1431 | print "\n" . '<script type="text/javascript">'; |
||
| 1432 | print 'jQuery(document).ready(function () { |
||
| 1433 | jQuery("#selectcountry_id").change(function() { |
||
| 1434 | document.formsoc.action.value="edit"; |
||
| 1435 | document.formsoc.submit(); |
||
| 1436 | }); |
||
| 1437 | function initfieldrequired() { |
||
| 1438 | jQuery("#tdcompany").removeClass("fieldrequired"); |
||
| 1439 | jQuery("#tdlastname").removeClass("fieldrequired"); |
||
| 1440 | jQuery("#tdfirstname").removeClass("fieldrequired"); |
||
| 1441 | if (jQuery("#morphy").val() == \'mor\') { |
||
| 1442 | jQuery("#tdcompany").addClass("fieldrequired"); |
||
| 1443 | } |
||
| 1444 | if (jQuery("#morphy").val() == \'phy\') { |
||
| 1445 | jQuery("#tdlastname").addClass("fieldrequired"); |
||
| 1446 | jQuery("#tdfirstname").addClass("fieldrequired"); |
||
| 1447 | } |
||
| 1448 | } |
||
| 1449 | jQuery("#morphy").change(function() { |
||
| 1450 | initfieldrequired(); |
||
| 1451 | }); |
||
| 1452 | initfieldrequired(); |
||
| 1453 | })'; |
||
| 1454 | print '</script>' . "\n"; |
||
| 1455 | } |
||
| 1456 | |||
| 1457 | print '<form name="formsoc" action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">'; |
||
| 1458 | print '<input type="hidden" name="token" value="' . newToken() . '" />'; |
||
| 1459 | print '<input type="hidden" name="action" value="update" />'; |
||
| 1460 | print '<input type="hidden" name="rowid" value="' . $id . '" />'; |
||
| 1461 | print '<input type="hidden" name="statut" value="' . $object->statut . '" />'; |
||
| 1462 | if ($backtopage) { |
||
| 1463 | print '<input type="hidden" name="backtopage" value="' . ($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"]) . '">'; |
||
| 1464 | } |
||
| 1465 | |||
| 1466 | print dol_get_fiche_head($head, 'general', $langs->trans("Member"), 0, 'user'); |
||
| 1467 | |||
| 1468 | print '<table class="border centpercent">'; |
||
| 1469 | |||
| 1470 | // Ref |
||
| 1471 | print '<tr><td class="titlefieldcreate">' . $langs->trans("Ref") . '</td><td class="valeur">' . $object->ref . '</td></tr>'; |
||
| 1472 | |||
| 1473 | // Login |
||
| 1474 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 1475 | print '<tr><td><span class="fieldrequired">' . $langs->trans("Login") . ' / ' . $langs->trans("Id") . '</span></td><td><input type="text" name="login" class="minwidth300" maxlength="50" value="' . (GETPOSTISSET("login") ? GETPOST("login", 'alphanohtml', 2) : $object->login) . '"></td></tr>'; |
||
| 1476 | } |
||
| 1477 | |||
| 1478 | // Password |
||
| 1479 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 1480 | print '<tr><td class="fieldrequired">' . $langs->trans("Password") . '</td><td><input type="password" name="pass" class="minwidth300" maxlength="50" value="' . dol_escape_htmltag(GETPOSTISSET("pass") ? GETPOST("pass", 'none', 2) : '') . '"></td></tr>'; |
||
| 1481 | } |
||
| 1482 | |||
| 1483 | // Type |
||
| 1484 | print '<tr><td class="fieldrequired">' . $langs->trans("Type") . '</td><td>'; |
||
| 1485 | if ($user->hasRight('adherent', 'creer')) { |
||
| 1486 | print $form->selectarray("typeid", $adht->liste_array(), (GETPOSTISSET("typeid") ? GETPOSTINT("typeid") : $object->typeid), 0, 0, 0, '', 0, 0, 0, '', '', 1); |
||
| 1487 | } else { |
||
| 1488 | print $adht->getNomUrl(1); |
||
| 1489 | print '<input type="hidden" name="typeid" value="' . $object->typeid . '">'; |
||
| 1490 | } |
||
| 1491 | print "</td></tr>"; |
||
| 1492 | |||
| 1493 | // Morphy |
||
| 1494 | $morphys["phy"] = $langs->trans("Physical"); |
||
| 1495 | $morphys["mor"] = $langs->trans("Moral"); |
||
| 1496 | print '<tr><td><span class="fieldrequired">' . $langs->trans("MemberNature") . '</span></td><td>'; |
||
| 1497 | print $form->selectarray("morphy", $morphys, (GETPOSTISSET("morphy") ? GETPOST("morphy", 'alpha') : $object->morphy), 0, 0, 0, '', 0, 0, 0, '', '', 1); |
||
| 1498 | print "</td></tr>"; |
||
| 1499 | |||
| 1500 | // Company |
||
| 1501 | print '<tr><td id="tdcompany">' . $langs->trans("Company") . '</td><td><input type="text" name="societe" class="minwidth300" maxlength="128" value="' . (GETPOSTISSET("societe") ? GETPOST("societe", 'alphanohtml', 2) : $object->company) . '"></td></tr>'; |
||
| 1502 | |||
| 1503 | // Civility |
||
| 1504 | print '<tr><td>' . $langs->trans("UserTitle") . '</td><td>'; |
||
| 1505 | print $formcompany->select_civility(GETPOSTISSET("civility_id") ? GETPOST("civility_id", 'alpha') : $object->civility_id, 'civility_id', 'maxwidth150', 1); |
||
| 1506 | print '</td>'; |
||
| 1507 | print '</tr>'; |
||
| 1508 | |||
| 1509 | // Lastname |
||
| 1510 | print '<tr><td id="tdlastname">' . $langs->trans("Lastname") . '</td><td><input type="text" name="lastname" class="minwidth300" maxlength="50" value="' . (GETPOSTISSET("lastname") ? GETPOST("lastname", 'alphanohtml', 2) : $object->lastname) . '"></td>'; |
||
| 1511 | print '</tr>'; |
||
| 1512 | |||
| 1513 | // Firstname |
||
| 1514 | print '<tr><td id="tdfirstname">' . $langs->trans("Firstname") . '</td><td><input type="text" name="firstname" class="minwidth300" maxlength="50" value="' . (GETPOSTISSET("firstname") ? GETPOST("firstname", 'alphanohtml', 3) : $object->firstname) . '"></td>'; |
||
| 1515 | print '</tr>'; |
||
| 1516 | |||
| 1517 | // Gender |
||
| 1518 | print '<tr><td>' . $langs->trans("Gender") . '</td>'; |
||
| 1519 | print '<td>'; |
||
| 1520 | $arraygender = array('man' => $langs->trans("Genderman"), 'woman' => $langs->trans("Genderwoman"), 'other' => $langs->trans("Genderother")); |
||
| 1521 | print $form->selectarray('gender', $arraygender, GETPOSTISSET('gender') ? GETPOST('gender', 'alphanohtml') : $object->gender, 1, 0, 0, '', 0, 0, 0, '', '', 1); |
||
| 1522 | print '</td></tr>'; |
||
| 1523 | |||
| 1524 | // Photo |
||
| 1525 | print '<tr><td>' . $langs->trans("Photo") . '</td>'; |
||
| 1526 | print '<td class="hideonsmartphone" valign="middle">'; |
||
| 1527 | print $form->showphoto('memberphoto', $object) . "\n"; |
||
| 1528 | if ($caneditfieldmember) { |
||
| 1529 | if ($object->photo) { |
||
| 1530 | print "<br>\n"; |
||
| 1531 | } |
||
| 1532 | print '<table class="nobordernopadding">'; |
||
| 1533 | if ($object->photo) { |
||
| 1534 | print '<tr><td><input type="checkbox" class="flat photodelete" name="deletephoto" id="photodelete"> ' . $langs->trans("Delete") . '<br><br></td></tr>'; |
||
| 1535 | } |
||
| 1536 | print '<tr><td>' . $langs->trans("PhotoFile") . '</td></tr>'; |
||
| 1537 | print '<tr><td>'; |
||
| 1538 | $maxfilesizearray = getMaxFileSizeArray(); |
||
| 1539 | $maxmin = $maxfilesizearray['maxmin']; |
||
| 1540 | if ($maxmin > 0) { |
||
| 1541 | print '<input type="hidden" name="MAX_FILE_SIZE" value="' . ($maxmin * 1024) . '">'; // MAX_FILE_SIZE must precede the field type=file |
||
| 1542 | } |
||
| 1543 | print '<input type="file" class="flat" name="photo" id="photoinput">'; |
||
| 1544 | print '</td></tr>'; |
||
| 1545 | print '</table>'; |
||
| 1546 | } |
||
| 1547 | print '</td></tr>'; |
||
| 1548 | |||
| 1549 | |||
| 1550 | print '<tr><td>' . (getDolGlobalString("ADHERENT_MAIL_REQUIRED") ? '<span class="fieldrequired">' : '') . $langs->trans("EMail") . (getDolGlobalString("ADHERENT_MAIL_REQUIRED") ? '</span>' : '') . '</td>'; |
||
| 1551 | print '<td>' . img_picto('', 'object_email', 'class="pictofixedwidth"') . '<input type="text" name="member_email" class="minwidth300" maxlength="255" value="' . (GETPOSTISSET("member_email") ? GETPOST("member_email", '', 2) : $object->email) . '"></td></tr>'; |
||
| 1552 | |||
| 1553 | // Website |
||
| 1554 | print '<tr><td>' . $form->editfieldkey('Web', 'member_url', GETPOST('member_url', 'alpha'), $object, 0) . '</td>'; |
||
| 1555 | print '<td>' . img_picto('', 'globe', 'class="pictofixedwidth"') . '<input type="text" name="member_url" id="member_url" class="maxwidth200onsmartphone maxwidth500 widthcentpercentminusx " value="' . (GETPOSTISSET('member_url') ? GETPOST('member_url', 'alpha') : $object->url) . '"></td></tr>'; |
||
| 1556 | |||
| 1557 | // Address |
||
| 1558 | print '<tr><td>' . $langs->trans("Address") . '</td><td>'; |
||
| 1559 | print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="' . ROWS_2 . '">' . (GETPOSTISSET("address") ? GETPOST("address", 'alphanohtml', 2) : $object->address) . '</textarea>'; |
||
| 1560 | print '</td></tr>'; |
||
| 1561 | |||
| 1562 | // Zip / Town |
||
| 1563 | print '<tr><td>' . $langs->trans("Zip") . ' / ' . $langs->trans("Town") . '</td><td>'; |
||
| 1564 | print $formcompany->select_ziptown((GETPOSTISSET("zipcode") ? GETPOST("zipcode", 'alphanohtml', 2) : $object->zip), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6); |
||
| 1565 | print ' '; |
||
| 1566 | print $formcompany->select_ziptown((GETPOSTISSET("town") ? GETPOST("town", 'alphanohtml', 2) : $object->town), 'town', array('zipcode', 'selectcountry_id', 'state_id')); |
||
| 1567 | print '</td></tr>'; |
||
| 1568 | |||
| 1569 | // Country |
||
| 1570 | //$object->country_id=$object->country_id?$object->country_id:$mysoc->country_id; // In edit mode we don't force to company country if not defined |
||
| 1571 | print '<tr><td>' . $langs->trans('Country') . '</td><td>'; |
||
| 1572 | print img_picto('', 'country', 'class="pictofixedwidth"'); |
||
| 1573 | print $form->select_country(GETPOSTISSET("country_id") ? GETPOST("country_id", "alpha") : $object->country_id, 'country_id'); |
||
| 1574 | if ($user->admin) { |
||
| 1575 | print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); |
||
| 1576 | } |
||
| 1577 | print '</td></tr>'; |
||
| 1578 | |||
| 1579 | // State |
||
| 1580 | if (!getDolGlobalString('MEMBER_DISABLE_STATE')) { |
||
| 1581 | print '<tr><td>' . $langs->trans('State') . '</td><td>'; |
||
| 1582 | print img_picto('', 'state', 'class="pictofixedwidth"'); |
||
| 1583 | print $formcompany->select_state($object->state_id, GETPOSTISSET("country_id") ? GETPOST("country_id", "alpha") : $object->country_id); |
||
| 1584 | print '</td></tr>'; |
||
| 1585 | } |
||
| 1586 | |||
| 1587 | // Pro phone |
||
| 1588 | print '<tr><td>' . $langs->trans("PhonePro") . '</td>'; |
||
| 1589 | print '<td>' . img_picto('', 'object_phoning', 'class="pictofixedwidth"') . '<input type="text" name="phone" value="' . (GETPOSTISSET("phone") ? GETPOST("phone") : $object->phone) . '"></td></tr>'; |
||
| 1590 | |||
| 1591 | // Personal phone |
||
| 1592 | print '<tr><td>' . $langs->trans("PhonePerso") . '</td>'; |
||
| 1593 | print '<td>' . img_picto('', 'object_phoning', 'class="pictofixedwidth"') . '<input type="text" name="phone_perso" value="' . (GETPOSTISSET("phone_perso") ? GETPOST("phone_perso") : $object->phone_perso) . '"></td></tr>'; |
||
| 1594 | |||
| 1595 | // Mobile phone |
||
| 1596 | print '<tr><td>' . $langs->trans("PhoneMobile") . '</td>'; |
||
| 1597 | print '<td>' . img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"') . '<input type="text" name="phone_mobile" value="' . (GETPOSTISSET("phone_mobile") ? GETPOST("phone_mobile") : $object->phone_mobile) . '"></td></tr>'; |
||
| 1598 | |||
| 1599 | if (isModEnabled('socialnetworks')) { |
||
| 1600 | foreach ($socialnetworks as $key => $value) { |
||
| 1601 | if (!$value['active']) { |
||
| 1602 | break; |
||
| 1603 | } |
||
| 1604 | print '<tr><td>' . $langs->trans($value['label']) . '</td><td><input type="text" name="' . $key . '" class="minwidth100" value="' . (GETPOSTISSET($key) ? GETPOST($key, 'alphanohtml') : (isset($object->socialnetworks[$key]) ? $object->socialnetworks[$key] : null)) . '"></td></tr>'; |
||
| 1605 | } |
||
| 1606 | } |
||
| 1607 | |||
| 1608 | // Birth Date |
||
| 1609 | print "<tr><td>" . $langs->trans("DateOfBirth") . "</td><td>\n"; |
||
| 1610 | print img_picto('', 'object_calendar', 'class="pictofixedwidth"') . $form->selectDate(($object->birth ? $object->birth : -1), 'birth', 0, 0, 1, 'formsoc'); |
||
| 1611 | print "</td></tr>\n"; |
||
| 1612 | |||
| 1613 | // Default language |
||
| 1614 | if (getDolGlobalInt('MAIN_MULTILANGS')) { |
||
| 1615 | print '<tr><td>' . $form->editfieldkey('DefaultLang', 'default_lang', '', $object, 0) . '</td><td colspan="3">' . "\n"; |
||
| 1616 | print img_picto('', 'language', 'class="pictofixedwidth"') . $formadmin->select_language($object->default_lang, 'default_lang', 0, 0, 1); |
||
| 1617 | print '</td>'; |
||
| 1618 | print '</tr>'; |
||
| 1619 | } |
||
| 1620 | |||
| 1621 | // Public profil |
||
| 1622 | print "<tr><td>"; |
||
| 1623 | $htmltext = $langs->trans("Public", getDolGlobalString('MAIN_INFO_SOCIETE_NOM'), $linkofpubliclist); |
||
| 1624 | print $form->textwithpicto($langs->trans("MembershipPublic"), $htmltext, 1, 'help', '', 0, 3, 'membershippublic'); |
||
| 1625 | print "</td><td>\n"; |
||
| 1626 | print $form->selectyesno("public", (GETPOSTISSET("public") ? GETPOST("public", 'alphanohtml', 2) : $object->public), 1); |
||
| 1627 | print "</td></tr>\n"; |
||
| 1628 | |||
| 1629 | // Categories |
||
| 1630 | if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { |
||
| 1631 | print '<tr><td>' . $form->editfieldkey("Categories", 'memcats', '', $object, 0) . '</td>'; |
||
| 1632 | print '<td>'; |
||
| 1633 | $cate_arbo = $form->select_all_categories(Categorie::TYPE_MEMBER, null, null, null, null, 1); |
||
| 1634 | $c = new Categorie($db); |
||
| 1635 | $cats = $c->containing($object->id, Categorie::TYPE_MEMBER); |
||
| 1636 | $arrayselected = array(); |
||
| 1637 | if (is_array($cats)) { |
||
| 1638 | foreach ($cats as $cat) { |
||
| 1639 | $arrayselected[] = $cat->id; |
||
| 1640 | } |
||
| 1641 | } |
||
| 1642 | print $form->multiselectarray('memcats', $cate_arbo, $arrayselected, '', 0, '', 0, '100%'); |
||
| 1643 | print "</td></tr>"; |
||
| 1644 | } |
||
| 1645 | |||
| 1646 | // Third party Dolibarr |
||
| 1647 | if (isModEnabled('societe')) { |
||
| 1648 | print '<tr><td>' . $langs->trans("LinkedToDolibarrThirdParty") . '</td><td colspan="2" class="valeur">'; |
||
| 1649 | if ($object->socid) { |
||
| 1650 | $company = new Societe($db); |
||
| 1651 | $result = $company->fetch($object->socid); |
||
| 1652 | print $company->getNomUrl(1); |
||
| 1653 | } else { |
||
| 1654 | print $langs->trans("NoThirdPartyAssociatedToMember"); |
||
| 1655 | } |
||
| 1656 | print '</td></tr>'; |
||
| 1657 | } |
||
| 1658 | |||
| 1659 | // Login Dolibarr |
||
| 1660 | print '<tr><td>' . $langs->trans("LinkedToDolibarrUser") . '</td><td colspan="2" class="valeur">'; |
||
| 1661 | if ($object->user_id) { |
||
| 1662 | $form->form_users($_SERVER['PHP_SELF'] . '?rowid=' . $object->id, $object->user_id, 'none'); |
||
| 1663 | } else { |
||
| 1664 | print $langs->trans("NoDolibarrAccess"); |
||
| 1665 | } |
||
| 1666 | print '</td></tr>'; |
||
| 1667 | |||
| 1668 | // Other attributes. Fields from hook formObjectOptions and Extrafields. |
||
| 1669 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_add.tpl.php'; |
||
| 1670 | |||
| 1671 | print '</table>'; |
||
| 1672 | print dol_get_fiche_end(); |
||
| 1673 | |||
| 1674 | print $form->buttonsSaveCancel("Save", 'Cancel'); |
||
| 1675 | |||
| 1676 | print '</form>'; |
||
| 1677 | } |
||
| 1678 | |||
| 1679 | // View |
||
| 1680 | if ($id > 0 && $action != 'edit') { |
||
| 1681 | $res = $object->fetch($id); |
||
| 1682 | if ($res < 0) { |
||
| 1683 | dol_print_error($db, $object->error); |
||
| 1684 | exit; |
||
| 1685 | } |
||
| 1686 | $res = $object->fetch_optionals(); |
||
| 1687 | if ($res < 0) { |
||
| 1688 | dol_print_error($db); |
||
| 1689 | exit; |
||
| 1690 | } |
||
| 1691 | |||
| 1692 | $adht = new AdherentType($db); |
||
| 1693 | $res = $adht->fetch($object->typeid); |
||
| 1694 | if ($res < 0) { |
||
| 1695 | dol_print_error($db); |
||
| 1696 | exit; |
||
| 1697 | } |
||
| 1698 | |||
| 1699 | /* |
||
| 1700 | * Show tabs |
||
| 1701 | */ |
||
| 1702 | $head = member_prepare_head($object); |
||
| 1703 | |||
| 1704 | print dol_get_fiche_head($head, 'general', $langs->trans("Member"), -1, 'user'); |
||
| 1705 | |||
| 1706 | // Confirm create user |
||
| 1707 | if ($action == 'create_user') { |
||
| 1708 | $login = (GETPOSTISSET('login') ? GETPOST('login', 'alphanohtml') : $object->login); |
||
| 1709 | if (empty($login)) { |
||
| 1710 | // Full firstname and name separated with a dot : firstname.name |
||
| 1711 | include_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; |
||
| 1712 | $login = dol_buildlogin($object->lastname, $object->firstname); |
||
| 1713 | } |
||
| 1714 | if (empty($login)) { |
||
| 1715 | $login = strtolower(substr($object->firstname, 0, 4)) . strtolower(substr($object->lastname, 0, 4)); |
||
| 1716 | } |
||
| 1717 | |||
| 1718 | // Create a form array |
||
| 1719 | $formquestion = array( |
||
| 1720 | array('label' => $langs->trans("LoginToCreate"), 'type' => 'text', 'name' => 'login', 'value' => $login) |
||
| 1721 | ); |
||
| 1722 | if (isModEnabled('societe') && $object->socid > 0) { |
||
| 1723 | $object->fetch_thirdparty(); |
||
| 1724 | $formquestion[] = array('label' => $langs->trans("UserWillBe"), 'type' => 'radio', 'name' => 'internalorexternal', 'default' => 'external', 'values' => array('external' => $langs->trans("External") . ' - ' . $langs->trans("LinkedToDolibarrThirdParty") . ' ' . $object->thirdparty->getNomUrl(1, '', 0, 1), 'internal' => $langs->trans("Internal"))); |
||
| 1725 | } |
||
| 1726 | $text = ''; |
||
| 1727 | if (isModEnabled('societe') && $object->socid <= 0) { |
||
| 1728 | $text .= $langs->trans("UserWillBeInternalUser") . '<br>'; |
||
| 1729 | } |
||
| 1730 | $text .= $langs->trans("ConfirmCreateLogin"); |
||
| 1731 | print $form->formconfirm($_SERVER['PHP_SELF'] . "?rowid=" . $object->id, $langs->trans("CreateDolibarrLogin"), $text, "confirm_create_user", $formquestion, 'yes'); |
||
| 1732 | } |
||
| 1733 | |||
| 1734 | // Confirm create third party |
||
| 1735 | if ($action == 'create_thirdparty') { |
||
| 1736 | $companyalias = ''; |
||
| 1737 | $fullname = $object->getFullName($langs); |
||
| 1738 | |||
| 1739 | if ($object->morphy == 'mor') { |
||
| 1740 | $companyname = $object->company; |
||
| 1741 | if (!empty($fullname)) { |
||
| 1742 | $companyalias = $fullname; |
||
| 1743 | } |
||
| 1744 | } else { |
||
| 1745 | $companyname = $fullname; |
||
| 1746 | if (!empty($object->company)) { |
||
| 1747 | $companyalias = $object->company; |
||
| 1748 | } |
||
| 1749 | } |
||
| 1750 | |||
| 1751 | // Create a form array |
||
| 1752 | $formquestion = array( |
||
| 1753 | array('label' => $langs->trans("NameToCreate"), 'type' => 'text', 'name' => 'companyname', 'value' => $companyname, 'morecss' => 'minwidth300', 'moreattr' => 'maxlength="128"'), |
||
| 1754 | array('label' => $langs->trans("AliasNames"), 'type' => 'text', 'name' => 'companyalias', 'value' => $companyalias, 'morecss' => 'minwidth300', 'moreattr' => 'maxlength="128"') |
||
| 1755 | ); |
||
| 1756 | |||
| 1757 | print $form->formconfirm($_SERVER['PHP_SELF'] . "?rowid=" . $object->id, $langs->trans("CreateDolibarrThirdParty"), $langs->trans("ConfirmCreateThirdParty"), "confirm_create_thirdparty", $formquestion, 'yes'); |
||
| 1758 | } |
||
| 1759 | |||
| 1760 | // Confirm validate member |
||
| 1761 | if ($action == 'valid') { |
||
| 1762 | $langs->load("mails"); |
||
| 1763 | |||
| 1764 | $adht = new AdherentType($db); |
||
| 1765 | $adht->fetch($object->typeid); |
||
| 1766 | |||
| 1767 | $subject = ''; |
||
| 1768 | $msg = ''; |
||
| 1769 | |||
| 1770 | // Send subscription email |
||
| 1771 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 1772 | $formmail = new FormMail($db); |
||
| 1773 | // Set output language |
||
| 1774 | $outputlangs = new Translate('', $conf); |
||
| 1775 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 1776 | // Load traductions files required by page |
||
| 1777 | $outputlangs->loadLangs(array("main", "members", "companies", "install", "other")); |
||
| 1778 | // Get email content from template |
||
| 1779 | $arraydefaultmessage = null; |
||
| 1780 | $labeltouse = getDolGlobalString("ADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION"); |
||
| 1781 | |||
| 1782 | if (!empty($labeltouse)) { |
||
| 1783 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 1784 | } |
||
| 1785 | |||
| 1786 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 1787 | $subject = $arraydefaultmessage->topic; |
||
| 1788 | $msg = $arraydefaultmessage->content; |
||
| 1789 | } |
||
| 1790 | |||
| 1791 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 1792 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 1793 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 1794 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnValid()), $substitutionarray, $outputlangs); |
||
| 1795 | |||
| 1796 | $tmp = $langs->trans("SendingAnEMailToMember"); |
||
| 1797 | $tmp .= '<br>' . $langs->trans("MailFrom") . ': <b>' . getDolGlobalString('ADHERENT_MAIL_FROM') . '</b>, '; |
||
| 1798 | $tmp .= '<br>' . $langs->trans("MailRecipient") . ': <b>' . $object->email . '</b>'; |
||
| 1799 | $helpcontent = ''; |
||
| 1800 | $helpcontent .= '<b>' . $langs->trans("MailFrom") . '</b>: ' . getDolGlobalString('ADHERENT_MAIL_FROM') . '<br>' . "\n"; |
||
| 1801 | $helpcontent .= '<b>' . $langs->trans("MailRecipient") . '</b>: ' . $object->email . '<br>' . "\n"; |
||
| 1802 | $helpcontent .= '<b>' . $langs->trans("Subject") . '</b>:<br>' . "\n"; |
||
| 1803 | $helpcontent .= $subjecttosend . "\n"; |
||
| 1804 | $helpcontent .= "<br>"; |
||
| 1805 | $helpcontent .= '<b>' . $langs->trans("Content") . '</b>:<br>'; |
||
| 1806 | $helpcontent .= dol_htmlentitiesbr($texttosend) . "\n"; |
||
| 1807 | // @phan-suppress-next-line PhanPluginSuspiciousParamOrder |
||
| 1808 | $label = $form->textwithpicto($tmp, $helpcontent, 1, 'help'); |
||
| 1809 | |||
| 1810 | // Create form popup |
||
| 1811 | $formquestion = array(); |
||
| 1812 | if ($object->email) { |
||
| 1813 | $formquestion[] = array('type' => 'checkbox', 'name' => 'send_mail', 'label' => $label, 'value' => (getDolGlobalString('ADHERENT_DEFAULT_SENDINFOBYMAIL') ? true : false)); |
||
| 1814 | } |
||
| 1815 | if (isModEnabled('mailman') && getDolGlobalString('ADHERENT_USE_MAILMAN')) { |
||
| 1816 | $formquestion[] = array('type' => 'other', 'label' => $langs->transnoentitiesnoconv("SynchroMailManEnabled"), 'value' => ''); |
||
| 1817 | } |
||
| 1818 | if (isModEnabled('mailman') && getDolGlobalString('ADHERENT_USE_SPIP')) { |
||
| 1819 | $formquestion[] = array('type' => 'other', 'label' => $langs->transnoentitiesnoconv("SynchroSpipEnabled"), 'value' => ''); |
||
| 1820 | } |
||
| 1821 | print $form->formconfirm("card.php?rowid=" . $id, $langs->trans("ValidateMember"), $langs->trans("ConfirmValidateMember"), "confirm_valid", $formquestion, 'yes', 1, 220); |
||
| 1822 | } |
||
| 1823 | |||
| 1824 | // Confirm resiliate |
||
| 1825 | if ($action == 'resiliate') { |
||
| 1826 | $langs->load("mails"); |
||
| 1827 | |||
| 1828 | $adht = new AdherentType($db); |
||
| 1829 | $adht->fetch($object->typeid); |
||
| 1830 | |||
| 1831 | $subject = ''; |
||
| 1832 | $msg = ''; |
||
| 1833 | |||
| 1834 | // Send subscription email |
||
| 1835 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 1836 | $formmail = new FormMail($db); |
||
| 1837 | // Set output language |
||
| 1838 | $outputlangs = new Translate('', $conf); |
||
| 1839 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 1840 | // Load traductions files required by page |
||
| 1841 | $outputlangs->loadLangs(array("main", "members")); |
||
| 1842 | // Get email content from template |
||
| 1843 | $arraydefaultmessage = null; |
||
| 1844 | $labeltouse = getDolGlobalString('ADHERENT_EMAIL_TEMPLATE_CANCELATION'); |
||
| 1845 | |||
| 1846 | if (!empty($labeltouse)) { |
||
| 1847 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 1848 | } |
||
| 1849 | |||
| 1850 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 1851 | $subject = $arraydefaultmessage->topic; |
||
| 1852 | $msg = $arraydefaultmessage->content; |
||
| 1853 | } |
||
| 1854 | |||
| 1855 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 1856 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 1857 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 1858 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnResiliate()), $substitutionarray, $outputlangs); |
||
| 1859 | |||
| 1860 | $tmp = $langs->trans("SendingAnEMailToMember"); |
||
| 1861 | $tmp .= '<br>(' . $langs->trans("MailFrom") . ': <b>' . getDolGlobalString('ADHERENT_MAIL_FROM') . '</b>, '; |
||
| 1862 | $tmp .= $langs->trans("MailRecipient") . ': <b>' . $object->email . '</b>)'; |
||
| 1863 | $helpcontent = ''; |
||
| 1864 | $helpcontent .= '<b>' . $langs->trans("MailFrom") . '</b>: ' . getDolGlobalString('ADHERENT_MAIL_FROM') . '<br>' . "\n"; |
||
| 1865 | $helpcontent .= '<b>' . $langs->trans("MailRecipient") . '</b>: ' . $object->email . '<br>' . "\n"; |
||
| 1866 | $helpcontent .= '<b>' . $langs->trans("Subject") . '</b>:<br>' . "\n"; |
||
| 1867 | $helpcontent .= $subjecttosend . "\n"; |
||
| 1868 | $helpcontent .= "<br>"; |
||
| 1869 | $helpcontent .= '<b>' . $langs->trans("Content") . '</b>:<br>'; |
||
| 1870 | $helpcontent .= dol_htmlentitiesbr($texttosend) . "\n"; |
||
| 1871 | // @phan-suppress-next-line PhanPluginSuspiciousParamOrder |
||
| 1872 | $label = $form->textwithpicto($tmp, $helpcontent, 1, 'help'); |
||
| 1873 | |||
| 1874 | // Create an array |
||
| 1875 | $formquestion = array(); |
||
| 1876 | if ($object->email) { |
||
| 1877 | $formquestion[] = array('type' => 'checkbox', 'name' => 'send_mail', 'label' => $label, 'value' => (getDolGlobalString('ADHERENT_DEFAULT_SENDINFOBYMAIL') ? 'true' : 'false')); |
||
| 1878 | } |
||
| 1879 | if ($backtopage) { |
||
| 1880 | $formquestion[] = array('type' => 'hidden', 'name' => 'backtopage', 'value' => ($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"])); |
||
| 1881 | } |
||
| 1882 | print $form->formconfirm("card.php?rowid=" . $id, $langs->trans("ResiliateMember"), $langs->trans("ConfirmResiliateMember"), "confirm_resiliate", $formquestion, 'no', 1, 240); |
||
| 1883 | } |
||
| 1884 | |||
| 1885 | // Confirm exclude |
||
| 1886 | if ($action == 'exclude') { |
||
| 1887 | $langs->load("mails"); |
||
| 1888 | |||
| 1889 | $adht = new AdherentType($db); |
||
| 1890 | $adht->fetch($object->typeid); |
||
| 1891 | |||
| 1892 | $subject = ''; |
||
| 1893 | $msg = ''; |
||
| 1894 | |||
| 1895 | // Send subscription email |
||
| 1896 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 1897 | $formmail = new FormMail($db); |
||
| 1898 | // Set output language |
||
| 1899 | $outputlangs = new Translate('', $conf); |
||
| 1900 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 1901 | // Load traductions files required by page |
||
| 1902 | $outputlangs->loadLangs(array("main", "members")); |
||
| 1903 | // Get email content from template |
||
| 1904 | $arraydefaultmessage = null; |
||
| 1905 | $labeltouse = getDolGlobalString('ADHERENT_EMAIL_TEMPLATE_EXCLUSION'); |
||
| 1906 | |||
| 1907 | if (!empty($labeltouse)) { |
||
| 1908 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 1909 | } |
||
| 1910 | |||
| 1911 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 1912 | $subject = $arraydefaultmessage->topic; |
||
| 1913 | $msg = $arraydefaultmessage->content; |
||
| 1914 | } |
||
| 1915 | |||
| 1916 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 1917 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 1918 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 1919 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnExclude()), $substitutionarray, $outputlangs); |
||
| 1920 | |||
| 1921 | $tmp = $langs->trans("SendingAnEMailToMember"); |
||
| 1922 | $tmp .= '<br>(' . $langs->trans("MailFrom") . ': <b>' . getDolGlobalString('ADHERENT_MAIL_FROM') . '</b>, '; |
||
| 1923 | $tmp .= $langs->trans("MailRecipient") . ': <b>' . $object->email . '</b>)'; |
||
| 1924 | $helpcontent = ''; |
||
| 1925 | $helpcontent .= '<b>' . $langs->trans("MailFrom") . '</b>: ' . getDolGlobalString('ADHERENT_MAIL_FROM') . '<br>' . "\n"; |
||
| 1926 | $helpcontent .= '<b>' . $langs->trans("MailRecipient") . '</b>: ' . $object->email . '<br>' . "\n"; |
||
| 1927 | $helpcontent .= '<b>' . $langs->trans("Subject") . '</b>:<br>' . "\n"; |
||
| 1928 | $helpcontent .= $subjecttosend . "\n"; |
||
| 1929 | $helpcontent .= "<br>"; |
||
| 1930 | $helpcontent .= '<b>' . $langs->trans("Content") . '</b>:<br>'; |
||
| 1931 | $helpcontent .= dol_htmlentitiesbr($texttosend) . "\n"; |
||
| 1932 | // @phan-suppress-next-line PhanPluginSuspiciousParamOrder |
||
| 1933 | $label = $form->textwithpicto($tmp, $helpcontent, 1, 'help'); |
||
| 1934 | |||
| 1935 | // Create an array |
||
| 1936 | $formquestion = array(); |
||
| 1937 | if ($object->email) { |
||
| 1938 | $formquestion[] = array('type' => 'checkbox', 'name' => 'send_mail', 'label' => $label, 'value' => (getDolGlobalString('ADHERENT_DEFAULT_SENDINFOBYMAIL') ? 'true' : 'false')); |
||
| 1939 | } |
||
| 1940 | if ($backtopage) { |
||
| 1941 | $formquestion[] = array('type' => 'hidden', 'name' => 'backtopage', 'value' => ($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"])); |
||
| 1942 | } |
||
| 1943 | print $form->formconfirm("card.php?rowid=" . $id, $langs->trans("ExcludeMember"), $langs->trans("ConfirmExcludeMember"), "confirm_exclude", $formquestion, 'no', 1, 240); |
||
| 1944 | } |
||
| 1945 | |||
| 1946 | // Confirm remove member |
||
| 1947 | if ($action == 'delete') { |
||
| 1948 | $formquestion = array(); |
||
| 1949 | if ($backtopage) { |
||
| 1950 | $formquestion[] = array('type' => 'hidden', 'name' => 'backtopage', 'value' => ($backtopage != '1' ? $backtopage : $_SERVER["HTTP_REFERER"])); |
||
| 1951 | } |
||
| 1952 | print $form->formconfirm("card.php?rowid=" . $id, $langs->trans("DeleteMember"), $langs->trans("ConfirmDeleteMember"), "confirm_delete", $formquestion, 'no', 1); |
||
| 1953 | } |
||
| 1954 | |||
| 1955 | // Confirm add in spip |
||
| 1956 | if ($action == 'add_spip') { |
||
| 1957 | print $form->formconfirm("card.php?rowid=" . $id, $langs->trans('AddIntoSpip'), $langs->trans('AddIntoSpipConfirmation'), 'confirm_add_spip'); |
||
| 1958 | } |
||
| 1959 | // Confirm removed from spip |
||
| 1960 | if ($action == 'del_spip') { |
||
| 1961 | print $form->formconfirm("card.php?rowid=$id", $langs->trans('DeleteIntoSpip'), $langs->trans('DeleteIntoSpipConfirmation'), 'confirm_del_spip'); |
||
| 1962 | } |
||
| 1963 | |||
| 1964 | $rowspan = 17; |
||
| 1965 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 1966 | $rowspan++; |
||
| 1967 | } |
||
| 1968 | if (isModEnabled('societe')) { |
||
| 1969 | $rowspan++; |
||
| 1970 | } |
||
| 1971 | |||
| 1972 | $linkback = '<a href="' . DOL_URL_ROOT . '/adherents/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>'; |
||
| 1973 | |||
| 1974 | $morehtmlref = '<a href="' . DOL_URL_ROOT . '/adherents/vcard.php?id=' . $object->id . '" class="refid">'; |
||
| 1975 | $morehtmlref .= img_picto($langs->trans("Download") . ' ' . $langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"'); |
||
| 1976 | $morehtmlref .= '</a>'; |
||
| 1977 | |||
| 1978 | |||
| 1979 | dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref); |
||
| 1980 | |||
| 1981 | print '<div class="fichecenter">'; |
||
| 1982 | print '<div class="fichehalfleft">'; |
||
| 1983 | |||
| 1984 | print '<div class="underbanner clearboth"></div>'; |
||
| 1985 | print '<table class="border tableforfield centpercent">'; |
||
| 1986 | |||
| 1987 | // Login |
||
| 1988 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 1989 | print '<tr><td class="titlefield">' . $langs->trans("Login") . ' / ' . $langs->trans("Id") . '</td><td class="valeur">' . dol_escape_htmltag($object->login) . '</td></tr>'; |
||
| 1990 | } |
||
| 1991 | |||
| 1992 | // Type |
||
| 1993 | print '<tr><td class="titlefield">' . $langs->trans("Type") . '</td>'; |
||
| 1994 | print '<td class="valeur">' . $adht->getNomUrl(1) . "</td></tr>\n"; |
||
| 1995 | |||
| 1996 | // Morphy |
||
| 1997 | print '<tr><td>' . $langs->trans("MemberNature") . '</td>'; |
||
| 1998 | print '<td class="valeur" >' . $object->getmorphylib('', 1) . '</td>'; |
||
| 1999 | print '</tr>'; |
||
| 2000 | |||
| 2001 | // Company |
||
| 2002 | print '<tr><td>' . $langs->trans("Company") . '</td><td class="valeur">' . dol_escape_htmltag($object->company) . '</td></tr>'; |
||
| 2003 | |||
| 2004 | // Civility |
||
| 2005 | print '<tr><td>' . $langs->trans("UserTitle") . '</td><td class="valeur">' . $object->getCivilityLabel() . '</td>'; |
||
| 2006 | print '</tr>'; |
||
| 2007 | |||
| 2008 | // Password |
||
| 2009 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 2010 | print '<tr><td>' . $langs->trans("Password") . '</td><td>'; |
||
| 2011 | if ($object->pass) { |
||
| 2012 | print preg_replace('/./i', '*', $object->pass); |
||
| 2013 | } else { |
||
| 2014 | if ($user->admin) { |
||
| 2015 | print '<!-- ' . $langs->trans("Crypted") . ': ' . $object->pass_indatabase_crypted . ' -->'; |
||
| 2016 | } |
||
| 2017 | print '<span class="opacitymedium">' . $langs->trans("Hidden") . '</span>'; |
||
| 2018 | } |
||
| 2019 | if (!empty($object->pass_indatabase) && empty($object->user_id)) { // Show warning only for old password still in clear (does not happen anymore) |
||
| 2020 | $langs->load("errors"); |
||
| 2021 | $htmltext = $langs->trans("WarningPasswordSetWithNoAccount"); |
||
| 2022 | print ' ' . $form->textwithpicto('', $htmltext, 1, 'warning'); |
||
| 2023 | } |
||
| 2024 | print '</td></tr>'; |
||
| 2025 | } |
||
| 2026 | |||
| 2027 | // Date end subscription |
||
| 2028 | print '<tr><td>' . $langs->trans("SubscriptionEndDate") . '</td><td class="valeur">'; |
||
| 2029 | if ($object->datefin) { |
||
| 2030 | print dol_print_date($object->datefin, 'day'); |
||
| 2031 | if ($object->hasDelay()) { |
||
| 2032 | print " " . img_warning($langs->trans("Late")); |
||
| 2033 | } |
||
| 2034 | } else { |
||
| 2035 | if ($object->need_subscription == 0) { |
||
| 2036 | print $langs->trans("SubscriptionNotNeeded"); |
||
| 2037 | } elseif (!$adht->subscription) { |
||
| 2038 | print $langs->trans("SubscriptionNotRecorded"); |
||
| 2039 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 2040 | print " " . img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft, not excluded and not resiliated |
||
| 2041 | } |
||
| 2042 | } else { |
||
| 2043 | print $langs->trans("SubscriptionNotReceived"); |
||
| 2044 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 2045 | print " " . img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft, not excluded and not resiliated |
||
| 2046 | } |
||
| 2047 | } |
||
| 2048 | } |
||
| 2049 | print '</td></tr>'; |
||
| 2050 | |||
| 2051 | print '</table>'; |
||
| 2052 | |||
| 2053 | print '</div>'; |
||
| 2054 | |||
| 2055 | print '<div class="fichehalfright">'; |
||
| 2056 | print '<div class="underbanner clearboth"></div>'; |
||
| 2057 | |||
| 2058 | print '<table class="border tableforfield centpercent">'; |
||
| 2059 | |||
| 2060 | // Tags / Categories |
||
| 2061 | if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { |
||
| 2062 | print '<tr><td>' . $langs->trans("Categories") . '</td>'; |
||
| 2063 | print '<td colspan="2">'; |
||
| 2064 | print $form->showCategories($object->id, Categorie::TYPE_MEMBER, 1); |
||
| 2065 | print '</td></tr>'; |
||
| 2066 | } |
||
| 2067 | |||
| 2068 | // Birth Date |
||
| 2069 | print '<tr><td class="titlefield">' . $langs->trans("DateOfBirth") . '</td><td class="valeur">' . dol_print_date($object->birth, 'day') . '</td></tr>'; |
||
| 2070 | |||
| 2071 | // Default language |
||
| 2072 | if (getDolGlobalInt('MAIN_MULTILANGS')) { |
||
| 2073 | require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; |
||
| 2074 | print '<tr><td>' . $langs->trans("DefaultLang") . '</td><td>'; |
||
| 2075 | //$s=picto_from_langcode($object->default_lang); |
||
| 2076 | //print ($s?$s.' ':''); |
||
| 2077 | $langs->load("languages"); |
||
| 2078 | $labellang = ($object->default_lang ? $langs->trans('Language_' . $object->default_lang) : ''); |
||
| 2079 | print picto_from_langcode($object->default_lang, 'class="paddingrightonly saturatemedium opacitylow"'); |
||
| 2080 | print $labellang; |
||
| 2081 | print '</td></tr>'; |
||
| 2082 | } |
||
| 2083 | |||
| 2084 | // Public |
||
| 2085 | print '<tr><td>'; |
||
| 2086 | $htmltext = $langs->trans("Public", getDolGlobalString('MAIN_INFO_SOCIETE_NOM'), $linkofpubliclist); |
||
| 2087 | print $form->textwithpicto($langs->trans("MembershipPublic"), $htmltext, 1, 'help', '', 0, 3, 'membershippublic'); |
||
| 2088 | print '</td><td class="valeur">' . yn($object->public) . '</td></tr>'; |
||
| 2089 | |||
| 2090 | // Other attributes |
||
| 2091 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; |
||
| 2092 | |||
| 2093 | // Third party Dolibarr |
||
| 2094 | if (isModEnabled('societe')) { |
||
| 2095 | print '<tr><td>'; |
||
| 2096 | $editenable = $user->hasRight('adherent', 'creer'); |
||
| 2097 | print $form->editfieldkey('LinkedToDolibarrThirdParty', 'thirdparty', '', $object, $editenable); |
||
| 2098 | print '</td><td colspan="2" class="valeur">'; |
||
| 2099 | if ($action == 'editthirdparty') { |
||
| 2100 | $htmlname = 'socid'; |
||
| 2101 | print '<form method="POST" action="' . $_SERVER['PHP_SELF'] . '" name="form' . $htmlname . '">'; |
||
| 2102 | print '<input type="hidden" name="rowid" value="' . $object->id . '">'; |
||
| 2103 | print '<input type="hidden" name="action" value="set' . $htmlname . '">'; |
||
| 2104 | print '<input type="hidden" name="token" value="' . newToken() . '">'; |
||
| 2105 | print '<table class="nobordernopadding">'; |
||
| 2106 | print '<tr><td>'; |
||
| 2107 | print $form->select_company($object->socid, 'socid', '', 1); |
||
| 2108 | print '</td>'; |
||
| 2109 | print '<td class="left"><input type="submit" class="button button-edit" value="' . $langs->trans("Modify") . '"></td>'; |
||
| 2110 | print '</tr></table></form>'; |
||
| 2111 | } else { |
||
| 2112 | if ($object->socid) { |
||
| 2113 | $company = new Societe($db); |
||
| 2114 | $result = $company->fetch($object->socid); |
||
| 2115 | print $company->getNomUrl(1); |
||
| 2116 | |||
| 2117 | // Show link to invoices |
||
| 2118 | $tmparray = $company->getOutstandingBills('customer'); |
||
| 2119 | if (!empty($tmparray['refs'])) { |
||
| 2120 | print ' - ' . img_picto($langs->trans("Invoices"), 'bill', 'class="paddingright"') . '<a href="' . DOL_URL_ROOT . '/compta/facture/list.php?socid=' . $object->socid . '">' . $langs->trans("Invoices") . ' (' . count($tmparray['refs']) . ')'; |
||
| 2121 | // TODO Add alert if warning on at least one invoice late |
||
| 2122 | print '</a>'; |
||
| 2123 | } |
||
| 2124 | } else { |
||
| 2125 | print '<span class="opacitymedium">' . $langs->trans("NoThirdPartyAssociatedToMember") . '</span>'; |
||
| 2126 | } |
||
| 2127 | } |
||
| 2128 | print '</td></tr>'; |
||
| 2129 | } |
||
| 2130 | |||
| 2131 | // Login Dolibarr - Link to user |
||
| 2132 | print '<tr><td>'; |
||
| 2133 | $editenable = $user->hasRight('adherent', 'creer') && $user->hasRight('user', 'user', 'creer'); |
||
| 2134 | print $form->editfieldkey('LinkedToDolibarrUser', 'login', '', $object, $editenable); |
||
| 2135 | print '</td><td colspan="2" class="valeur">'; |
||
| 2136 | if ($action == 'editlogin') { |
||
| 2137 | $form->form_users($_SERVER['PHP_SELF'] . '?rowid=' . $object->id, $object->user_id, 'userid', ''); |
||
| 2138 | } else { |
||
| 2139 | if ($object->user_id) { |
||
| 2140 | $linkeduser = new User($db); |
||
| 2141 | $linkeduser->fetch($object->user_id); |
||
| 2142 | print $linkeduser->getNomUrl(-1); |
||
| 2143 | } else { |
||
| 2144 | print '<span class="opacitymedium">' . $langs->trans("NoDolibarrAccess") . '</span>'; |
||
| 2145 | } |
||
| 2146 | } |
||
| 2147 | print '</td></tr>'; |
||
| 2148 | |||
| 2149 | print "</table>\n"; |
||
| 2150 | |||
| 2151 | print "</div></div>\n"; |
||
| 2152 | print '<div class="clearboth"></div>'; |
||
| 2153 | |||
| 2154 | print dol_get_fiche_end(); |
||
| 2155 | |||
| 2156 | |||
| 2157 | /* |
||
| 2158 | * Action bar |
||
| 2159 | */ |
||
| 2160 | |||
| 2161 | print '<div class="tabsAction">'; |
||
| 2162 | $isinspip = 0; |
||
| 2163 | $parameters = array(); |
||
| 2164 | $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been |
||
| 2165 | if (empty($reshook)) { |
||
| 2166 | if ($action != 'editlogin' && $action != 'editthirdparty') { |
||
| 2167 | // Send |
||
| 2168 | if (empty($user->socid)) { |
||
| 2169 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 2170 | print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?id=' . ((int) $object->id) . '&action=presend&mode=init#formmailbeforetitle">' . $langs->trans('SendMail') . '</a>' . "\n"; |
||
| 2171 | } |
||
| 2172 | } |
||
| 2173 | |||
| 2174 | // Send card by email |
||
| 2175 | // TODO Remove this to replace with a template |
||
| 2176 | /* |
||
| 2177 | if ($user->hasRight('adherent', 'creer')) { |
||
| 2178 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 2179 | if ($object->email) print '<a class="butAction" href="card.php?rowid='.$object->id.'&action=sendinfo">'.$langs->trans("SendCardByMail")."</a>\n"; |
||
| 2180 | else print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NoEMail")).'">'.$langs->trans("SendCardByMail")."</a>\n"; |
||
| 2181 | } else { |
||
| 2182 | print '<span class="butActionRefused classfortooltip" title="'.dol_escape_htmltag($langs->trans("ValidateBefore")).'">'.$langs->trans("SendCardByMail")."</span>"; |
||
| 2183 | } |
||
| 2184 | } else { |
||
| 2185 | print '<span class="butActionRefused classfortooltip" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans("SendCardByMail")."</span>"; |
||
| 2186 | }*/ |
||
| 2187 | |||
| 2188 | // Modify |
||
| 2189 | if ($user->hasRight('adherent', 'creer')) { |
||
| 2190 | print '<a class="butAction" href="card.php?rowid=' . ((int) $object->id) . '&action=edit&token=' . newToken() . '">' . $langs->trans("Modify") . '</a>' . "\n"; |
||
| 2191 | } else { |
||
| 2192 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("Modify") . '</span>' . "\n"; |
||
| 2193 | } |
||
| 2194 | |||
| 2195 | // Validate |
||
| 2196 | if (Adherent::STATUS_DRAFT == $object->statut) { |
||
| 2197 | if ($user->hasRight('adherent', 'creer')) { |
||
| 2198 | print '<a class="butAction" href="card.php?rowid=' . ((int) $object->id) . '&action=valid&token=' . newToken() . '">' . $langs->trans("Validate") . '</a>' . "\n"; |
||
| 2199 | } else { |
||
| 2200 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("Validate") . '</span>' . "\n"; |
||
| 2201 | } |
||
| 2202 | } |
||
| 2203 | |||
| 2204 | // Reactivate |
||
| 2205 | if (Adherent::STATUS_RESILIATED == $object->statut || Adherent::STATUS_EXCLUDED == $object->statut) { |
||
| 2206 | if ($user->hasRight('adherent', 'creer')) { |
||
| 2207 | print '<a class="butAction" href="card.php?rowid=' . ((int) $object->id) . '&action=valid">' . $langs->trans("Reenable") . "</a>\n"; |
||
| 2208 | } else { |
||
| 2209 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("Reenable") . '</span>' . "\n"; |
||
| 2210 | } |
||
| 2211 | } |
||
| 2212 | |||
| 2213 | // Resiliate |
||
| 2214 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 2215 | if ($user->hasRight('adherent', 'supprimer')) { |
||
| 2216 | print '<a class="butAction" href="card.php?rowid=' . ((int) $object->id) . '&action=resiliate">' . $langs->trans("Resiliate") . "</a></span>\n"; |
||
| 2217 | } else { |
||
| 2218 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("Resiliate") . '</span>' . "\n"; |
||
| 2219 | } |
||
| 2220 | } |
||
| 2221 | |||
| 2222 | // Exclude |
||
| 2223 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 2224 | if ($user->hasRight('adherent', 'supprimer')) { |
||
| 2225 | print '<a class="butAction" href="card.php?rowid=' . ((int) $object->id) . '&action=exclude">' . $langs->trans("Exclude") . "</a></span>\n"; |
||
| 2226 | } else { |
||
| 2227 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("Exclude") . '</span>' . "\n"; |
||
| 2228 | } |
||
| 2229 | } |
||
| 2230 | |||
| 2231 | // Create third party |
||
| 2232 | if (isModEnabled('societe') && !$object->socid) { |
||
| 2233 | if ($user->hasRight('societe', 'creer')) { |
||
| 2234 | if (Adherent::STATUS_DRAFT != $object->statut) { |
||
| 2235 | print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?rowid=' . ((int) $object->id) . '&action=create_thirdparty" title="' . dol_escape_htmltag($langs->trans("CreateDolibarrThirdPartyDesc")) . '">' . $langs->trans("CreateDolibarrThirdParty") . '</a>' . "\n"; |
||
| 2236 | } else { |
||
| 2237 | print '<a class="butActionRefused classfortooltip" href="#" title="' . dol_escape_htmltag($langs->trans("ValidateBefore")) . '">' . $langs->trans("CreateDolibarrThirdParty") . '</a>' . "\n"; |
||
| 2238 | } |
||
| 2239 | } else { |
||
| 2240 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("CreateDolibarrThirdParty") . '</span>' . "\n"; |
||
| 2241 | } |
||
| 2242 | } |
||
| 2243 | |||
| 2244 | // Create user |
||
| 2245 | if (!$user->socid && !$object->user_id) { |
||
| 2246 | if ($user->hasRight('user', 'user', 'creer')) { |
||
| 2247 | if (Adherent::STATUS_DRAFT != $object->statut) { |
||
| 2248 | print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?rowid=' . ((int) $object->id) . '&action=create_user" title="' . dol_escape_htmltag($langs->trans("CreateDolibarrLoginDesc")) . '">' . $langs->trans("CreateDolibarrLogin") . '</a>' . "\n"; |
||
| 2249 | } else { |
||
| 2250 | print '<a class="butActionRefused classfortooltip" href="#" title="' . dol_escape_htmltag($langs->trans("ValidateBefore")) . '">' . $langs->trans("CreateDolibarrLogin") . '</a>' . "\n"; |
||
| 2251 | } |
||
| 2252 | } else { |
||
| 2253 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("CreateDolibarrLogin") . '</span>' . "\n"; |
||
| 2254 | } |
||
| 2255 | } |
||
| 2256 | |||
| 2257 | // Action SPIP |
||
| 2258 | if (isModEnabled('mailmanspip') && getDolGlobalString('ADHERENT_USE_SPIP')) { |
||
| 2259 | $isinspip = $mailmanspip->is_in_spip($object); |
||
| 2260 | |||
| 2261 | if ($isinspip == 1) { |
||
| 2262 | print '<a class="butAction" href="card.php?rowid=' . ((int) $object->id) . '&action=del_spip&token=' . newToken() . '">' . $langs->trans("DeleteIntoSpip") . '</a>' . "\n"; |
||
| 2263 | } |
||
| 2264 | if ($isinspip == 0) { |
||
| 2265 | print '<a class="butAction" href="card.php?rowid=' . ((int) $object->id) . '&action=add_spip&token=' . newToken() . '">' . $langs->trans("AddIntoSpip") . '</a>' . "\n"; |
||
| 2266 | } |
||
| 2267 | } |
||
| 2268 | |||
| 2269 | // Delete |
||
| 2270 | if ($user->hasRight('adherent', 'supprimer')) { |
||
| 2271 | print '<a class="butActionDelete" href="card.php?rowid=' . ((int) $object->id) . '&action=delete&token=' . newToken() . '">' . $langs->trans("Delete") . '</a>' . "\n"; |
||
| 2272 | } else { |
||
| 2273 | print '<span class="butActionRefused classfortooltip" title="' . dol_escape_htmltag($langs->trans("NotEnoughPermissions")) . '">' . $langs->trans("Delete") . '</span>' . "\n"; |
||
| 2274 | } |
||
| 2275 | } |
||
| 2276 | } |
||
| 2277 | print '</div>'; |
||
| 2278 | |||
| 2279 | if ($isinspip == -1) { |
||
| 2280 | print '<br><br><span class="error">' . $langs->trans('SPIPConnectionFailed') . ': ' . $mailmanspip->error . '</span>'; |
||
| 2281 | } |
||
| 2282 | |||
| 2283 | |||
| 2284 | // Select mail models is same action as presend |
||
| 2285 | if (GETPOST('modelselected')) { |
||
| 2286 | $action = 'presend'; |
||
| 2287 | } |
||
| 2288 | |||
| 2289 | if ($action != 'presend') { |
||
| 2290 | print '<div class="fichecenter"><div class="fichehalfleft">'; |
||
| 2291 | print '<a name="builddoc"></a>'; // ancre |
||
| 2292 | |||
| 2293 | // Generated documents |
||
| 2294 | $filename = dol_sanitizeFileName($object->ref); |
||
| 2295 | $filedir = $conf->adherent->dir_output . '/' . get_exdir(0, 0, 0, 1, $object, 'member'); |
||
| 2296 | $urlsource = $_SERVER['PHP_SELF'] . '?id=' . $object->id; |
||
| 2297 | $genallowed = $user->hasRight('adherent', 'lire'); |
||
| 2298 | $delallowed = $user->hasRight('adherent', 'creer'); |
||
| 2299 | |||
| 2300 | print $formfile->showdocuments('member', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', (empty($object->default_lang) ? '' : $object->default_lang), '', $object); |
||
| 2301 | $somethingshown = $formfile->numoffiles; |
||
| 2302 | |||
| 2303 | // Show links to link elements |
||
| 2304 | //$linktoelem = $form->showLinkToObjectBlock($object, null, array('subscription')); |
||
| 2305 | //$somethingshown = $form->showLinkedObjectBlock($object, ''); |
||
| 2306 | |||
| 2307 | // Show links to link elements |
||
| 2308 | /*$linktoelem = $form->showLinkToObjectBlock($object,array('order')); |
||
| 2309 | if ($linktoelem) { |
||
| 2310 | print ($somethingshown?'':'<br>').$linktoelem; |
||
| 2311 | } |
||
| 2312 | */ |
||
| 2313 | |||
| 2314 | // Show online payment link |
||
| 2315 | $useonlinepayment = (isModEnabled('paypal') || isModEnabled('stripe') || isModEnabled('paybox')); |
||
| 2316 | |||
| 2317 | $parameters = array(); |
||
| 2318 | $reshook = $hookmanager->executeHooks('doShowOnlinePaymentUrl', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 2319 | if ($reshook < 0) { |
||
| 2320 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 2321 | } else { |
||
| 2322 | $useonlinepayment = $reshook; |
||
| 2323 | } |
||
| 2324 | |||
| 2325 | if ($useonlinepayment) { |
||
| 2326 | print '<br>'; |
||
| 2327 | if (empty($amount)) { // Take the maximum amount among what the member is supposed to pay / has paid in the past |
||
| 2328 | $amount = max($adht->amount, $object->first_subscription_amount, $object->last_subscription_amount); |
||
| 2329 | } |
||
| 2330 | if (empty($amount)) { |
||
| 2331 | $amount = 0; |
||
| 2332 | } |
||
| 2333 | require_once DOL_DOCUMENT_ROOT . '/core/lib/payments.lib.php'; |
||
| 2334 | print showOnlinePaymentUrl('membersubscription', $object->ref, $amount); |
||
| 2335 | } |
||
| 2336 | |||
| 2337 | print '</div><div class="fichehalfright">'; |
||
| 2338 | |||
| 2339 | $MAX = 10; |
||
| 2340 | |||
| 2341 | $morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT . '/adherents/agenda.php?id=' . $object->id); |
||
| 2342 | |||
| 2343 | // List of actions on element |
||
| 2344 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; |
||
| 2345 | $formactions = new FormActions($db); |
||
| 2346 | $somethingshown = $formactions->showactions($object, $object->element, $socid, 1, 'listactions', $MAX, '', $morehtmlcenter); |
||
| 2347 | |||
| 2348 | print '</div></div>'; |
||
| 2349 | } |
||
| 2350 | |||
| 2351 | // Presend form |
||
| 2352 | $modelmail = 'member'; |
||
| 2353 | $defaulttopic = 'CardContent'; |
||
| 2354 | $diroutput = $conf->adherent->dir_output; |
||
| 2355 | $trackid = 'mem' . $object->id; |
||
| 2356 | |||
| 2357 | include DOL_DOCUMENT_ROOT . '/core/tpl/card_presend.tpl.php'; |
||
| 2358 | } |
||
| 2359 | } |
||
| 2360 | |||
| 2361 | // End of page |
||
| 2362 | llxFooter(); |
||
| 2363 | $db->close(); |
||
| 2364 | } |
||
| 2365 | |||
| 2366 | /** |
||
| 2367 | * \file htdocs/adherents/document.php |
||
| 2368 | * \brief Tab for documents linked to third party |
||
| 2369 | * \ingroup societe |
||
| 2370 | */ |
||
| 2371 | public function document() |
||
| 2549 | } |
||
| 2550 | |||
| 2551 | /** |
||
| 2552 | * \file htdocs/adherents/index.php |
||
| 2553 | * \ingroup member |
||
| 2554 | * \brief Home page of membership module |
||
| 2555 | */ |
||
| 2556 | public function index() |
||
| 2557 | { |
||
| 2558 | global $conf; |
||
| 2559 | global $db; |
||
| 2560 | global $user; |
||
| 2561 | global $hookmanager; |
||
| 2562 | global $user; |
||
| 2563 | global $menumanager; |
||
| 2564 | global $langs; |
||
| 2565 | |||
| 2566 | // Load translation files required by the page |
||
| 2567 | $langs->loadLangs(["companies", "members"]); |
||
| 2568 | |||
| 2569 | // $hookmanager = new HookManager($db); |
||
| 2570 | |||
| 2571 | // Initialize technical object to manage hooks. Note that conf->hooks_modules contains array |
||
| 2572 | $hookmanager->initHooks(['membersindex']); |
||
| 2573 | |||
| 2574 | // Security check |
||
| 2575 | $result = restrictedArea($user, 'adherent'); |
||
| 2576 | |||
| 2577 | /* |
||
| 2578 | * Actions |
||
| 2579 | */ |
||
| 2580 | |||
| 2581 | $userid = GETPOSTINT('userid'); |
||
| 2582 | if (GETPOST('addbox')) { |
||
| 2583 | // Add box (when submit is done from a form when ajax disabled) |
||
| 2584 | require_once DOL_DOCUMENT_ROOT . '/core/class/infobox.class.php'; |
||
| 2585 | $zone = GETPOSTINT('areacode'); |
||
| 2586 | $boxorder = GETPOST('boxorder', 'aZ09'); |
||
| 2587 | $boxorder .= GETPOST('boxcombo', 'aZ09'); |
||
| 2588 | $result = InfoBox::saveboxorder($db, $zone, $boxorder, $userid); |
||
| 2589 | if ($result > 0) { |
||
| 2590 | setEventMessages($langs->trans("BoxAdded"), null); |
||
| 2591 | } |
||
| 2592 | } |
||
| 2593 | |||
| 2594 | /* |
||
| 2595 | * View |
||
| 2596 | */ |
||
| 2597 | |||
| 2598 | $form = new Form($db); |
||
| 2599 | |||
| 2600 | // Load $resultboxes (selectboxlist + boxactivated + boxlista + boxlistb) |
||
| 2601 | $resultboxes = FormOther::getBoxesArea($user, "2"); |
||
| 2602 | |||
| 2603 | llxHeader('', $langs->trans("Members"), 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder'); |
||
| 2604 | |||
| 2605 | $staticmember = new Adherent($db); |
||
| 2606 | $statictype = new AdherentType($db); |
||
| 2607 | $subscriptionstatic = new Subscription($db); |
||
| 2608 | |||
| 2609 | print load_fiche_titre($langs->trans("MembersArea"), $resultboxes['selectboxlist'], 'members'); |
||
| 2610 | |||
| 2611 | /* |
||
| 2612 | * Statistics |
||
| 2613 | */ |
||
| 2614 | |||
| 2615 | $boxgraph = ''; |
||
| 2616 | if ($conf->use_javascript_ajax) { |
||
| 2617 | $year = date('Y'); |
||
| 2618 | $numberyears = getDolGlobalInt("MAIN_NB_OF_YEAR_IN_MEMBERSHIP_WIDGET_GRAPH"); |
||
| 2619 | |||
| 2620 | $boxgraph .= '<div class="div-table-responsive-no-min">'; |
||
| 2621 | $boxgraph .= '<table class="noborder nohover centpercent">'; |
||
| 2622 | $boxgraph .= '<tr class="liste_titre"><th colspan="2">' . $langs->trans("Statistics") . ($numberyears ? ' (' . ($year - $numberyears) . ' - ' . $year . ')' : '') . '</th></tr>'; |
||
| 2623 | $boxgraph .= '<tr><td class="center" colspan="2">'; |
||
| 2624 | |||
| 2625 | $stats = new AdherentStats($db, 0, $userid); |
||
| 2626 | |||
| 2627 | // Show array |
||
| 2628 | $sumMembers = $stats->countMembersByTypeAndStatus($numberyears); |
||
| 2629 | if (is_array($sumMembers) && !empty($sumMembers)) { |
||
| 2630 | $total = $sumMembers['total']['members_draft'] + $sumMembers['total']['members_pending'] + $sumMembers['total']['members_uptodate'] + $sumMembers['total']['members_expired'] + $sumMembers['total']['members_excluded'] + $sumMembers['total']['members_resiliated']; |
||
| 2631 | } else { |
||
| 2632 | $total = 0; |
||
| 2633 | } |
||
| 2634 | foreach (['members_draft', 'members_pending', 'members_uptodate', 'members_expired', 'members_excluded', 'members_resiliated'] as $val) { |
||
| 2635 | if (empty($sumMembers['total'][$val])) { |
||
| 2636 | $sumMembers['total'][$val] = 0; |
||
| 2637 | } |
||
| 2638 | } |
||
| 2639 | |||
| 2640 | $dataseries = []; |
||
| 2641 | $dataseries[] = [$langs->transnoentitiesnoconv("MembersStatusToValid"), $sumMembers['total']['members_draft']]; // Draft, not yet validated |
||
| 2642 | $dataseries[] = [$langs->transnoentitiesnoconv("WaitingSubscription"), $sumMembers['total']['members_pending']]; |
||
| 2643 | $dataseries[] = [$langs->transnoentitiesnoconv("UpToDate"), $sumMembers['total']['members_uptodate']]; |
||
| 2644 | $dataseries[] = [$langs->transnoentitiesnoconv("OutOfDate"), $sumMembers['total']['members_expired']]; |
||
| 2645 | $dataseries[] = [$langs->transnoentitiesnoconv("MembersStatusExcluded"), $sumMembers['total']['members_excluded']]; |
||
| 2646 | $dataseries[] = [$langs->transnoentitiesnoconv("MembersStatusResiliated"), $sumMembers['total']['members_resiliated']]; |
||
| 2647 | |||
| 2648 | include DOL_DOCUMENT_ROOT . '/theme/' . $conf->theme . '/theme_vars.inc.php'; |
||
| 2649 | |||
| 2650 | include_once DOL_DOCUMENT_ROOT . '/core/class/dolgraph.class.php'; |
||
| 2651 | $dolgraph = new DolGraph(); |
||
| 2652 | $dolgraph->SetData($dataseries); |
||
| 2653 | $dolgraph->SetDataColor(['-' . $badgeStatus0, $badgeStatus1, $badgeStatus4, $badgeStatus8, '-' . $badgeStatus8, $badgeStatus6]); |
||
| 2654 | $dolgraph->setShowLegend(2); |
||
| 2655 | $dolgraph->setShowPercent(1); |
||
| 2656 | $dolgraph->SetType(['pie']); |
||
| 2657 | $dolgraph->setHeight('200'); |
||
| 2658 | $dolgraph->draw('idgraphstatus'); |
||
| 2659 | $boxgraph .= $dolgraph->show($total ? 0 : 1); |
||
| 2660 | |||
| 2661 | $boxgraph .= '</td></tr>'; |
||
| 2662 | $boxgraph .= '<tr class="liste_total"><td>' . $langs->trans("Total") . '</td><td class="right">'; |
||
| 2663 | $boxgraph .= $total; |
||
| 2664 | $boxgraph .= '</td></tr>'; |
||
| 2665 | $boxgraph .= '</table>'; |
||
| 2666 | $boxgraph .= '</div>'; |
||
| 2667 | $boxgraph .= '<br>'; |
||
| 2668 | } |
||
| 2669 | |||
| 2670 | // boxes |
||
| 2671 | print '<div class="clearboth"></div>'; |
||
| 2672 | print '<div class="fichecenter fichecenterbis">'; |
||
| 2673 | |||
| 2674 | print '<div class="twocolumns">'; |
||
| 2675 | |||
| 2676 | print '<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">'; |
||
| 2677 | |||
| 2678 | print $boxgraph; |
||
| 2679 | |||
| 2680 | print $resultboxes['boxlista']; |
||
| 2681 | |||
| 2682 | print '</div>' . "\n"; |
||
| 2683 | |||
| 2684 | print '<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">'; |
||
| 2685 | |||
| 2686 | print $resultboxes['boxlistb']; |
||
| 2687 | |||
| 2688 | print '</div>' . "\n"; |
||
| 2689 | |||
| 2690 | print '</div>'; |
||
| 2691 | print '</div>'; |
||
| 2692 | |||
| 2693 | $parameters = ['user' => $user]; |
||
| 2694 | $reshook = $hookmanager->executeHooks('dashboardMembers', $parameters, $object); // Note that $action and $object may have been modified by hook |
||
| 2695 | |||
| 2696 | // End of page |
||
| 2697 | llxFooter(); |
||
| 2698 | $db->close(); |
||
| 2699 | } |
||
| 2700 | |||
| 2701 | /** |
||
| 2702 | * \file htdocs/adherents/ldap.php |
||
| 2703 | * \ingroup ldap member |
||
| 2704 | * \brief Page fiche LDAP adherent |
||
| 2705 | */ |
||
| 2706 | public function ldap() |
||
| 2907 | } |
||
| 2908 | |||
| 2909 | /** |
||
| 2910 | * \file htdocs/adherents/list.php |
||
| 2911 | * \ingroup member |
||
| 2912 | * \brief Page to list all members of foundation |
||
| 2913 | */ |
||
| 2914 | public function list() |
||
| 2915 | { |
||
| 2916 | global $conf; |
||
| 2917 | global $db; |
||
| 2918 | global $user; |
||
| 2919 | global $hookmanager; |
||
| 2920 | global $user; |
||
| 2921 | global $menumanager; |
||
| 2922 | global $langs; |
||
| 2923 | |||
| 2924 | // Load translation files required by the page |
||
| 2925 | $langs->loadLangs(["members", "companies", "categories"]); |
||
| 2926 | |||
| 2927 | |||
| 2928 | // Get parameters |
||
| 2929 | $action = GETPOST('action', 'aZ09'); |
||
| 2930 | $massaction = GETPOST('massaction', 'alpha'); |
||
| 2931 | $show_files = GETPOSTINT('show_files'); |
||
| 2932 | $confirm = GETPOST('confirm', 'alpha'); |
||
| 2933 | $cancel = GETPOST('cancel', 'alpha'); |
||
| 2934 | $toselect = GETPOST('toselect', 'array'); |
||
| 2935 | $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'memberslist'; // To manage different context of search |
||
| 2936 | $backtopage = GETPOST('backtopage', 'alpha'); |
||
| 2937 | $optioncss = GETPOST('optioncss', 'aZ'); |
||
| 2938 | $mode = GETPOST('mode', 'alpha'); |
||
| 2939 | |||
| 2940 | // Search fields |
||
| 2941 | $search = GETPOST("search", 'alpha'); |
||
| 2942 | $search_ref = GETPOST("search_ref", 'alpha'); |
||
| 2943 | $search_lastname = GETPOST("search_lastname", 'alpha'); |
||
| 2944 | $search_firstname = GETPOST("search_firstname", 'alpha'); |
||
| 2945 | $search_gender = GETPOST("search_gender", 'alpha'); |
||
| 2946 | $search_civility = GETPOST("search_civility", 'alpha'); |
||
| 2947 | $search_company = GETPOST('search_company', 'alphanohtml'); |
||
| 2948 | $search_login = GETPOST("search_login", 'alpha'); |
||
| 2949 | $search_address = GETPOST("search_address", 'alpha'); |
||
| 2950 | $search_zip = GETPOST("search_zip", 'alpha'); |
||
| 2951 | $search_town = GETPOST("search_town", 'alpha'); |
||
| 2952 | $search_state = GETPOST("search_state", 'alpha'); // county / departement / federal state |
||
| 2953 | $search_country = GETPOST("search_country", 'alpha'); |
||
| 2954 | $search_phone = GETPOST("search_phone", 'alpha'); |
||
| 2955 | $search_phone_perso = GETPOST("search_phone_perso", 'alpha'); |
||
| 2956 | $search_phone_mobile = GETPOST("search_phone_mobile", 'alpha'); |
||
| 2957 | $search_type = GETPOST("search_type", 'alpha'); |
||
| 2958 | $search_email = GETPOST("search_email", 'alpha'); |
||
| 2959 | $search_categ = GETPOSTINT("search_categ"); |
||
| 2960 | $search_morphy = GETPOST("search_morphy", 'alpha'); |
||
| 2961 | $search_import_key = trim(GETPOST("search_import_key", 'alpha')); |
||
| 2962 | |||
| 2963 | $catid = GETPOSTINT("catid"); |
||
| 2964 | $socid = GETPOSTINT('socid'); |
||
| 2965 | |||
| 2966 | $search_filter = GETPOST("search_filter", 'alpha'); |
||
| 2967 | $search_status = GETPOST("search_status", 'intcomma'); // status |
||
| 2968 | $search_datec_start = dol_mktime(0, 0, 0, GETPOSTINT('search_datec_start_month'), GETPOSTINT('search_datec_start_day'), GETPOSTINT('search_datec_start_year')); |
||
| 2969 | $search_datec_end = dol_mktime(23, 59, 59, GETPOSTINT('search_datec_end_month'), GETPOSTINT('search_datec_end_day'), GETPOSTINT('search_datec_end_year')); |
||
| 2970 | $search_datem_start = dol_mktime(0, 0, 0, GETPOSTINT('search_datem_start_month'), GETPOSTINT('search_datem_start_day'), GETPOSTINT('search_datem_start_year')); |
||
| 2971 | $search_datem_end = dol_mktime(23, 59, 59, GETPOSTINT('search_datem_end_month'), GETPOSTINT('search_datem_end_day'), GETPOSTINT('search_datem_end_year')); |
||
| 2972 | |||
| 2973 | $filter = GETPOST("filter", 'alpha'); |
||
| 2974 | if ($filter) { |
||
| 2975 | $search_filter = $filter; // For backward compatibility |
||
| 2976 | } |
||
| 2977 | |||
| 2978 | $statut = GETPOST("statut", 'alpha'); |
||
| 2979 | if ($statut != '') { |
||
| 2980 | $search_status = $statut; // For backward compatibility |
||
| 2981 | } |
||
| 2982 | |||
| 2983 | $search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml')); |
||
| 2984 | |||
| 2985 | if ($search_status < -2) { |
||
| 2986 | $search_status = ''; |
||
| 2987 | } |
||
| 2988 | |||
| 2989 | // Pagination parameters |
||
| 2990 | $limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; |
||
| 2991 | $sortfield = GETPOST('sortfield', 'aZ09comma'); |
||
| 2992 | $sortorder = GETPOST('sortorder', 'aZ09comma'); |
||
| 2993 | $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); |
||
| 2994 | if (empty($page) || $page == -1) { |
||
| 2995 | $page = 0; |
||
| 2996 | } // If $page is not defined, or '' or -1 |
||
| 2997 | $offset = $limit * $page; |
||
| 2998 | $pageprev = $page - 1; |
||
| 2999 | $pagenext = $page + 1; |
||
| 3000 | if (!$sortorder) { |
||
| 3001 | $sortorder = ($filter == 'outofdate' ? "DESC" : "ASC"); |
||
| 3002 | } |
||
| 3003 | if (!$sortfield) { |
||
| 3004 | $sortfield = ($filter == 'outofdate' ? "d.datefin" : "d.lastname"); |
||
| 3005 | } |
||
| 3006 | |||
| 3007 | $object = new Adherent($db); |
||
| 3008 | |||
| 3009 | // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context |
||
| 3010 | $hookmanager->initHooks(['memberlist']); |
||
| 3011 | $extrafields = new ExtraFields($db); |
||
| 3012 | |||
| 3013 | // fetch optionals attributes and labels |
||
| 3014 | $extrafields->fetch_name_optionals_label($object->table_element); |
||
| 3015 | |||
| 3016 | $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); |
||
| 3017 | |||
| 3018 | // List of fields to search into when doing a "search in all" |
||
| 3019 | $fieldstosearchall = [ |
||
| 3020 | 'd.ref' => 'Ref', |
||
| 3021 | 'd.login' => 'Login', |
||
| 3022 | 'd.lastname' => 'Lastname', |
||
| 3023 | 'd.firstname' => 'Firstname', |
||
| 3024 | 'd.societe' => "Company", |
||
| 3025 | 'd.email' => 'EMail', |
||
| 3026 | 'd.address' => 'Address', |
||
| 3027 | 'd.zip' => 'Zip', |
||
| 3028 | 'd.town' => 'Town', |
||
| 3029 | 'd.phone' => "Phone", |
||
| 3030 | 'd.phone_perso' => "PhonePerso", |
||
| 3031 | 'd.phone_mobile' => "PhoneMobile", |
||
| 3032 | 'd.note_public' => 'NotePublic', |
||
| 3033 | 'd.note_private' => 'NotePrivate', |
||
| 3034 | ]; |
||
| 3035 | |||
| 3036 | $arrayfields = [ |
||
| 3037 | 'd.ref' => ['label' => "Ref", 'checked' => 1], |
||
| 3038 | 'd.civility' => ['label' => "Civility", 'checked' => 0], |
||
| 3039 | 'd.lastname' => ['label' => "Lastname", 'checked' => 1], |
||
| 3040 | 'd.firstname' => ['label' => "Firstname", 'checked' => 1], |
||
| 3041 | 'd.gender' => ['label' => "Gender", 'checked' => 0], |
||
| 3042 | 'd.company' => ['label' => "Company", 'checked' => 1, 'position' => 70], |
||
| 3043 | 'd.login' => ['label' => "Login", 'checked' => 1], |
||
| 3044 | 'd.morphy' => ['label' => "MemberNature", 'checked' => 1], |
||
| 3045 | 't.libelle' => ['label' => "Type", 'checked' => 1, 'position' => 55], |
||
| 3046 | 'd.address' => ['label' => "Address", 'checked' => 0], |
||
| 3047 | 'd.zip' => ['label' => "Zip", 'checked' => 0], |
||
| 3048 | 'd.town' => ['label' => "Town", 'checked' => 0], |
||
| 3049 | 'd.phone' => ['label' => "Phone", 'checked' => 0], |
||
| 3050 | 'd.phone_perso' => ['label' => "PhonePerso", 'checked' => 0], |
||
| 3051 | 'd.phone_mobile' => ['label' => "PhoneMobile", 'checked' => 0], |
||
| 3052 | 'd.email' => ['label' => "Email", 'checked' => 1], |
||
| 3053 | 'state.nom' => ['label' => "State", 'checked' => 0, 'position' => 90], |
||
| 3054 | 'country.code_iso' => ['label' => "Country", 'checked' => 0, 'position' => 95], |
||
| 3055 | /*'d.note_public'=>array('label'=>"NotePublic", 'checked'=>0), |
||
| 3056 | 'd.note_private'=>array('label'=>"NotePrivate", 'checked'=>0),*/ |
||
| 3057 | 'd.datefin' => ['label' => "EndSubscription"], |
||
| 3058 | 'd.datec' => ['label' => "DateCreation"], |
||
| 3059 | 'd.birth' => ['label' => "Birthday"], |
||
| 3060 | 'd.tms' => ['label' => "DateModificationShort"], |
||
| 3061 | 'd.statut' => ['label' => "Status"], |
||
| 3062 | 'd.import_key' => ['label' => "ImportId"], |
||
| 3063 | ]; |
||
| 3064 | |||
| 3065 | // Extra fields |
||
| 3066 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_array_fields.tpl.php'; |
||
| 3067 | |||
| 3068 | $object->fields = dol_sort_array($object->fields, 'position'); |
||
| 3069 | //$arrayfields['anotherfield'] = array('type'=>'integer', 'label'=>'AnotherField', 'checked'=>1, 'enabled'=>1, 'position'=>90, 'csslist'=>'right'); |
||
| 3070 | |||
| 3071 | // Complete array of fields for columns |
||
| 3072 | $tableprefix = 'd'; |
||
| 3073 | foreach ($object->fields as $key => $val) { |
||
| 3074 | if (!array_key_exists($tableprefix . '.' . $key, $arrayfields)) { // Discard record not into $arrayfields |
||
| 3075 | continue; |
||
| 3076 | } |
||
| 3077 | // If $val['visible']==0, then we never show the field |
||
| 3078 | |||
| 3079 | if (!empty($val['visible'])) { |
||
| 3080 | $visible = (int) dol_eval($val['visible'], 1); |
||
| 3081 | $arrayfields[$tableprefix . '.' . $key] = [ |
||
| 3082 | 'label' => $val['label'], |
||
| 3083 | 'checked' => (($visible < 0) ? 0 : 1), |
||
| 3084 | 'enabled' => (abs($visible) != 3 && (int) dol_eval($val['enabled'], 1)), |
||
| 3085 | 'position' => $val['position'], |
||
| 3086 | 'help' => isset($val['help']) ? $val['help'] : '', |
||
| 3087 | ]; |
||
| 3088 | } |
||
| 3089 | } |
||
| 3090 | $arrayfields = dol_sort_array($arrayfields, 'position'); |
||
| 3091 | //var_dump($arrayfields);exit; |
||
| 3092 | |||
| 3093 | // Security check |
||
| 3094 | $result = restrictedArea($user, 'adherent'); |
||
| 3095 | |||
| 3096 | |||
| 3097 | /* |
||
| 3098 | * Actions |
||
| 3099 | */ |
||
| 3100 | |||
| 3101 | if (GETPOST('cancel', 'alpha')) { |
||
| 3102 | $action = 'list'; |
||
| 3103 | $massaction = ''; |
||
| 3104 | } |
||
| 3105 | if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { |
||
| 3106 | $massaction = ''; |
||
| 3107 | } |
||
| 3108 | |||
| 3109 | $parameters = ['socid' => isset($socid) ? $socid : null]; |
||
| 3110 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 3111 | if ($reshook < 0) { |
||
| 3112 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 3113 | } |
||
| 3114 | |||
| 3115 | if (empty($reshook)) { |
||
| 3116 | // Selection of new fields |
||
| 3117 | include DOL_DOCUMENT_ROOT . '/core/actions_changeselectedfields.inc.php'; |
||
| 3118 | |||
| 3119 | // Purge search criteria |
||
| 3120 | if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers |
||
| 3121 | $statut = ''; |
||
| 3122 | $filter = ''; |
||
| 3123 | |||
| 3124 | $search = ""; |
||
| 3125 | $search_ref = ""; |
||
| 3126 | $search_lastname = ""; |
||
| 3127 | $search_firstname = ""; |
||
| 3128 | $search_gender = ""; |
||
| 3129 | $search_civility = ""; |
||
| 3130 | $search_login = ""; |
||
| 3131 | $search_company = ""; |
||
| 3132 | $search_type = ""; |
||
| 3133 | $search_email = ""; |
||
| 3134 | $search_address = ""; |
||
| 3135 | $search_zip = ""; |
||
| 3136 | $search_town = ""; |
||
| 3137 | $search_state = ""; |
||
| 3138 | $search_country = ''; |
||
| 3139 | $search_phone = ''; |
||
| 3140 | $search_phone_perso = ''; |
||
| 3141 | $search_phone_mobile = ''; |
||
| 3142 | $search_morphy = ""; |
||
| 3143 | $search_categ = ""; |
||
| 3144 | $search_filter = ""; |
||
| 3145 | $search_status = ""; |
||
| 3146 | $search_import_key = ''; |
||
| 3147 | $catid = ""; |
||
| 3148 | $search_all = ""; |
||
| 3149 | $toselect = []; |
||
| 3150 | $search_datec_start = ''; |
||
| 3151 | $search_datec_end = ''; |
||
| 3152 | $search_datem_start = ''; |
||
| 3153 | $search_datem_end = ''; |
||
| 3154 | $search_array_options = []; |
||
| 3155 | } |
||
| 3156 | |||
| 3157 | // Close |
||
| 3158 | if ($massaction == 'close' && $user->hasRight('adherent', 'creer')) { |
||
| 3159 | $tmpmember = new Adherent($db); |
||
| 3160 | $error = 0; |
||
| 3161 | $nbclose = 0; |
||
| 3162 | |||
| 3163 | $db->begin(); |
||
| 3164 | |||
| 3165 | foreach ($toselect as $idtoclose) { |
||
| 3166 | $tmpmember->fetch($idtoclose); |
||
| 3167 | $result = $tmpmember->resiliate($user); |
||
| 3168 | |||
| 3169 | if ($result < 0 && !count($tmpmember->errors)) { |
||
| 3170 | setEventMessages($tmpmember->error, $tmpmember->errors, 'errors'); |
||
| 3171 | } else { |
||
| 3172 | if ($result > 0) { |
||
| 3173 | $nbclose++; |
||
| 3174 | } |
||
| 3175 | } |
||
| 3176 | } |
||
| 3177 | |||
| 3178 | if (!$error) { |
||
| 3179 | setEventMessages($langs->trans("XMembersClosed", $nbclose), null, 'mesgs'); |
||
| 3180 | |||
| 3181 | $db->commit(); |
||
| 3182 | } else { |
||
| 3183 | $db->rollback(); |
||
| 3184 | } |
||
| 3185 | } |
||
| 3186 | |||
| 3187 | // Create external user |
||
| 3188 | if ($massaction == 'createexternaluser' && $user->hasRight('adherent', 'creer') && $user->hasRight('user', 'user', 'creer')) { |
||
| 3189 | $tmpmember = new Adherent($db); |
||
| 3190 | $error = 0; |
||
| 3191 | $nbcreated = 0; |
||
| 3192 | |||
| 3193 | $db->begin(); |
||
| 3194 | |||
| 3195 | foreach ($toselect as $idtoclose) { |
||
| 3196 | $tmpmember->fetch($idtoclose); |
||
| 3197 | |||
| 3198 | if (!empty($tmpmember->fk_soc)) { |
||
| 3199 | $nuser = new User($db); |
||
| 3200 | $tmpuser = dol_clone($tmpmember); |
||
| 3201 | |||
| 3202 | $result = $nuser->create_from_member($tmpuser, $tmpmember->login); |
||
| 3203 | |||
| 3204 | if ($result < 0 && !count($tmpmember->errors)) { |
||
| 3205 | setEventMessages($tmpmember->error, $tmpmember->errors, 'errors'); |
||
| 3206 | } else { |
||
| 3207 | if ($result > 0) { |
||
| 3208 | $nbcreated++; |
||
| 3209 | } |
||
| 3210 | } |
||
| 3211 | } |
||
| 3212 | } |
||
| 3213 | |||
| 3214 | if (!$error) { |
||
| 3215 | setEventMessages($langs->trans("XExternalUserCreated", $nbcreated), null, 'mesgs'); |
||
| 3216 | |||
| 3217 | $db->commit(); |
||
| 3218 | } else { |
||
| 3219 | $db->rollback(); |
||
| 3220 | } |
||
| 3221 | } |
||
| 3222 | |||
| 3223 | // Create external user |
||
| 3224 | if ($action == 'createsubscription_confirm' && $confirm == "yes" && $user->hasRight('adherent', 'creer')) { |
||
| 3225 | $tmpmember = new Adherent($db); |
||
| 3226 | $adht = new AdherentType($db); |
||
| 3227 | $error = 0; |
||
| 3228 | $nbcreated = 0; |
||
| 3229 | $now = dol_now(); |
||
| 3230 | $amount = price2num(GETPOST('amount', 'alpha')); |
||
| 3231 | $db->begin(); |
||
| 3232 | foreach ($toselect as $id) { |
||
| 3233 | $res = $tmpmember->fetch($id); |
||
| 3234 | if ($res > 0) { |
||
| 3235 | $result = $tmpmember->subscription($now, $amount); |
||
| 3236 | if ($result < 0) { |
||
| 3237 | $error++; |
||
| 3238 | } else { |
||
| 3239 | $nbcreated++; |
||
| 3240 | } |
||
| 3241 | } else { |
||
| 3242 | $error++; |
||
| 3243 | } |
||
| 3244 | } |
||
| 3245 | |||
| 3246 | if (!$error) { |
||
| 3247 | setEventMessages($langs->trans("XSubsriptionCreated", $nbcreated), null, 'mesgs'); |
||
| 3248 | $db->commit(); |
||
| 3249 | } else { |
||
| 3250 | setEventMessages($langs->trans("XSubsriptionError", $error), null, 'mesgs'); |
||
| 3251 | $db->rollback(); |
||
| 3252 | } |
||
| 3253 | } |
||
| 3254 | |||
| 3255 | // Mass actions |
||
| 3256 | $objectclass = 'Adherent'; |
||
| 3257 | $objectlabel = 'Members'; |
||
| 3258 | $permissiontoread = $user->hasRight('adherent', 'lire'); |
||
| 3259 | $permissiontodelete = $user->hasRight('adherent', 'supprimer'); |
||
| 3260 | $permissiontoadd = $user->hasRight('adherent', 'creer'); |
||
| 3261 | $uploaddir = $conf->adherent->dir_output; |
||
| 3262 | include DOL_DOCUMENT_ROOT . '/core/actions_massactions.inc.php'; |
||
| 3263 | } |
||
| 3264 | |||
| 3265 | |||
| 3266 | /* |
||
| 3267 | * View |
||
| 3268 | */ |
||
| 3269 | |||
| 3270 | $form = new Form($db); |
||
| 3271 | $formother = new FormOther($db); |
||
| 3272 | $membertypestatic = new AdherentType($db); |
||
| 3273 | $memberstatic = new Adherent($db); |
||
| 3274 | |||
| 3275 | $now = dol_now(); |
||
| 3276 | |||
| 3277 | // Page Header |
||
| 3278 | $title = $langs->trans("Members") . " - " . $langs->trans("List"); |
||
| 3279 | $help_url = 'EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder'; |
||
| 3280 | $morejs = []; |
||
| 3281 | $morecss = []; |
||
| 3282 | |||
| 3283 | |||
| 3284 | // Build and execute select |
||
| 3285 | // -------------------------------------------------------------------- |
||
| 3286 | if ((!empty($search_categ) && $search_categ > 0) || !empty($catid)) { |
||
| 3287 | $sql = "SELECT DISTINCT"; |
||
| 3288 | } else { |
||
| 3289 | $sql = "SELECT"; |
||
| 3290 | } |
||
| 3291 | $sql .= " d.rowid, d.ref, d.login, d.lastname, d.firstname, d.gender, d.societe as company, d.fk_soc,"; |
||
| 3292 | $sql .= " d.civility, d.datefin, d.address, d.zip, d.town, d.state_id, d.country,"; |
||
| 3293 | $sql .= " d.email, d.phone, d.phone_perso, d.phone_mobile, d.birth, d.public, d.photo,"; |
||
| 3294 | $sql .= " d.fk_adherent_type as type_id, d.morphy, d.statut as status, d.datec as date_creation, d.tms as date_modification,"; |
||
| 3295 | $sql .= " d.note_private, d.note_public, d.import_key,"; |
||
| 3296 | $sql .= " s.nom,"; |
||
| 3297 | $sql .= " " . $db->ifsql("d.societe IS NULL", "s.nom", "d.societe") . " as companyname,"; |
||
| 3298 | $sql .= " t.libelle as type, t.subscription,"; |
||
| 3299 | $sql .= " state.code_departement as state_code, state.nom as state_name"; |
||
| 3300 | |||
| 3301 | // Add fields from extrafields |
||
| 3302 | if (!empty($extrafields->attributes[$object->table_element]['label'])) { |
||
| 3303 | foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { |
||
| 3304 | $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef." . $key . " as options_" . $key : ''); |
||
| 3305 | } |
||
| 3306 | } |
||
| 3307 | |||
| 3308 | // Add fields from hooks |
||
| 3309 | $parameters = []; |
||
| 3310 | $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook |
||
| 3311 | $sql .= $hookmanager->resPrint; |
||
| 3312 | $sql = preg_replace('/,\s*$/', '', $sql); |
||
| 3313 | |||
| 3314 | $sqlfields = $sql; // $sql fields to remove for count total |
||
| 3315 | |||
| 3316 | // SQL Alias adherent |
||
| 3317 | $sql .= " FROM " . MAIN_DB_PREFIX . "adherent as d"; // maybe better to use ad (adh) instead of d |
||
| 3318 | if (!empty($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { |
||
| 3319 | $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $object->table_element . "_extrafields as ef on (d.rowid = ef.fk_object)"; |
||
| 3320 | } |
||
| 3321 | $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_country as country on (country.rowid = d.country)"; |
||
| 3322 | $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_departements as state on (state.rowid = d.state_id)"; |
||
| 3323 | $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe as s on (s.rowid = d.fk_soc)"; |
||
| 3324 | |||
| 3325 | // SQL Alias adherent_type |
||
| 3326 | $sql .= ", " . MAIN_DB_PREFIX . "adherent_type as t"; |
||
| 3327 | $sql .= " WHERE d.fk_adherent_type = t.rowid"; |
||
| 3328 | |||
| 3329 | if ($catid && empty($search_categ)) { |
||
| 3330 | $search_categ = $catid; |
||
| 3331 | } |
||
| 3332 | |||
| 3333 | $searchCategoryContactList = $search_categ ? [$search_categ] : []; |
||
| 3334 | $searchCategoryContactOperator = 0; |
||
| 3335 | // Search for tag/category ($searchCategoryContactList is an array of ID) |
||
| 3336 | if (!empty($searchCategoryContactList)) { |
||
| 3337 | $searchCategoryContactSqlList = []; |
||
| 3338 | $listofcategoryid = ''; |
||
| 3339 | foreach ($searchCategoryContactList as $searchCategoryContact) { |
||
| 3340 | if (intval($searchCategoryContact) == -2) { |
||
| 3341 | $searchCategoryContactSqlList[] = "NOT EXISTS (SELECT ck.fk_categorie FROM " . MAIN_DB_PREFIX . "categorie_member as ck WHERE d.rowid = ck.fk_member)"; |
||
| 3342 | } elseif (intval($searchCategoryContact) > 0) { |
||
| 3343 | if ($searchCategoryContactOperator == 0) { |
||
| 3344 | $searchCategoryContactSqlList[] = " EXISTS (SELECT ck.fk_categorie FROM " . MAIN_DB_PREFIX . "categorie_member as ck WHERE d.rowid = ck.fk_member AND ck.fk_categorie = " . ((int) $searchCategoryContact) . ")"; |
||
| 3345 | } else { |
||
| 3346 | $listofcategoryid .= ($listofcategoryid ? ', ' : '') . ((int) $searchCategoryContact); |
||
| 3347 | } |
||
| 3348 | } |
||
| 3349 | } |
||
| 3350 | if ($listofcategoryid) { |
||
| 3351 | $searchCategoryContactSqlList[] = " EXISTS (SELECT ck.fk_categorie FROM " . MAIN_DB_PREFIX . "categorie_member as ck WHERE d.rowid = ck.fk_member AND ck.fk_categorie IN (" . $db->sanitize($listofcategoryid) . "))"; |
||
| 3352 | } |
||
| 3353 | if ($searchCategoryContactOperator == 1) { |
||
| 3354 | if (!empty($searchCategoryContactSqlList)) { |
||
| 3355 | $sql .= " AND (" . implode(' OR ', $searchCategoryContactSqlList) . ")"; |
||
| 3356 | } |
||
| 3357 | } else { |
||
| 3358 | if (!empty($searchCategoryContactSqlList)) { |
||
| 3359 | $sql .= " AND (" . implode(' AND ', $searchCategoryContactSqlList) . ")"; |
||
| 3360 | } |
||
| 3361 | } |
||
| 3362 | } |
||
| 3363 | |||
| 3364 | $sql .= " AND d.entity IN (" . getEntity('adherent') . ")"; |
||
| 3365 | if ($search_all) { |
||
| 3366 | $sql .= natural_search(array_keys($fieldstosearchall), $search_all); |
||
| 3367 | } |
||
| 3368 | if ($search_type > 0) { |
||
| 3369 | $sql .= " AND t.rowid=" . ((int) $search_type); |
||
| 3370 | } |
||
| 3371 | if ($search_filter == 'withoutsubscription') { |
||
| 3372 | $sql .= " AND (datefin IS NULL)"; |
||
| 3373 | } |
||
| 3374 | if ($search_filter == 'waitingsubscription') { |
||
| 3375 | $sql .= " AND (datefin IS NULL AND t.subscription = '1')"; |
||
| 3376 | } |
||
| 3377 | if ($search_filter == 'uptodate') { |
||
| 3378 | $sql .= " AND (datefin >= '" . $db->idate($now) . "' OR (datefin IS NULL AND t.subscription = '0'))"; |
||
| 3379 | } |
||
| 3380 | if ($search_filter == 'outofdate') { |
||
| 3381 | $sql .= " AND (datefin < '" . $db->idate($now) . "')"; |
||
| 3382 | } |
||
| 3383 | if ($search_status != '') { |
||
| 3384 | // Peut valoir un nombre ou liste de nombre separates par virgules |
||
| 3385 | $sql .= " AND d.statut in (" . $db->sanitize($db->escape($search_status)) . ")"; |
||
| 3386 | } |
||
| 3387 | if ($search_morphy != '' && $search_morphy != '-1') { |
||
| 3388 | $sql .= natural_search("d.morphy", $search_morphy); |
||
| 3389 | } |
||
| 3390 | if ($search_ref) { |
||
| 3391 | $sql .= natural_search("d.ref", $search_ref); |
||
| 3392 | } |
||
| 3393 | if ($search_civility) { |
||
| 3394 | $sql .= natural_search("d.civility", $search_civility); |
||
| 3395 | } |
||
| 3396 | if ($search_firstname) { |
||
| 3397 | $sql .= natural_search("d.firstname", $search_firstname); |
||
| 3398 | } |
||
| 3399 | if ($search_lastname) { |
||
| 3400 | $sql .= natural_search(["d.firstname", "d.lastname", "d.societe"], $search_lastname); |
||
| 3401 | } |
||
| 3402 | if ($search_gender != '' && $search_gender != '-1') { |
||
| 3403 | $sql .= natural_search("d.gender", $search_gender); |
||
| 3404 | } |
||
| 3405 | if ($search_login) { |
||
| 3406 | $sql .= natural_search("d.login", $search_login); |
||
| 3407 | } |
||
| 3408 | if ($search_company) { |
||
| 3409 | $sql .= natural_search("s.nom", $search_company); |
||
| 3410 | } |
||
| 3411 | if ($search_email) { |
||
| 3412 | $sql .= natural_search("d.email", $search_email); |
||
| 3413 | } |
||
| 3414 | if ($search_address) { |
||
| 3415 | $sql .= natural_search("d.address", $search_address); |
||
| 3416 | } |
||
| 3417 | if ($search_town) { |
||
| 3418 | $sql .= natural_search("d.town", $search_town); |
||
| 3419 | } |
||
| 3420 | if ($search_zip) { |
||
| 3421 | $sql .= natural_search("d.zip", $search_zip); |
||
| 3422 | } |
||
| 3423 | if ($search_state) { |
||
| 3424 | $sql .= natural_search("state.nom", $search_state); |
||
| 3425 | } |
||
| 3426 | if ($search_phone) { |
||
| 3427 | $sql .= natural_search("d.phone", $search_phone); |
||
| 3428 | } |
||
| 3429 | if ($search_phone_perso) { |
||
| 3430 | $sql .= natural_search("d.phone_perso", $search_phone_perso); |
||
| 3431 | } |
||
| 3432 | if ($search_phone_mobile) { |
||
| 3433 | $sql .= natural_search("d.phone_mobile", $search_phone_mobile); |
||
| 3434 | } |
||
| 3435 | if ($search_country) { |
||
| 3436 | $sql .= " AND d.country IN (" . $db->sanitize($search_country) . ')'; |
||
| 3437 | } |
||
| 3438 | if ($search_import_key) { |
||
| 3439 | $sql .= natural_search("d.import_key", $search_import_key); |
||
| 3440 | } |
||
| 3441 | if ($search_datec_start) { |
||
| 3442 | $sql .= " AND d.datec >= '" . $db->idate($search_datec_start) . "'"; |
||
| 3443 | } |
||
| 3444 | if ($search_datec_end) { |
||
| 3445 | $sql .= " AND d.datec <= '" . $db->idate($search_datec_end) . "'"; |
||
| 3446 | } |
||
| 3447 | if ($search_datem_start) { |
||
| 3448 | $sql .= " AND d.tms >= '" . $db->idate($search_datem_start) . "'"; |
||
| 3449 | } |
||
| 3450 | if ($search_datem_end) { |
||
| 3451 | $sql .= " AND d.tms <= '" . $db->idate($search_datem_end) . "'"; |
||
| 3452 | } |
||
| 3453 | // Add where from extra fields |
||
| 3454 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_sql.tpl.php'; |
||
| 3455 | // Add where from hooks |
||
| 3456 | $parameters = []; |
||
| 3457 | $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook |
||
| 3458 | $sql .= $hookmanager->resPrint; |
||
| 3459 | |||
| 3460 | // Count total nb of records |
||
| 3461 | $nbtotalofrecords = ''; |
||
| 3462 | if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) { |
||
| 3463 | /* The fast and low memory method to get and count full list converts the sql into a sql count */ |
||
| 3464 | $sqlforcount = preg_replace('/^' . preg_quote($sqlfields, '/') . '/', 'SELECT COUNT(*) as nbtotalofrecords', $sql); |
||
| 3465 | $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount); |
||
| 3466 | $resql = $db->query($sqlforcount); |
||
| 3467 | if ($resql) { |
||
| 3468 | $objforcount = $db->fetch_object($resql); |
||
| 3469 | $nbtotalofrecords = $objforcount->nbtotalofrecords; |
||
| 3470 | } else { |
||
| 3471 | dol_print_error($db); |
||
| 3472 | } |
||
| 3473 | |||
| 3474 | if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0 |
||
| 3475 | $page = 0; |
||
| 3476 | $offset = 0; |
||
| 3477 | } |
||
| 3478 | $db->free($resql); |
||
| 3479 | } |
||
| 3480 | //print $sql; |
||
| 3481 | |||
| 3482 | // Complete request and execute it with limit |
||
| 3483 | $sql .= $db->order($sortfield, $sortorder); |
||
| 3484 | if ($limit) { |
||
| 3485 | $sql .= $db->plimit($limit + 1, $offset); |
||
| 3486 | } |
||
| 3487 | |||
| 3488 | $resql = $db->query($sql); |
||
| 3489 | if (!$resql) { |
||
| 3490 | dol_print_error($db); |
||
| 3491 | exit; |
||
| 3492 | } |
||
| 3493 | |||
| 3494 | $num = $db->num_rows($resql); |
||
| 3495 | |||
| 3496 | |||
| 3497 | // Direct jump if only one record found |
||
| 3498 | if ($num == 1 && getDolGlobalString('MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && $search_all && !$page) { |
||
| 3499 | $obj = $db->fetch_object($resql); |
||
| 3500 | $id = $obj->rowid; |
||
| 3501 | header("Location: " . DOL_URL_ROOT . '/adherents/card.php?id=' . $id); |
||
| 3502 | exit; |
||
| 3503 | } |
||
| 3504 | |||
| 3505 | // Output page |
||
| 3506 | // -------------------------------------------------------------------- |
||
| 3507 | |||
| 3508 | llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', 'bodyforlist'); // Can use also classforhorizontalscrolloftabs instead of bodyforlist for no horizontal scroll |
||
| 3509 | |||
| 3510 | $arrayofselected = is_array($toselect) ? $toselect : []; |
||
| 3511 | |||
| 3512 | |||
| 3513 | if ($search_type > 0) { |
||
| 3514 | $membertype = new AdherentType($db); |
||
| 3515 | $result = $membertype->fetch($search_type); |
||
| 3516 | $title .= " (" . $membertype->label . ")"; |
||
| 3517 | } |
||
| 3518 | |||
| 3519 | // $parameters |
||
| 3520 | $param = ''; |
||
| 3521 | if (!empty($mode)) { |
||
| 3522 | $param .= '&mode=' . urlencode($mode); |
||
| 3523 | } |
||
| 3524 | if (!empty($contextpage) && $contextpage != $_SERVER['PHP_SELF']) { |
||
| 3525 | $param .= '&contextpage=' . urlencode($contextpage); |
||
| 3526 | } |
||
| 3527 | if ($limit > 0 && $limit != $conf->liste_limit) { |
||
| 3528 | $param .= '&limit=' . ((int) $limit); |
||
| 3529 | } |
||
| 3530 | if ($optioncss != '') { |
||
| 3531 | $param .= '&optioncss=' . urlencode($optioncss); |
||
| 3532 | } |
||
| 3533 | if ($search_all != "") { |
||
| 3534 | $param .= "&search_all=" . urlencode($search_all); |
||
| 3535 | } |
||
| 3536 | if ($search_ref) { |
||
| 3537 | $param .= "&search_ref=" . urlencode($search_ref); |
||
| 3538 | } |
||
| 3539 | if ($search_civility) { |
||
| 3540 | $param .= "&search_civility=" . urlencode($search_civility); |
||
| 3541 | } |
||
| 3542 | if ($search_firstname) { |
||
| 3543 | $param .= "&search_firstname=" . urlencode($search_firstname); |
||
| 3544 | } |
||
| 3545 | if ($search_lastname) { |
||
| 3546 | $param .= "&search_lastname=" . urlencode($search_lastname); |
||
| 3547 | } |
||
| 3548 | if ($search_gender) { |
||
| 3549 | $param .= "&search_gender=" . urlencode($search_gender); |
||
| 3550 | } |
||
| 3551 | if ($search_login) { |
||
| 3552 | $param .= "&search_login=" . urlencode($search_login); |
||
| 3553 | } |
||
| 3554 | if ($search_email) { |
||
| 3555 | $param .= "&search_email=" . urlencode($search_email); |
||
| 3556 | } |
||
| 3557 | if ($search_categ > 0 || $search_categ == -2) { |
||
| 3558 | $param .= "&search_categ=" . urlencode((string) ($search_categ)); |
||
| 3559 | } |
||
| 3560 | if ($search_company) { |
||
| 3561 | $param .= "&search_company=" . urlencode($search_company); |
||
| 3562 | } |
||
| 3563 | if ($search_address != '') { |
||
| 3564 | $param .= "&search_address=" . urlencode($search_address); |
||
| 3565 | } |
||
| 3566 | if ($search_town != '') { |
||
| 3567 | $param .= "&search_town=" . urlencode($search_town); |
||
| 3568 | } |
||
| 3569 | if ($search_zip != '') { |
||
| 3570 | $param .= "&search_zip=" . urlencode($search_zip); |
||
| 3571 | } |
||
| 3572 | if ($search_state != '') { |
||
| 3573 | $param .= "&search_state=" . urlencode($search_state); |
||
| 3574 | } |
||
| 3575 | if ($search_country != '') { |
||
| 3576 | $param .= "&search_country=" . urlencode($search_country); |
||
| 3577 | } |
||
| 3578 | if ($search_phone != '') { |
||
| 3579 | $param .= "&search_phone=" . urlencode($search_phone); |
||
| 3580 | } |
||
| 3581 | if ($search_phone_perso != '') { |
||
| 3582 | $param .= "&search_phone_perso=" . urlencode($search_phone_perso); |
||
| 3583 | } |
||
| 3584 | if ($search_phone_mobile != '') { |
||
| 3585 | $param .= "&search_phone_mobile=" . urlencode($search_phone_mobile); |
||
| 3586 | } |
||
| 3587 | if ($search_filter && $search_filter != '-1') { |
||
| 3588 | $param .= "&search_filter=" . urlencode($search_filter); |
||
| 3589 | } |
||
| 3590 | if ($search_status != "" && $search_status != -3) { |
||
| 3591 | $param .= "&search_status=" . urlencode($search_status); |
||
| 3592 | } |
||
| 3593 | if ($search_import_key != '') { |
||
| 3594 | $param .= '&search_import_key=' . urlencode($search_import_key); |
||
| 3595 | } |
||
| 3596 | if ($search_type > 0) { |
||
| 3597 | $param .= "&search_type=" . urlencode($search_type); |
||
| 3598 | } |
||
| 3599 | if ($search_datec_start) { |
||
| 3600 | $param .= '&search_datec_start_day=' . dol_print_date($search_datec_start, '%d') . '&search_datec_start_month=' . dol_print_date($search_datec_start, '%m') . '&search_datec_start_year=' . dol_print_date($search_datec_start, '%Y'); |
||
| 3601 | } |
||
| 3602 | if ($search_datem_end) { |
||
| 3603 | $param .= '&search_datem_end_day=' . dol_print_date($search_datem_end, '%d') . '&search_datem_end_month=' . dol_print_date($search_datem_end, '%m') . '&search_datem_end_year=' . dol_print_date($search_datem_end, '%Y'); |
||
| 3604 | } |
||
| 3605 | |||
| 3606 | // Add $param from extra fields |
||
| 3607 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_param.tpl.php'; |
||
| 3608 | |||
| 3609 | // List of mass actions available |
||
| 3610 | $arrayofmassactions = [ |
||
| 3611 | //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"), |
||
| 3612 | //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"), |
||
| 3613 | ]; |
||
| 3614 | if ($user->hasRight('adherent', 'creer')) { |
||
| 3615 | $arrayofmassactions['close'] = img_picto('', 'close_title', 'class="pictofixedwidth"') . $langs->trans("Resiliate"); |
||
| 3616 | } |
||
| 3617 | if ($user->hasRight('adherent', 'supprimer')) { |
||
| 3618 | $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"') . $langs->trans("Delete"); |
||
| 3619 | } |
||
| 3620 | if (isModEnabled('category') && $user->hasRight('adherent', 'creer')) { |
||
| 3621 | $arrayofmassactions['preaffecttag'] = img_picto('', 'category', 'class="pictofixedwidth"') . $langs->trans("AffectTag"); |
||
| 3622 | } |
||
| 3623 | if ($user->hasRight('adherent', 'creer') && $user->hasRight('user', 'user', 'creer')) { |
||
| 3624 | $arrayofmassactions['createexternaluser'] = img_picto('', 'user', 'class="pictofixedwidth"') . $langs->trans("CreateExternalUser"); |
||
| 3625 | } |
||
| 3626 | if ($user->hasRight('adherent', 'creer')) { |
||
| 3627 | $arrayofmassactions['createsubscription'] = img_picto('', 'payment', 'class="pictofixedwidth"') . $langs->trans("CreateSubscription"); |
||
| 3628 | } |
||
| 3629 | if (GETPOSTINT('nomassaction') || in_array($massaction, ['presend', 'predelete', 'preaffecttag'])) { |
||
| 3630 | $arrayofmassactions = []; |
||
| 3631 | } |
||
| 3632 | $massactionbutton = $form->selectMassAction('', $arrayofmassactions); |
||
| 3633 | |||
| 3634 | print '<form method="POST" id="searchFormList" action="' . $_SERVER['PHP_SELF'] . '">' . "\n"; |
||
| 3635 | if ($optioncss != '') { |
||
| 3636 | print '<input type="hidden" name="optioncss" value="' . $optioncss . '">'; |
||
| 3637 | } |
||
| 3638 | print '<input type="hidden" name="token" value="' . newToken() . '">'; |
||
| 3639 | print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">'; |
||
| 3640 | print '<input type="hidden" name="action" value="list">'; |
||
| 3641 | print '<input type="hidden" name="sortfield" value="' . $sortfield . '">'; |
||
| 3642 | print '<input type="hidden" name="sortorder" value="' . $sortorder . '">'; |
||
| 3643 | print '<input type="hidden" name="page" value="' . $page . '">'; |
||
| 3644 | print '<input type="hidden" name="contextpage" value="' . $contextpage . '">'; |
||
| 3645 | print '<input type="hidden" name="page_y" value="">'; |
||
| 3646 | print '<input type="hidden" name="mode" value="' . $mode . '">'; |
||
| 3647 | |||
| 3648 | |||
| 3649 | $newcardbutton = ''; |
||
| 3650 | $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER['PHP_SELF'] . '?mode=common' . preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), ['morecss' => 'reposition']); |
||
| 3651 | $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER['PHP_SELF'] . '?mode=kanban' . preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), ['morecss' => 'reposition']); |
||
| 3652 | if ($user->hasRight('adherent', 'creer')) { |
||
| 3653 | $newcardbutton .= dolGetButtonTitleSeparator(); |
||
| 3654 | $newcardbutton .= dolGetButtonTitle($langs->trans('NewMember'), '', 'fa fa-plus-circle', DOL_URL_ROOT . '/adherents/card.php?action=create'); |
||
| 3655 | } |
||
| 3656 | |||
| 3657 | print_barre_liste($title, $page, $_SERVER['PHP_SELF'], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $object->picto, 0, $newcardbutton, '', $limit, 0, 0, 1); |
||
| 3658 | |||
| 3659 | $topicmail = "Information"; |
||
| 3660 | $modelmail = "member"; |
||
| 3661 | $objecttmp = new Adherent($db); |
||
| 3662 | $trackid = 'mem' . $object->id; |
||
| 3663 | if ($massaction == 'createsubscription') { |
||
| 3664 | $tmpmember = new Adherent($db); |
||
| 3665 | $adht = new AdherentType($db); |
||
| 3666 | $amount = 0; |
||
| 3667 | foreach ($toselect as $id) { |
||
| 3668 | $now = dol_now(); |
||
| 3669 | $tmpmember->fetch($id); |
||
| 3670 | $res = $adht->fetch($tmpmember->typeid); |
||
| 3671 | if ($res > 0) { |
||
| 3672 | $amounttmp = $adht->amount; |
||
| 3673 | if (!empty($tmpmember->last_subscription_amount) && !GETPOSTISSET('newamount') && is_numeric($amounttmp)) { |
||
| 3674 | $amounttmp = max($tmpmember->last_subscription_amount, $amount); |
||
| 3675 | } |
||
| 3676 | $amount = max(0, $amounttmp, $amount); |
||
| 3677 | } else { |
||
| 3678 | $error++; |
||
| 3679 | } |
||
| 3680 | } |
||
| 3681 | |||
| 3682 | $date = dol_print_date(dol_now(), "%d/%m/%Y"); |
||
| 3683 | $formquestion = [ |
||
| 3684 | ['label' => $langs->trans("DateSubscription"), 'type' => 'other', 'value' => $date], |
||
| 3685 | ['label' => $langs->trans("Amount"), 'type' => 'text', 'value' => price($amount, 0, '', 0), 'name' => 'amount'], |
||
| 3686 | ['type' => 'separator'], |
||
| 3687 | ['label' => $langs->trans("MoreActions"), 'type' => 'other', 'value' => $langs->trans("None") . ' ' . img_warning($langs->trans("WarningNoComplementaryActionDone"))], |
||
| 3688 | ]; |
||
| 3689 | print $form->formconfirm($_SERVER['PHP_SELF'], $langs->trans("ConfirmMassSubsriptionCreation"), $langs->trans("ConfirmMassSubsriptionCreationQuestion", count($toselect)), "createsubscription_confirm", $formquestion, '', 0, 200, 500, 1); |
||
| 3690 | } |
||
| 3691 | include DOL_DOCUMENT_ROOT . '/core/tpl/massactions_pre.tpl.php'; |
||
| 3692 | |||
| 3693 | if ($search_all) { |
||
| 3694 | $setupstring = ''; |
||
| 3695 | foreach ($fieldstosearchall as $key => $val) { |
||
| 3696 | $fieldstosearchall[$key] = $langs->trans($val); |
||
| 3697 | $setupstring .= $key . "=" . $val . ";"; |
||
| 3698 | } |
||
| 3699 | print '<!-- Search done like if MYOBJECT_QUICKSEARCH_ON_FIELDS = ' . $setupstring . ' -->' . "\n"; |
||
| 3700 | print '<div class="divsearchfieldfilter">' . $langs->trans("FilterOnInto", $search_all) . implode(', ', $fieldstosearchall) . '</div>' . "\n"; |
||
| 3701 | } |
||
| 3702 | |||
| 3703 | $varpage = empty($contextpage) ? $_SERVER['PHP_SELF'] : $contextpage; |
||
| 3704 | $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) : ''); // This also change content of $arrayfields |
||
| 3705 | $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); |
||
| 3706 | |||
| 3707 | $moreforfilter = ''; |
||
| 3708 | // Filter on categories |
||
| 3709 | if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { |
||
| 3710 | require_once BASE_PATH . '/categories/class/categorie.class.php'; |
||
| 3711 | $moreforfilter .= '<div class="divsearchfield">'; |
||
| 3712 | $moreforfilter .= img_picto($langs->trans('Categories'), 'category', 'class="pictofixedwidth"') . $formother->select_categories(Categorie::TYPE_MEMBER, $search_categ, 'search_categ', 1, $langs->trans("MembersCategoriesShort")); |
||
| 3713 | $moreforfilter .= '</div>'; |
||
| 3714 | } |
||
| 3715 | $parameters = [ |
||
| 3716 | 'arrayfields' => &$arrayfields, |
||
| 3717 | ]; |
||
| 3718 | $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook |
||
| 3719 | if (empty($reshook)) { |
||
| 3720 | $moreforfilter .= $hookmanager->resPrint; |
||
| 3721 | } else { |
||
| 3722 | $moreforfilter = $hookmanager->resPrint; |
||
| 3723 | } |
||
| 3724 | if (!empty($moreforfilter)) { |
||
| 3725 | print '<div class="liste_titre liste_titre_bydiv centpercent">'; |
||
| 3726 | print $moreforfilter; |
||
| 3727 | $parameters = []; |
||
| 3728 | $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook |
||
| 3729 | print $hookmanager->resPrint; |
||
| 3730 | print '</div>'; |
||
| 3731 | } |
||
| 3732 | |||
| 3733 | print '<div class="div-table-responsive">'; |
||
| 3734 | print '<table class="tagtable nobottomiftotal liste' . ($moreforfilter ? " listwithfilterbefore" : "") . '">' . "\n"; |
||
| 3735 | |||
| 3736 | // Fields title search |
||
| 3737 | // -------------------------------------------------------------------- |
||
| 3738 | print '<tr class="liste_titre_filter">'; |
||
| 3739 | |||
| 3740 | // Action column |
||
| 3741 | if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { |
||
| 3742 | print '<td class="liste_titre center maxwidthsearch">'; |
||
| 3743 | $searchpicto = $form->showFilterButtons('left'); |
||
| 3744 | print $searchpicto; |
||
| 3745 | print '</td>'; |
||
| 3746 | } |
||
| 3747 | |||
| 3748 | // Line numbering |
||
| 3749 | if (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID')) { |
||
| 3750 | print '<td class="liste_titre"> </td>'; |
||
| 3751 | } |
||
| 3752 | |||
| 3753 | // Ref |
||
| 3754 | if (!empty($arrayfields['d.ref']['checked'])) { |
||
| 3755 | print '<td class="liste_titre">'; |
||
| 3756 | print '<input type="text" class="flat maxwidth75imp" name="search_ref" value="' . dol_escape_htmltag($search_ref) . '">'; |
||
| 3757 | print '</td>'; |
||
| 3758 | } |
||
| 3759 | |||
| 3760 | // Civility |
||
| 3761 | if (!empty($arrayfields['d.civility']['checked'])) { |
||
| 3762 | print '<td class="liste_titre left">'; |
||
| 3763 | print '<input class="flat maxwidth50imp" type="text" name="search_civility" value="' . dol_escape_htmltag($search_civility) . '"></td>'; |
||
| 3764 | } |
||
| 3765 | |||
| 3766 | // First Name |
||
| 3767 | if (!empty($arrayfields['d.firstname']['checked'])) { |
||
| 3768 | print '<td class="liste_titre left">'; |
||
| 3769 | print '<input class="flat maxwidth75imp" type="text" name="search_firstname" value="' . dol_escape_htmltag($search_firstname) . '"></td>'; |
||
| 3770 | } |
||
| 3771 | |||
| 3772 | // Last Name |
||
| 3773 | if (!empty($arrayfields['d.lastname']['checked'])) { |
||
| 3774 | print '<td class="liste_titre left">'; |
||
| 3775 | print '<input class="flat maxwidth75imp" type="text" name="search_lastname" value="' . dol_escape_htmltag($search_lastname) . '"></td>'; |
||
| 3776 | } |
||
| 3777 | |||
| 3778 | // Gender |
||
| 3779 | if (!empty($arrayfields['d.gender']['checked'])) { |
||
| 3780 | print '<td class="liste_titre">'; |
||
| 3781 | $arraygender = ['man' => $langs->trans("Genderman"), 'woman' => $langs->trans("Genderwoman"), 'other' => $langs->trans("Genderother")]; |
||
| 3782 | print $form->selectarray('search_gender', $arraygender, $search_gender, 1); |
||
| 3783 | print '</td>'; |
||
| 3784 | } |
||
| 3785 | |||
| 3786 | // Company |
||
| 3787 | if (!empty($arrayfields['d.company']['checked'])) { |
||
| 3788 | print '<td class="liste_titre left">'; |
||
| 3789 | print '<input class="flat maxwidth75imp" type="text" name="search_company" value="' . dol_escape_htmltag($search_company) . '"></td>'; |
||
| 3790 | } |
||
| 3791 | |||
| 3792 | // Login |
||
| 3793 | if (!empty($arrayfields['d.login']['checked'])) { |
||
| 3794 | print '<td class="liste_titre left">'; |
||
| 3795 | print '<input class="flat maxwidth75imp" type="text" name="search_login" value="' . dol_escape_htmltag($search_login) . '"></td>'; |
||
| 3796 | } |
||
| 3797 | |||
| 3798 | // Nature |
||
| 3799 | if (!empty($arrayfields['d.morphy']['checked'])) { |
||
| 3800 | print '<td class="liste_titre center">'; |
||
| 3801 | $arraymorphy = ['mor' => $langs->trans("Moral"), 'phy' => $langs->trans("Physical")]; |
||
| 3802 | print $form->selectarray('search_morphy', $arraymorphy, $search_morphy, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100'); |
||
| 3803 | print '</td>'; |
||
| 3804 | } |
||
| 3805 | |||
| 3806 | // Member Type |
||
| 3807 | if (!empty($arrayfields['t.libelle']['checked'])) { |
||
| 3808 | print '</td>'; |
||
| 3809 | } |
||
| 3810 | if (!empty($arrayfields['t.libelle']['checked'])) { |
||
| 3811 | print '<td class="liste_titre">'; |
||
| 3812 | $listetype = $membertypestatic->liste_array(); |
||
| 3813 | // @phan-suppress-next-line PhanPluginSuspiciousParamOrder |
||
| 3814 | print $form->selectarray("search_type", $listetype, $search_type, 1, 0, 0, '', 0, 32); |
||
| 3815 | print '</td>'; |
||
| 3816 | } |
||
| 3817 | |||
| 3818 | // Address - Street |
||
| 3819 | if (!empty($arrayfields['d.address']['checked'])) { |
||
| 3820 | print '<td class="liste_titre left">'; |
||
| 3821 | print '<input class="flat maxwidth75imp" type="text" name="search_address" value="' . dol_escape_htmltag($search_address) . '"></td>'; |
||
| 3822 | } |
||
| 3823 | |||
| 3824 | // ZIP |
||
| 3825 | if (!empty($arrayfields['d.zip']['checked'])) { |
||
| 3826 | print '<td class="liste_titre left">'; |
||
| 3827 | print '<input class="flat maxwidth50imp" type="text" name="search_zip" value="' . dol_escape_htmltag($search_zip) . '"></td>'; |
||
| 3828 | } |
||
| 3829 | |||
| 3830 | // Town/City |
||
| 3831 | if (!empty($arrayfields['d.town']['checked'])) { |
||
| 3832 | print '<td class="liste_titre left">'; |
||
| 3833 | print '<input class="flat maxwidth75imp" type="text" name="search_town" value="' . dol_escape_htmltag($search_town) . '"></td>'; |
||
| 3834 | } |
||
| 3835 | |||
| 3836 | // State / County / Departement |
||
| 3837 | if (!empty($arrayfields['state.nom']['checked'])) { |
||
| 3838 | print '<td class="liste_titre">'; |
||
| 3839 | print '<input class="flat searchstring maxwidth75imp" type="text" name="search_state" value="' . dol_escape_htmltag($search_state) . '">'; |
||
| 3840 | print '</td>'; |
||
| 3841 | } |
||
| 3842 | |||
| 3843 | // Country |
||
| 3844 | if (!empty($arrayfields['country.code_iso']['checked'])) { |
||
| 3845 | print '<td class="liste_titre center">'; |
||
| 3846 | print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100'); |
||
| 3847 | print '</td>'; |
||
| 3848 | } |
||
| 3849 | |||
| 3850 | // Phone pro |
||
| 3851 | if (!empty($arrayfields['d.phone']['checked'])) { |
||
| 3852 | print '<td class="liste_titre left">'; |
||
| 3853 | print '<input class="flat maxwidth75imp" type="text" name="search_phone" value="' . dol_escape_htmltag($search_phone) . '"></td>'; |
||
| 3854 | } |
||
| 3855 | |||
| 3856 | // Phone perso |
||
| 3857 | if (!empty($arrayfields['d.phone_perso']['checked'])) { |
||
| 3858 | print '<td class="liste_titre left">'; |
||
| 3859 | print '<input class="flat maxwidth75imp" type="text" name="search_phone_perso" value="' . dol_escape_htmltag($search_phone_perso) . '"></td>'; |
||
| 3860 | } |
||
| 3861 | |||
| 3862 | // Phone mobile |
||
| 3863 | if (!empty($arrayfields['d.phone_mobile']['checked'])) { |
||
| 3864 | print '<td class="liste_titre left">'; |
||
| 3865 | print '<input class="flat maxwidth75imp" type="text" name="search_phone_mobile" value="' . dol_escape_htmltag($search_phone_mobile) . '"></td>'; |
||
| 3866 | } |
||
| 3867 | |||
| 3868 | |||
| 3869 | if (!empty($arrayfields['d.email']['checked'])) { |
||
| 3870 | print '<td class="liste_titre left">'; |
||
| 3871 | print '<input class="flat maxwidth75imp" type="text" name="search_email" value="' . dol_escape_htmltag($search_email) . '"></td>'; |
||
| 3872 | } |
||
| 3873 | |||
| 3874 | // End of subscription date |
||
| 3875 | if (!empty($arrayfields['d.datefin']['checked'])) { |
||
| 3876 | print '<td class="liste_titre center">'; |
||
| 3877 | //$selectarray = array('-1'=>'', 'withoutsubscription'=>$langs->trans("WithoutSubscription"), 'uptodate'=>$langs->trans("UpToDate"), 'outofdate'=>$langs->trans("OutOfDate")); |
||
| 3878 | $selectarray = ['-1' => '', 'waitingsubscription' => $langs->trans("WaitingSubscription"), 'uptodate' => $langs->trans("UpToDate"), 'outofdate' => $langs->trans("OutOfDate")]; |
||
| 3879 | print $form->selectarray('search_filter', $selectarray, $search_filter); |
||
| 3880 | print '</td>'; |
||
| 3881 | } |
||
| 3882 | |||
| 3883 | // Extra fields |
||
| 3884 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_input.tpl.php'; |
||
| 3885 | |||
| 3886 | // Fields from hook |
||
| 3887 | $parameters = ['arrayfields' => $arrayfields]; |
||
| 3888 | $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook |
||
| 3889 | print $hookmanager->resPrint; |
||
| 3890 | |||
| 3891 | // Date creation |
||
| 3892 | if (!empty($arrayfields['d.datec']['checked'])) { |
||
| 3893 | print '<td class="liste_titre">'; |
||
| 3894 | print '<div class="nowrapfordate">'; |
||
| 3895 | print $form->selectDate($search_datec_start ? $search_datec_start : -1, 'search_datec_start_', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); |
||
| 3896 | print '</div>'; |
||
| 3897 | print '<div class="nowrapfordate">'; |
||
| 3898 | print $form->selectDate($search_datec_end ? $search_datec_end : -1, 'search_datec_end_', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); |
||
| 3899 | print '</div>'; |
||
| 3900 | print '</td>'; |
||
| 3901 | } |
||
| 3902 | |||
| 3903 | // Birthday |
||
| 3904 | if (!empty($arrayfields['d.birth']['checked'])) { |
||
| 3905 | print '<td class="liste_titre">'; |
||
| 3906 | print '</td>'; |
||
| 3907 | } |
||
| 3908 | |||
| 3909 | // Date modification |
||
| 3910 | if (!empty($arrayfields['d.tms']['checked'])) { |
||
| 3911 | print '<td class="liste_titre">'; |
||
| 3912 | print '<div class="nowrapfordate">'; |
||
| 3913 | print $form->selectDate($search_datem_start ? $search_datem_start : -1, 'search_datem_start_', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From')); |
||
| 3914 | print '</div>'; |
||
| 3915 | print '<div class="nowrapfordate">'; |
||
| 3916 | print $form->selectDate($search_datem_end ? $search_datem_end : -1, 'search_datem_end_', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to')); |
||
| 3917 | print '</div>'; |
||
| 3918 | print '</td>'; |
||
| 3919 | } |
||
| 3920 | |||
| 3921 | // Import Key |
||
| 3922 | if (!empty($arrayfields['d.import_key']['checked'])) { |
||
| 3923 | print '<td class="liste_titre center">'; |
||
| 3924 | print '<input class="flat searchstring maxwidth50" type="text" name="search_import_key" value="' . dol_escape_htmltag($search_import_key) . '">'; |
||
| 3925 | print '</td>'; |
||
| 3926 | } |
||
| 3927 | |||
| 3928 | // Status |
||
| 3929 | if (!empty($arrayfields['d.statut']['checked'])) { |
||
| 3930 | print '<td class="liste_titre center parentonrightofpage">'; |
||
| 3931 | $liststatus = [ |
||
| 3932 | Adherent::STATUS_DRAFT => $langs->trans("Draft"), |
||
| 3933 | Adherent::STATUS_VALIDATED => $langs->trans("Validated"), |
||
| 3934 | Adherent::STATUS_RESILIATED => $langs->trans("MemberStatusResiliatedShort"), |
||
| 3935 | Adherent::STATUS_EXCLUDED => $langs->trans("MemberStatusExcludedShort"), |
||
| 3936 | ]; |
||
| 3937 | // @phan-suppress-next-line PhanPluginSuspiciousParamOrder |
||
| 3938 | print $form->selectarray('search_status', $liststatus, $search_status, -3, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage'); |
||
| 3939 | print '</td>'; |
||
| 3940 | } |
||
| 3941 | |||
| 3942 | // Action column |
||
| 3943 | if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { |
||
| 3944 | print '<td class="liste_titre center maxwidthsearch">'; |
||
| 3945 | $searchpicto = $form->showFilterButtons(); |
||
| 3946 | print $searchpicto; |
||
| 3947 | print '</td>'; |
||
| 3948 | } |
||
| 3949 | print '</tr>' . "\n"; |
||
| 3950 | |||
| 3951 | $totalarray = []; |
||
| 3952 | $totalarray['nbfield'] = 0; |
||
| 3953 | |||
| 3954 | // Fields title label |
||
| 3955 | // -------------------------------------------------------------------- |
||
| 3956 | print '<tr class="liste_titre">'; |
||
| 3957 | // Action column |
||
| 3958 | if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { |
||
| 3959 | print_liste_field_titre($selectedfields, $_SERVER['PHP_SELF'], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch actioncolumn '); |
||
| 3960 | $totalarray['nbfield']++; |
||
| 3961 | } |
||
| 3962 | if (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID')) { |
||
| 3963 | print_liste_field_titre("ID", $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'center '); |
||
| 3964 | $totalarray['nbfield']++; |
||
| 3965 | } |
||
| 3966 | if (!empty($arrayfields['d.ref']['checked'])) { |
||
| 3967 | print_liste_field_titre($arrayfields['d.ref']['label'], $_SERVER['PHP_SELF'], 'd.ref', '', $param, '', $sortfield, $sortorder); |
||
| 3968 | $totalarray['nbfield']++; |
||
| 3969 | } |
||
| 3970 | if (!empty($arrayfields['d.civility']['checked'])) { |
||
| 3971 | print_liste_field_titre($arrayfields['d.civility']['label'], $_SERVER['PHP_SELF'], 'd.civility', '', $param, '', $sortfield, $sortorder); |
||
| 3972 | $totalarray['nbfield']++; |
||
| 3973 | } |
||
| 3974 | if (!empty($arrayfields['d.firstname']['checked'])) { |
||
| 3975 | print_liste_field_titre($arrayfields['d.firstname']['label'], $_SERVER['PHP_SELF'], 'd.firstname', '', $param, '', $sortfield, $sortorder); |
||
| 3976 | $totalarray['nbfield']++; |
||
| 3977 | } |
||
| 3978 | if (!empty($arrayfields['d.lastname']['checked'])) { |
||
| 3979 | print_liste_field_titre($arrayfields['d.lastname']['label'], $_SERVER['PHP_SELF'], 'd.lastname', '', $param, '', $sortfield, $sortorder); |
||
| 3980 | $totalarray['nbfield']++; |
||
| 3981 | } |
||
| 3982 | if (!empty($arrayfields['d.gender']['checked'])) { |
||
| 3983 | print_liste_field_titre($arrayfields['d.gender']['label'], $_SERVER['PHP_SELF'], 'd.gender', $param, "", "", $sortfield, $sortorder); |
||
| 3984 | $totalarray['nbfield']++; |
||
| 3985 | } |
||
| 3986 | if (!empty($arrayfields['d.company']['checked'])) { |
||
| 3987 | print_liste_field_titre($arrayfields['d.company']['label'], $_SERVER['PHP_SELF'], 'companyname', '', $param, '', $sortfield, $sortorder); |
||
| 3988 | $totalarray['nbfield']++; |
||
| 3989 | } |
||
| 3990 | if (!empty($arrayfields['d.login']['checked'])) { |
||
| 3991 | print_liste_field_titre($arrayfields['d.login']['label'], $_SERVER['PHP_SELF'], 'd.login', '', $param, '', $sortfield, $sortorder); |
||
| 3992 | $totalarray['nbfield']++; |
||
| 3993 | } |
||
| 3994 | if (!empty($arrayfields['d.morphy']['checked'])) { |
||
| 3995 | print_liste_field_titre($arrayfields['d.morphy']['label'], $_SERVER['PHP_SELF'], 'd.morphy', '', $param, '', $sortfield, $sortorder); |
||
| 3996 | $totalarray['nbfield']++; |
||
| 3997 | } |
||
| 3998 | if (!empty($arrayfields['t.libelle']['checked'])) { |
||
| 3999 | print_liste_field_titre($arrayfields['t.libelle']['label'], $_SERVER['PHP_SELF'], 't.libelle', '', $param, '', $sortfield, $sortorder); |
||
| 4000 | $totalarray['nbfield']++; |
||
| 4001 | } |
||
| 4002 | if (!empty($arrayfields['d.address']['checked'])) { |
||
| 4003 | print_liste_field_titre($arrayfields['d.address']['label'], $_SERVER['PHP_SELF'], 'd.address', '', $param, '', $sortfield, $sortorder); |
||
| 4004 | $totalarray['nbfield']++; |
||
| 4005 | } |
||
| 4006 | if (!empty($arrayfields['d.zip']['checked'])) { |
||
| 4007 | print_liste_field_titre($arrayfields['d.zip']['label'], $_SERVER['PHP_SELF'], 'd.zip', '', $param, '', $sortfield, $sortorder); |
||
| 4008 | $totalarray['nbfield']++; |
||
| 4009 | } |
||
| 4010 | if (!empty($arrayfields['d.town']['checked'])) { |
||
| 4011 | print_liste_field_titre($arrayfields['d.town']['label'], $_SERVER['PHP_SELF'], 'd.town', '', $param, '', $sortfield, $sortorder); |
||
| 4012 | $totalarray['nbfield']++; |
||
| 4013 | } |
||
| 4014 | if (!empty($arrayfields['state.nom']['checked'])) { |
||
| 4015 | print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER['PHP_SELF'], "state.nom", "", $param, '', $sortfield, $sortorder); |
||
| 4016 | $totalarray['nbfield']++; |
||
| 4017 | } |
||
| 4018 | if (!empty($arrayfields['country.code_iso']['checked'])) { |
||
| 4019 | print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER['PHP_SELF'], "country.code_iso", "", $param, '', $sortfield, $sortorder, 'center '); |
||
| 4020 | $totalarray['nbfield']++; |
||
| 4021 | } |
||
| 4022 | if (!empty($arrayfields['d.phone']['checked'])) { |
||
| 4023 | print_liste_field_titre($arrayfields['d.phone']['label'], $_SERVER['PHP_SELF'], 'd.phone', '', $param, '', $sortfield, $sortorder); |
||
| 4024 | $totalarray['nbfield']++; |
||
| 4025 | } |
||
| 4026 | if (!empty($arrayfields['d.phone_perso']['checked'])) { |
||
| 4027 | print_liste_field_titre($arrayfields['d.phone_perso']['label'], $_SERVER['PHP_SELF'], 'd.phone_perso', '', $param, '', $sortfield, $sortorder); |
||
| 4028 | $totalarray['nbfield']++; |
||
| 4029 | } |
||
| 4030 | if (!empty($arrayfields['d.phone_mobile']['checked'])) { |
||
| 4031 | print_liste_field_titre($arrayfields['d.phone_mobile']['label'], $_SERVER['PHP_SELF'], 'd.phone_mobile', '', $param, '', $sortfield, $sortorder); |
||
| 4032 | $totalarray['nbfield']++; |
||
| 4033 | } |
||
| 4034 | if (!empty($arrayfields['d.email']['checked'])) { |
||
| 4035 | print_liste_field_titre($arrayfields['d.email']['label'], $_SERVER['PHP_SELF'], 'd.email', '', $param, '', $sortfield, $sortorder); |
||
| 4036 | $totalarray['nbfield']++; |
||
| 4037 | } |
||
| 4038 | if (!empty($arrayfields['d.datefin']['checked'])) { |
||
| 4039 | print_liste_field_titre($arrayfields['d.datefin']['label'], $_SERVER['PHP_SELF'], 'd.datefin,t.subscription', '', $param, '', $sortfield, $sortorder, 'center '); |
||
| 4040 | $totalarray['nbfield']++; |
||
| 4041 | } |
||
| 4042 | // Extra fields |
||
| 4043 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_search_title.tpl.php'; |
||
| 4044 | |||
| 4045 | // Hook fields |
||
| 4046 | $parameters = ['arrayfields' => $arrayfields, 'totalarray' => &$totalarray, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder]; |
||
| 4047 | $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook |
||
| 4048 | print $hookmanager->resPrint; |
||
| 4049 | |||
| 4050 | if (!empty($arrayfields['d.datec']['checked'])) { |
||
| 4051 | print_liste_field_titre($arrayfields['d.datec']['label'], $_SERVER['PHP_SELF'], "d.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap '); |
||
| 4052 | $totalarray['nbfield']++; |
||
| 4053 | } |
||
| 4054 | if (!empty($arrayfields['d.birth']['checked'])) { |
||
| 4055 | print_liste_field_titre($arrayfields['d.birth']['label'], $_SERVER['PHP_SELF'], "d.birth", "", $param, '', $sortfield, $sortorder, 'center nowrap '); |
||
| 4056 | $totalarray['nbfield']++; |
||
| 4057 | } |
||
| 4058 | if (!empty($arrayfields['d.tms']['checked'])) { |
||
| 4059 | print_liste_field_titre($arrayfields['d.tms']['label'], $_SERVER['PHP_SELF'], "d.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap '); |
||
| 4060 | $totalarray['nbfield']++; |
||
| 4061 | } |
||
| 4062 | if (!empty($arrayfields['d.import_key']['checked'])) { |
||
| 4063 | print_liste_field_titre($arrayfields['d.import_key']['label'], $_SERVER['PHP_SELF'], "d.import_key", "", $param, '', $sortfield, $sortorder, 'center '); |
||
| 4064 | $totalarray['nbfield']++; |
||
| 4065 | } |
||
| 4066 | if (!empty($arrayfields['d.statut']['checked'])) { |
||
| 4067 | print_liste_field_titre($arrayfields['d.statut']['label'], $_SERVER['PHP_SELF'], "d.statut,t.subscription,d.datefin", "", $param, '', $sortfield, $sortorder, 'center '); |
||
| 4068 | $totalarray['nbfield']++; |
||
| 4069 | } |
||
| 4070 | if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { |
||
| 4071 | print_liste_field_titre($selectedfields, $_SERVER['PHP_SELF'], "", '', '', '', $sortfield, $sortorder, 'maxwidthsearch center '); |
||
| 4072 | $totalarray['nbfield']++; |
||
| 4073 | } |
||
| 4074 | print "</tr>\n"; |
||
| 4075 | |||
| 4076 | // Loop on record |
||
| 4077 | // -------------------------------------------------------------------- |
||
| 4078 | $i = 0; |
||
| 4079 | $savnbfield = $totalarray['nbfield']; |
||
| 4080 | $totalarray = []; |
||
| 4081 | $totalarray['nbfield'] = 0; |
||
| 4082 | $imaxinloop = ($limit ? min($num, $limit) : $num); |
||
| 4083 | while ($i < $imaxinloop) { |
||
| 4084 | $obj = $db->fetch_object($resql); |
||
| 4085 | if (empty($obj)) { |
||
| 4086 | break; // Should not happen |
||
| 4087 | } |
||
| 4088 | |||
| 4089 | $datefin = $db->jdate($obj->datefin); |
||
| 4090 | |||
| 4091 | $memberstatic->id = $obj->rowid; |
||
| 4092 | $memberstatic->ref = $obj->ref; |
||
| 4093 | $memberstatic->civility_id = $obj->civility; |
||
| 4094 | $memberstatic->login = $obj->login; |
||
| 4095 | $memberstatic->lastname = $obj->lastname; |
||
| 4096 | $memberstatic->firstname = $obj->firstname; |
||
| 4097 | $memberstatic->gender = $obj->gender; |
||
| 4098 | $memberstatic->statut = $obj->status; |
||
| 4099 | $memberstatic->status = $obj->status; |
||
| 4100 | $memberstatic->datefin = $datefin; |
||
| 4101 | $memberstatic->socid = $obj->fk_soc; |
||
| 4102 | $memberstatic->photo = $obj->photo; |
||
| 4103 | $memberstatic->email = $obj->email; |
||
| 4104 | $memberstatic->morphy = $obj->morphy; |
||
| 4105 | $memberstatic->note_public = $obj->note_public; |
||
| 4106 | $memberstatic->note_private = $obj->note_private; |
||
| 4107 | $memberstatic->need_subscription = $obj->subscription; |
||
| 4108 | |||
| 4109 | if (!empty($obj->fk_soc)) { |
||
| 4110 | $memberstatic->fetch_thirdparty(); |
||
| 4111 | if ($memberstatic->thirdparty->id > 0) { |
||
| 4112 | $companyname = $memberstatic->thirdparty->name; |
||
| 4113 | $companynametoshow = $memberstatic->thirdparty->getNomUrl(1); |
||
| 4114 | } |
||
| 4115 | } else { |
||
| 4116 | $companyname = $obj->company; |
||
| 4117 | $companynametoshow = $obj->company; |
||
| 4118 | } |
||
| 4119 | $memberstatic->company = $companyname; |
||
| 4120 | |||
| 4121 | $object = $memberstatic; |
||
| 4122 | |||
| 4123 | if ($mode == 'kanban') { |
||
| 4124 | if ($i == 0) { |
||
| 4125 | print '<tr class="trkanban"><td colspan="' . $savnbfield . '">'; |
||
| 4126 | print '<div class="box-flex-container kanban">'; |
||
| 4127 | } |
||
| 4128 | $membertypestatic->id = $obj->type_id; |
||
| 4129 | $membertypestatic->label = $obj->type; |
||
| 4130 | $memberstatic->type = $membertypestatic->label; |
||
| 4131 | $memberstatic->photo = $obj->photo; |
||
| 4132 | // Output Kanban |
||
| 4133 | print $memberstatic->getKanbanView('', ['selected' => in_array($object->id, $arrayofselected)]); |
||
| 4134 | if ($i == (min($num, $limit) - 1)) { |
||
| 4135 | print '</div>'; |
||
| 4136 | print '</td></tr>'; |
||
| 4137 | } |
||
| 4138 | } else { |
||
| 4139 | // Show line of result |
||
| 4140 | $j = 0; |
||
| 4141 | print '<tr data-rowid="' . $object->id . '" class="oddeven">'; |
||
| 4142 | |||
| 4143 | // Action column |
||
| 4144 | if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { |
||
| 4145 | print '<td class="nowrap center">'; |
||
| 4146 | if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined |
||
| 4147 | $selected = 0; |
||
| 4148 | if (in_array($obj->rowid, $arrayofselected)) { |
||
| 4149 | $selected = 1; |
||
| 4150 | } |
||
| 4151 | print '<input id="cb' . $obj->rowid . '" class="flat checkforselect" type="checkbox" name="toselect[]" value="' . $obj->rowid . '"' . ($selected ? ' checked="checked"' : '') . '>'; |
||
| 4152 | } |
||
| 4153 | print '</td>'; |
||
| 4154 | if (!$i) { |
||
| 4155 | $totalarray['nbfield']++; |
||
| 4156 | } |
||
| 4157 | } |
||
| 4158 | // Technical ID |
||
| 4159 | if (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID')) { |
||
| 4160 | print '<td class="center" data-key="id">' . $obj->rowid . '</td>'; |
||
| 4161 | if (!$i) { |
||
| 4162 | $totalarray['nbfield']++; |
||
| 4163 | } |
||
| 4164 | } |
||
| 4165 | // Ref |
||
| 4166 | if (!empty($arrayfields['d.ref']['checked'])) { |
||
| 4167 | print "<td>"; |
||
| 4168 | print $memberstatic->getNomUrl(-1, 0, 'card', 'ref', '', -1, 0, 1); |
||
| 4169 | print "</td>\n"; |
||
| 4170 | if (!$i) { |
||
| 4171 | $totalarray['nbfield']++; |
||
| 4172 | } |
||
| 4173 | } |
||
| 4174 | // Civility |
||
| 4175 | if (!empty($arrayfields['d.civility']['checked'])) { |
||
| 4176 | print "<td>"; |
||
| 4177 | print $obj->civility; |
||
| 4178 | print "</td>\n"; |
||
| 4179 | if (!$i) { |
||
| 4180 | $totalarray['nbfield']++; |
||
| 4181 | } |
||
| 4182 | } |
||
| 4183 | // Firstname |
||
| 4184 | if (!empty($arrayfields['d.firstname']['checked'])) { |
||
| 4185 | print '<td class="tdoverflowmax150" title="' . dol_escape_htmltag($obj->firstname) . '">'; |
||
| 4186 | print $memberstatic->getNomUrl(0, 0, 'card', 'firstname'); |
||
| 4187 | //print $obj->firstname; |
||
| 4188 | print "</td>\n"; |
||
| 4189 | if (!$i) { |
||
| 4190 | $totalarray['nbfield']++; |
||
| 4191 | } |
||
| 4192 | } |
||
| 4193 | // Lastname |
||
| 4194 | if (!empty($arrayfields['d.lastname']['checked'])) { |
||
| 4195 | print '<td class="tdoverflowmax150" title="' . dol_escape_htmltag($obj->lastname) . '">'; |
||
| 4196 | print $memberstatic->getNomUrl(0, 0, 'card', 'lastname'); |
||
| 4197 | //print $obj->lastname; |
||
| 4198 | print "</td>\n"; |
||
| 4199 | if (!$i) { |
||
| 4200 | $totalarray['nbfield']++; |
||
| 4201 | } |
||
| 4202 | } |
||
| 4203 | // Gender |
||
| 4204 | if (!empty($arrayfields['d.gender']['checked'])) { |
||
| 4205 | print '<td>'; |
||
| 4206 | if ($obj->gender) { |
||
| 4207 | print $langs->trans("Gender" . $obj->gender); |
||
| 4208 | } |
||
| 4209 | print '</td>'; |
||
| 4210 | if (!$i) { |
||
| 4211 | $totalarray['nbfield']++; |
||
| 4212 | } |
||
| 4213 | } |
||
| 4214 | // Company |
||
| 4215 | if (!empty($arrayfields['d.company']['checked'])) { |
||
| 4216 | print '<td class="tdoverflowmax150" title="' . dol_escape_htmltag($companyname) . '">'; |
||
| 4217 | print $companynametoshow; |
||
| 4218 | print "</td>\n"; |
||
| 4219 | } |
||
| 4220 | // Login |
||
| 4221 | if (!empty($arrayfields['d.login']['checked'])) { |
||
| 4222 | print '<td class="tdoverflowmax150" title="' . dol_escape_htmltag($obj->login) . '">' . $obj->login . "</td>\n"; |
||
| 4223 | if (!$i) { |
||
| 4224 | $totalarray['nbfield']++; |
||
| 4225 | } |
||
| 4226 | } |
||
| 4227 | // Nature (Moral/Physical) |
||
| 4228 | if (!empty($arrayfields['d.morphy']['checked'])) { |
||
| 4229 | print '<td class="center">'; |
||
| 4230 | print $memberstatic->getmorphylib('', 2); |
||
| 4231 | print "</td>\n"; |
||
| 4232 | if (!$i) { |
||
| 4233 | $totalarray['nbfield']++; |
||
| 4234 | } |
||
| 4235 | } |
||
| 4236 | // Type label |
||
| 4237 | if (!empty($arrayfields['t.libelle']['checked'])) { |
||
| 4238 | $membertypestatic->id = $obj->type_id; |
||
| 4239 | $membertypestatic->label = $obj->type; |
||
| 4240 | print '<td class="nowraponall">'; |
||
| 4241 | print $membertypestatic->getNomUrl(1, 32); |
||
| 4242 | print '</td>'; |
||
| 4243 | if (!$i) { |
||
| 4244 | $totalarray['nbfield']++; |
||
| 4245 | } |
||
| 4246 | } |
||
| 4247 | // Address |
||
| 4248 | if (!empty($arrayfields['d.address']['checked'])) { |
||
| 4249 | print '<td class="nocellnopadd tdoverflowmax200" title="' . dol_escape_htmltag($obj->address) . '">'; |
||
| 4250 | print $obj->address; |
||
| 4251 | print '</td>'; |
||
| 4252 | if (!$i) { |
||
| 4253 | $totalarray['nbfield']++; |
||
| 4254 | } |
||
| 4255 | } |
||
| 4256 | // Zip |
||
| 4257 | if (!empty($arrayfields['d.zip']['checked'])) { |
||
| 4258 | print '<td class="nocellnopadd">'; |
||
| 4259 | print $obj->zip; |
||
| 4260 | print '</td>'; |
||
| 4261 | if (!$i) { |
||
| 4262 | $totalarray['nbfield']++; |
||
| 4263 | } |
||
| 4264 | } |
||
| 4265 | // Town |
||
| 4266 | if (!empty($arrayfields['d.town']['checked'])) { |
||
| 4267 | print '<td class="nocellnopadd">'; |
||
| 4268 | print $obj->town; |
||
| 4269 | print '</td>'; |
||
| 4270 | if (!$i) { |
||
| 4271 | $totalarray['nbfield']++; |
||
| 4272 | } |
||
| 4273 | } |
||
| 4274 | // State / County / Departement |
||
| 4275 | if (!empty($arrayfields['state.nom']['checked'])) { |
||
| 4276 | print "<td>" . $obj->state_name . "</td>\n"; |
||
| 4277 | if (!$i) { |
||
| 4278 | $totalarray['nbfield']++; |
||
| 4279 | } |
||
| 4280 | } |
||
| 4281 | // Country |
||
| 4282 | if (!empty($arrayfields['country.code_iso']['checked'])) { |
||
| 4283 | $tmparray = getCountry($obj->country, 'all'); |
||
| 4284 | print '<td class="center tdoverflowmax100" title="' . dol_escape_htmltag($tmparray['label']) . '">'; |
||
| 4285 | print dol_escape_htmltag($tmparray['label']); |
||
| 4286 | print '</td>'; |
||
| 4287 | if (!$i) { |
||
| 4288 | $totalarray['nbfield']++; |
||
| 4289 | } |
||
| 4290 | } |
||
| 4291 | // Phone pro |
||
| 4292 | if (!empty($arrayfields['d.phone']['checked'])) { |
||
| 4293 | print '<td class="nocellnopadd">'; |
||
| 4294 | print $obj->phone; |
||
| 4295 | print '</td>'; |
||
| 4296 | if (!$i) { |
||
| 4297 | $totalarray['nbfield']++; |
||
| 4298 | } |
||
| 4299 | } |
||
| 4300 | // Phone perso |
||
| 4301 | if (!empty($arrayfields['d.phone_perso']['checked'])) { |
||
| 4302 | print '<td class="nocellnopadd">'; |
||
| 4303 | print $obj->phone_perso; |
||
| 4304 | print '</td>'; |
||
| 4305 | if (!$i) { |
||
| 4306 | $totalarray['nbfield']++; |
||
| 4307 | } |
||
| 4308 | } |
||
| 4309 | // Phone mobile |
||
| 4310 | if (!empty($arrayfields['d.phone_mobile']['checked'])) { |
||
| 4311 | print '<td class="nocellnopadd">'; |
||
| 4312 | print $obj->phone_mobile; |
||
| 4313 | print '</td>'; |
||
| 4314 | if (!$i) { |
||
| 4315 | $totalarray['nbfield']++; |
||
| 4316 | } |
||
| 4317 | } |
||
| 4318 | |||
| 4319 | if (!empty($arrayfields['d.email']['checked'])) { |
||
| 4320 | print '<td class="tdoverflowmax150" title="' . dol_escape_htmltag($obj->email) . '">'; |
||
| 4321 | print dol_print_email($obj->email, 0, 0, 1, 64, 1, 1); |
||
| 4322 | print "</td>\n"; |
||
| 4323 | if (!$i) { |
||
| 4324 | $totalarray['nbfield']++; |
||
| 4325 | } |
||
| 4326 | } |
||
| 4327 | // End of subscription date |
||
| 4328 | $datefin = $db->jdate($obj->datefin); |
||
| 4329 | if (!empty($arrayfields['d.datefin']['checked'])) { |
||
| 4330 | print '<td class="nowraponall center">'; |
||
| 4331 | if ($datefin) { |
||
| 4332 | print dol_print_date($datefin, 'day'); |
||
| 4333 | if ($memberstatic->hasDelay()) { |
||
| 4334 | $textlate = ' (' . $langs->trans("DateReference") . ' > ' . $langs->trans("DateToday") . ' ' . (ceil($conf->adherent->subscription->warning_delay / 60 / 60 / 24) >= 0 ? '+' : '') . ceil($conf->adherent->subscription->warning_delay / 60 / 60 / 24) . ' ' . $langs->trans("days") . ')'; |
||
| 4335 | print " " . img_warning($langs->trans("SubscriptionLate") . $textlate); |
||
| 4336 | } |
||
| 4337 | } else { |
||
| 4338 | if (!empty($obj->subscription)) { |
||
| 4339 | print '<span class="opacitymedium">' . $langs->trans("SubscriptionNotReceived") . '</span>'; |
||
| 4340 | if ($obj->status > 0) { |
||
| 4341 | print " " . img_warning(); |
||
| 4342 | } |
||
| 4343 | } else { |
||
| 4344 | print ' '; |
||
| 4345 | } |
||
| 4346 | } |
||
| 4347 | print '</td>'; |
||
| 4348 | if (!$i) { |
||
| 4349 | $totalarray['nbfield']++; |
||
| 4350 | } |
||
| 4351 | } |
||
| 4352 | // Extra fields |
||
| 4353 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_list_print_fields.tpl.php'; |
||
| 4354 | // Fields from hook |
||
| 4355 | $parameters = ['arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray]; |
||
| 4356 | $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook |
||
| 4357 | print $hookmanager->resPrint; |
||
| 4358 | // Date creation |
||
| 4359 | if (!empty($arrayfields['d.datec']['checked'])) { |
||
| 4360 | print '<td class="nowrap center">'; |
||
| 4361 | print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser'); |
||
| 4362 | print '</td>'; |
||
| 4363 | if (!$i) { |
||
| 4364 | $totalarray['nbfield']++; |
||
| 4365 | } |
||
| 4366 | } |
||
| 4367 | // Birth |
||
| 4368 | if (!empty($arrayfields['d.birth']['checked'])) { |
||
| 4369 | print '<td class="nowrap center">'; |
||
| 4370 | print dol_print_date($db->jdate($obj->birth), 'day', 'tzuser'); |
||
| 4371 | print '</td>'; |
||
| 4372 | if (!$i) { |
||
| 4373 | $totalarray['nbfield']++; |
||
| 4374 | } |
||
| 4375 | } |
||
| 4376 | // Date modification |
||
| 4377 | if (!empty($arrayfields['d.tms']['checked'])) { |
||
| 4378 | print '<td class="nowrap center">'; |
||
| 4379 | print dol_print_date($db->jdate($obj->date_modification), 'dayhour', 'tzuser'); |
||
| 4380 | print '</td>'; |
||
| 4381 | if (!$i) { |
||
| 4382 | $totalarray['nbfield']++; |
||
| 4383 | } |
||
| 4384 | } |
||
| 4385 | // Import key |
||
| 4386 | if (!empty($arrayfields['d.import_key']['checked'])) { |
||
| 4387 | print '<td class="tdoverflowmax100 center" title="' . dol_escape_htmltag($obj->import_key) . '">'; |
||
| 4388 | print dol_escape_htmltag($obj->import_key); |
||
| 4389 | print "</td>\n"; |
||
| 4390 | if (!$i) { |
||
| 4391 | $totalarray['nbfield']++; |
||
| 4392 | } |
||
| 4393 | } |
||
| 4394 | // Status |
||
| 4395 | if (!empty($arrayfields['d.statut']['checked'])) { |
||
| 4396 | print '<td class="nowrap center">'; |
||
| 4397 | print $memberstatic->LibStatut($obj->status, $obj->subscription, $datefin, 5); |
||
| 4398 | print '</td>'; |
||
| 4399 | if (!$i) { |
||
| 4400 | $totalarray['nbfield']++; |
||
| 4401 | } |
||
| 4402 | } |
||
| 4403 | // Action column |
||
| 4404 | if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { |
||
| 4405 | print '<td class="center">'; |
||
| 4406 | if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined |
||
| 4407 | $selected = 0; |
||
| 4408 | if (in_array($obj->rowid, $arrayofselected)) { |
||
| 4409 | $selected = 1; |
||
| 4410 | } |
||
| 4411 | print '<input id="cb' . $obj->rowid . '" class="flat checkforselect" type="checkbox" name="toselect[]" value="' . $obj->rowid . '"' . ($selected ? ' checked="checked"' : '') . '>'; |
||
| 4412 | } |
||
| 4413 | print '</td>'; |
||
| 4414 | if (!$i) { |
||
| 4415 | $totalarray['nbfield']++; |
||
| 4416 | } |
||
| 4417 | } |
||
| 4418 | |||
| 4419 | print '</tr>' . "\n"; |
||
| 4420 | } |
||
| 4421 | $i++; |
||
| 4422 | } |
||
| 4423 | |||
| 4424 | // Show total line |
||
| 4425 | include DOL_DOCUMENT_ROOT . '/core/tpl/list_print_total.tpl.php'; |
||
| 4426 | |||
| 4427 | |||
| 4428 | // If no record found |
||
| 4429 | if ($num == 0) { |
||
| 4430 | $colspan = 1; |
||
| 4431 | foreach ($arrayfields as $key => $val) { |
||
| 4432 | if (!empty($val['checked'])) { |
||
| 4433 | $colspan++; |
||
| 4434 | } |
||
| 4435 | } |
||
| 4436 | print '<tr><td colspan="' . $colspan . '"><span class="opacitymedium">' . $langs->trans("NoRecordFound") . '</span></td></tr>'; |
||
| 4437 | } |
||
| 4438 | |||
| 4439 | $db->free($resql); |
||
| 4440 | |||
| 4441 | $parameters = ['arrayfields' => $arrayfields, 'sql' => $sql]; |
||
| 4442 | $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook |
||
| 4443 | print $hookmanager->resPrint; |
||
| 4444 | |||
| 4445 | print '</table>' . "\n"; |
||
| 4446 | print '</div>' . "\n"; |
||
| 4447 | |||
| 4448 | print '</form>' . "\n"; |
||
| 4449 | |||
| 4450 | if (in_array('builddoc', array_keys($arrayofmassactions)) && ($nbtotalofrecords === '' || $nbtotalofrecords)) { |
||
| 4451 | $hidegeneratedfilelistifempty = 1; |
||
| 4452 | if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) { |
||
| 4453 | $hidegeneratedfilelistifempty = 0; |
||
| 4454 | } |
||
| 4455 | |||
| 4456 | require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php'; |
||
| 4457 | $formfile = new FormFile($db); |
||
| 4458 | |||
| 4459 | // Show list of available documents |
||
| 4460 | $urlsource = $_SERVER['PHP_SELF'] . '?sortfield=' . $sortfield . '&sortorder=' . $sortorder; |
||
| 4461 | $urlsource .= str_replace('&', '&', $param); |
||
| 4462 | |||
| 4463 | $filedir = $diroutputmassaction; |
||
| 4464 | $genallowed = $permissiontoread; |
||
| 4465 | $delallowed = $permissiontoadd; |
||
| 4466 | |||
| 4467 | print $formfile->showdocuments('massfilesarea_' . $object->module, '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty); |
||
| 4468 | } |
||
| 4469 | |||
| 4470 | // End of page |
||
| 4471 | llxFooter(); |
||
| 4472 | $db->close(); |
||
| 4473 | } |
||
| 4474 | |||
| 4475 | /** |
||
| 4476 | * \file htdocs/adherents/note.php |
||
| 4477 | * \ingroup member |
||
| 4478 | * \brief Tab for note of a member |
||
| 4479 | */ |
||
| 4480 | public function note() |
||
| 4481 | { |
||
| 4482 | global $conf; |
||
| 4483 | global $db; |
||
| 4484 | global $user; |
||
| 4485 | global $hookmanager; |
||
| 4486 | global $user; |
||
| 4487 | global $menumanager; |
||
| 4488 | global $langs; |
||
| 4489 | |||
| 4490 | // Load translation files required by the page |
||
| 4491 | $langs->loadLangs(array("companies", "members", "bills")); |
||
| 4492 | |||
| 4493 | |||
| 4494 | // Get parameters |
||
| 4495 | $action = GETPOST('action', 'aZ09'); |
||
| 4496 | $id = GETPOSTINT('id'); |
||
| 4497 | $ref = GETPOST('ref', 'alphanohtml'); |
||
| 4498 | |||
| 4499 | |||
| 4500 | // Initialize objects |
||
| 4501 | $object = new Adherent($db); |
||
| 4502 | |||
| 4503 | $result = $object->fetch($id); |
||
| 4504 | if ($result > 0) { |
||
| 4505 | $adht = new AdherentType($db); |
||
| 4506 | $result = $adht->fetch($object->typeid); |
||
| 4507 | } |
||
| 4508 | |||
| 4509 | |||
| 4510 | $permissionnote = $user->hasRight('adherent', 'creer'); // Used by the include of actions_setnotes.inc.php |
||
| 4511 | |||
| 4512 | // Fetch object |
||
| 4513 | if ($id > 0 || !empty($ref)) { |
||
| 4514 | // Load member |
||
| 4515 | $result = $object->fetch($id, $ref); |
||
| 4516 | |||
| 4517 | // Define variables to know what current user can do on users |
||
| 4518 | $canadduser = ($user->admin || $user->hasRight('user', 'user', 'creer')); |
||
| 4519 | // Define variables to know what current user can do on properties of user linked to edited member |
||
| 4520 | if ($object->user_id) { |
||
| 4521 | // $User is the user who edits, $object->user_id is the id of the related user in the edited member |
||
| 4522 | $caneditfielduser = ((($user->id == $object->user_id) && $user->hasRight('user', 'self', 'creer')) |
||
| 4523 | || (($user->id != $object->user_id) && $user->hasRight('user', 'user', 'creer'))); |
||
| 4524 | $caneditpassworduser = ((($user->id == $object->user_id) && $user->hasRight('user', 'self', 'password')) |
||
| 4525 | || (($user->id != $object->user_id) && $user->hasRight('user', 'user', 'password'))); |
||
| 4526 | } |
||
| 4527 | } |
||
| 4528 | |||
| 4529 | // Define variables to determine what the current user can do on the members |
||
| 4530 | $canaddmember = $user->hasRight('adherent', 'creer'); |
||
| 4531 | // Define variables to determine what the current user can do on the properties of a member |
||
| 4532 | if ($id) { |
||
| 4533 | $caneditfieldmember = $user->hasRight('adherent', 'creer'); |
||
| 4534 | } |
||
| 4535 | |||
| 4536 | $hookmanager->initHooks(array('membernote')); |
||
| 4537 | |||
| 4538 | // Security check |
||
| 4539 | $result = restrictedArea($user, 'adherent', $object->id, '', '', 'socid', 'rowid', 0); |
||
| 4540 | |||
| 4541 | /* |
||
| 4542 | * Actions |
||
| 4543 | */ |
||
| 4544 | $parameters = array(); |
||
| 4545 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 4546 | if ($reshook < 0) { |
||
| 4547 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 4548 | } |
||
| 4549 | if (empty($reshook)) { |
||
| 4550 | include DOL_DOCUMENT_ROOT . '/core/actions_setnotes.inc.php'; // Must be include, not include_once |
||
| 4551 | } |
||
| 4552 | |||
| 4553 | |||
| 4554 | /* |
||
| 4555 | * View |
||
| 4556 | */ |
||
| 4557 | |||
| 4558 | $title = $langs->trans("Member") . " - " . $langs->trans("Note"); |
||
| 4559 | |||
| 4560 | $help_url = "EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder"; |
||
| 4561 | |||
| 4562 | llxHeader("", $title, $help_url); |
||
| 4563 | |||
| 4564 | $form = new Form($db); |
||
| 4565 | |||
| 4566 | if ($id) { |
||
| 4567 | $head = member_prepare_head($object); |
||
| 4568 | |||
| 4569 | print dol_get_fiche_head($head, 'note', $langs->trans("Member"), -1, 'user'); |
||
| 4570 | |||
| 4571 | print '<form method="POST" action="' . $_SERVER['PHP_SELF'] . '">'; |
||
| 4572 | print '<input type="hidden" name="token" value="' . newToken() . '">'; |
||
| 4573 | |||
| 4574 | $linkback = '<a href="' . DOL_URL_ROOT . '/adherents/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>'; |
||
| 4575 | |||
| 4576 | $morehtmlref = '<a href="' . DOL_URL_ROOT . '/adherents/vcard.php?id=' . $object->id . '" class="refid">'; |
||
| 4577 | $morehtmlref .= img_picto($langs->trans("Download") . ' ' . $langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"'); |
||
| 4578 | $morehtmlref .= '</a>'; |
||
| 4579 | |||
| 4580 | dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref); |
||
| 4581 | |||
| 4582 | print '<div class="fichecenter">'; |
||
| 4583 | |||
| 4584 | print '<div class="underbanner clearboth"></div>'; |
||
| 4585 | print '<table class="border centpercent tableforfield">'; |
||
| 4586 | |||
| 4587 | // Login |
||
| 4588 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 4589 | print '<tr><td class="titlefield">' . $langs->trans("Login") . ' / ' . $langs->trans("Id") . '</td><td class="valeur">' . dol_escape_htmltag($object->login) . '</td></tr>'; |
||
| 4590 | } |
||
| 4591 | |||
| 4592 | // Type |
||
| 4593 | print '<tr><td>' . $langs->trans("Type") . '</td>'; |
||
| 4594 | print '<td class="valeur">' . $adht->getNomUrl(1) . "</td></tr>\n"; |
||
| 4595 | |||
| 4596 | // Morphy |
||
| 4597 | print '<tr><td class="titlefield">' . $langs->trans("MemberNature") . '</td>'; |
||
| 4598 | print '<td class="valeur" >' . $object->getmorphylib('', 1) . '</td>'; |
||
| 4599 | print '</tr>'; |
||
| 4600 | |||
| 4601 | // Company |
||
| 4602 | print '<tr><td>' . $langs->trans("Company") . '</td><td class="valeur">' . dol_escape_htmltag($object->company) . '</td></tr>'; |
||
| 4603 | |||
| 4604 | // Civility |
||
| 4605 | print '<tr><td>' . $langs->trans("UserTitle") . '</td><td class="valeur">' . $object->getCivilityLabel() . '</td>'; |
||
| 4606 | print '</tr>'; |
||
| 4607 | |||
| 4608 | print "</table>"; |
||
| 4609 | |||
| 4610 | print '</div>'; |
||
| 4611 | |||
| 4612 | |||
| 4613 | $cssclass = 'titlefield'; |
||
| 4614 | $permission = $user->hasRight('adherent', 'creer'); // Used by the include of notes.tpl.php |
||
| 4615 | include DOL_DOCUMENT_ROOT . '/core/tpl/notes.tpl.php'; |
||
| 4616 | |||
| 4617 | |||
| 4618 | print dol_get_fiche_end(); |
||
| 4619 | } |
||
| 4620 | |||
| 4621 | // End of page |
||
| 4622 | llxFooter(); |
||
| 4623 | $db->close(); |
||
| 4624 | } |
||
| 4625 | |||
| 4626 | /** |
||
| 4627 | * \file partnership_card.php |
||
| 4628 | * \ingroup partnership |
||
| 4629 | * \brief Page to create/edit/view partnership |
||
| 4630 | */ |
||
| 4631 | public function partnership() |
||
| 4632 | { |
||
| 4633 | global $conf; |
||
| 4634 | global $db; |
||
| 4635 | global $user; |
||
| 4636 | global $hookmanager; |
||
| 4637 | global $user; |
||
| 4638 | global $menumanager; |
||
| 4639 | global $langs; |
||
| 4640 | |||
| 4641 | // Load translation files required by the page |
||
| 4642 | $langs->loadLangs(array("companies","members","partnership", "other")); |
||
| 4643 | |||
| 4644 | // Get parameters |
||
| 4645 | $id = GETPOSTINT('rowid') ? GETPOSTINT('rowid') : GETPOSTINT('id'); |
||
| 4646 | $ref = GETPOST('ref', 'alpha'); |
||
| 4647 | $action = GETPOST('action', 'aZ09'); |
||
| 4648 | $confirm = GETPOST('confirm', 'alpha'); |
||
| 4649 | $cancel = GETPOST('cancel', 'aZ09'); |
||
| 4650 | $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'partnershipcard'; // To manage different context of search |
||
| 4651 | $backtopage = GETPOST('backtopage', 'alpha'); |
||
| 4652 | $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha'); |
||
| 4653 | //$lineid = GETPOST('lineid', 'int'); |
||
| 4654 | |||
| 4655 | $object = new Adherent($db); |
||
| 4656 | if ($id > 0) { |
||
| 4657 | $object->fetch($id); |
||
| 4658 | } |
||
| 4659 | |||
| 4660 | // Initialize technical objects |
||
| 4661 | $object = new Partnership($db); |
||
| 4662 | $extrafields = new ExtraFields($db); |
||
| 4663 | $adht = new AdherentType($db); |
||
| 4664 | $diroutputmassaction = $conf->partnership->dir_output . '/temp/massgeneration/' . $user->id; |
||
| 4665 | $hookmanager->initHooks(array('partnershipthirdparty', 'globalcard')); // Note that conf->hooks_modules contains array |
||
| 4666 | |||
| 4667 | // Fetch optionals attributes and labels |
||
| 4668 | $extrafields->fetch_name_optionals_label($object->table_element); |
||
| 4669 | |||
| 4670 | $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_'); |
||
| 4671 | |||
| 4672 | // Initialize array of search criteria |
||
| 4673 | $search_all = GETPOST("search_all", 'alpha'); |
||
| 4674 | $search = array(); |
||
| 4675 | |||
| 4676 | foreach ($object->fields as $key => $val) { |
||
| 4677 | if (GETPOST('search_' . $key, 'alpha')) { |
||
| 4678 | $search[$key] = GETPOST('search_' . $key, 'alpha'); |
||
| 4679 | } |
||
| 4680 | } |
||
| 4681 | |||
| 4682 | // Load object |
||
| 4683 | include DOL_DOCUMENT_ROOT . '/core/actions_fetchobject.inc.php'; // Must be include, not include_once. |
||
| 4684 | |||
| 4685 | $permissiontoread = $user->hasRight('partnership', 'read'); |
||
| 4686 | $permissiontoadd = $user->hasRight('partnership', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php |
||
| 4687 | $permissiontodelete = $user->hasRight('partnership', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT); |
||
| 4688 | $permissionnote = $user->hasRight('partnership', 'write'); // Used by the include of actions_setnotes.inc.php |
||
| 4689 | $permissiondellink = $user->hasRight('partnership', 'write'); // Used by the include of actions_dellink.inc.php |
||
| 4690 | $usercanclose = $user->hasRight('partnership', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php |
||
| 4691 | $upload_dir = $conf->partnership->multidir_output[isset($object->entity) ? $object->entity : 1]; |
||
| 4692 | |||
| 4693 | |||
| 4694 | if (getDolGlobalString('PARTNERSHIP_IS_MANAGED_FOR') != 'member') { |
||
| 4695 | accessforbidden('Partnership module is not activated for members'); |
||
| 4696 | } |
||
| 4697 | if (!isModEnabled('partnership')) { |
||
| 4698 | accessforbidden(); |
||
| 4699 | } |
||
| 4700 | if (empty($permissiontoread)) { |
||
| 4701 | accessforbidden(); |
||
| 4702 | } |
||
| 4703 | if ($action == 'edit' && empty($permissiontoadd)) { |
||
| 4704 | accessforbidden(); |
||
| 4705 | } |
||
| 4706 | if (($action == 'update' || $action == 'edit') && $object->status != $object::STATUS_DRAFT) { |
||
| 4707 | accessforbidden(); |
||
| 4708 | } |
||
| 4709 | |||
| 4710 | |||
| 4711 | // Security check |
||
| 4712 | $result = restrictedArea($user, 'adherent', $id, '', '', 'socid', 'rowid', 0); |
||
| 4713 | |||
| 4714 | |||
| 4715 | /* |
||
| 4716 | * Actions |
||
| 4717 | */ |
||
| 4718 | |||
| 4719 | $parameters = array(); |
||
| 4720 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 4721 | if ($reshook < 0) { |
||
| 4722 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 4723 | } |
||
| 4724 | |||
| 4725 | $date_start = dol_mktime(0, 0, 0, GETPOSTINT('date_partnership_startmonth'), GETPOSTINT('date_partnership_startday'), GETPOSTINT('date_partnership_startyear')); |
||
| 4726 | $date_end = dol_mktime(0, 0, 0, GETPOSTINT('date_partnership_endmonth'), GETPOSTINT('date_partnership_endday'), GETPOSTINT('date_partnership_endyear')); |
||
| 4727 | |||
| 4728 | if (empty($reshook)) { |
||
| 4729 | $error = 0; |
||
| 4730 | |||
| 4731 | $backtopage = dol_buildpath('/partnership/partnership.php', 1) . '?rowid=' . ($id > 0 ? $id : '__ID__'); |
||
| 4732 | |||
| 4733 | // Actions when linking object each other |
||
| 4734 | include DOL_DOCUMENT_ROOT . '/core/actions_dellink.inc.php'; |
||
| 4735 | } |
||
| 4736 | |||
| 4737 | $object->fields['fk_member']['visible'] = 0; |
||
| 4738 | if ($object->id > 0 && $object->status == $object::STATUS_REFUSED && empty($action)) { |
||
| 4739 | $object->fields['reason_decline_or_cancel']['visible'] = 1; |
||
| 4740 | } |
||
| 4741 | $object->fields['note_public']['visible'] = 1; |
||
| 4742 | |||
| 4743 | |||
| 4744 | /* |
||
| 4745 | * View |
||
| 4746 | */ |
||
| 4747 | |||
| 4748 | $form = new Form($db); |
||
| 4749 | $formfile = new FormFile($db); |
||
| 4750 | |||
| 4751 | $title = $langs->trans("Partnership"); |
||
| 4752 | llxHeader('', $title); |
||
| 4753 | |||
| 4754 | $form = new Form($db); |
||
| 4755 | |||
| 4756 | if ($id > 0) { |
||
| 4757 | $langs->load("members"); |
||
| 4758 | |||
| 4759 | $object = new Adherent($db); |
||
| 4760 | $result = $object->fetch($id); |
||
| 4761 | |||
| 4762 | if (isModEnabled('notification')) { |
||
| 4763 | $langs->load("mails"); |
||
| 4764 | } |
||
| 4765 | |||
| 4766 | $adht->fetch($object->typeid); |
||
| 4767 | |||
| 4768 | $head = member_prepare_head($object); |
||
| 4769 | |||
| 4770 | print dol_get_fiche_head($head, 'partnership', $langs->trans("ThirdParty"), -1, 'user'); |
||
| 4771 | |||
| 4772 | $linkback = '<a href="' . DOL_URL_ROOT . '/adherents/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>'; |
||
| 4773 | |||
| 4774 | dol_banner_tab($object, 'rowid', $linkback); |
||
| 4775 | |||
| 4776 | print '<div class="fichecenter">'; |
||
| 4777 | |||
| 4778 | print '<div class="underbanner clearboth"></div>'; |
||
| 4779 | print '<table class="border centpercent tableforfield">'; |
||
| 4780 | |||
| 4781 | // Login |
||
| 4782 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 4783 | print '<tr><td class="titlefield">' . $langs->trans("Login") . ' / ' . $langs->trans("Id") . '</td><td class="valeur">' . $object->login . ' </td></tr>'; |
||
| 4784 | } |
||
| 4785 | |||
| 4786 | // Type |
||
| 4787 | print '<tr><td class="titlefield">' . $langs->trans("Type") . '</td><td class="valeur">' . $adht->getNomUrl(1) . "</td></tr>\n"; |
||
| 4788 | |||
| 4789 | // Morphy |
||
| 4790 | print '<tr><td>' . $langs->trans("MemberNature") . '</td><td class="valeur" >' . $object->getmorphylib() . '</td>'; |
||
| 4791 | print '</tr>'; |
||
| 4792 | |||
| 4793 | // Company |
||
| 4794 | print '<tr><td>' . $langs->trans("Company") . '</td><td class="valeur">' . $object->company . '</td></tr>'; |
||
| 4795 | |||
| 4796 | // Civility |
||
| 4797 | print '<tr><td>' . $langs->trans("UserTitle") . '</td><td class="valeur">' . $object->getCivilityLabel() . ' </td>'; |
||
| 4798 | print '</tr>'; |
||
| 4799 | |||
| 4800 | print '</table>'; |
||
| 4801 | |||
| 4802 | print '</div>'; |
||
| 4803 | |||
| 4804 | print dol_get_fiche_end(); |
||
| 4805 | } else { |
||
| 4806 | dol_print_error(null, 'Parameter rowid not defined'); |
||
| 4807 | } |
||
| 4808 | |||
| 4809 | |||
| 4810 | // Part to show record |
||
| 4811 | if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) { |
||
| 4812 | // Buttons for actions |
||
| 4813 | |||
| 4814 | if ($action != 'presend') { |
||
| 4815 | print '<div class="tabsAction">' . "\n"; |
||
| 4816 | $parameters = array(); |
||
| 4817 | $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook |
||
| 4818 | if ($reshook < 0) { |
||
| 4819 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 4820 | } |
||
| 4821 | |||
| 4822 | if (empty($reshook)) { |
||
| 4823 | // Show |
||
| 4824 | if ($permissiontoadd) { |
||
| 4825 | print dolGetButtonAction($langs->trans('AddPartnership'), '', 'default', DOL_URL_ROOT . '/partnership/partnership_card.php?action=create&fk_member=' . $object->id . '&backtopage=' . urlencode(DOL_URL_ROOT . '/adherents/partnership.php?id=' . $object->id), '', $permissiontoadd); |
||
| 4826 | } |
||
| 4827 | } |
||
| 4828 | print '</div>' . "\n"; |
||
| 4829 | } |
||
| 4830 | |||
| 4831 | |||
| 4832 | //$morehtmlright = 'partnership/partnership_card.php?action=create&backtopage=%2Fdolibarr%2Fhtdocs%2Fpartnership%2Fpartnership_list.php'; |
||
| 4833 | $morehtmlright = ''; |
||
| 4834 | |||
| 4835 | print load_fiche_titre($langs->trans("PartnershipDedicatedToThisMember", $langs->transnoentitiesnoconv("Partnership")), $morehtmlright, ''); |
||
| 4836 | |||
| 4837 | $memberid = $object->id; |
||
| 4838 | |||
| 4839 | |||
| 4840 | // TODO Replace this card with the list of all partnerships. |
||
| 4841 | |||
| 4842 | $object = new Partnership($db); |
||
| 4843 | $partnershipid = $object->fetch(0, "", $memberid); |
||
| 4844 | |||
| 4845 | if ($partnershipid > 0) { |
||
| 4846 | print '<div class="fichecenter">'; |
||
| 4847 | print '<div class="fichehalfleft">'; |
||
| 4848 | print '<div class="underbanner clearboth"></div>'; |
||
| 4849 | print '<table class="border centpercent tableforfield">' . "\n"; |
||
| 4850 | |||
| 4851 | // Common attributes |
||
| 4852 | //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field |
||
| 4853 | //unset($object->fields['fk_project']); // Hide field already shown in banner |
||
| 4854 | //unset($object->fields['fk_member']); // Hide field already shown in banner |
||
| 4855 | include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php'; |
||
| 4856 | |||
| 4857 | // End of subscription date |
||
| 4858 | $fadherent = new Adherent($db); |
||
| 4859 | $fadherent->fetch($object->fk_member); |
||
| 4860 | print '<tr><td>' . $langs->trans("SubscriptionEndDate") . '</td><td class="valeur">'; |
||
| 4861 | if ($fadherent->datefin) { |
||
| 4862 | print dol_print_date($fadherent->datefin, 'day'); |
||
| 4863 | if ($fadherent->hasDelay()) { |
||
| 4864 | print " " . img_warning($langs->trans("Late")); |
||
| 4865 | } |
||
| 4866 | } else { |
||
| 4867 | if (!$adht->subscription) { |
||
| 4868 | print $langs->trans("SubscriptionNotRecorded"); |
||
| 4869 | if ($fadherent->statut > 0) { |
||
| 4870 | print " " . img_warning($langs->trans("Late")); // Display a delay picto only if it is not a draft and is not canceled |
||
| 4871 | } |
||
| 4872 | } else { |
||
| 4873 | print $langs->trans("SubscriptionNotReceived"); |
||
| 4874 | if ($fadherent->statut > 0) { |
||
| 4875 | print " " . img_warning($langs->trans("Late")); // Display a delay picto only if it is not a draft and is not canceled |
||
| 4876 | } |
||
| 4877 | } |
||
| 4878 | } |
||
| 4879 | print '</td></tr>'; |
||
| 4880 | |||
| 4881 | print '</table>'; |
||
| 4882 | print '</div>'; |
||
| 4883 | } |
||
| 4884 | } |
||
| 4885 | |||
| 4886 | // End of page |
||
| 4887 | llxFooter(); |
||
| 4888 | $db->close(); |
||
| 4889 | } |
||
| 4890 | |||
| 4891 | /** |
||
| 4892 | * \file htdocs/adherents/subscription.php |
||
| 4893 | * \ingroup member |
||
| 4894 | * \brief tab for Adding, editing, deleting a member's memberships |
||
| 4895 | */ |
||
| 4896 | public function subscription() |
||
| 4897 | { |
||
| 4898 | global $conf; |
||
| 4899 | global $db; |
||
| 4900 | global $user; |
||
| 4901 | global $hookmanager; |
||
| 4902 | global $user; |
||
| 4903 | global $menumanager; |
||
| 4904 | global $langs; |
||
| 4905 | |||
| 4906 | $langs->loadLangs(array("companies", "bills", "members", "users", "mails", 'other')); |
||
| 4907 | |||
| 4908 | $action = GETPOST('action', 'aZ09'); |
||
| 4909 | $confirm = GETPOST('confirm', 'alpha'); |
||
| 4910 | $contextpage = GETPOST('contextpage', 'aZ09'); |
||
| 4911 | $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') |
||
| 4912 | |||
| 4913 | $id = GETPOSTINT('rowid') ? GETPOSTINT('rowid') : GETPOSTINT('id'); |
||
| 4914 | $rowid = $id; |
||
| 4915 | $ref = GETPOST('ref', 'alphanohtml'); |
||
| 4916 | $typeid = GETPOSTINT('typeid'); |
||
| 4917 | $cancel = GETPOST('cancel'); |
||
| 4918 | |||
| 4919 | // Load variable for pagination |
||
| 4920 | $limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit; |
||
| 4921 | $sortfield = GETPOST('sortfield', 'aZ09comma'); |
||
| 4922 | $sortorder = GETPOST('sortorder', 'aZ09comma'); |
||
| 4923 | $page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page"); |
||
| 4924 | if (empty($page) || $page == -1) { |
||
| 4925 | $page = 0; |
||
| 4926 | } // If $page is not defined, or '' or -1 |
||
| 4927 | $offset = $limit * $page; |
||
| 4928 | $pageprev = $page - 1; |
||
| 4929 | $pagenext = $page + 1; |
||
| 4930 | |||
| 4931 | // Default sort order (if not yet defined by previous GETPOST) |
||
| 4932 | if (!$sortfield) { |
||
| 4933 | $sortfield = "c.rowid"; |
||
| 4934 | } |
||
| 4935 | if (!$sortorder) { |
||
| 4936 | $sortorder = "DESC"; |
||
| 4937 | } |
||
| 4938 | |||
| 4939 | $object = new Adherent($db); |
||
| 4940 | $extrafields = new ExtraFields($db); |
||
| 4941 | $adht = new AdherentType($db); |
||
| 4942 | |||
| 4943 | // fetch optionals attributes and labels |
||
| 4944 | $extrafields->fetch_name_optionals_label($object->table_element); |
||
| 4945 | |||
| 4946 | $errmsg = ''; |
||
| 4947 | |||
| 4948 | // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context |
||
| 4949 | $hookmanager->initHooks(array('subscription')); |
||
| 4950 | |||
| 4951 | |||
| 4952 | $hidedetails = (GETPOSTINT('hidedetails') ? GETPOSTINT('hidedetails') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS') ? 1 : 0)); |
||
| 4953 | $hidedesc = (GETPOSTINT('hidedesc') ? GETPOSTINT('hidedesc') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_DESC') ? 1 : 0)); |
||
| 4954 | $hideref = (GETPOSTINT('hideref') ? GETPOSTINT('hideref') : (getDolGlobalString('MAIN_GENERATE_DOCUMENTS_HIDE_REF') ? 1 : 0)); |
||
| 4955 | |||
| 4956 | $datefrom = 0; |
||
| 4957 | $dateto = 0; |
||
| 4958 | $paymentdate = -1; |
||
| 4959 | |||
| 4960 | // Fetch object |
||
| 4961 | if ($id > 0 || !empty($ref)) { |
||
| 4962 | // Load member |
||
| 4963 | $result = $object->fetch($id, $ref); |
||
| 4964 | |||
| 4965 | // Define variables to know what current user can do on users |
||
| 4966 | $canadduser = ($user->admin || $user->hasRight("user", "user", "creer")); |
||
| 4967 | // Define variables to know what current user can do on properties of user linked to edited member |
||
| 4968 | if ($object->user_id) { |
||
| 4969 | // $User is the user who edits, $object->user_id is the id of the related user in the edited member |
||
| 4970 | $caneditfielduser = ((($user->id == $object->user_id) && $user->hasRight("user", "self", "creer")) |
||
| 4971 | || (($user->id != $object->user_id) && $user->hasRight("user", "user", "creer"))); |
||
| 4972 | $caneditpassworduser = ((($user->id == $object->user_id) && $user->hasRight("user", "self", "password")) |
||
| 4973 | || (($user->id != $object->user_id) && $user->hasRight("user", "user", "password"))); |
||
| 4974 | } |
||
| 4975 | } |
||
| 4976 | |||
| 4977 | // Define variables to determine what the current user can do on the members |
||
| 4978 | $canaddmember = $user->hasRight('adherent', 'creer'); |
||
| 4979 | // Define variables to determine what the current user can do on the properties of a member |
||
| 4980 | if ($id) { |
||
| 4981 | $caneditfieldmember = $user->hasRight('adherent', 'creer'); |
||
| 4982 | } |
||
| 4983 | |||
| 4984 | // Security check |
||
| 4985 | $result = restrictedArea($user, 'adherent', $object->id, '', '', 'socid', 'rowid', 0); |
||
| 4986 | |||
| 4987 | |||
| 4988 | /* |
||
| 4989 | * Actions |
||
| 4990 | */ |
||
| 4991 | |||
| 4992 | $parameters = array(); |
||
| 4993 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); |
||
| 4994 | if ($reshook < 0) { |
||
| 4995 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 4996 | } |
||
| 4997 | |||
| 4998 | // Create third party from a member |
||
| 4999 | if (empty($reshook) && $action == 'confirm_create_thirdparty' && $confirm == 'yes' && $user->hasRight('societe', 'creer')) { |
||
| 5000 | if ($result > 0) { |
||
| 5001 | // Creation of thirdparty |
||
| 5002 | $company = new Societe($db); |
||
| 5003 | $result = $company->create_from_member($object, GETPOST('companyname', 'alpha'), GETPOST('companyalias', 'alpha'), GETPOST('customercode', 'alpha')); |
||
| 5004 | |||
| 5005 | if ($result < 0) { |
||
| 5006 | $langs->load("errors"); |
||
| 5007 | setEventMessages($company->error, $company->errors, 'errors'); |
||
| 5008 | } else { |
||
| 5009 | $action = 'addsubscription'; |
||
| 5010 | } |
||
| 5011 | } else { |
||
| 5012 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 5013 | } |
||
| 5014 | } |
||
| 5015 | |||
| 5016 | if (empty($reshook) && $action == 'setuserid' && ($user->hasRight('user', 'self', 'creer') || $user->hasRight('user', 'user', 'creer'))) { |
||
| 5017 | $error = 0; |
||
| 5018 | if (!$user->hasRight('user', 'user', 'creer')) { // If can edit only itself user, we can link to itself only |
||
| 5019 | if (GETPOSTINT("userid") != $user->id && GETPOSTINT("userid") != $object->user_id) { |
||
| 5020 | $error++; |
||
| 5021 | setEventMessages($langs->trans("ErrorUserPermissionAllowsToLinksToItselfOnly"), null, 'errors'); |
||
| 5022 | } |
||
| 5023 | } |
||
| 5024 | |||
| 5025 | if (!$error) { |
||
| 5026 | if (GETPOSTINT("userid") != $object->user_id) { // If link differs from currently in database |
||
| 5027 | $result = $object->setUserId(GETPOSTINT("userid")); |
||
| 5028 | if ($result < 0) { |
||
| 5029 | dol_print_error(null, $object->error); |
||
| 5030 | } |
||
| 5031 | $action = ''; |
||
| 5032 | } |
||
| 5033 | } |
||
| 5034 | } |
||
| 5035 | |||
| 5036 | if (empty($reshook) && $action == 'setsocid') { |
||
| 5037 | $error = 0; |
||
| 5038 | if (!$error) { |
||
| 5039 | if (GETPOSTINT('socid') != $object->fk_soc) { // If link differs from currently in database |
||
| 5040 | $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "adherent"; |
||
| 5041 | $sql .= " WHERE fk_soc = '" . GETPOSTINT('socid') . "'"; |
||
| 5042 | $resql = $db->query($sql); |
||
| 5043 | if ($resql) { |
||
| 5044 | $obj = $db->fetch_object($resql); |
||
| 5045 | if ($obj && $obj->rowid > 0) { |
||
| 5046 | $othermember = new Adherent($db); |
||
| 5047 | $othermember->fetch($obj->rowid); |
||
| 5048 | $thirdparty = new Societe($db); |
||
| 5049 | $thirdparty->fetch(GETPOSTINT('socid')); |
||
| 5050 | $error++; |
||
| 5051 | setEventMessages($langs->trans("ErrorMemberIsAlreadyLinkedToThisThirdParty", $othermember->getFullName($langs), $othermember->login, $thirdparty->name), null, 'errors'); |
||
| 5052 | } |
||
| 5053 | } |
||
| 5054 | |||
| 5055 | if (!$error) { |
||
| 5056 | $result = $object->setThirdPartyId(GETPOSTINT('socid')); |
||
| 5057 | if ($result < 0) { |
||
| 5058 | dol_print_error(null, $object->error); |
||
| 5059 | } |
||
| 5060 | $action = ''; |
||
| 5061 | } |
||
| 5062 | } |
||
| 5063 | } |
||
| 5064 | } |
||
| 5065 | |||
| 5066 | if ($user->hasRight('adherent', 'cotisation', 'creer') && $action == 'subscription' && !$cancel) { |
||
| 5067 | $error = 0; |
||
| 5068 | |||
| 5069 | $langs->load("banks"); |
||
| 5070 | |||
| 5071 | $result = $object->fetch($rowid); |
||
| 5072 | $result = $adht->fetch($object->typeid); |
||
| 5073 | |||
| 5074 | // Subscription information |
||
| 5075 | $datesubscription = 0; |
||
| 5076 | $datesubend = 0; |
||
| 5077 | $defaultdelay = !empty($adht->duration_value) ? $adht->duration_value : 1; |
||
| 5078 | $defaultdelayunit = !empty($adht->duration_unit) ? $adht->duration_unit : 'y'; |
||
| 5079 | $paymentdate = ''; // Do not use 0 here, default value is '' that means not filled where 0 means 1970-01-01 |
||
| 5080 | if (GETPOSTINT("reyear") && GETPOSTINT("remonth") && GETPOSTINT("reday")) { |
||
| 5081 | $datesubscription = dol_mktime(0, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear")); |
||
| 5082 | } |
||
| 5083 | if (GETPOSTINT("endyear") && GETPOSTINT("endmonth") && GETPOSTINT("endday")) { |
||
| 5084 | $datesubend = dol_mktime(0, 0, 0, GETPOSTINT("endmonth"), GETPOSTINT("endday"), GETPOSTINT("endyear")); |
||
| 5085 | } |
||
| 5086 | if (GETPOSTINT("paymentyear") && GETPOSTINT("paymentmonth") && GETPOSTINT("paymentday")) { |
||
| 5087 | $paymentdate = dol_mktime(0, 0, 0, GETPOSTINT("paymentmonth"), GETPOSTINT("paymentday"), GETPOSTINT("paymentyear")); |
||
| 5088 | } |
||
| 5089 | $amount = price2num(GETPOST("subscription", 'alpha')); // Amount of subscription |
||
| 5090 | $label = GETPOST("label"); |
||
| 5091 | |||
| 5092 | // Payment information |
||
| 5093 | $accountid = GETPOSTINT("accountid"); |
||
| 5094 | $operation = GETPOST("operation", "alphanohtml"); // Payment mode |
||
| 5095 | $num_chq = GETPOST("num_chq", "alphanohtml"); |
||
| 5096 | $emetteur_nom = GETPOST("chqemetteur"); |
||
| 5097 | $emetteur_banque = GETPOST("chqbank"); |
||
| 5098 | $option = GETPOST("paymentsave"); |
||
| 5099 | if (empty($option)) { |
||
| 5100 | $option = 'none'; |
||
| 5101 | } |
||
| 5102 | $sendalsoemail = GETPOST("sendmail", 'alpha'); |
||
| 5103 | |||
| 5104 | // Check parameters |
||
| 5105 | if (!$datesubscription) { |
||
| 5106 | $error++; |
||
| 5107 | $langs->load("errors"); |
||
| 5108 | $errmsg = $langs->trans("ErrorBadDateFormat", $langs->transnoentitiesnoconv("DateSubscription")); |
||
| 5109 | setEventMessages($errmsg, null, 'errors'); |
||
| 5110 | $action = 'addsubscription'; |
||
| 5111 | } |
||
| 5112 | if (GETPOST('end') && !$datesubend) { |
||
| 5113 | $error++; |
||
| 5114 | $langs->load("errors"); |
||
| 5115 | $errmsg = $langs->trans("ErrorBadDateFormat", $langs->transnoentitiesnoconv("DateEndSubscription")); |
||
| 5116 | setEventMessages($errmsg, null, 'errors'); |
||
| 5117 | $action = 'addsubscription'; |
||
| 5118 | } |
||
| 5119 | if (!$datesubend) { |
||
| 5120 | $datesubend = dol_time_plus_duree(dol_time_plus_duree($datesubscription, $defaultdelay, $defaultdelayunit), -1, 'd'); |
||
| 5121 | } |
||
| 5122 | if (($option == 'bankviainvoice' || $option == 'bankdirect') && !$paymentdate) { |
||
| 5123 | $error++; |
||
| 5124 | $errmsg = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DatePayment")); |
||
| 5125 | setEventMessages($errmsg, null, 'errors'); |
||
| 5126 | $action = 'addsubscription'; |
||
| 5127 | } |
||
| 5128 | |||
| 5129 | // Check if a payment is mandatory or not |
||
| 5130 | if ($adht->subscription) { // Member type need subscriptions |
||
| 5131 | if (!is_numeric($amount)) { |
||
| 5132 | // If field is '' or not a numeric value |
||
| 5133 | $errmsg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("Amount")); |
||
| 5134 | setEventMessages($errmsg, null, 'errors'); |
||
| 5135 | $error++; |
||
| 5136 | $action = 'addsubscription'; |
||
| 5137 | } else { |
||
| 5138 | // If an amount has been provided, we check also fields that becomes mandatory when amount is not null. |
||
| 5139 | if (isModEnabled('bank') && GETPOST("paymentsave") != 'none') { |
||
| 5140 | if (GETPOST("subscription")) { |
||
| 5141 | if (!GETPOST("label")) { |
||
| 5142 | $errmsg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("Label")); |
||
| 5143 | setEventMessages($errmsg, null, 'errors'); |
||
| 5144 | $error++; |
||
| 5145 | $action = 'addsubscription'; |
||
| 5146 | } |
||
| 5147 | if (GETPOST("paymentsave") != 'invoiceonly' && !GETPOST("operation")) { |
||
| 5148 | $errmsg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("PaymentMode")); |
||
| 5149 | setEventMessages($errmsg, null, 'errors'); |
||
| 5150 | $error++; |
||
| 5151 | $action = 'addsubscription'; |
||
| 5152 | } |
||
| 5153 | if (GETPOST("paymentsave") != 'invoiceonly' && !(GETPOSTINT("accountid") > 0)) { |
||
| 5154 | $errmsg = $langs->trans("ErrorFieldRequired", $langs->transnoentities("FinancialAccount")); |
||
| 5155 | setEventMessages($errmsg, null, 'errors'); |
||
| 5156 | $error++; |
||
| 5157 | $action = 'addsubscription'; |
||
| 5158 | } |
||
| 5159 | } else { |
||
| 5160 | if (GETPOSTINT("accountid")) { |
||
| 5161 | $errmsg = $langs->trans("ErrorDoNotProvideAccountsIfNullAmount"); |
||
| 5162 | setEventMessages($errmsg, null, 'errors'); |
||
| 5163 | $error++; |
||
| 5164 | $action = 'addsubscription'; |
||
| 5165 | } |
||
| 5166 | } |
||
| 5167 | } |
||
| 5168 | } |
||
| 5169 | } |
||
| 5170 | |||
| 5171 | // Record the subscription then complementary actions |
||
| 5172 | if (!$error && $action == 'subscription') { |
||
| 5173 | $db->begin(); |
||
| 5174 | |||
| 5175 | // Create subscription |
||
| 5176 | $crowid = $object->subscription($datesubscription, $amount, $accountid, $operation, $label, $num_chq, $emetteur_nom, $emetteur_banque, $datesubend); |
||
| 5177 | if ($crowid <= 0) { |
||
| 5178 | $error++; |
||
| 5179 | $errmsg = $object->error; |
||
| 5180 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 5181 | } |
||
| 5182 | |||
| 5183 | if (!$error) { |
||
| 5184 | $result = $object->subscriptionComplementaryActions($crowid, $option, $accountid, $datesubscription, $paymentdate, $operation, $label, $amount, $num_chq, $emetteur_nom, $emetteur_banque); |
||
| 5185 | if ($result < 0) { |
||
| 5186 | $error++; |
||
| 5187 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 5188 | } else { |
||
| 5189 | // If an invoice was created, it is into $object->invoice |
||
| 5190 | } |
||
| 5191 | } |
||
| 5192 | |||
| 5193 | if (!$error) { |
||
| 5194 | $db->commit(); |
||
| 5195 | } else { |
||
| 5196 | $db->rollback(); |
||
| 5197 | $action = 'addsubscription'; |
||
| 5198 | } |
||
| 5199 | |||
| 5200 | if (!$error) { |
||
| 5201 | setEventMessages("SubscriptionRecorded", null, 'mesgs'); |
||
| 5202 | } |
||
| 5203 | |||
| 5204 | // Send email |
||
| 5205 | if (!$error) { |
||
| 5206 | // Send confirmation Email |
||
| 5207 | if ($object->email && $sendalsoemail) { // $object is 'Adherent' |
||
| 5208 | $parameters = array( |
||
| 5209 | 'datesubscription' => $datesubscription, |
||
| 5210 | 'amount' => $amount, |
||
| 5211 | 'ccountid' => $accountid, |
||
| 5212 | 'operation' => $operation, |
||
| 5213 | 'label' => $label, |
||
| 5214 | 'num_chq' => $num_chq, |
||
| 5215 | 'emetteur_nom' => $emetteur_nom, |
||
| 5216 | 'emetteur_banque' => $emetteur_banque, |
||
| 5217 | 'datesubend' => $datesubend |
||
| 5218 | ); |
||
| 5219 | $reshook = $hookmanager->executeHooks('sendMail', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 5220 | if ($reshook < 0) { |
||
| 5221 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 5222 | } |
||
| 5223 | |||
| 5224 | if (empty($reshook)) { |
||
| 5225 | $subject = ''; |
||
| 5226 | $msg = ''; |
||
| 5227 | |||
| 5228 | // Send subscription email |
||
| 5229 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 5230 | $formmail = new FormMail($db); |
||
| 5231 | // Set output language |
||
| 5232 | $outputlangs = new Translate('', $conf); |
||
| 5233 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 5234 | // Load traductions files required by page |
||
| 5235 | $outputlangs->loadLangs(array("main", "members")); |
||
| 5236 | |||
| 5237 | // Get email content from template |
||
| 5238 | $arraydefaultmessage = null; |
||
| 5239 | $labeltouse = getDolGlobalString('ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION'); |
||
| 5240 | |||
| 5241 | if (!empty($labeltouse)) { |
||
| 5242 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 5243 | } |
||
| 5244 | |||
| 5245 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 5246 | $subject = $arraydefaultmessage->topic; |
||
| 5247 | $msg = $arraydefaultmessage->content; |
||
| 5248 | } |
||
| 5249 | |||
| 5250 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 5251 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 5252 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 5253 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnSubscription()), $substitutionarray, $outputlangs); |
||
| 5254 | |||
| 5255 | // Attach a file ? |
||
| 5256 | $file = ''; |
||
| 5257 | $listofpaths = array(); |
||
| 5258 | $listofnames = array(); |
||
| 5259 | $listofmimes = array(); |
||
| 5260 | if (is_object($object->invoice) && (!is_object($arraydefaultmessage) || intval($arraydefaultmessage->joinfiles))) { |
||
| 5261 | $invoicediroutput = $conf->facture->dir_output; |
||
| 5262 | $fileparams = dol_most_recent_file($invoicediroutput . '/' . $object->invoice->ref, preg_quote($object->invoice->ref, '/') . '[^\-]+'); |
||
| 5263 | $file = $fileparams['fullname']; |
||
| 5264 | |||
| 5265 | $listofpaths = array($file); |
||
| 5266 | $listofnames = array(basename($file)); |
||
| 5267 | $listofmimes = array(dol_mimetype($file)); |
||
| 5268 | } |
||
| 5269 | |||
| 5270 | $moreinheader = 'X-Dolibarr-Info: send_an_email by adherents/subscription.php' . "\r\n"; |
||
| 5271 | |||
| 5272 | $result = $object->sendEmail($texttosend, $subjecttosend, $listofpaths, $listofmimes, $listofnames, "", "", 0, -1, '', $moreinheader); |
||
| 5273 | if ($result < 0) { |
||
| 5274 | $errmsg = $object->error; |
||
| 5275 | setEventMessages($object->error, $object->errors, 'errors'); |
||
| 5276 | } else { |
||
| 5277 | setEventMessages($langs->trans("EmailSentToMember", $object->email), null, 'mesgs'); |
||
| 5278 | } |
||
| 5279 | } |
||
| 5280 | } else { |
||
| 5281 | setEventMessages($langs->trans("NoEmailSentToMember"), null, 'mesgs'); |
||
| 5282 | } |
||
| 5283 | } |
||
| 5284 | |||
| 5285 | // Clean some POST vars |
||
| 5286 | if (!$error) { |
||
| 5287 | $_POST["subscription"] = ''; |
||
| 5288 | $_POST["accountid"] = ''; |
||
| 5289 | $_POST["operation"] = ''; |
||
| 5290 | $_POST["label"] = ''; |
||
| 5291 | $_POST["num_chq"] = ''; |
||
| 5292 | } |
||
| 5293 | } |
||
| 5294 | } |
||
| 5295 | |||
| 5296 | |||
| 5297 | |||
| 5298 | /* |
||
| 5299 | * View |
||
| 5300 | */ |
||
| 5301 | |||
| 5302 | $form = new Form($db); |
||
| 5303 | |||
| 5304 | $now = dol_now(); |
||
| 5305 | |||
| 5306 | $title = $langs->trans("Member") . " - " . $langs->trans("Subscriptions"); |
||
| 5307 | |||
| 5308 | $help_url = "EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros|DE:Modul_Mitglieder"; |
||
| 5309 | |||
| 5310 | llxHeader("", $title, $help_url); |
||
| 5311 | |||
| 5312 | |||
| 5313 | $param = ''; |
||
| 5314 | if (!empty($contextpage) && $contextpage != $_SERVER['PHP_SELF']) { |
||
| 5315 | $param .= '&contextpage=' . urlencode($contextpage); |
||
| 5316 | } |
||
| 5317 | if ($limit > 0 && $limit != $conf->liste_limit) { |
||
| 5318 | $param .= '&limit=' . ((int) $limit); |
||
| 5319 | } |
||
| 5320 | $param .= '&id=' . $rowid; |
||
| 5321 | if ($optioncss != '') { |
||
| 5322 | $param .= '&optioncss=' . urlencode($optioncss); |
||
| 5323 | } |
||
| 5324 | // Add $param from extra fields |
||
| 5325 | //include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php'; |
||
| 5326 | |||
| 5327 | |||
| 5328 | if (! ($object->id > 0)) { |
||
| 5329 | $langs->load("errors"); |
||
| 5330 | print $langs->trans("ErrorRecordNotFound"); |
||
| 5331 | } |
||
| 5332 | |||
| 5333 | /*$res = $object->fetch($rowid); |
||
| 5334 | if ($res < 0) { |
||
| 5335 | dol_print_error($db, $object->error); |
||
| 5336 | exit; |
||
| 5337 | } |
||
| 5338 | */ |
||
| 5339 | |||
| 5340 | $adht->fetch($object->typeid); |
||
| 5341 | |||
| 5342 | $defaultdelay = !empty($adht->duration_value) ? $adht->duration_value : 1; |
||
| 5343 | $defaultdelayunit = !empty($adht->duration_unit) ? $adht->duration_unit : 'y'; |
||
| 5344 | |||
| 5345 | $head = member_prepare_head($object); |
||
| 5346 | |||
| 5347 | $rowspan = 10; |
||
| 5348 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 5349 | $rowspan++; |
||
| 5350 | } |
||
| 5351 | if (isModEnabled('societe')) { |
||
| 5352 | $rowspan++; |
||
| 5353 | } |
||
| 5354 | |||
| 5355 | print '<form action="' . $_SERVER['PHP_SELF'] . '" method="POST">'; |
||
| 5356 | print '<input type="hidden" name="token" value="' . newToken() . '">'; |
||
| 5357 | print '<input type="hidden" name="rowid" value="' . $object->id . '">'; |
||
| 5358 | |||
| 5359 | print dol_get_fiche_head($head, 'subscription', $langs->trans("Member"), -1, 'user'); |
||
| 5360 | |||
| 5361 | $linkback = '<a href="' . DOL_URL_ROOT . '/adherents/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>'; |
||
| 5362 | |||
| 5363 | $morehtmlref = '<a href="' . DOL_URL_ROOT . '/adherents/vcard.php?id=' . $object->id . '" class="refid">'; |
||
| 5364 | $morehtmlref .= img_picto($langs->trans("Download") . ' ' . $langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"'); |
||
| 5365 | $morehtmlref .= '</a>'; |
||
| 5366 | |||
| 5367 | dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref); |
||
| 5368 | |||
| 5369 | print '<div class="fichecenter">'; |
||
| 5370 | print '<div class="fichehalfleft">'; |
||
| 5371 | |||
| 5372 | print '<div class="underbanner clearboth"></div>'; |
||
| 5373 | print '<table class="border centpercent tableforfield">'; |
||
| 5374 | |||
| 5375 | // Login |
||
| 5376 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 5377 | print '<tr><td class="titlefield">' . $langs->trans("Login") . ' / ' . $langs->trans("Id") . '</td><td class="valeur">' . dol_escape_htmltag($object->login) . '</td></tr>'; |
||
| 5378 | } |
||
| 5379 | |||
| 5380 | // Type |
||
| 5381 | print '<tr><td class="titlefield">' . $langs->trans("Type") . '</td>'; |
||
| 5382 | print '<td class="valeur">' . $adht->getNomUrl(1) . "</td></tr>\n"; |
||
| 5383 | |||
| 5384 | // Morphy |
||
| 5385 | print '<tr><td>' . $langs->trans("MemberNature") . '</td>'; |
||
| 5386 | print '<td class="valeur" >' . $object->getmorphylib('', 1) . '</td>'; |
||
| 5387 | print '</tr>'; |
||
| 5388 | |||
| 5389 | // Company |
||
| 5390 | print '<tr><td>' . $langs->trans("Company") . '</td><td class="valeur">' . dol_escape_htmltag($object->company) . '</td></tr>'; |
||
| 5391 | |||
| 5392 | // Civility |
||
| 5393 | print '<tr><td>' . $langs->trans("UserTitle") . '</td><td class="valeur">' . $object->getCivilityLabel() . '</td>'; |
||
| 5394 | print '</tr>'; |
||
| 5395 | |||
| 5396 | // Password |
||
| 5397 | if (!getDolGlobalString('ADHERENT_LOGIN_NOT_REQUIRED')) { |
||
| 5398 | print '<tr><td>' . $langs->trans("Password") . '</td><td>'; |
||
| 5399 | if ($object->pass) { |
||
| 5400 | print preg_replace('/./i', '*', $object->pass); |
||
| 5401 | } else { |
||
| 5402 | if ($user->admin) { |
||
| 5403 | print '<!-- ' . $langs->trans("Crypted") . ': ' . $object->pass_indatabase_crypted . ' -->'; |
||
| 5404 | } |
||
| 5405 | print '<span class="opacitymedium">' . $langs->trans("Hidden") . '</span>'; |
||
| 5406 | } |
||
| 5407 | if (!empty($object->pass_indatabase) && empty($object->user_id)) { // Show warning only for old password still in clear (does not happen anymore) |
||
| 5408 | $langs->load("errors"); |
||
| 5409 | $htmltext = $langs->trans("WarningPasswordSetWithNoAccount"); |
||
| 5410 | print ' ' . $form->textwithpicto('', $htmltext, 1, 'warning'); |
||
| 5411 | } |
||
| 5412 | print '</td></tr>'; |
||
| 5413 | } |
||
| 5414 | |||
| 5415 | // Date end subscription |
||
| 5416 | print '<tr><td>' . $langs->trans("SubscriptionEndDate") . '</td><td class="valeur">'; |
||
| 5417 | if ($object->datefin) { |
||
| 5418 | print dol_print_date($object->datefin, 'day'); |
||
| 5419 | if ($object->hasDelay()) { |
||
| 5420 | print " " . img_warning($langs->trans("Late")); |
||
| 5421 | } |
||
| 5422 | } else { |
||
| 5423 | if ($object->need_subscription == 0) { |
||
| 5424 | print $langs->trans("SubscriptionNotNeeded"); |
||
| 5425 | } elseif (!$adht->subscription) { |
||
| 5426 | print $langs->trans("SubscriptionNotRecorded"); |
||
| 5427 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 5428 | print " " . img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft, not excluded and not resiliated |
||
| 5429 | } |
||
| 5430 | } else { |
||
| 5431 | print $langs->trans("SubscriptionNotReceived"); |
||
| 5432 | if (Adherent::STATUS_VALIDATED == $object->statut) { |
||
| 5433 | print " " . img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft, not excluded and not resiliated |
||
| 5434 | } |
||
| 5435 | } |
||
| 5436 | } |
||
| 5437 | print '</td></tr>'; |
||
| 5438 | |||
| 5439 | print '</table>'; |
||
| 5440 | |||
| 5441 | print '</div>'; |
||
| 5442 | |||
| 5443 | print '<div class="fichehalfright">'; |
||
| 5444 | print '<div class="underbanner clearboth"></div>'; |
||
| 5445 | |||
| 5446 | print '<table class="border tableforfield centpercent">'; |
||
| 5447 | |||
| 5448 | // Tags / Categories |
||
| 5449 | if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { |
||
| 5450 | print '<tr><td>' . $langs->trans("Categories") . '</td>'; |
||
| 5451 | print '<td colspan="2">'; |
||
| 5452 | print $form->showCategories($object->id, Categorie::TYPE_MEMBER, 1); |
||
| 5453 | print '</td></tr>'; |
||
| 5454 | } |
||
| 5455 | |||
| 5456 | // Birth Date |
||
| 5457 | print '<tr><td class="titlefield">' . $langs->trans("DateOfBirth") . '</td><td class="valeur">' . dol_print_date($object->birth, 'day') . '</td></tr>'; |
||
| 5458 | |||
| 5459 | // Default language |
||
| 5460 | if (getDolGlobalInt('MAIN_MULTILANGS')) { |
||
| 5461 | require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; |
||
| 5462 | print '<tr><td>' . $langs->trans("DefaultLang") . '</td><td>'; |
||
| 5463 | //$s=picto_from_langcode($object->default_lang); |
||
| 5464 | //print ($s?$s.' ':''); |
||
| 5465 | $langs->load("languages"); |
||
| 5466 | $labellang = ($object->default_lang ? $langs->trans('Language_' . $object->default_lang) : ''); |
||
| 5467 | print picto_from_langcode($object->default_lang, 'class="paddingrightonly saturatemedium opacitylow"'); |
||
| 5468 | print $labellang; |
||
| 5469 | print '</td></tr>'; |
||
| 5470 | } |
||
| 5471 | |||
| 5472 | // Public |
||
| 5473 | $linkofpubliclist = DOL_MAIN_URL_ROOT . '/public/members/public_list.php' . ((isModEnabled('multicompany')) ? '?entity=' . $conf->entity : ''); |
||
| 5474 | print '<tr><td>' . $form->textwithpicto($langs->trans("PublicFile"), $langs->trans("Public", getDolGlobalString('MAIN_INFO_SOCIETE_NOM'), $linkofpubliclist), 1, 'help', '', 0, 3, 'publicfile') . '</td><td class="valeur">' . yn($object->public) . '</td></tr>'; |
||
| 5475 | |||
| 5476 | // Other attributes |
||
| 5477 | $cols = 2; |
||
| 5478 | include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; |
||
| 5479 | |||
| 5480 | // Third party Dolibarr |
||
| 5481 | if (isModEnabled('societe')) { |
||
| 5482 | print '<tr><td>'; |
||
| 5483 | print '<table class="nobordernopadding" width="100%"><tr><td>'; |
||
| 5484 | print $langs->trans("LinkedToDolibarrThirdParty"); |
||
| 5485 | print '</td>'; |
||
| 5486 | if ($action != 'editthirdparty' && $user->hasRight('adherent', 'creer')) { |
||
| 5487 | print '<td class="right"><a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=editthirdparty&token=' . newToken() . '&rowid=' . $object->id . '">' . img_edit($langs->trans('SetLinkToThirdParty'), 1) . '</a></td>'; |
||
| 5488 | } |
||
| 5489 | print '</tr></table>'; |
||
| 5490 | print '</td><td colspan="2" class="valeur">'; |
||
| 5491 | if ($action == 'editthirdparty') { |
||
| 5492 | $htmlname = 'socid'; |
||
| 5493 | print '<form method="POST" action="' . $_SERVER['PHP_SELF'] . '" name="form' . $htmlname . '">'; |
||
| 5494 | print '<input type="hidden" name="rowid" value="' . $object->id . '">'; |
||
| 5495 | print '<input type="hidden" name="action" value="set' . $htmlname . '">'; |
||
| 5496 | print '<input type="hidden" name="token" value="' . newToken() . '">'; |
||
| 5497 | print '<table class="nobordernopadding">'; |
||
| 5498 | print '<tr><td>'; |
||
| 5499 | print $form->select_company($object->fk_soc, 'socid', '', 1); |
||
| 5500 | print '</td>'; |
||
| 5501 | print '<td class="left"><input type="submit" class="button button-edit" value="' . $langs->trans("Modify") . '"></td>'; |
||
| 5502 | print '</tr></table></form>'; |
||
| 5503 | } else { |
||
| 5504 | if ($object->fk_soc) { |
||
| 5505 | $company = new Societe($db); |
||
| 5506 | $result = $company->fetch($object->fk_soc); |
||
| 5507 | print $company->getNomUrl(1); |
||
| 5508 | |||
| 5509 | // Show link to invoices |
||
| 5510 | $tmparray = $company->getOutstandingBills('customer'); |
||
| 5511 | if (!empty($tmparray['refs'])) { |
||
| 5512 | print ' - ' . img_picto($langs->trans("Invoices"), 'bill', 'class="paddingright"') . '<a href="' . DOL_URL_ROOT . '/compta/facture/list.php?socid=' . $object->socid . '">' . $langs->trans("Invoices") . ' (' . count($tmparray['refs']) . ')'; |
||
| 5513 | // TODO Add alert if warning on at least one invoice late |
||
| 5514 | print '</a>'; |
||
| 5515 | } |
||
| 5516 | } else { |
||
| 5517 | print '<span class="opacitymedium">' . $langs->trans("NoThirdPartyAssociatedToMember") . '</span>'; |
||
| 5518 | } |
||
| 5519 | } |
||
| 5520 | print '</td></tr>'; |
||
| 5521 | } |
||
| 5522 | |||
| 5523 | // Login Dolibarr - Link to user |
||
| 5524 | print '<tr><td>'; |
||
| 5525 | print '<table class="nobordernopadding" width="100%"><tr><td>'; |
||
| 5526 | print $langs->trans("LinkedToDolibarrUser"); |
||
| 5527 | print '</td>'; |
||
| 5528 | if ($action != 'editlogin' && $user->hasRight('adherent', 'creer')) { |
||
| 5529 | print '<td class="right">'; |
||
| 5530 | if ($user->hasRight("user", "user", "creer")) { |
||
| 5531 | print '<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=editlogin&token=' . newToken() . '&rowid=' . $object->id . '">' . img_edit($langs->trans('SetLinkToUser'), 1) . '</a>'; |
||
| 5532 | } |
||
| 5533 | print '</td>'; |
||
| 5534 | } |
||
| 5535 | print '</tr></table>'; |
||
| 5536 | print '</td><td colspan="2" class="valeur">'; |
||
| 5537 | if ($action == 'editlogin') { |
||
| 5538 | $form->form_users($_SERVER['PHP_SELF'] . '?rowid=' . $object->id, $object->user_id, 'userid', ''); |
||
| 5539 | } else { |
||
| 5540 | if ($object->user_id) { |
||
| 5541 | $linkeduser = new User($db); |
||
| 5542 | $linkeduser->fetch($object->user_id); |
||
| 5543 | print $linkeduser->getNomUrl(-1); |
||
| 5544 | } else { |
||
| 5545 | print '<span class="opacitymedium">' . $langs->trans("NoDolibarrAccess") . '</span>'; |
||
| 5546 | } |
||
| 5547 | } |
||
| 5548 | print '</td></tr>'; |
||
| 5549 | |||
| 5550 | print "</table>\n"; |
||
| 5551 | |||
| 5552 | print "</div></div>\n"; |
||
| 5553 | print '<div class="clearboth"></div>'; |
||
| 5554 | |||
| 5555 | print dol_get_fiche_end(); |
||
| 5556 | |||
| 5557 | |||
| 5558 | /* |
||
| 5559 | * Action bar |
||
| 5560 | */ |
||
| 5561 | |||
| 5562 | // Button to create a new subscription if member no draft (-1) neither resiliated (0) neither excluded (-2) |
||
| 5563 | if ($user->hasRight('adherent', 'cotisation', 'creer')) { |
||
| 5564 | if ($action != 'addsubscription' && $action != 'create_thirdparty') { |
||
| 5565 | print '<div class="tabsAction">'; |
||
| 5566 | |||
| 5567 | if ($object->statut > 0) { |
||
| 5568 | print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?rowid=' . $rowid . '&action=addsubscription&token=' . newToken() . '">' . $langs->trans("AddSubscription") . "</a></div>"; |
||
| 5569 | } else { |
||
| 5570 | print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' . dol_escape_htmltag($langs->trans("ValidateBefore")) . '">' . $langs->trans("AddSubscription") . '</a></div>'; |
||
| 5571 | } |
||
| 5572 | |||
| 5573 | print '</div>'; |
||
| 5574 | } |
||
| 5575 | } |
||
| 5576 | |||
| 5577 | /* |
||
| 5578 | * List of subscriptions |
||
| 5579 | */ |
||
| 5580 | if ($action != 'addsubscription' && $action != 'create_thirdparty') { |
||
| 5581 | $sql = "SELECT d.rowid, d.firstname, d.lastname, d.societe, d.fk_adherent_type as type,"; |
||
| 5582 | $sql .= " c.rowid as crowid, c.subscription,"; |
||
| 5583 | $sql .= " c.datec, c.fk_type as cfk_type,"; |
||
| 5584 | $sql .= " c.dateadh as dateh,"; |
||
| 5585 | $sql .= " c.datef,"; |
||
| 5586 | $sql .= " c.fk_bank,"; |
||
| 5587 | $sql .= " b.rowid as bid,"; |
||
| 5588 | $sql .= " ba.rowid as baid, ba.label, ba.bank, ba.ref, ba.account_number, ba.fk_accountancy_journal, ba.number, ba.currency_code"; |
||
| 5589 | $sql .= " FROM " . MAIN_DB_PREFIX . "adherent as d, " . MAIN_DB_PREFIX . "subscription as c"; |
||
| 5590 | $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank as b ON c.fk_bank = b.rowid"; |
||
| 5591 | $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_account as ba ON b.fk_account = ba.rowid"; |
||
| 5592 | $sql .= " WHERE d.rowid = c.fk_adherent AND d.rowid=" . ((int) $rowid); |
||
| 5593 | $sql .= $db->order($sortfield, $sortorder); |
||
| 5594 | |||
| 5595 | $result = $db->query($sql); |
||
| 5596 | if ($result) { |
||
| 5597 | $subscriptionstatic = new Subscription($db); |
||
| 5598 | |||
| 5599 | $num = $db->num_rows($result); |
||
| 5600 | |||
| 5601 | print '<table class="noborder centpercent">' . "\n"; |
||
| 5602 | |||
| 5603 | print '<tr class="liste_titre">'; |
||
| 5604 | print_liste_field_titre('Ref', $_SERVER['PHP_SELF'], 'c.rowid', '', $param, '', $sortfield, $sortorder); |
||
| 5605 | print_liste_field_titre('DateCreation', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'center '); |
||
| 5606 | print_liste_field_titre('Type', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'center '); |
||
| 5607 | print_liste_field_titre('DateStart', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'center '); |
||
| 5608 | print_liste_field_titre('DateEnd', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'center '); |
||
| 5609 | print_liste_field_titre('Amount', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); |
||
| 5610 | if (isModEnabled('bank')) { |
||
| 5611 | print_liste_field_titre('Account', $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'right '); |
||
| 5612 | } |
||
| 5613 | print "</tr>\n"; |
||
| 5614 | |||
| 5615 | $accountstatic = new Account($db); |
||
| 5616 | $adh = new Adherent($db); |
||
| 5617 | $adht = new AdherentType($db); |
||
| 5618 | |||
| 5619 | $i = 0; |
||
| 5620 | while ($i < $num) { |
||
| 5621 | $objp = $db->fetch_object($result); |
||
| 5622 | |||
| 5623 | $adh->id = $objp->rowid; |
||
| 5624 | $adh->typeid = $objp->type; |
||
| 5625 | |||
| 5626 | $subscriptionstatic->ref = $objp->crowid; |
||
| 5627 | $subscriptionstatic->id = $objp->crowid; |
||
| 5628 | |||
| 5629 | $typeid = $objp->cfk_type; |
||
| 5630 | if ($typeid > 0) { |
||
| 5631 | $adht->fetch($typeid); |
||
| 5632 | } |
||
| 5633 | |||
| 5634 | print '<tr class="oddeven">'; |
||
| 5635 | print '<td>' . $subscriptionstatic->getNomUrl(1) . '</td>'; |
||
| 5636 | print '<td class="center">' . dol_print_date($db->jdate($objp->datec), 'dayhour') . "</td>\n"; |
||
| 5637 | print '<td class="center">'; |
||
| 5638 | if ($typeid > 0) { |
||
| 5639 | print $adht->getNomUrl(1); |
||
| 5640 | } |
||
| 5641 | print '</td>'; |
||
| 5642 | print '<td class="center">' . dol_print_date($db->jdate($objp->dateh), 'day') . "</td>\n"; |
||
| 5643 | print '<td class="center">' . dol_print_date($db->jdate($objp->datef), 'day') . "</td>\n"; |
||
| 5644 | print '<td class="right amount">' . price($objp->subscription) . '</td>'; |
||
| 5645 | if (isModEnabled('bank')) { |
||
| 5646 | print '<td class="right">'; |
||
| 5647 | if ($objp->bid) { |
||
| 5648 | $accountstatic->label = $objp->label; |
||
| 5649 | $accountstatic->id = $objp->baid; |
||
| 5650 | $accountstatic->number = $objp->number; |
||
| 5651 | $accountstatic->account_number = $objp->account_number; |
||
| 5652 | $accountstatic->currency_code = $objp->currency_code; |
||
| 5653 | |||
| 5654 | if (isModEnabled('accounting') && $objp->fk_accountancy_journal > 0) { |
||
| 5655 | $accountingjournal = new AccountingJournal($db); |
||
| 5656 | $accountingjournal->fetch($objp->fk_accountancy_journal); |
||
| 5657 | |||
| 5658 | $accountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1, '', 1); |
||
| 5659 | } |
||
| 5660 | |||
| 5661 | $accountstatic->ref = $objp->ref; |
||
| 5662 | print $accountstatic->getNomUrl(1); |
||
| 5663 | } else { |
||
| 5664 | print ' '; |
||
| 5665 | } |
||
| 5666 | print '</td>'; |
||
| 5667 | } |
||
| 5668 | print "</tr>"; |
||
| 5669 | $i++; |
||
| 5670 | } |
||
| 5671 | |||
| 5672 | if (empty($num)) { |
||
| 5673 | $colspan = 6; |
||
| 5674 | if (isModEnabled('bank')) { |
||
| 5675 | $colspan++; |
||
| 5676 | } |
||
| 5677 | print '<tr><td colspan="' . $colspan . '"><span class="opacitymedium">' . $langs->trans("None") . '</span></td></tr>'; |
||
| 5678 | } |
||
| 5679 | |||
| 5680 | print "</table>"; |
||
| 5681 | } else { |
||
| 5682 | dol_print_error($db); |
||
| 5683 | } |
||
| 5684 | } |
||
| 5685 | |||
| 5686 | |||
| 5687 | if (($action != 'addsubscription' && $action != 'create_thirdparty')) { |
||
| 5688 | // Shon online payment link |
||
| 5689 | $useonlinepayment = (isModEnabled('paypal') || isModEnabled('stripe') || isModEnabled('paybox')); |
||
| 5690 | |||
| 5691 | $parameters = array(); |
||
| 5692 | $reshook = $hookmanager->executeHooks('doShowOnlinePaymentUrl', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 5693 | if ($reshook > 0) { |
||
| 5694 | if (isset($hookmanager->resArray['showonlinepaymenturl'])) { |
||
| 5695 | $useonlinepayment = $hookmanager->resArray['showonlinepaymenturl']; |
||
| 5696 | } |
||
| 5697 | } |
||
| 5698 | |||
| 5699 | if ($useonlinepayment) { |
||
| 5700 | print '<br>'; |
||
| 5701 | |||
| 5702 | require_once DOL_DOCUMENT_ROOT . '/core/lib/payments.lib.php'; |
||
| 5703 | print showOnlinePaymentUrl('membersubscription', $object->ref); |
||
| 5704 | print '<br>'; |
||
| 5705 | } |
||
| 5706 | } |
||
| 5707 | |||
| 5708 | /* |
||
| 5709 | * Add new subscription form |
||
| 5710 | */ |
||
| 5711 | if (($action == 'addsubscription' || $action == 'create_thirdparty') && $user->hasRight('adherent', 'cotisation', 'creer')) { |
||
| 5712 | print '<br>'; |
||
| 5713 | |||
| 5714 | print load_fiche_titre($langs->trans("NewCotisation")); |
||
| 5715 | |||
| 5716 | // Define default choice for complementary actions |
||
| 5717 | $bankdirect = 0; // 1 means option by default is write to bank direct with no invoice |
||
| 5718 | $invoiceonly = 0; // 1 means option by default is invoice only |
||
| 5719 | $bankviainvoice = 0; // 1 means option by default is write to bank via invoice |
||
| 5720 | if (GETPOST('paymentsave')) { |
||
| 5721 | if (GETPOST('paymentsave') == 'bankdirect') { |
||
| 5722 | $bankdirect = 1; |
||
| 5723 | } |
||
| 5724 | if (GETPOST('paymentsave') == 'invoiceonly') { |
||
| 5725 | $invoiceonly = 1; |
||
| 5726 | } |
||
| 5727 | if (GETPOST('paymentsave') == 'bankviainvoice') { |
||
| 5728 | $bankviainvoice = 1; |
||
| 5729 | } |
||
| 5730 | } else { |
||
| 5731 | if (getDolGlobalString('ADHERENT_BANK_USE') == 'bankviainvoice' && isModEnabled('bank') && isModEnabled('societe') && isModEnabled('invoice')) { |
||
| 5732 | $bankviainvoice = 1; |
||
| 5733 | } elseif (getDolGlobalString('ADHERENT_BANK_USE') == 'bankdirect' && isModEnabled('bank')) { |
||
| 5734 | $bankdirect = 1; |
||
| 5735 | } elseif (getDolGlobalString('ADHERENT_BANK_USE') == 'invoiceonly' && isModEnabled('bank') && isModEnabled('societe') && isModEnabled('invoice')) { |
||
| 5736 | $invoiceonly = 1; |
||
| 5737 | } |
||
| 5738 | } |
||
| 5739 | |||
| 5740 | print "\n\n<!-- Form add subscription -->\n"; |
||
| 5741 | |||
| 5742 | if ($conf->use_javascript_ajax) { |
||
| 5743 | //var_dump($bankdirect.'-'.$bankviainvoice.'-'.$invoiceonly); |
||
| 5744 | print "\n" . '<script type="text/javascript">'; |
||
| 5745 | print '$(document).ready(function () { |
||
| 5746 | $(".bankswitchclass, .bankswitchclass2").' . (($bankdirect || $bankviainvoice) ? 'show()' : 'hide()') . '; |
||
| 5747 | $("#none, #invoiceonly").click(function() { |
||
| 5748 | $(".bankswitchclass").hide(); |
||
| 5749 | $(".bankswitchclass2").hide(); |
||
| 5750 | }); |
||
| 5751 | $("#bankdirect, #bankviainvoice").click(function() { |
||
| 5752 | $(".bankswitchclass").show(); |
||
| 5753 | $(".bankswitchclass2").show(); |
||
| 5754 | }); |
||
| 5755 | $("#selectoperation").change(function() { |
||
| 5756 | var code = $(this).val(); |
||
| 5757 | if (code == "CHQ") |
||
| 5758 | { |
||
| 5759 | $(".fieldrequireddyn").addClass("fieldrequired"); |
||
| 5760 | if ($("#fieldchqemetteur").val() == "") |
||
| 5761 | { |
||
| 5762 | $("#fieldchqemetteur").val($("#memberlabel").val()); |
||
| 5763 | } |
||
| 5764 | } |
||
| 5765 | else |
||
| 5766 | { |
||
| 5767 | $(".fieldrequireddyn").removeClass("fieldrequired"); |
||
| 5768 | } |
||
| 5769 | }); |
||
| 5770 | '; |
||
| 5771 | if (GETPOST('paymentsave')) { |
||
| 5772 | print '$("#' . GETPOST('paymentsave', 'aZ09') . '").prop("checked", true);'; |
||
| 5773 | } |
||
| 5774 | print '});'; |
||
| 5775 | print '</script>' . "\n"; |
||
| 5776 | } |
||
| 5777 | |||
| 5778 | |||
| 5779 | // Confirm create third party |
||
| 5780 | if ($action == 'create_thirdparty') { |
||
| 5781 | $companyalias = ''; |
||
| 5782 | $fullname = $object->getFullName($langs); |
||
| 5783 | |||
| 5784 | if ($object->morphy == 'mor') { |
||
| 5785 | $companyname = $object->company; |
||
| 5786 | if (!empty($fullname)) { |
||
| 5787 | $companyalias = $fullname; |
||
| 5788 | } |
||
| 5789 | } else { |
||
| 5790 | $companyname = $fullname; |
||
| 5791 | if (!empty($object->company)) { |
||
| 5792 | $companyalias = $object->company; |
||
| 5793 | } |
||
| 5794 | } |
||
| 5795 | |||
| 5796 | // Create a form array |
||
| 5797 | $formquestion = array( |
||
| 5798 | array('label' => $langs->trans("NameToCreate"), 'type' => 'text', 'name' => 'companyname', 'value' => $companyname, 'morecss' => 'minwidth300', 'moreattr' => 'maxlength="128"'), |
||
| 5799 | array('label' => $langs->trans("AliasNames"), 'type' => 'text', 'name' => 'companyalias', 'value' => $companyalias, 'morecss' => 'minwidth300', 'moreattr' => 'maxlength="128"') |
||
| 5800 | ); |
||
| 5801 | // If customer code was forced to "required", we ask it at creation to avoid error later |
||
| 5802 | if (getDolGlobalString('MAIN_COMPANY_CODE_ALWAYS_REQUIRED')) { |
||
| 5803 | $tmpcompany = new Societe($db); |
||
| 5804 | $tmpcompany->name = $companyname; |
||
| 5805 | $tmpcompany->get_codeclient($tmpcompany, 0); |
||
| 5806 | $customercode = $tmpcompany->code_client; |
||
| 5807 | $formquestion[] = array( |
||
| 5808 | 'label' => $langs->trans("CustomerCode"), |
||
| 5809 | 'type' => 'text', |
||
| 5810 | 'name' => 'customercode', |
||
| 5811 | 'value' => $customercode, |
||
| 5812 | 'morecss' => 'minwidth300', |
||
| 5813 | 'moreattr' => 'maxlength="128"', |
||
| 5814 | ); |
||
| 5815 | } |
||
| 5816 | // @todo Add other extrafields mandatory for thirdparty creation |
||
| 5817 | |||
| 5818 | print $form->formconfirm($_SERVER['PHP_SELF'] . "?rowid=" . $object->id, $langs->trans("CreateDolibarrThirdParty"), $langs->trans("ConfirmCreateThirdParty"), "confirm_create_thirdparty", $formquestion, 1); |
||
| 5819 | } |
||
| 5820 | |||
| 5821 | |||
| 5822 | print '<form name="subscription" method="POST" action="' . $_SERVER['PHP_SELF'] . '">'; |
||
| 5823 | print '<input type="hidden" name="token" value="' . newToken() . '">'; |
||
| 5824 | print '<input type="hidden" name="action" value="subscription">'; |
||
| 5825 | print '<input type="hidden" name="rowid" value="' . $rowid . '">'; |
||
| 5826 | print '<input type="hidden" name="memberlabel" id="memberlabel" value="' . dol_escape_htmltag($object->getFullName($langs)) . '">'; |
||
| 5827 | print '<input type="hidden" name="thirdpartylabel" id="thirdpartylabel" value="' . dol_escape_htmltag($object->company) . '">'; |
||
| 5828 | |||
| 5829 | print dol_get_fiche_head(''); |
||
| 5830 | |||
| 5831 | print '<div class="div-table-responsive">'; |
||
| 5832 | print '<table class="border centpercent">' . "\n"; |
||
| 5833 | print '<tbody>'; |
||
| 5834 | |||
| 5835 | // Date payment |
||
| 5836 | if (GETPOST('paymentyear') && GETPOST('paymentmonth') && GETPOST('paymentday')) { |
||
| 5837 | $paymentdate = dol_mktime(0, 0, 0, GETPOST('paymentmonth'), GETPOST('paymentday'), GETPOST('paymentyear')); |
||
| 5838 | } |
||
| 5839 | |||
| 5840 | print '<tr>'; |
||
| 5841 | // Date start subscription |
||
| 5842 | $currentyear = dol_print_date($now, "%Y"); |
||
| 5843 | $currentmonth = dol_print_date($now, "%m"); |
||
| 5844 | print '<td class="fieldrequired">' . $langs->trans("DateSubscription") . '</td><td>'; |
||
| 5845 | if (GETPOST('reday')) { |
||
| 5846 | $datefrom = dol_mktime(0, 0, 0, GETPOSTINT('remonth'), GETPOSTINT('reday'), GETPOSTINT('reyear')); |
||
| 5847 | } |
||
| 5848 | if (!$datefrom) { |
||
| 5849 | $datefrom = $object->datevalid; |
||
| 5850 | if (getDolGlobalString('MEMBER_SUBSCRIPTION_START_AFTER')) { |
||
| 5851 | $datefrom = dol_time_plus_duree($now, (int) substr(getDolGlobalString('MEMBER_SUBSCRIPTION_START_AFTER'), 0, -1), substr(getDolGlobalString('MEMBER_SUBSCRIPTION_START_AFTER'), -1)); |
||
| 5852 | } elseif ($object->datefin > 0 && dol_time_plus_duree($object->datefin, $defaultdelay, $defaultdelayunit) > $now) { |
||
| 5853 | $datefrom = dol_time_plus_duree($object->datefin, 1, 'd'); |
||
| 5854 | } |
||
| 5855 | |||
| 5856 | if (getDolGlobalString('MEMBER_SUBSCRIPTION_START_FIRST_DAY_OF') === "m") { |
||
| 5857 | $datefrom = dol_get_first_day(dol_print_date($datefrom, "%Y"), dol_print_date($datefrom, "%m")); |
||
| 5858 | } elseif (getDolGlobalString('MEMBER_SUBSCRIPTION_START_FIRST_DAY_OF') === "Y") { |
||
| 5859 | $datefrom = dol_get_first_day(dol_print_date($datefrom, "%Y")); |
||
| 5860 | } |
||
| 5861 | } |
||
| 5862 | print $form->selectDate($datefrom, '', 0, 0, 0, "subscription", 1, 1); |
||
| 5863 | print "</td></tr>"; |
||
| 5864 | |||
| 5865 | // Date end subscription |
||
| 5866 | if (GETPOST('endday')) { |
||
| 5867 | $dateto = dol_mktime(0, 0, 0, GETPOSTINT('endmonth'), GETPOSTINT('endday'), GETPOSTINT('endyear')); |
||
| 5868 | } |
||
| 5869 | if (!$dateto) { |
||
| 5870 | if (getDolGlobalInt('MEMBER_SUBSCRIPTION_SUGGEST_END_OF_MONTH')) { |
||
| 5871 | $dateto = dol_get_last_day(dol_print_date($datefrom, "%Y"), dol_print_date($datefrom, "%m")); |
||
| 5872 | } elseif (getDolGlobalInt('MEMBER_SUBSCRIPTION_SUGGEST_END_OF_YEAR')) { |
||
| 5873 | $dateto = dol_get_last_day(dol_print_date($datefrom, "%Y")); |
||
| 5874 | } else { |
||
| 5875 | $dateto = -1; // By default, no date is suggested |
||
| 5876 | } |
||
| 5877 | } |
||
| 5878 | print '<tr><td>' . $langs->trans("DateEndSubscription") . '</td><td>'; |
||
| 5879 | print $form->selectDate($dateto, 'end', 0, 0, 0, "subscription", 1, 0); |
||
| 5880 | print "</td></tr>"; |
||
| 5881 | |||
| 5882 | if ($adht->subscription) { |
||
| 5883 | // Amount |
||
| 5884 | print '<tr><td class="fieldrequired">' . $langs->trans("Amount") . '</td><td><input type="text" name="subscription" size="6" value="' . (GETPOSTISSET('subscription') ? GETPOST('subscription') : price($adht->amount, 0, '', 0)) . '"> ' . $langs->trans("Currency" . $conf->currency) . '</td></tr>'; |
||
| 5885 | |||
| 5886 | // Label |
||
| 5887 | print '<tr><td>' . $langs->trans("Label") . '</td>'; |
||
| 5888 | print '<td><input name="label" type="text" size="32" value="'; |
||
| 5889 | if (!getDolGlobalString('MEMBER_NO_DEFAULT_LABEL')) { |
||
| 5890 | print $langs->trans("Subscription") . ' ' . dol_print_date(($datefrom ? $datefrom : time()), "%Y"); |
||
| 5891 | } |
||
| 5892 | print '"></td></tr>'; |
||
| 5893 | |||
| 5894 | // Complementary action |
||
| 5895 | if ((isModEnabled('bank') || isModEnabled('invoice')) && !getDolGlobalString('ADHERENT_SUBSCRIPTION_HIDECOMPLEMENTARYACTIONS')) { |
||
| 5896 | $company = new Societe($db); |
||
| 5897 | if ($object->socid) { |
||
| 5898 | $result = $company->fetch($object->socid); |
||
| 5899 | } |
||
| 5900 | |||
| 5901 | // No more action |
||
| 5902 | print '<tr><td class="tdtop fieldrequired">' . $langs->trans('MoreActions'); |
||
| 5903 | print '</td>'; |
||
| 5904 | print '<td class="line-height-large">'; |
||
| 5905 | |||
| 5906 | print '<input type="radio" class="moreaction" id="none" name="paymentsave" value="none"' . (empty($bankdirect) && empty($invoiceonly) && empty($bankviainvoice) ? ' checked' : '') . '>'; |
||
| 5907 | print '<label for="none"> ' . $langs->trans("None") . '</label><br>'; |
||
| 5908 | // Add entry into bank account |
||
| 5909 | if (isModEnabled('bank')) { |
||
| 5910 | print '<input type="radio" class="moreaction" id="bankdirect" name="paymentsave" value="bankdirect"' . (!empty($bankdirect) ? ' checked' : ''); |
||
| 5911 | print '><label for="bankdirect"> ' . $langs->trans("MoreActionBankDirect") . '</label><br>'; |
||
| 5912 | } |
||
| 5913 | // Add invoice with no payments |
||
| 5914 | if (isModEnabled('societe') && isModEnabled('invoice')) { |
||
| 5915 | print '<input type="radio" class="moreaction" id="invoiceonly" name="paymentsave" value="invoiceonly"' . (!empty($invoiceonly) ? ' checked' : ''); |
||
| 5916 | //if (empty($object->fk_soc)) print ' disabled'; |
||
| 5917 | print '><label for="invoiceonly"> ' . $langs->trans("MoreActionInvoiceOnly"); |
||
| 5918 | if ($object->fk_soc) { |
||
| 5919 | print ' (' . $langs->trans("ThirdParty") . ': ' . $company->getNomUrl(1) . ')'; |
||
| 5920 | } else { |
||
| 5921 | print ' ('; |
||
| 5922 | if (empty($object->fk_soc)) { |
||
| 5923 | print img_warning($langs->trans("NoThirdPartyAssociatedToMember")); |
||
| 5924 | } |
||
| 5925 | print $langs->trans("NoThirdPartyAssociatedToMember"); |
||
| 5926 | print ' - <a href="' . $_SERVER['PHP_SELF'] . '?rowid=' . $object->id . '&action=create_thirdparty">'; |
||
| 5927 | print $langs->trans("CreateDolibarrThirdParty"); |
||
| 5928 | print '</a>)'; |
||
| 5929 | } |
||
| 5930 | if (!getDolGlobalString('ADHERENT_VAT_FOR_SUBSCRIPTIONS') || getDolGlobalString('ADHERENT_VAT_FOR_SUBSCRIPTIONS') != 'defaultforfoundationcountry') { |
||
| 5931 | print '. <span class="opacitymedium">' . $langs->trans("NoVatOnSubscription", 0) . '</span>'; |
||
| 5932 | } |
||
| 5933 | if (getDolGlobalString('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS') && (isModEnabled('product') || isModEnabled('service'))) { |
||
| 5934 | $prodtmp = new Product($db); |
||
| 5935 | $result = $prodtmp->fetch(getDolGlobalString('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS')); |
||
| 5936 | if ($result < 0) { |
||
| 5937 | setEventMessage($prodtmp->error, 'errors'); |
||
| 5938 | } |
||
| 5939 | print '. ' . $langs->transnoentitiesnoconv("ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS", $prodtmp->getNomUrl(1)); // must use noentitiesnoconv to avoid to encode html into getNomUrl of product |
||
| 5940 | } |
||
| 5941 | print '</label><br>'; |
||
| 5942 | } |
||
| 5943 | // Add invoice with payments |
||
| 5944 | if (isModEnabled('bank') && isModEnabled('societe') && isModEnabled('invoice')) { |
||
| 5945 | print '<input type="radio" class="moreaction" id="bankviainvoice" name="paymentsave" value="bankviainvoice"' . (!empty($bankviainvoice) ? ' checked' : ''); |
||
| 5946 | //if (empty($object->fk_soc)) print ' disabled'; |
||
| 5947 | print '><label for="bankviainvoice"> ' . $langs->trans("MoreActionBankViaInvoice"); |
||
| 5948 | if ($object->socid) { |
||
| 5949 | print ' (' . $langs->trans("ThirdParty") . ': ' . $company->getNomUrl(1) . ')'; |
||
| 5950 | } else { |
||
| 5951 | print ' ('; |
||
| 5952 | if (empty($object->socid)) { |
||
| 5953 | print img_warning($langs->trans("NoThirdPartyAssociatedToMember")); |
||
| 5954 | } |
||
| 5955 | print $langs->trans("NoThirdPartyAssociatedToMember"); |
||
| 5956 | print ' - <a href="' . $_SERVER['PHP_SELF'] . '?rowid=' . $object->id . '&action=create_thirdparty">'; |
||
| 5957 | print $langs->trans("CreateDolibarrThirdParty"); |
||
| 5958 | print '</a>)'; |
||
| 5959 | } |
||
| 5960 | if (!getDolGlobalString('ADHERENT_VAT_FOR_SUBSCRIPTIONS') || getDolGlobalString('ADHERENT_VAT_FOR_SUBSCRIPTIONS') != 'defaultforfoundationcountry') { |
||
| 5961 | print '. <span class="opacitymedium">' . $langs->trans("NoVatOnSubscription", 0) . '</span>'; |
||
| 5962 | } |
||
| 5963 | if (getDolGlobalString('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS') && (isModEnabled('product') || isModEnabled('service'))) { |
||
| 5964 | $prodtmp = new Product($db); |
||
| 5965 | $result = $prodtmp->fetch(getDolGlobalString('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS')); |
||
| 5966 | if ($result < 0) { |
||
| 5967 | setEventMessage($prodtmp->error, 'errors'); |
||
| 5968 | } |
||
| 5969 | print '. ' . $langs->transnoentitiesnoconv("ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS", $prodtmp->getNomUrl(1)); // must use noentitiesnoconv to avoid to encode html into getNomUrl of product |
||
| 5970 | } |
||
| 5971 | print '</label><br>'; |
||
| 5972 | } |
||
| 5973 | print '</td></tr>'; |
||
| 5974 | |||
| 5975 | // Bank account |
||
| 5976 | print '<tr class="bankswitchclass"><td class="fieldrequired">' . $langs->trans("FinancialAccount") . '</td><td>'; |
||
| 5977 | print img_picto('', 'bank_account'); |
||
| 5978 | $form->select_comptes(GETPOST('accountid'), 'accountid', 0, '', 2, '', 0, 'minwidth200'); |
||
| 5979 | print "</td></tr>\n"; |
||
| 5980 | |||
| 5981 | // Payment mode |
||
| 5982 | print '<tr class="bankswitchclass"><td class="fieldrequired">' . $langs->trans("PaymentMode") . '</td><td>'; |
||
| 5983 | print $form->select_types_paiements(GETPOST('operation'), 'operation', '', 2, 1, 0, 0, 1, 'minwidth200', 1); |
||
| 5984 | print "</td></tr>\n"; |
||
| 5985 | |||
| 5986 | // Date of payment |
||
| 5987 | print '<tr class="bankswitchclass"><td class="fieldrequired">' . $langs->trans("DatePayment") . '</td><td>'; |
||
| 5988 | print $form->selectDate(isset($paymentdate) ? $paymentdate : -1, 'payment', 0, 0, 1, 'subscription', 1, 1); |
||
| 5989 | print "</td></tr>\n"; |
||
| 5990 | |||
| 5991 | print '<tr class="bankswitchclass2"><td>' . $langs->trans('Numero'); |
||
| 5992 | print ' <em>(' . $langs->trans("ChequeOrTransferNumber") . ')</em>'; |
||
| 5993 | print '</td>'; |
||
| 5994 | print '<td><input id="fieldnum_chq" name="num_chq" type="text" size="8" value="' . (!GETPOST('num_chq') ? '' : GETPOST('num_chq')) . '"></td></tr>'; |
||
| 5995 | |||
| 5996 | print '<tr class="bankswitchclass2 fieldrequireddyn"><td>' . $langs->trans('CheckTransmitter'); |
||
| 5997 | print ' <em>(' . $langs->trans("ChequeMaker") . ')</em>'; |
||
| 5998 | print '</td>'; |
||
| 5999 | print '<td><input id="fieldchqemetteur" name="chqemetteur" size="32" type="text" value="' . (!GETPOST('chqemetteur') ? '' : GETPOST('chqemetteur')) . '"></td></tr>'; |
||
| 6000 | |||
| 6001 | print '<tr class="bankswitchclass2"><td>' . $langs->trans('Bank'); |
||
| 6002 | print ' <em>(' . $langs->trans("ChequeBank") . ')</em>'; |
||
| 6003 | print '</td>'; |
||
| 6004 | print '<td><input id="chqbank" name="chqbank" size="32" type="text" value="' . (!GETPOST('chqbank') ? '' : GETPOST('chqbank')) . '"></td></tr>'; |
||
| 6005 | } |
||
| 6006 | } |
||
| 6007 | |||
| 6008 | print '<tr><td></td><td></td></tr>'; |
||
| 6009 | |||
| 6010 | print '<tr><td>' . $langs->trans("SendAcknowledgementByMail") . '</td>'; |
||
| 6011 | print '<td>'; |
||
| 6012 | if (!$object->email) { |
||
| 6013 | print $langs->trans("NoEMail"); |
||
| 6014 | } else { |
||
| 6015 | $adht = new AdherentType($db); |
||
| 6016 | $adht->fetch($object->typeid); |
||
| 6017 | |||
| 6018 | // Send subscription email |
||
| 6019 | $subject = ''; |
||
| 6020 | $msg = ''; |
||
| 6021 | |||
| 6022 | // Send subscription email |
||
| 6023 | include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php'; |
||
| 6024 | $formmail = new FormMail($db); |
||
| 6025 | // Set output language |
||
| 6026 | $outputlangs = new Translate('', $conf); |
||
| 6027 | $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang); |
||
| 6028 | // Load traductions files required by page |
||
| 6029 | $outputlangs->loadLangs(array("main", "members")); |
||
| 6030 | // Get email content from template |
||
| 6031 | $arraydefaultmessage = null; |
||
| 6032 | $labeltouse = getDolGlobalString('ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION'); |
||
| 6033 | |||
| 6034 | if (!empty($labeltouse)) { |
||
| 6035 | $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse); |
||
| 6036 | } |
||
| 6037 | |||
| 6038 | if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) { |
||
| 6039 | $subject = $arraydefaultmessage->topic; |
||
| 6040 | $msg = $arraydefaultmessage->content; |
||
| 6041 | } |
||
| 6042 | |||
| 6043 | $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); |
||
| 6044 | complete_substitutions_array($substitutionarray, $outputlangs, $object); |
||
| 6045 | $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs); |
||
| 6046 | $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnSubscription()), $substitutionarray, $outputlangs); |
||
| 6047 | |||
| 6048 | $tmp = '<input name="sendmail" type="checkbox"' . (GETPOST('sendmail', 'alpha') ? ' checked' : (getDolGlobalString('ADHERENT_DEFAULT_SENDINFOBYMAIL') ? ' checked' : '')) . '>'; |
||
| 6049 | $helpcontent = ''; |
||
| 6050 | $helpcontent .= '<b>' . $langs->trans("MailFrom") . '</b>: ' . getDolGlobalString('ADHERENT_MAIL_FROM') . '<br>' . "\n"; |
||
| 6051 | $helpcontent .= '<b>' . $langs->trans("MailRecipient") . '</b>: ' . $object->email . '<br>' . "\n"; |
||
| 6052 | $helpcontent .= '<b>' . $langs->trans("MailTopic") . '</b>:<br>' . "\n"; |
||
| 6053 | if ($subjecttosend) { |
||
| 6054 | $helpcontent .= $subjecttosend . "\n"; |
||
| 6055 | } else { |
||
| 6056 | $langs->load("errors"); |
||
| 6057 | $helpcontent .= '<span class="error">' . $langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Module310Name")) . '</span>' . "\n"; |
||
| 6058 | } |
||
| 6059 | $helpcontent .= "<br>"; |
||
| 6060 | $helpcontent .= '<b>' . $langs->trans("MailText") . '</b>:<br>'; |
||
| 6061 | if ($texttosend) { |
||
| 6062 | $helpcontent .= dol_htmlentitiesbr($texttosend) . "\n"; |
||
| 6063 | } else { |
||
| 6064 | $langs->load("errors"); |
||
| 6065 | $helpcontent .= '<span class="error">' . $langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Module310Name")) . '</span>' . "\n"; |
||
| 6066 | } |
||
| 6067 | // @phan-suppress-next-line PhanPluginSuspiciousParamOrder |
||
| 6068 | print $form->textwithpicto($tmp, $helpcontent, 1, 'help', '', 0, 2, 'helpemailtosend'); |
||
| 6069 | } |
||
| 6070 | print '</td></tr>'; |
||
| 6071 | print '</tbody>'; |
||
| 6072 | print '</table>'; |
||
| 6073 | print '</div>'; |
||
| 6074 | |||
| 6075 | print dol_get_fiche_end(); |
||
| 6076 | |||
| 6077 | print '<div class="center">'; |
||
| 6078 | $parameters = array(); |
||
| 6079 | $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); |
||
| 6080 | if (empty($reshook)) { |
||
| 6081 | print '<input type="submit" class="button" name="add" value="' . $langs->trans("AddSubscription") . '">'; |
||
| 6082 | print ' '; |
||
| 6083 | print '<input type="submit" class="button button-cancel" name="cancel" value="' . $langs->trans("Cancel") . '">'; |
||
| 6084 | } |
||
| 6085 | print '</div>'; |
||
| 6086 | |||
| 6087 | print '</form>'; |
||
| 6088 | |||
| 6089 | print "\n<!-- End form subscription -->\n\n"; |
||
| 6090 | } |
||
| 6091 | |||
| 6092 | |||
| 6093 | // End of page |
||
| 6094 | llxFooter(); |
||
| 6095 | $db->close(); |
||
| 6096 | } |
||
| 6097 | |||
| 6098 | /** |
||
| 6099 | * \file htdocs/adherents/type.php |
||
| 6100 | * \ingroup member |
||
| 6101 | * \brief Member's type setup |
||
| 6102 | */ |
||
| 6103 | public function type() |
||
| 7092 | } |
||
| 7093 | |||
| 7094 | /** |
||
| 7095 | * \file htdocs/adherents/type_ldap.php |
||
| 7096 | * \ingroup ldap |
||
| 7097 | * \brief Page fiche LDAP members types |
||
| 7098 | */ |
||
| 7099 | public function type_ldap() |
||
| 7100 | { |
||
| 7101 | global $conf; |
||
| 7102 | global $db; |
||
| 7103 | global $user; |
||
| 7104 | global $hookmanager; |
||
| 7105 | global $user; |
||
| 7106 | global $menumanager; |
||
| 7107 | global $langs; |
||
| 7108 | |||
| 7109 | // Load translation files required by the page |
||
| 7110 | $langs->loadLangs(array("admin", "members", "ldap")); |
||
| 7111 | |||
| 7112 | $id = GETPOSTINT('rowid'); |
||
| 7113 | $action = GETPOST('action', 'aZ09'); |
||
| 7114 | |||
| 7115 | // Security check |
||
| 7116 | $result = restrictedArea($user, 'adherent', $id, 'adherent_type'); |
||
| 7117 | |||
| 7118 | $object = new AdherentType($db); |
||
| 7119 | $object->fetch($id); |
||
| 7120 | |||
| 7121 | // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context |
||
| 7122 | $hookmanager->initHooks(array('membertypeldapcard', 'globalcard')); |
||
| 7123 | |||
| 7124 | /* |
||
| 7125 | * Actions |
||
| 7126 | */ |
||
| 7127 | |||
| 7128 | |||
| 7129 | $parameters = array(); |
||
| 7130 | $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks |
||
| 7131 | if ($reshook < 0) { |
||
| 7132 | setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); |
||
| 7133 | } |
||
| 7134 | |||
| 7135 | if (empty($reshook)) { |
||
| 7136 | if ($action == 'dolibarr2ldap') { |
||
| 7137 | $ldap = new Ldap(); |
||
| 7138 | $result = $ldap->connectBind(); |
||
| 7139 | |||
| 7140 | if ($result > 0) { |
||
| 7141 | $object->listMembersForMemberType('', 1); |
||
| 7142 | |||
| 7143 | $info = $object->_load_ldap_info(); |
||
| 7144 | $dn = $object->_load_ldap_dn($info); |
||
| 7145 | $olddn = $dn; // We can say that old dn = dn as we force synchro |
||
| 7146 | |||
| 7147 | $result = $ldap->update($dn, $info, $user, $olddn); |
||
| 7148 | } |
||
| 7149 | |||
| 7150 | if ($result >= 0) { |
||
| 7151 | setEventMessages($langs->trans("MemberTypeSynchronized"), null, 'mesgs'); |
||
| 7152 | } else { |
||
| 7153 | setEventMessages($ldap->error, $ldap->errors, 'errors'); |
||
| 7154 | } |
||
| 7155 | } |
||
| 7156 | } |
||
| 7157 | |||
| 7158 | /* |
||
| 7159 | * View |
||
| 7160 | */ |
||
| 7161 | |||
| 7162 | llxHeader(); |
||
| 7163 | |||
| 7164 | $form = new Form($db); |
||
| 7165 | |||
| 7166 | $head = member_type_prepare_head($object); |
||
| 7167 | |||
| 7168 | print dol_get_fiche_head($head, 'ldap', $langs->trans("MemberType"), -1, 'group'); |
||
| 7169 | |||
| 7170 | $linkback = '<a href="' . DOL_URL_ROOT . '/adherents/type.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>'; |
||
| 7171 | |||
| 7172 | dol_banner_tab($object, 'rowid', $linkback); |
||
| 7173 | |||
| 7174 | print '<div class="fichecenter">'; |
||
| 7175 | print '<div class="underbanner clearboth"></div>'; |
||
| 7176 | |||
| 7177 | print '<table class="border centpercent">'; |
||
| 7178 | |||
| 7179 | // LDAP DN |
||
| 7180 | print '<tr><td>LDAP ' . $langs->trans("LDAPMemberTypeDn") . '</td><td class="valeur">' . getDolGlobalString('LDAP_MEMBER_TYPE_DN') . "</td></tr>\n"; |
||
| 7181 | |||
| 7182 | // LDAP Cle |
||
| 7183 | print '<tr><td>LDAP ' . $langs->trans("LDAPNamingAttribute") . '</td><td class="valeur">' . getDolGlobalString('LDAP_KEY_MEMBERS_TYPES') . "</td></tr>\n"; |
||
| 7184 | |||
| 7185 | // LDAP Server |
||
| 7186 | print '<tr><td>LDAP ' . $langs->trans("Type") . '</td><td class="valeur">' . getDolGlobalString('LDAP_SERVER_TYPE') . "</td></tr>\n"; |
||
| 7187 | print '<tr><td>LDAP ' . $langs->trans("Version") . '</td><td class="valeur">' . getDolGlobalString('LDAP_SERVER_PROTOCOLVERSION') . "</td></tr>\n"; |
||
| 7188 | print '<tr><td>LDAP ' . $langs->trans("LDAPPrimaryServer") . '</td><td class="valeur">' . getDolGlobalString('LDAP_SERVER_HOST') . "</td></tr>\n"; |
||
| 7189 | print '<tr><td>LDAP ' . $langs->trans("LDAPSecondaryServer") . '</td><td class="valeur">' . getDolGlobalString('LDAP_SERVER_HOST_SLAVE') . "</td></tr>\n"; |
||
| 7190 | print '<tr><td>LDAP ' . $langs->trans("LDAPServerPort") . '</td><td class="valeur">' . getDolGlobalString('LDAP_SERVER_PORT') . "</td></tr>\n"; |
||
| 7191 | |||
| 7192 | print '</table>'; |
||
| 7193 | |||
| 7194 | print '</div>'; |
||
| 7195 | |||
| 7196 | print dol_get_fiche_end(); |
||
| 7197 | |||
| 7198 | /* |
||
| 7199 | * Action bar |
||
| 7200 | */ |
||
| 7201 | |||
| 7202 | print '<div class="tabsAction">'; |
||
| 7203 | |||
| 7204 | if (getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) { |
||
| 7205 | print '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?rowid=' . $object->id . '&action=dolibarr2ldap">' . $langs->trans("ForceSynchronize") . '</a>'; |
||
| 7206 | } |
||
| 7207 | |||
| 7208 | print "</div>\n"; |
||
| 7209 | |||
| 7210 | if (getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE') === Ldap::SYNCHRO_DOLIBARR_TO_LDAP) { |
||
| 7211 | print "<br>\n"; |
||
| 7212 | } |
||
| 7213 | |||
| 7214 | |||
| 7215 | |||
| 7216 | // Display LDAP attributes |
||
| 7217 | print load_fiche_titre($langs->trans("LDAPInformationsForThisMemberType")); |
||
| 7218 | |||
| 7219 | print '<table width="100%" class="noborder">'; |
||
| 7220 | |||
| 7221 | print '<tr class="liste_titre">'; |
||
| 7222 | print '<td>' . $langs->trans("LDAPAttributes") . '</td>'; |
||
| 7223 | print '<td>' . $langs->trans("Value") . '</td>'; |
||
| 7224 | print '</tr>'; |
||
| 7225 | |||
| 7226 | // LDAP reading |
||
| 7227 | $ldap = new Ldap(); |
||
| 7228 | $result = $ldap->connectBind(); |
||
| 7229 | if ($result > 0) { |
||
| 7230 | $info = $object->_load_ldap_info(); |
||
| 7231 | $dn = $object->_load_ldap_dn($info, 1); |
||
| 7232 | $search = "(" . $object->_load_ldap_dn($info, 2) . ")"; |
||
| 7233 | |||
| 7234 | $records = $ldap->getAttribute($dn, $search); |
||
| 7235 | |||
| 7236 | //print_r($records); |
||
| 7237 | |||
| 7238 | // Show tree |
||
| 7239 | if (((!is_numeric($records)) || $records != 0) && (!isset($records['count']) || $records['count'] > 0)) { |
||
| 7240 | if (!is_array($records)) { |
||
| 7241 | print '<tr class="oddeven"><td colspan="2"><span class="error">' . $langs->trans("ErrorFailedToReadLDAP") . '</span></td></tr>'; |
||
| 7242 | } else { |
||
| 7243 | $result = show_ldap_content($records, 0, $records['count'], true); |
||
| 7244 | } |
||
| 7245 | } else { |
||
| 7246 | print '<tr class="oddeven"><td colspan="2">' . $langs->trans("LDAPRecordNotFound") . ' (dn=' . dol_escape_htmltag($dn) . ' - search=' . dol_escape_htmltag($search) . ')</td></tr>'; |
||
| 7247 | } |
||
| 7248 | |||
| 7249 | $ldap->unbind(); |
||
| 7250 | } else { |
||
| 7251 | setEventMessages($ldap->error, $ldap->errors, 'errors'); |
||
| 7252 | } |
||
| 7253 | |||
| 7254 | print '</table>'; |
||
| 7255 | |||
| 7256 | // End of page |
||
| 7257 | llxFooter(); |
||
| 7258 | $db->close(); |
||
| 7259 | } |
||
| 7260 | |||
| 7261 | /** |
||
| 7262 | * \file htdocs/adherents/type_translation.php |
||
| 7263 | * \ingroup product |
||
| 7264 | * \brief Member translation page |
||
| 7265 | */ |
||
| 7266 | public function type_translation() |
||
| 7551 | } |
||
| 7552 | |||
| 7553 | /** |
||
| 7554 | * \file htdocs/adherents/vcard.php |
||
| 7555 | * \ingroup societe |
||
| 7556 | * \brief Vcard tab of a member |
||
| 7557 | */ |
||
| 7558 | public function vcard() |
||
| 7709 | } |
||
| 7710 | |||
| 7711 | } |
||
| 7712 |
In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.