1<?php
2/* $Id: contact.class.php,v 1.76 2004/07/16 11:17:06 k-fish Exp $ */
3
4class Contact{
5	var $templatesAreIn="";
6
7    function opMassUpdate($data){
8	global $conn;
9	if(is_array($data['cids'])){
10	  foreach($data['cids'] as $cid)
11	    $cids[] = (int)$cid;
12
13	  // mass update groups
14	  if($data['group']!==0){
15	    $sql="SELECT id,owner FROM mgw_contacts WHERE id IN(".implode(',',$cids).")";
16	    if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
17	    while($row = $res->FetchRow()){
18	      if((($row['owner'] == $_SESSION["MGW"]->userid) &&
19		  queryRights2_bool('root_modules_contact_contact_modify'))
20		 || queryRights2_bool('root_modules_contact_contact_modifyothers')){
21		$sql = 'UPDATE mgw_contacts SET groupid='.(int)$data['group'].' WHERE id='.$row['id'];
22		if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
23	      }
24	    }
25	  }
26
27	  // mass update action
28	  if($data['action']!==0){
29	    $sql="SELECT id,owner FROM mgw_contacts WHERE id IN(".implode(',',$cids).")";
30	    if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
31
32	    switch($data['action']){
33	    case 'delete':
34	      while($row = $res->FetchRow()){
35		if((($row['owner'] == $_SESSION["MGW"]->userid) &&
36		    queryRights2_bool('root_modules_contact_contact_delete'))
37		   || queryRights2_bool('root_modules_contact_contact_deleteothers')){
38		  $sql = 'DELETE FROM mgw_contacts WHERE id='.$row['id'];
39		  if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
40		}
41	      }
42	      break;
43	    case 'private':
44	      while($row = $res->FetchRow()){
45		if((($row['owner'] == $_SESSION["MGW"]->userid) &&
46		    queryRights2_bool('root_modules_contact_contact_modify'))
47		   || queryRights2_bool('root_modules_contact_contact_modifyothers')){
48		  $sql = 'UPDATE mgw_contacts SET ispublic=0 WHERE id='.$row['id'];
49		  if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
50		}
51	      }
52	      break;
53	    case 'public':
54	      while($row = $res->FetchRow()){
55		if((($row['owner'] == $_SESSION["MGW"]->userid) &&
56		    queryRights2_bool('root_modules_contact_contact_modify'))
57		   || queryRights2_bool('root_modules_contact_contact_modifyothers')){
58		  $sql = 'UPDATE mgw_contacts SET ispublic=1 WHERE id='.$row['id'];
59		  if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
60		}
61	      }
62	    }
63	  }
64	  return true;
65	}
66	return false;
67    }
68
69    // =================================================
70    // create item
71    // =================================================
72    function opCreate(){
73	global $conn;
74
75	queryRights2('root_modules_contact_contact_create');
76
77	$id = mgw_genID('mgw__seq_contacts');
78
79	$title = $conn->QMagic(isset($_POST["title"])?$_POST["title"]:"");
80	$honpref = $conn->QMagic(isset($_POST["honpref"])?$_POST["honpref"]:"");
81	$firstname = $conn->QMagic(isset($_POST["firstname"])?$_POST["firstname"]:"");
82	$name_add = $conn->QMagic(isset($_POST["addname"])?$_POST["addname"]:"");
83	$nickname = $conn->QMagic(isset($_POST["nickname"])?$_POST["nickname"]:"");
84	$lastname = $conn->QMagic(isset($_POST["lastname"])?$_POST["lastname"]:"");
85	$name_suffix = $conn->QMagic(isset($_POST["namesuffix"])?$_POST["namesuffix"]:"");
86
87	$street = $conn->QMagic(isset($_POST["priv_strasse"])?$_POST["priv_strasse"]:"");
88	$add = $conn->QMagic(isset($_POST["priv_zusatz"])?$_POST["priv_zusatz"]:"");
89	$zip = $conn->QMagic(isset($_POST["priv_plz"])?$_POST["priv_plz"]:"");
90	$city = $conn->QMagic(isset($_POST["priv_ort"])?$_POST["priv_ort"]:"");
91	$state = $conn->QMagic(isset($_POST["priv_state"])?$_POST["priv_state"]:"");
92	$country = $conn->QMagic(isset($_POST["priv_country"])?$_POST["priv_country"]:"");
93	$region = $conn->QMagic(isset($_POST["priv_region"])?$_POST["priv_region"]:"");
94
95	$priv_phone = $conn->QMagic(isset($_POST["telefon_privat"])?$_POST["telefon_privat"]:"");
96	$fax = $conn->QMagic(isset($_POST["telefax"])?$_POST["telefax"]:"");
97	$email = $conn->QMagic(isset($_POST["email"])?$_POST["email"]:"");
98	$email2 = $conn->QMagic(isset($_POST["email2"])?$_POST["email2"]:"");
99	$email3 = $conn->QMagic(isset($_POST["email3"])?$_POST["email3"]:"");
100	$comp_phone = $conn->QMagic(isset($_POST["telefon_firma"])?$_POST["telefon_firma"]:"");
101	$mobile = $conn->QMagic(isset($_POST["telefon_mobil"])?$_POST["telefon_mobil"]:"");
102	$url = $conn->QMagic(isset($_POST["url"])?$_POST["url"]:"");
103
104	$function = $conn->QMagic(isset($_POST["function"])?$_POST["function"]:"");
105	if(isset($_POST['setbirthday']) and (int) $_POST['setbirthday'] == 1){
106	    $bday = isset($_POST["birthdayDay"])?(int) $_POST["birthdayDay"]:0;
107	    $bmonth = isset($_POST["birthdayMonth"])?(int) $_POST["birthdayMonth"]:0;
108	    $byear = isset($_POST["birthdayYear"])?(int) $_POST["birthdayYear"]:0;
109	    $bday = $conn->DBDate(sprintf("%04d-%02d-%02d",$byear,$bmonth,$bday));
110	}
111	else{
112	    $bday = 'null';
113	}
114	$note = $conn->QMagic(isset($_POST["bemerkung"])?$_POST["bemerkung"]:"");
115	$pubkey = $conn->QMagic(isset($_POST["pubkey"])?$_POST["pubkey"]:"");
116	$group = isset($_POST["_group"])?(int) $_POST["_group"]:0;
117	$public = isset($_POST["public"])?(int) $_POST["public"]:0;
118
119	$company = isset($_POST["_company"])?(int) $_POST["_company"]:0;
120	$newcomp = isset($_POST["newcomp"])?$_POST["newcomp"]:"";
121	if($company==0 && $newcomp!=''){
122	    $company = Company::opCreate(array('name1' => $newcomp));
123	}
124
125	$sql="INSERT INTO mgw_contacts (id, title, honorific_prefix, firstname, name_add, nickname, lastname, name_suffix, priv_street, priv_additional, priv_zip, priv_city, priv_state, priv_countrycode, priv_region, priv_telefon, priv_fax, email, email2, email3, tel_company, tel_mobile, url, function, birthday, note, publicKey, companyid, groupid, ispublic, owner, lu_user, lu_date) VALUES ($id, $title, $honpref, $firstname, $name_add, $nickname, $lastname, $name_suffix, $street, $add, $zip, $city, $state, $country, $region, $priv_phone, $fax, $email, $email2, $email3, $comp_phone, $mobile, $url, $function, $bday, $note, $pubkey, $company, $group, $public, ".$_SESSION["MGW"]->userid.", ".$_SESSION["MGW"]->userid.", ".$conn->DBTimeStamp(time()).")";
126
127	if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
128
129	if($_POST['_company'] != $company){
130	    Company::viewEditForm($company);
131	    Company::display('contact_comp_edit.tpl');
132	    exit();
133	}
134	else return true;
135    }
136
137    // =================================================
138    // update item
139    // =================================================
140    function opUpdate(){
141	global $conn;
142
143	if(isset($_POST["id"]))
144	    $id = (int) $_POST["id"];
145	else
146	    return false;
147
148	$sql="SELECT owner FROM mgw_contacts WHERE id=$id";
149	if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
150	$row = $res->FetchRow();
151
152	if($row['owner'] == $_SESSION["MGW"]->userid)
153	    queryRights2('root_modules_contact_contact_modify');
154	else
155	    queryRights2('root_modules_contact_contact_modifyothers');
156
157	$title = $conn->QMagic(isset($_POST["title"])?$_POST["title"]:"");
158	$honpref = $conn->QMagic(isset($_POST["honpref"])?$_POST["honpref"]:"");
159	$firstname = $conn->QMagic(isset($_POST["firstname"])?$_POST["firstname"]:"");
160	$name_add = $conn->QMagic(isset($_POST["addname"])?$_POST["addname"]:"");
161	$nickname = $conn->QMagic(isset($_POST["nickname"])?$_POST["nickname"]:"");
162	$lastname = $conn->QMagic(isset($_POST["lastname"])?$_POST["lastname"]:"");
163	$name_suffix = $conn->QMagic(isset($_POST["namesuffix"])?$_POST["namesuffix"]:"");
164
165	$street = $conn->QMagic(isset($_POST["priv_strasse"])?$_POST["priv_strasse"]:"");
166	$add = $conn->QMagic(isset($_POST["priv_zusatz"])?$_POST["priv_zusatz"]:"");
167	$zip = $conn->QMagic(isset($_POST["priv_plz"])?$_POST["priv_plz"]:"");
168	$city = $conn->QMagic(isset($_POST["priv_ort"])?$_POST["priv_ort"]:"");
169	$state = $conn->QMagic(isset($_POST["priv_state"])?$_POST["priv_state"]:"");
170	$country = $conn->QMagic(isset($_POST["priv_country"])?$_POST["priv_country"]:"");
171	$region = $conn->QMagic(isset($_POST["priv_region"])?$_POST["priv_region"]:"");
172
173	$priv_phone = $conn->QMagic(isset($_POST["telefon_privat"])?$_POST["telefon_privat"]:"");
174	$fax = $conn->QMagic(isset($_POST["telefax"])?$_POST["telefax"]:"");
175	$email = $conn->QMagic(isset($_POST["email"])?$_POST["email"]:"");
176	$email2 = $conn->QMagic(isset($_POST["email2"])?$_POST["email2"]:"");
177	$email3 = $conn->QMagic(isset($_POST["email3"])?$_POST["email3"]:"");
178	$comp_phone = $conn->QMagic(isset($_POST["telefon_firma"])?$_POST["telefon_firma"]:"");
179	$mobile = $conn->QMagic(isset($_POST["telefon_mobil"])?$_POST["telefon_mobil"]:"");
180	$url = $conn->QMagic(isset($_POST["url"])?$_POST["url"]:"");
181
182	$function = $conn->QMagic(isset($_POST["function"])?$_POST["function"]:"");
183	if(isset($_POST['setbirthday']) and (int) $_POST['setbirthday'] == 1){
184	    $bday = (int) $_POST["birthdayDay"];
185	    $bmonth = (int) $_POST["birthdayMonth"];
186	    $byear = (int) $_POST["birthdayYear"];
187	    $bday = $conn->DBDate(sprintf("%04d-%02d-%02d",$byear,$bmonth,$bday));
188	}
189	else{
190	    $bday = 'null';
191	}
192	$note = $conn->QMagic(isset($_POST["bemerkung"])?$_POST["bemerkung"]:"");
193	$pubkey = $conn->QMagic(isset($_POST["pubkey"])?$_POST["pubkey"]:"");
194	$group = isset($_POST["_group"])?(int) $_POST["_group"]:0;
195
196	$public = isset($_POST["public"])?(int) $_POST["public"]:0;
197
198	$company = isset($_POST["_company"])?(int) $_POST["_company"]:0;
199	$newcomp = isset($_POST["newcomp"])?$_POST["newcomp"]:"";
200	if($company==0 && $newcomp!=''){
201	    $company = Company::opCreate(array('name1' => $newcomp));
202	}
203
204	$sql="UPDATE mgw_contacts SET title=$title, honorific_prefix=$honpref, firstname=$firstname, name_add=$name_add, nickname=$nickname, lastname=$lastname, name_suffix=$name_suffix, priv_street=$street, priv_additional=$add, priv_zip=$zip, priv_city=$city, priv_state=$state, priv_countrycode=$country, priv_region=$region, priv_telefon=$priv_phone, priv_fax=$fax, email=$email, email2=$email2, email3=$email3, tel_company=$comp_phone, tel_mobile=$mobile, url=$url, function=$function, birthday=$bday, note=$note, publicKey=$pubkey, companyid=$company, groupid=$group, ispublic=$public, lu_user=".$_SESSION["MGW"]->userid.", lu_date=".$conn->DBTimeStamp(time())." WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") and id=$id";
205
206	if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
207
208	if($_POST['_company'] != $company){
209	    Company::viewEditForm($company);
210	    exit();
211	}
212	else return true;
213    }
214
215    function opDelete($id){
216	global $conn;
217
218	$sql="SELECT owner FROM mgw_contacts WHERE id=$id";
219	if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
220	$row = $res->FetchRow();
221	if($row['owner'] == $_SESSION["MGW"]->userid)
222	    queryRights2('root_modules_contact_contact_delete');
223	else
224	    queryRights2('root_modules_contact_contact_deleteothers');
225
226	$sql = "DELETE FROM mgw_contacts WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") and id=".(int)$id;
227	if(!$conn->Execute($sql)) die(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
228	return true;
229    }
230
231    function viewDelete($id){
232	global $smarty, $conn, $appconf;
233
234	$sql = "SELECT * FROM mgw_contacts WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") and id=".(int)$id;
235	if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
236	$row = $res->FetchRow();
237
238	if($row['owner'] == $_SESSION["MGW"]->userid)
239	    queryRights2('root_modules_contact_contact_delete');
240	else
241	    queryRights2('root_modules_contact_contact_deleteothers');
242
243	$smarty->assign("menuid", "1");
244	$smarty->assign("itemid", $id);
245	$smarty->assign("parms", str_replace("delete","list",$_SERVER["QUERY_STRING"]));
246	$smarty->assign("reallydeleteitem", Lang::getLanguageString("reallydelcontact"));
247	$smarty->assign("deleteheader", Lang::getLanguageString("deletecontacth"));
248	$smarty->assign("deletedetail1", $row["lastname"].", " .$row["firstname"]);
249	$smarty->assign("deletedetail2", $row["priv_street"]);
250	$smarty->assign("deletedetail3", $row["priv_city"]);
251	$smarty->assign("suclass", "submit");
252	return true;
253    }
254
255    // =================================================
256    // new item form
257    // =================================================
258    function viewNewForm(){
259	global $conn, $smarty;
260	queryRights2('root_modules_contact_contact_create');
261
262	include(INCLUDEPATH . "mSelectBox.class.php");
263
264	$sb = new mSelectBox("bday");
265	$smarty->assign("bday", $sb->getSB_Day(0, true));
266
267	$sb2 = new mSelectBox("bmonth");
268	$smarty->assign("bmonth", $sb2->getSB_Month(0, true));
269
270	$sb3 = new mSelectBox("byear");
271	$smarty->assign("byear", $sb3->getSB_Year(1920, date("Y"), 0, true));
272
273	$sb4 = new mSelectBox("title");
274	$smarty->assign("title", $sb4->getSB_Title());
275
276	$sb5 = new mSelectBox("_company");
277	$sb5->setContentType("sql");
278	$sb5->setSQLvalue("id");
279	$sb5->setSQLcontent("name1");
280	$sb5->addContent("SELECT * FROM mgw_companies WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") ORDER BY name1");
281	$sb5->addOption("0", Lang::getLanguageString("chosecompanytext"), "pre");
282	$smarty->assign("companysb", $sb5->draw());
283
284	$sb6 = new mSelectBox("_group");
285	$sb6->setContentType("sql");
286	$sb6->setSQLvalue("id");
287	$sb6->setSQLcontent("name_key");
288	$sb6->addContent("SELECT id, name_key FROM mgw_contacts_groups ORDER BY name_key");
289	$sb6->addOption("0", Lang::getLanguageString("chosegrouptext"), "pre");
290	$smarty->assign("groupsb", $sb6->draw());
291
292	$smarty->assign("countrysb", createCountrySB("priv_country"));
293	$smarty->assign("npage",isset($_GET["npage"])?$_GET["npage"]:"");
294	$smarty->assign("pubcheckedyes"," checked");
295	$smarty->assign("mode","new");
296	$smarty->assign("suname","create");
297	$smarty->assign("suclass","submit");
298
299	if (isset($_GET["wm2_contact"]) and $_GET["wm2_contact"]) {
300	  $wm2_td = array();
301
302	  $data = trim(str_replace(array("&lt;","&gt;"),array("<",">"),$_GET["wm2_contact"]));
303	  if (eregi("<(.*)>",$data,$my_array) and is_array($my_array) and count($my_array)>0) {
304	    $wm2_td["email"] = $my_array[1];
305
306  	    $wm2_name = trim(str_replace(array("\"","'"),"",strip_tags($data)));
307	    $wm2_td["lastname"] = $wm2_name;
308
309	    if (strlen($wm2_name)>2 and strpos($wm2_name,",")>0) {
310	      $wm2_td["firstname"] = trim(substr($wm2_name,strpos($wm2_name,",")+1));
311		  $wm2_td["lastname"] = trim(substr($wm2_name,0,strpos($wm2_name,",")));
312	    } elseif (strlen($wm2_name)>2 and strpos($wm2_name," ")>0) {
313		  $wm2_td["firstname"] = trim(substr($wm2_name,0,strrpos($wm2_name," ")));
314	      $wm2_td["lastname"] = trim(substr($wm2_name,strrpos($wm2_name," ")+1));
315	    }
316	  } elseif (eregi("\"(.*) (.*)\" (.*)",$data,$my_array) and is_array($my_array) and count($my_array)>2) {
317	    if ($my_array[1][0]=="'") {
318		  $wm2_td["lastname"] = substr($my_array[1],1);
319		  $wm2_td["firstname"] = substr($my_array[2],0,-1);
320		} else {
321		  $wm2_td["firstname"] = $my_array[1];
322		  $wm2_td["lastname"] = $my_array[2];
323		}
324		$wm2_td["email"] = $my_array[3];
325	  } elseif (eregi("(.*) \\((.*) (.*)\\)",$data,$my_array) and is_array($my_array) and count($my_array)>2) {
326		$wm2_td["lastname"] = $my_array[3];
327		$wm2_td["firstname"] = $my_array[2];
328		$wm2_td["email"] = $my_array[1];
329	  } else {
330	    if (!strpos($data,"@")) {
331	      $wm2_td["lastname"] = $data;
332		} else {
333	      $wm2_td["email"] = $data;
334		}
335	  }
336	  $smarty->assign("td", $wm2_td);
337	}
338
339	return true;
340    }
341
342    // =================================================
343    // edit item form
344    // =================================================
345    function viewEditForm($id){
346	global $conn, $smarty;
347
348	$sql="SELECT owner FROM mgw_contacts WHERE id=$id";
349	if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
350	$row = $res->FetchRow();
351
352	if($row['owner'] == $_SESSION["MGW"]->userid)
353	    queryRights2('root_modules_contact_contact_modify');
354	else
355	    queryRights2('root_modules_contact_contact_modifyothers');
356
357	include(INCLUDEPATH . "mSelectBox.class.php");
358	$sql = "SELECT * FROM mgw_contacts WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") and id=".(int)$id;
359
360	if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
361	$row = $res->FetchRow();
362
363	$row['birthday'] = $conn->UnixDate($row['birthday']);
364	$smarty->assign('setbirthday', (!$row['birthday']) ? '' : 'checked');
365
366	$sb4 = new mSelectBox("title");
367	$smarty->assign("title", $sb4->getSB_Title($row["title"]));
368
369	$sb5 = new mSelectBox("_company");
370	$sb5->setContentType("sql");
371	$sb5->setSQLvalue("id");
372	$sb5->setSQLcontent("name1");
373	$sb5->addContent("SELECT * FROM mgw_companies WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") ORDER BY name1");
374	$sb5->addOption("0", Lang::getLanguageString("nocompany"), "pre");
375	$smarty->assign("companysb", $sb5->draw($row["companyid"]));
376
377	$sb6 = new mSelectBox("_group");
378	$sb6->setContentType("sql");
379	$sb6->setSQLvalue("id");
380	$sb6->setSQLcontent("name_key");
381	$sb6->addContent("SELECT id, name_key FROM mgw_contacts_groups ORDER BY name_key");
382	$sb6->addOption("0", Lang::getLanguageString("chosegrouptext"), "pre");
383	$smarty->assign("groupsb", $sb6->draw($row["groupid"]));
384
385	$smarty->assign("countrysb", createCountrySB("priv_country", $row["priv_countrycode"]));
386
387	$smarty->assign("list", isset($_GET["list"])?$_GET["list"]:"");
388	$smarty->assign("npage",isset($_GET["npage"])?$_GET["npage"]:0);
389	$smarty->assign("searchterm", isset($_GET["searchterm"])?$_GET["searchterm"]:"");
390	$smarty->assign("itemid", $id);
391
392	$smarty->assign("td", $row);
393	$smarty->assign("myurl", $row["url"]);
394	$smarty->assign("suname","edit");
395	$smarty->assign("suclass","submit");
396	$smarty->assign("mode","edit");
397
398	if($row["ispublic"]=="1") {
399	    $pcy = " checked";
400	    $pcn = "";
401	}
402	else {
403	    $pcy = "";
404	    $pcn = " checked";
405	}
406	$smarty->assign("pubcheckedyes",$pcy);
407	$smarty->assign("pubcheckedno",$pcn);
408
409	$smarty->assign("editcontact", Lang::getParmLang(Lang::getLanguageString("editcontact"), array($row["lastname"] . ", " . $row["firstname"])));
410
411	return true;
412    }
413
414    // =================================================
415    // detail view
416    // =================================================
417    function viewDetails($id){
418	global $conn, $appconf, $smarty;
419	include(INCLUDEPATH . "mSelectBox.class.php");
420
421	$sql = "SELECT a.*, b.id, b.name_key AS groupname FROM mgw_contacts a LEFT JOIN mgw_contacts_groups b ON a.groupid = b.id WHERE (a.ispublic=1 or a.owner=".$_SESSION["MGW"]->userid.") and a.id=".(int)$id;
422	if(($row = $conn->GetRow($sql)) === false) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
423
424	// modify only for user with appropriate rights
425	if((queryRights2_bool('root_modules_contact_contact_modify') && $row["owner"] == $_SESSION["MGW"]->userid) ||
426	   (queryRights2_bool('root_modules_contact_contact_modifyothers') && $row["owner"] != $_SESSION["MGW"]->userid))
427	    $smarty->assign("maymod","yes");
428	else
429	    $smarty->assign("maymod","no");
430
431	// delete only for user with appropriate rights
432	if((queryRights2_bool('root_modules_contact_contact_delete') && $row["owner"] == $_SESSION["MGW"]->userid) ||
433	   (queryRights2_bool('root_modules_contact_contact_deleteothers') && $row["owner"] != $_SESSION["MGW"]->userid))
434		$smarty->assign("maydel","yes");
435	else
436		$smarty->assign("maydel","no");
437
438	$sql2 = "SELECT name AS country FROM mgw_countries WHERE code='".$row['priv_countrycode']."'";
439	if(($row2 = $conn->GetRow($sql2)) === false) exit(showSQLerror($sql2, $conn->ErrorMsg(), __LINE__, __FILE__));
440	$row["priv_country"] = $row2['country'];
441
442	$sql3 = "SELECT name1, telephone, email AS email_company FROM mgw_companies WHERE
443(ispublic=1 or owner=".$_SESSION["MGW"]->userid.") and id=".(int)$row['companyid'];
444	if(($row3 = $conn->GetRow($sql3)) === false) exit(showSQLerror($sql3, $conn->ErrorMsg(), __LINE__, __FILE__));
445	$row = array_merge($row, $row3);
446
447	$row['title'] = Lang::getLanguageString($row['title']);
448
449	$row["birthday"] = $conn->UnixDate($row["birthday"]);
450
451	$row["note"] = nl2br($row["note"]);
452	$row["publicKey"] = nl2br($row["publicKey"]);
453
454	$row["email"] = linkEmail($row["email"]);
455	$row["email2"] = linkEmail($row["email2"]);
456	$row["email3"] = linkEmail($row["email3"]);
457
458	if ($row["tel_company"] == "") $row["tel_company"] = $row["telephone"];
459	if ($row["email"] == "") $row["email"] = $row["email_company"];
460
461	$smarty->assign("usedialer", $_SESSION['MGW']->settings['use_dialer']);
462	$smarty->assign("sort", isset($_GET["sort"])?$_GET["sort"]:"");
463	$smarty->assign("list", isset($_GET["list"])?$_GET["list"]:"");
464	$smarty->assign("searchterm", isset($_GET["searchterm"])?$_GET["searchterm"]:"");
465	$smarty->assign("npage", isset($_GET["npage"])?$_GET["npage"]:"");
466	$smarty->assign("id", $id);
467	$smarty->assign("td", $row);
468	$smarty->assign("suname","edit");
469	$smarty->assign("suvalue","Speichern");
470	$smarty->assign("suclass","submit");
471	$smarty->assign("contentheader", Lang::getLanguageString("details"));
472	return true;
473    }
474
475    // =================================================
476    // vCard import
477    // =================================================
478    function viewCardImport(){
479	global $smarty;
480	include(INCLUDEPATH . "mSelectBox.class.php");
481	queryRights2('root_modules_contact_contact_create');
482
483	$smarty->assign("suvalue",Lang::getLanguageString("import"));
484	$smarty->assign("suname","import");
485	$smarty->assign("suclass","submit");
486
487	return true;
488    }
489
490    function opCardImport($userfile){
491	global $conn;
492	include_once(INCLUDEPATH . "vcard/mgw_Contact_Vcard_Parse.php");
493	queryRights2('root_modules_contact_contact_create');
494
495	if (is_uploaded_file($userfile["tmp_name"])) {
496	    $tmpfile = CACHE_FOLDER.basename($userfile["tmp_name"]);
497	    move_uploaded_file($userfile["tmp_name"], $tmpfile);
498
499	    $vcard = new mgw_Contact_Vcard_Parse();
500	    $cards = $vcard->fromFile($tmpfile);
501	    unlink($tmpfile);
502	    // now loop through the data
503	    $counter = 0;
504	    for($vccount=0; $vccount<count($cards); $vccount++){
505		$card = $cards[$vccount];
506
507		if($vcard->getOrg($card) != ''){
508		    // check if we have a matching company
509		    $sql = "SELECT id FROM mgw_companies WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") and name1=".$conn->quote($vcard->getOrg($card))." AND name2=".$conn->quote($vcard->getSubOrg($card));
510		    $row = $conn->GetRow($sql);
511		    if(is_array($row) && (count($row) > 0)){
512			$companyid = $row['id'];
513		    }
514		    else{
515
516			$sql="INSERT INTO mgw_companies (id, name1, name2, street, additional, zip, city, state, ispublic, owner,  lu_user, lu_date) VALUES (";
517
518			$companyid = mgw_genID('mgw__seq_companies');
519			$sql .= $companyid.','.
520			    $conn->quote($vcard->getOrg($card)).','.
521			    $conn->quote($vcard->getSubOrg($card)).',';
522
523			$cadr = $vcard->getAddress($card, 'WORK');
524			if(is_array($cadr[0])){
525			    $sql .=
526				$conn->quote($vcard->getStreet($cadr[0])).",".
527				$conn->quote($vcard->getExtAdr($cadr[0])).",".
528				$conn->quote($vcard->getZIP($cadr[0])).",".
529				$conn->quote($vcard->getLocality($cadr[0])).",".
530				$conn->quote($vcard->getRegion($cadr[0])).",\n";
531			}
532			else{
533			    $sql .= "'','','','','',\n";
534			}
535
536			$sql .= (int)$_POST['ispublic'].", ".$_SESSION["MGW"]->userid.", ".$_SESSION["MGW"]->userid.", ". $conn->DBTimeStamp(time()). ")";
537
538			if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
539		    }
540		}
541		else $companyid = 'NULL';
542
543		//insert data into db
544		$id = mgw_genID('mgw__seq_contacts');
545
546		//title,honorific_prefix,companyid?!?
547		$sql = "INSERT INTO mgw_contacts (id,
548                            name_prefix,firstname,name_add,lastname,name_suffix,nickname,
549                            priv_street,priv_additional,priv_zip,priv_city,priv_region,
550                            priv_telefon,priv_fax,email,email2,email3,tel_company,tel_mobile,
551                            url,birthday,function,note,companyid,
552                            owner,ispublic,lu_user,lu_date)";
553		$sql .= " VALUES ($id,".
554		    $conn->quote($vcard->getNamePrefixes($card)).",".
555		    $conn->quote($vcard->getGivenNames($card)).",".
556		    $conn->quote($vcard->getAddNames($card)).",".
557		    $conn->quote($vcard->getLastNames($card)).",".
558		    $conn->quote($vcard->getNameSuffixes($card)).",".
559		    $conn->quote($vcard->getNicknames($card)).",\n";
560		$adr = $vcard->getAddress($card, 'HOME');
561		if(is_array($adr[0])){
562		    $sql .=
563			$conn->quote($vcard->getStreet($adr[0])).",".
564			$conn->quote($vcard->getExtAdr($adr[0])).",".
565			$conn->quote($vcard->getZIP($adr[0])).",".
566			$conn->quote($vcard->getLocality($adr[0])).",".
567			$conn->quote($vcard->getRegion($adr[0])).",\n";
568		}
569		else{
570		    $sql .= "'','','','','',\n";
571		}
572		$hp = $vcard->getPhone($card, 'HOME,VOICE');
573		$wp = $vcard->getPhone($card, 'WORK,VOICE');
574		$hf = $vcard->getPhone($card,'HOME,FAX');
575		$emails = $vcard->getEmail($card);
576		$sql .=
577		    $conn->quote($hp[0]).",".
578		    $conn->quote($hf[0]).",".
579		    $conn->quote($emails[0]).",".
580		    $conn->quote($emails[1]).",".
581		    $conn->quote($emails[2]).",".
582		    $conn->quote($wp[0]).",\n";
583		$mobiles = $vcard->getPhone($card,'CELL');
584		$sql .=
585		    $conn->quote($mobiles[0]).",";
586		$urls = $vcard->getURL($card);
587		$sql .=
588		    $conn->quote($urls[0]).",".
589		    $conn->DBDate($vcard->getBirthday($card)).",".
590		    $conn->quote($vcard->getTitle($card)).",".
591		    $conn->quote($vcard->getNote($card)).",$companyid,";
592		$sql .=
593		    $_SESSION['MGW']->userid.",".(int)$_POST['ispublic'].",".$_SESSION['MGW']->userid.",".$conn->DBTimeStamp(time()).")";
594
595		if(!$conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
596		$counter++;
597	    }
598	}
599
600	$GLOBALS['notify']->message(Lang::getLanguageString('importedvcards').': '.$counter, NOTIFY_SCREEN);
601    }
602
603    // =================================================
604    // vCard export
605    // =================================================
606    function viewCardExport($id){
607	global $conn;
608	include_once(INCLUDEPATH . "vcard/vcard.php");
609	queryRights2('root_modules_contact_contact_export');
610
611	if($id == -1){
612	    $sql = "SELECT id FROM mgw_contacts WHERE owner=".$_SESSION["MGW"]->userid." OR ispublic=1 ORDER BY lastname";
613	    if(!$res = $conn->Execute($sql)) exit(showSQLError($sql, $conn->ErrorString(), __LINE__, __FILE__));
614	    while($row = $res->FetchRow()){
615		$vcard = new VCard($row["id"]);
616		$vcstr .= $vcard->getString()."\n";
617		unset($vcard);
618	    }
619	    $fname = "mgw-contacts";
620	}
621	else{
622	    $vcard = new VCard($id);
623	    $vcstr = $vcard->getString();
624	    $fname = $vcard->getLastName();
625	}
626
627	header("Content-Type: text/x-vcard");
628	header("Content-Length: ".strlen($vcstr));
629	header("Content-Disposition: attachment; filename=".$fname.".vcf");
630	header("Content-Transfer-Encoding: 7bit");
631	header("Content-Description: vcard-export");
632	echo $vcstr;
633
634	return true;
635    }
636
637    // =================================================
638    // email list view
639    // =================================================
640    function viewEmailList(){
641	global $smarty, $conn;
642
643	$concat = $conn->Concat("a.firstname","' '","a.name_add");
644	$sql = "SELECT a.lastname, $concat AS firstname, b.name1 FROM mgw_contacts a LEFT JOIN mgw_companies b ON a.companyid=b.id WHERE (a.ispublic=1 or a.owner=".$_SESSION["MGW"]->userid.") and a.email<>'' ORDER BY lastname";
645	if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
646
647	while($row = $res->FetchRow()) {
648	    $smarty->append("td",$row);
649
650	    // build action urls
651	    $detlink = "<a href=\"javascript:setOpenerValue('" . $row[$toShowValue] . "','" . $row[$toSelectValue] . "')\" class=\"edit\">".Lang::getLanguageString("Auswahl")."</a>";
652	    $urls[] = $detlink;
653	    $smarty->assign('urls', $urls);
654	}
655
656	$smarty->assign("fieldname", $fieldName);
657	$smarty->assign('at', alphabet_table(session_id()));
658
659	return true;
660    }
661
662    // =================================================
663    // PDF export
664    // =================================================
665    function viewPDFExport(){
666	global $smarty;
667	include(INCLUDEPATH . "mSelectBox.class.php");
668	queryRights2('root_modules_contact_contact_export');
669
670	$sb1 = new mSelectBox("_company");
671	$sb1->setMultiple(true);
672	$sb1->setContentType("sql");
673	$sb1->setSQLvalue("id");
674	$sb1->setSQLcontent("name1");
675	$sb1->addContent("SELECT * FROM mgw_companies WHERE (ispublic=1 or owner=".$_SESSION["MGW"]->userid.") ORDER BY name1");
676	$sb1->setHeight(8);
677	$smarty->assign("companysb", $sb1->draw());
678
679	$sb2 = new mSelectBox("_lang");
680	$sb2->setContentType("sql");
681	$sb2->setSQLvalue("langcode");
682	$sb2->setSQLcontent("description");
683	$sb2->addContent("SELECT * FROM mgw_languages ORDER BY lu_date");
684	$smarty->assign("langsb",$sb2->draw($_SESSION["MGW"]->spkz));
685
686	$smarty->assign("suname","print");
687	$smarty->assign("suclass","submit");
688	$smarty->assign("cmpallcheck", "checked");
689	$smarty->assign("cmpsavcheck", "checked");
690
691	return true;
692    }
693
694    function opPDFExport(){
695	global $conn, $appconf;
696	define("FPDF_FONTPATH", INCLUDEPATH . "fpdf/font/");
697	include_once(INCLUDEPATH . "fpdf/fpdf.php");
698	include_once(ROOTPATH . "/modules/contact/inc/pdf.class.php");
699	queryRights2('root_modules_contact_contact_export');
700
701	$pdf=new PDF("L");
702	$pdf->hashmaploc = Lang::setLocaledText(isset($_POST["_lang"])?str_replace(array("\\","/"),"",$_POST["_lang"]):"", "contact");
703	$pdf->Open();
704	$pdf->SetAuthor($_SESSION["MGW"]->fullusername);
705	$pdf->SetTitle(Lang::getLanguageString("pdftitle"));
706	$pdf->SetCreator("moregroupware");
707	$pdf->AliasNbPages();
708
709	if(isset($_POST["chosecmp"]) and $_POST["chosecmp"] == "multiple"){
710	    $pdf->SetSubject(Lang::getLanguageString("multiplecompanies"));
711	    $_company = $_POST["_company"];
712	    if(count($_company) > 0){
713		for($i=0;$i<count($_company);$i++) { //parse all the companies selected
714		    $sql = "SELECT a.*, b.name1, b.telephone, b.url AS company_url FROM mgw_contacts a, mgw_companies b WHERE (a.ispublic=1 OR a.owner=".$_SESSION["MGW"]->userid.") AND (b.ispublic=1 OR b.owner=".$_SESSION["MGW"]->userid.") AND a.companyid=b.id AND a.companyid=".(int)$_company[$i]." ORDER BY a.lastname";
715		    if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
716		    $pdf->Body($res);
717		}
718	    }
719	    else redirect("index.php?view=pdfexport&".SID);
720	}
721	elseif(isset($_POST["chosecmp"]) and $_POST["chosecmp"] == "all"){
722	    $pdf->SetSubject(Lang::getLanguageString("chosecompanyalltext"));
723	    //select all companies
724	    $sql = "SELECT DISTINCT b.id FROM mgw_companies b WHERE (b.ispublic=1 OR b.owner=".$_SESSION["MGW"]->userid.")";
725
726	    if(!$res2 = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
727	    while($row = $res2->FetchRow()) {
728		$sql = "SELECT DISTINCT a.*, b.name1, b.telephone, b.url AS company_url FROM mgw_contacts a, mgw_companies b WHERE (a.ispublic=1 OR a.owner=".$_SESSION["MGW"]->userid.") AND (b.ispublic=1 OR b.owner=".$_SESSION["MGW"]->userid.") AND a.companyid=b.id AND a.companyid=".$row["id"]." ORDER BY a.lastname";
729
730		if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
731		$pdf->Body($res);
732	    }
733	}
734	elseif(isset($_POST["chosecmp"]) and $_POST["chosecmp"] == "nocompany"){
735	    $pdf->SetSubject(Lang::getLanguageString("chosenocompanytext"));
736
737	    $sql = "SELECT DISTINCT * FROM mgw_contacts WHERE (ispublic=1 OR owner=".$_SESSION["MGW"]->userid.") and (companyid=0 OR companyid IS NULL) ORDER BY lastname";
738	    if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
739	    $pdf->Body($res);
740	}
741	else{
742	    $pdf->SetSubject(Lang::getLanguageString("choseallcontactstext"));
743
744	    $sql = "SELECT DISTINCT * FROM mgw_contacts WHERE (ispublic=1 OR owner=".$_SESSION["MGW"]->userid.") ORDER BY lastname";
745	    if(!$res = $conn->Execute($sql)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
746	    $pdf->Body($res);
747	}
748
749	$pdf->Close();
750	if(isset($_POST["chosesav"]) and $_POST["chosesav"] == "saveas") $pdf->output($_SESSION["MGW"]->username .".pdf",true);
751	else $pdf->output();
752
753	return true;
754    }
755
756    // =================================================
757    // list view
758    // =================================================
759    function viewList(){
760	global $conn, $smarty;
761	include(INCLUDEPATH."mSelectBox.class.php");
762
763	if(isset($_GET["sort"])){
764	    if($_GET["sort"] == $_SESSION["contact"]["person"]["prevorderby"]){
765		$_SESSION["contact"]["person"]["sort_order"] = ($_SESSION["contact"]["person"]["sort_order"] == "DESC") ? "ASC" : "DESC";
766	    }
767	    else{
768		$_SESSION["contact"]["person"]["sort_order"] = 'ASC';
769	    }
770	    $_SESSION["contact"]["person"]["prevorderby"] = $_GET["sort"];
771		if ($_GET["sort"] == "name1") { $prefixDB = 'b.'; } else { $prefixDB = 'a.'; }
772	    $_SESSION["contact"]["person"]["sort_by"] = $prefixDB.$_GET["sort"];
773	}
774	elseif(!isset($_SESSION["contact"]["person"]["sort_by"])){
775	    $_SESSION["contact"]["person"]["sort_by"] = ($_SESSION['MGW']->settings['name_display'][0] == 'lastfirst') ? 'a.lastname' : 'a.firstname';
776	    $_SESSION["contact"]["person"]["sort_order"] = 'ASC';
777	}
778
779	$searchterm = (isset($_POST["searchterm"])) ? $_POST["searchterm"] : (isset($_GET["searchterm"])?$_GET["searchterm"]:"");
780	$qsearchterm = $conn->QMagic('%'.$searchterm.'%');
781	$list = (isset($_GET["list"])) ? $_GET["list"] : "";
782	$compid = isset($_GET["compid"])?(int)$_GET["compid"]:0;
783
784//	if(isset($_POST['groupsearch'])){
785	if(isset($_POST['search'])){
786		if($_POST['_group']!='*'){
787	    	$_SESSION['contact']['groupsql'] = "AND (b.groupid=".(int)$_POST["_group"]." OR a.groupid=".(int)$_POST["_group"].")";
788	    	$_SESSION['contact']['actgroup'] = (int)$_POST["_group"];
789		}
790		else{
791	    	$_SESSION['contact']['groupsql'] = '';
792	    	$_SESSION['contact']['actgroup'] = '';
793		}
794	}
795	elseif(!isset($_SESSION['contact']['groupsql'])){
796		$_SESSION['contact']['groupsql'] = '';
797    	$_SESSION['contact']['actgroup'] = '';
798	}
799
800	$groupsql = $_SESSION['contact']['groupsql'];
801
802	$icons = getIconStrings();
803	$smarty->assign("prevsym", $icons["prev"]);
804	$smarty->assign("nextsym", $icons["next"]);
805
806	// default contentheader
807	$cheader = Lang::getLanguageString("overview_contacts");
808	if(
809			( isset($_POST["op"]) and $_POST["op"] == "qsearch" and ( isset($_POST["search"]) or !empty($_POST["searchterm"])) )
810			|| ( isset($_GET["searchterm"]) and $_GET["searchterm"] != "" )
811			)
812
813		{
814	    $sql = "SELECT DISTINCT a.*, a.owner as c_owner, b.owner, b.name1, b.telephone, b.email AS email_company FROM mgw_contacts a LEFT JOIN mgw_companies b ON a.companyid=b.id WHERE (";
815		$sql .=  "(a.ispublic=1 ".$groupsql.") OR (a.ispublic=0 ".$groupsql." AND a.owner=".$_SESSION["MGW"]->userid . "))";
816
817		if (!empty($searchterm)) {
818		 	$sql .= " AND (";
819	   	    $qsearchterm = $conn->QMagic('%'.$searchterm.'%');
820			for($i=0;$i<count($_SESSION["MGW"]->settings["quicksearchmethod"]);$i++) {
821			$sql .= "(UPPER(".$_SESSION["MGW"]->settings["quicksearchmethod"][$i] . ") LIKE UPPER($qsearchterm) AND a.ispublic = 1) OR ".
822					"(UPPER(".$_SESSION["MGW"]->settings["quicksearchmethod"][$i] . ") LIKE UPPER($qsearchterm) AND a.ispublic = 0 AND a.owner=".$_SESSION["MGW"]->userid.")";
823
824			if(count($_SESSION["MGW"]->settings["quicksearchmethod"])-1 != $i)
825			    $sql .= " OR ";
826	    		}
827			$sql .= ")";
828			}
829
830	    $sql .= " ORDER BY ".$_SESSION["contact"]["person"]["sort_by"].' '.$_SESSION["contact"]["person"]["sort_order"];
831		$sql = str_replace("mgw_contacts.","a.",$sql);
832		$sql = str_replace("mgw_companies.","b.",$sql);
833
834	    $cheader = Lang::getParmLang(Lang::getLanguageString("overview_contacts_by_qsearch"), array($searchterm));
835	}
836	elseif(isset($_GET["list"]) and $_GET["list"] != "") {
837	    $qsearchterm = $conn->QMagic($list."%");
838	    $sql = "SELECT a.*, b.name1, b.telephone, a.owner as c_owner, b.owner, b.email AS email_company
839					FROM mgw_contacts a LEFT JOIN mgw_companies b ON a.companyid=b.id
840					WHERE ((UPPER(a.lastname) LIKE UPPER(".$qsearchterm.")
841						AND a.ispublic=1) OR (UPPER(a.lastname) LIKE UPPER(".$qsearchterm.")
842						AND a.ispublic=0 AND a.owner=".$_SESSION["MGW"]->userid.")) $groupsql
843					ORDER BY ".$_SESSION["contact"]["person"]["sort_by"].' '.$_SESSION["contact"]["person"]["sort_order"];
844	    $cheader = Lang::getParmLang(Lang::getLanguageString("overview_contacts_by_a"), array($list));
845	}
846	elseif($compid != 0) {
847	    $sql = "SELECT a.*, b.name1, b.telephone, a.owner as c_owner, b.owner, b.email AS email_company FROM mgw_contacts a LEFT JOIN mgw_companies b ON a.companyid=b.id WHERE (a.ispublic=1 AND b.id = $compid $groupsql) OR (a.ispublic=0 AND a.owner=".$_SESSION["MGW"]->userid." AND b.id = $compid $groupsql) ORDER BY ".$_SESSION["contact"]["person"]["sort_by"].' '.$_SESSION["contact"]["person"]["sort_order"];
848	}
849	elseif(isset($_GET["sort"]) and $_GET["sort"] == "bycompany") {
850	    $sql = "SELECT a.*, b.name1, b.telephone, a.owner as c_owner,b.owner, b.email AS email_company FROM mgw_contacts a LEFT JOIN mgw_companies b ON a.companyid=b.id WHERE (a.ispublic=1 $groupsql) OR (a.ispublic=0 $groupsql AND a.owner=".$_SESSION["MGW"]->userid.") ORDER BY ".$_SESSION["contact"]["person"]["sort_by"].' '.$_SESSION["contact"]["person"]["sort_order"];
851	}
852	else{
853	    $sql = "SELECT a.*, b.name1, b.telephone, a.owner as c_owner,b.owner, b.email AS email_company FROM mgw_contacts a LEFT JOIN mgw_companies b ON a.companyid=b.id WHERE (a.ispublic=1 $groupsql) OR (a.ispublic=0 $groupsql AND a.owner=".$_SESSION["MGW"]->userid.") ORDER BY ".$_SESSION["contact"]["person"]["sort_by"].' '.$_SESSION["contact"]["person"]["sort_order"];
854	}
855
856	// ========== PAGING STUFF 1 ================
857	session_register('curr_page');
858	if (isset($_GET['npage']) || isset($_POST['npage'])){
859	    $curr_page = isset($_POST['npage']) ? $_POST['npage'] : $_GET['npage'];
860	} else {
861	    $curr_page = 1; // at first page
862	}
863	// ============================================
864	if(!$res = $conn->PageExecute($sql, $_SESSION["MGW"]->settings["list_items_number"], $curr_page)) exit(showSQLerror($sql, $conn->ErrorMsg(), __LINE__, __FILE__));
865
866	if(isset($_GET["sort"]) and $_GET["sort"] == "bycompany") $cheader = Lang::getParmLang(Lang::getLanguageString("overview_contacts_by_comp"), array($res->Fields("name1")));
867
868	// ========== PAGING STUFF 2 ================
869	// if NOT on first page
870	if(!$res->AtFirstPage()) {
871	    $smarty->assign("_prev", true);
872	    $smarty->assign("ppage", $res->AbsolutePage() - 1);
873	}
874
875	// if NOT on last page
876	if(!$res->AtLastPage()) {
877	    $smarty->assign("_next", true);
878	    $smarty->assign("npage", $res->AbsolutePage() + 1);
879	}
880	// ============================================
881
882	$counter = 0;
883
884	while($row = $res->FetchRow()) {
885	    $counter++;
886	    $myid = $row["id"];
887	    $rowcompid = $row["companyid"];
888	    if ($row["tel_company"] == "") $row["tel_company"] = $row["telephone"];
889	    if ($row["email"] == "") $row["email"] = $row["email_company"];
890	    $row["firstname"] = $row["firstname"]." ".$row["name_add"];
891
892	    $row['company'] = $row["name1"];
893		if ($row["owner"]=="") $row["owner"] = $row["c_owner"];
894
895	    // create Action URLs
896	    $aqlink = "";
897	    if (queryRights2_bool("root_modules_contact_crm_create")) {
898		$aqlink = "<a href=\"index.php?mod=contact&amp;obj=crm&amp;view=directnewform&amp;compid="
899		.$rowcompid."&amp;personid=".$myid
900		."&amp;".SID."\">".Lang::getLanguageString('call')."</a>";
901	    }
902	    $detlink = "<a href=\"index.php?mod=contact&amp;obj=person&amp;view=details&amp;id=".$row['id']."&amp;list=$list&amp;searchterm=$searchterm&amp;npage=$curr_page&amp;".SID."\">".$icons["details"]."</a>";
903
904	    // modify only for user with appropriate rights
905	    if((queryRights2_bool("root_modules_contact_contact_modify") && $row["owner"] == $_SESSION["MGW"]->userid) ||
906	       (queryRights2_bool("root_modules_contact_contact_modifyothers") && $row["owner"] != $_SESSION["MGW"]->userid)) {
907		if (!isset($action)) $action="";
908		$editlink = "<a href=\"index.php?mod=contact&amp;obj=person&amp;view=editform&amp;id=".$row['id']."&amp;act=$action&amp;searchterm=$searchterm&amp;list=$list&amp;npage=$curr_page&amp;".SID."\">".$icons["edit"]."</a>";
909	    }
910	    else {
911		$editlink = "";
912	    }
913
914	    // delete only for user with appropriate rights
915	    if((queryRights2_bool("root_modules_contact_contact_delete") && $row["owner"] == $_SESSION["MGW"]->userid)
916	       OR (queryRights2_bool("root_modules_contact_contact_deleteothers") && $row["owner"] <> $_SESSION["MGW"]->userid)) {
917		$dellink = "<a href=\"index.php?mod=contact&amp;obj=person&amp;view=delete&amp;id=$myid&amp;act=$action&amp;searchterm=$searchterm&amp;list=$list&amp;npage=$curr_page&amp;".SID."\" class=\"delete\">".$icons["delete"]."</a>";
918	    }
919	    else {
920		$dellink = "";
921	    }
922
923	    $row['action'] = $detlink . "<br />" . $editlink . "<br />" . $dellink . "<br />".$aqlink."<br />"
924		.'<a href="index.php?mod=contact&amp;view=vcardexport&amp;id='.$row['id'].'&amp;'.SID.'">'
925		.Lang::getLanguageString('vcf_export')."</a><br />"
926		."<hr />". linkEmail2($row["email"])."<hr />"
927		. "<a href=\"index.php?mod=contact&amp;obj=company&amp;view=details&amp;id=$rowcompid&amp;".SID."\">". 'Company details' ."</a><br />"
928		. "<a href=\"index.php?mod=contact&amp;obj=person&amp;view=list&amp;compid=$rowcompid&amp;".SID."\">". 'Company contacts' ."</a>";
929
930	    if($row["ispublic"]==1)
931		$row['pimg'] = "&nbsp;";
932	    else
933		$row['pimg'] = $icons['private'];
934
935	    $smarty->append("td",$row);
936	}
937
938	// ========== PAGING STUFF 3 ==================
939	// display next link when more records available
940	if($counter<>$_SESSION["MGW"]->settings["list_items_number"]) $smarty->assign("next", false); else $smarty->assign("next", true);
941	// =============================================
942
943	if($_SESSION["MGW"]->settings["quicksearchmethod"]=="") $qsbool = false; else $qsbool = true;
944
945	$smarty->assign('groups', $conn->GetAssoc("SELECT id, name_key FROM mgw_contacts_groups ORDER by name_key"));
946	$smarty->assign("actgroup", $_SESSION['contact']['actgroup']);
947
948	$columns[]['url'] = "index.php?mod=contact&amp;obj=person&amp;view=list&amp;compid=$compid&amp;sort=ispublic";
949	$columns[]['url'] = "index.php?mod=contact&amp;obj=person&amp;view=list&amp;compid=$compid&amp;sort=lastname";
950	$columns[]['url'] = "index.php?mod=contact&amp;obj=person&amp;view=list&amp;compid=$compid&amp;sort=firstname";
951	$columns[]['url'] = "index.php?mod=contact&amp;obj=person&amp;view=list&amp;compid=$compid&amp;sort=tel_company";
952	$columns[]['url'] = "index.php?mod=contact&amp;obj=person&amp;view=list&amp;compid=$compid&amp;sort=email";
953	$columns[]['url'] = "index.php?mod=contact&amp;obj=person&amp;view=list&amp;compid=$compid&amp;sort=name1";
954	$smarty->assign("columns", $columns);
955
956	$smarty->assign("contentheader", $cheader);
957	$smarty->assign("qsearchon", $qsbool);
958	$smarty->assign("hascreaterights", queryRights2_bool("root_modules_contact_contact_create"));
959	$smarty->assign('compid', $compid);
960	$smarty->assign('at', alphabet_table("mod=contact&amp;obj=person&amp;view=list"));
961	$smarty->assign('searchterm', $searchterm);
962	$smarty->assign('list', $list);
963	$smarty->assign('namedisplay', $_SESSION['MGW']->settings['name_display']);
964
965	return true;
966    }
967
968	function display($template) {
969		global $smarty,$appconf,$myEnv;
970		if (strstr($template,$appconf["gentemplates"])) {
971		} elseif (!empty($this->templatesAreIn)) {
972		    $smarty->template_dir=ROOTPATH ."/modules/" . $this->templatesAreIn . "/templates/" .$appconf["theme"] ."/" . $myEnv["output"];
973		}
974		$smarty->display($template);
975	}
976
977}
978?>
979