summaryrefslogtreecommitdiffstats
path: root/apps/contacts/lib/app.php
blob: 00a830d5e5f92070f22914431a07367a2a429cde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
/**
 * Copyright (c) 2011 Bart Visscher bartv@thisnet.nl
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */

/**
 * This class manages our app actions
 */
OC_Contacts_App::$l10n = new OC_L10N('contacts');
class OC_Contacts_App{
	public static $l10n;

	/**
	* Render templates/part.details to json output
	* @param int $id of contact
	* @param Sabre_VObject_Component $vcard to render
	*/
	public static function renderDetails($id, $vcard){
		$property_types = self::getAddPropertyOptions();
		$adr_types = self::getTypesOfProperty('ADR');
		$phone_types = self::getTypesOfProperty('TEL');

		$details = OC_Contacts_VCard::structureContact($vcard);
		$name = $details['FN'][0]['value'];
		$tmpl = new OC_Template('contacts','part.details');
		$tmpl->assign('details',$details);
		$tmpl->assign('id',$id);
		$tmpl->assign('property_types',$property_types);
		$tmpl->assign('adr_types',$adr_types);
		$tmpl->assign('phone_types',$phone_types);
		$page = $tmpl->fetchPage();

		OC_JSON::success(array('data' => array( 'id' => $id, 'name' => $name, 'page' => $page )));
	}

	public static function getAddressbook($id){
		$addressbook = OC_Contacts_Addressbook::find( $id );
		if( $addressbook === false || $addressbook['userid'] != OC_User::getUser()){
			OC_JSON::error(array('data' => array( 'message' => self::$l10n->t('This is not your addressbook.')))); // Same here (as with the contact error). Could this error be improved?
			exit();
		}
		return $addressbook;
	}

	public static function getContactObject($id){
		$card = OC_Contacts_VCard::find( $id );
		if( $card === false ){
			OC_JSON::error(array('data' => array( 'message' => self::$l10n->t('Contact could not be found.'))));
			exit();
		}

		self::getAddressbook( $card['addressbookid'] );
		return $card;
	}

	/**
	 * @brief Gets the VCard as text
	 * @returns The card or null if the card could not be parsed.
	 */
	public static function getContactVCard($id){
		$card = self::getContactObject( $id );

		$vcard = OC_VObject::parse($card['carddata']);
		return $vcard;
	}

	public static function getPropertyLineByChecksum($vcard, $checksum){
		$line = null;
		for($i=0;$i<count($vcard->children);$i++){
			if(md5($vcard->children[$i]->serialize()) == $checksum ){
				$line = $i;
				break;
			}
		}
		if(is_null($line)){
			OC_JSON::error(array('data' => array( 'message' => self::$l10n->t('Information about vCard is incorrect. Please reload the page.'))));
			exit();
		}
		return $line;
	}

	/**
	 * @return array of vcard prop => label
	 */
	public static function getAddPropertyOptions(){
		$l10n = self::$l10n;
		return array(
				'ADR'   => $l10n->t('Address'),
				'TEL'   => $l10n->t('Telephone'),
				'EMAIL' => $l10n->t('Email'),
				'ORG'   => $l10n->t('Organization'),
		     );
	}

	/**
	 * @return types for property $prop
	 */
	public static function getTypesOfProperty($prop){
		$l = self::$l10n;
		switch($prop){
		case 'ADR':
			return array(
				'WORK' => $l->t('Work'),
				'HOME' => $l->t('Home'),
			);
		case 'TEL':
			return array(
				'HOME'  =>  $l->t('Home'),
				'CELL'  =>  $l->t('Mobile'),
				'WORK'  =>  $l->t('Work'),
				'TEXT'  =>  $l->t('Text'),
				'VOICE' =>  $l->t('Voice'),
				'FAX'   =>  $l->t('Fax'),
				'VIDEO' =>  $l->t('Video'),
				'PAGER' =>  $l->t('Pager'),
			);
		}
	}
}