dolibarr 21.0.0-beta
perso.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2018-2024 Frédéric France <frederic.france@free.fr>
6 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
7 * Copyright (C) 2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
29// Load Dolibarr environment
30require '../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
32require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
33require_once DOL_DOCUMENT_ROOT.'/core/lib/contact.lib.php';
34
43// Load translation files required by the page
44$langs->loadLangs(array('companies', 'other'));
45
46$id = GETPOSTINT('id');
47$action = GETPOST('action', 'aZ09');
48
49// Security check
50if ($user->socid) {
51 $socid = $user->socid;
52}
53$result = restrictedArea($user, 'contact', $id, 'socpeople&societe');
54$object = new Contact($db);
55
56$errors = array();
57
58
59/*
60 * Action
61 */
62
63if ($action == 'update' && !GETPOST("cancel") && $user->hasRight('societe', 'contact', 'creer')) {
64 $ret = $object->fetch($id);
65
66 // Note: Correct date should be completed with location to have exact GM time of birth.
67 $object->birthday = dol_mktime(0, 0, 0, GETPOSTINT("birthdaymonth"), GETPOSTINT("birthdayday"), GETPOSTINT("birthdayyear"));
68 $object->birthday_alert = GETPOSTINT("birthday_alert");
69
70 if (GETPOST('deletephoto')) {
71 $object->photo = '';
72 } elseif (!empty($_FILES['photo']['name'])) {
73 $object->photo = dol_sanitizeFileName($_FILES['photo']['name']);
74 }
75
76 $result = $object->update_perso($id, $user);
77 if ($result > 0) {
78 $object->oldcopy = dol_clone($object, 2); // @phan-suppress-current-line PhanTypeMismatchProperty
79
80 // Logo/Photo save
81 $dir = $conf->societe->dir_output.'/contact/'.get_exdir($object->id, 0, 0, 1, $object, 'contact').'/photos';
82
83 $file_OK = is_uploaded_file($_FILES['photo']['tmp_name']);
84 if ($file_OK) {
85 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
86 require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
87 if (GETPOST('deletephoto')) {
88 $fileimg = $conf->societe->dir_output.'/contact/'.get_exdir($object->id, 0, 0, 1, $object, 'contact').'/photos/'.$object->photo;
89 $dirthumbs = $conf->societe->dir_output.'/contact/'.get_exdir($object->id, 0, 0, 1, $object, 'contact').'/photos/thumbs';
90 dol_delete_file($fileimg);
91 dol_delete_dir_recursive($dirthumbs);
92 }
93
94 if (image_format_supported($_FILES['photo']['name']) > 0) {
95 dol_mkdir($dir);
96
97 if (@is_dir($dir)) {
98 $newfile = $dir.'/'.dol_sanitizeFileName($_FILES['photo']['name']);
99 if (!dol_move_uploaded_file($_FILES['photo']['tmp_name'], $newfile, 1, 0, $_FILES['photo']['error']) > 0) {
100 setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors');
101 } else {
102 // Create thumbs
103 $object->addThumbs($newfile);
104 }
105 }
106 } else {
107 setEventMessages("ErrorBadImageFormat", null, 'errors');
108 }
109 } else {
110 switch ($_FILES['photo']['error']) {
111 case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
112 case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
113 $errors[] = "ErrorFileSizeTooLarge";
114 break;
115 case 3: //uploaded file was only partially uploaded
116 $errors[] = "ErrorFilePartiallyUploaded";
117 break;
118 }
119 }
120 } else {
121 $error = $object->error;
122 }
123}
124
125
126/*
127 * View
128 */
129
130$now = dol_now();
131
132$title = $langs->trans("ContactPersonalData");
133if (getDolGlobalString('MAIN_HTML_TITLE') && preg_match('/contactnameonly/', getDolGlobalString('MAIN_HTML_TITLE')) && $object->lastname) {
134 $title = $object->lastname;
135}
136$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';
137
138llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-societe page-contact-card_perso');
139
140$form = new Form($db);
141$formcompany = new FormCompany($db);
142
143$object->fetch($id, $user);
144
145$head = contact_prepare_head($object);
146
147if ($action == 'edit') {
148 /*
149 * Card in edit mode
150 */
151
152 print '<form name="perso" method="POST" enctype="multipart/form-data" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
153 print '<input type="hidden" name="token" value="'.newToken().'">';
154 print '<input type="hidden" name="action" value="update">';
155 print '<input type="hidden" name="id" value="'.$object->id.'">';
156
157 print dol_get_fiche_head($head, 'perso', $title, 0, 'contact');
158
159 print '<table class="border centpercent">';
160
161 // Ref
162 print '<tr><td class="titlefieldcreate">'.$langs->trans("Ref").'</td><td>';
163 print $object->id;
164 print '</td>';
165
166 // Name
167 print '<tr><td>'.$langs->trans("Lastname").' / '.$langs->trans("Label").'</td><td>'.$object->lastname.'</td></tr>';
168 print '<tr><td>'.$langs->trans("Firstname").'</td><td>'.$object->firstname.'</td>';
169
170 // Company
171 if (!getDolGlobalString('SOCIETE_DISABLE_CONTACTS')) {
172 if ($object->socid > 0) {
173 $objsoc = new Societe($db);
174 $objsoc->fetch($object->socid);
175
176 print '<tr><td>'.$langs->trans("ThirdParty").'</td><td>'.$objsoc->getNomUrl(1).'</td>';
177 } else {
178 print '<tr><td>'.$langs->trans("ThirdParty").'</td><td>';
179 print $langs->trans("ContactNotLinkedToCompany");
180 print '</td></tr>';
181 }
182 }
183
184 // Civility
185 print '<tr><td><label for="civility_code">'.$langs->trans("UserTitle").'</label></td><td>';
186 print $object->getCivilityLabel();
187 //print $formcompany->select_civility(GETPOSTISSET("civility_code") ? GETPOST("civility_code", 'alpha') : $object->civility_code, 'civility_code');
188 print '</td></tr>';
189
190 // Photo
191 print '<tr class="hideonsmartphone">';
192 print '<td>'.$form->editfieldkey('PhotoFile', 'photoinput', '', $object, 0).'</td>';
193 print '<td>';
194 if ($object->photo) {
195 print $form->showphoto('contact', $object);
196 }
197 $caneditfield = 1;
198 if ($caneditfield) {
199 if ($object->photo) {
200 print "<br>\n";
201 }
202 print '<table class="nobordernopadding">';
203 if ($object->photo) {
204 print '<tr><td><input type="checkbox" class="flat photodelete" name="deletephoto" id="photodelete"> <label for="photodelete">'.$langs->trans("Delete").'</photo><br><br></td></tr>';
205 }
206 //print '<tr><td>'.$langs->trans("PhotoFile").'</td></tr>';
207 print '<tr><td>';
208 $maxfilesizearray = getMaxFileSizeArray();
209 $maxmin = $maxfilesizearray['maxmin'];
210 if ($maxmin > 0) {
211 print '<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).'">'; // MAX_FILE_SIZE must precede the field type=file
212 }
213 print '<input type="file" class="flat" name="photo" id="photoinput">';
214 print '</td></tr>';
215 print '</table>';
216 }
217 print '</td>';
218 print '</tr>';
219
220 // Date To Birth
221 print '<tr><td>'.$langs->trans("DateOfBirth").'</td><td>';
222 $form = new Form($db);
223 print $form->selectDate($object->birthday, 'birthday', 0, 0, 1, "perso", 1, 0);
224 print ' &nbsp; &nbsp; ';
225 print '<label for="birthday_alert">'.$langs->trans("BirthdayAlert").':</label> ';
226 if (!empty($object->birthday_alert)) {
227 print '<input type="checkbox" id="birthday_alert" name="birthday_alert" value="1" checked>';
228 } else {
229 print '<input type="checkbox" id="birthday_alert" name="birthday_alert" value="1">';
230 }
231 print '</td>';
232 print '</tr>';
233
234 print "</table>";
235
236 print dol_get_fiche_end();
237
238 print $form->buttonsSaveCancel();
239
240 print "</form>";
241} else {
242 // View mode
243
244 print dol_get_fiche_head($head, 'perso', $title, -1, 'contact');
245
246 $linkback = '<a href="'.DOL_URL_ROOT.'/contact/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
247
248 $morehtmlref = '<a href="'.DOL_URL_ROOT.'/contact/vcard.php?id='.$object->id.'" class="refid">';
249 $morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"');
250 $morehtmlref .= '</a>';
251
252 $morehtmlref .= '<div class="refidno">';
253 if (!getDolGlobalString('SOCIETE_DISABLE_CONTACTS')) {
254 $objsoc = new Societe($db);
255 $objsoc->fetch($object->socid);
256 // Thirdparty
257 if ($objsoc->id > 0) {
258 $morehtmlref .= $objsoc->getNomUrl(1);
259 } else {
260 $morehtmlref .= '<span class="opacitymedium">'.$langs->trans("ContactNotLinkedToCompany").'</span>';
261 }
262 }
263 $morehtmlref .= '</div>';
264
265
266 dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref);
267
268
269 print '<div class="fichecenter">';
270
271 print '<div class="underbanner clearboth"></div>';
272 print '<table class="border centpercent tableforfield">';
273
274 // Company
275 /*
276 if (empty($conf->global->SOCIETE_DISABLE_CONTACTS))
277 {
278 if ($object->socid > 0)
279 {
280 $objsoc = new Societe($db);
281 $objsoc->fetch($object->socid);
282
283 print '<tr><td>'.$langs->trans("ThirdParty").'</td><td colspan="3">'.$objsoc->getNomUrl(1).'</td></tr>';
284 }
285
286 else
287 {
288 print '<tr><td>'.$langs->trans("ThirdParty").'</td><td colspan="3">';
289 print $langs->trans("ContactNotLinkedToCompany");
290 print '</td></tr>';
291 }
292 }*/
293
294 // Civility
295 print '<tr><td class="titlefield">'.$langs->trans("UserTitle").'</td><td colspan="3">';
296 print $object->getCivilityLabel();
297 print '</td></tr>';
298
299 // Date To Birth
300 print '<tr>';
301 if (!empty($object->birthday)) {
302 include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
303
304 print '<td>'.$langs->trans("DateOfBirth").'</td><td colspan="3">'.dol_print_date($object->birthday, "day");
305
306 print ' &nbsp; ';
307 //var_dump($birthdatearray);
308 $ageyear = (int) convertSecondToTime($now - $object->birthday, 'year') - 1970;
309 $agemonth = (int) convertSecondToTime($now - $object->birthday, 'month') - 1;
310 if ($ageyear >= 2) {
311 print '('.$ageyear.' '.$langs->trans("DurationYears").')';
312 } elseif ($agemonth >= 2) {
313 print '('.$agemonth.' '.$langs->trans("DurationMonths").')';
314 } else {
315 print '('.$agemonth.' '.$langs->trans("DurationMonth").')';
316 }
317
318
319 print ' &nbsp; - &nbsp; ';
320 if ($object->birthday_alert) {
321 print $langs->trans("BirthdayAlertOn");
322 } else {
323 print $langs->trans("BirthdayAlertOff");
324 }
325 print '</td>';
326 } else {
327 print '<td>'.$langs->trans("DateOfBirth").'</td><td colspan="3"></td>';
328 }
329 print "</tr>";
330
331 print "</table>";
332
333 print '</div>';
334
335 print dol_get_fiche_end();
336}
337
338
339if ($action != 'edit') {
340 /*
341 * Action bar
342 */
343 if ($user->socid == 0) {
344 print '<div class="tabsAction">';
345
346 if ($user->hasRight('societe', 'contact', 'creer')) {
347 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=edit&token='.newToken().'">'.$langs->trans('Modify').'</a>';
348 }
349
350 print "</div>";
351 }
352}
353
354
355llxFooter();
356
357$db->close();
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:71
Class to manage contact/addresses.
Class to build HTML component for third parties management Only common components are here.
Class to manage generation of HTML components Only common components must be here.
Class to manage third parties objects (customers, suppliers, prospects...)
contact_prepare_head(Contact $object)
Prepare array with list of tabs.
convertSecondToTime($iSecond, $format='all', $lengthOfDay=86400, $lengthOfWeek=7)
Return, in clear text, value of a number of seconds in days, hours and minutes.
Definition date.lib.php:244
llxFooter()
Footer empty.
Definition document.php:107
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disablevirusscan=0, $uploaderrorcode=0, $nohook=0, $varfiles='addedfile', $upload_dir='')
Check validity of a file upload from an GUI page, and move it to its final destination.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_now($mode='auto')
Return date for now.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
getMaxFileSizeArray()
Return the max allowed for file upload.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.