| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set_time_limit(0); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-23 08:20:26 +00:00
										 |  |  | define ( 'BUILD_ID',               1012   ); | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | define ( 'DFRN_PROTOCOL_VERSION',  '2.0'  ); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | define ( 'EOL',                    "<br />\r\n"     ); | 
					
						
							|  |  |  | define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' ); | 
					
						
							| 
									
										
										
										
											2010-08-15 01:11:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // registration policy
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define ( 'REGISTER_CLOSED',        0 ); | 
					
						
							|  |  |  | define ( 'REGISTER_APPROVE',       1 ); | 
					
						
							|  |  |  | define ( 'REGISTER_OPEN',          2 ); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-22 02:51:08 +00:00
										 |  |  | // relationship types
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-09 23:48:33 +00:00
										 |  |  | define ( 'REL_VIP',        1); | 
					
						
							|  |  |  | define ( 'REL_FAN',        2); | 
					
						
							|  |  |  | define ( 'REL_BUD',        3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-17 05:11:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // page/profile types
 | 
					
						
							| 
									
										
										
										
											2010-10-18 03:04:17 +00:00
										 |  |  | // PAGE_NORMAL is a typical personal profile account
 | 
					
						
							|  |  |  | // PAGE_SOAPBOX automatically approves all friend requests as REL_FAN, (readonly)
 | 
					
						
							|  |  |  | // PAGE_COMMUNITY automatically approves all friend requests as REL_FAN, but with 
 | 
					
						
							|  |  |  | // write access to wall and comments (no email and not included in page owner's ACL lists)
 | 
					
						
							|  |  |  | // PAGE_FREELOVE automatically approves all friend requests as full friends (REL_BUD). 
 | 
					
						
							| 
									
										
										
										
											2010-10-17 05:11:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | define ( 'PAGE_NORMAL',            0 ); | 
					
						
							| 
									
										
										
										
											2010-10-18 03:04:17 +00:00
										 |  |  | define ( 'PAGE_SOAPBOX',           1 ); | 
					
						
							|  |  |  | define ( 'PAGE_COMMUNITY',         2 ); | 
					
						
							|  |  |  | define ( 'PAGE_FREELOVE',          3 ); | 
					
						
							| 
									
										
										
										
											2010-10-17 05:11:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // Maximum number of "people who like (or don't like) this" 
 | 
					
						
							|  |  |  | // that we will list by name
 | 
					
						
							| 
									
										
										
										
											2010-10-13 00:11:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | define ( 'MAX_LIKERS',    75); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // email notification options
 | 
					
						
							| 
									
										
										
										
											2010-10-13 00:11:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-22 09:13:39 +00:00
										 |  |  | define ( 'NOTIFY_INTRO',   0x0001 ); | 
					
						
							|  |  |  | define ( 'NOTIFY_CONFIRM', 0x0002 ); | 
					
						
							|  |  |  | define ( 'NOTIFY_WALL',    0x0004 ); | 
					
						
							|  |  |  | define ( 'NOTIFY_COMMENT', 0x0008 ); | 
					
						
							|  |  |  | define ( 'NOTIFY_MAIL',    0x0010 ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // various namespaces we may need to parse
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-10 00:55:59 +00:00
										 |  |  | define ( 'NAMESPACE_DFRN' ,           'http://purl.org/macgirvin/dfrn/1.0' );  | 
					
						
							|  |  |  | define ( 'NAMESPACE_THREAD' ,         'http://purl.org/syndication/thread/1.0' ); | 
					
						
							|  |  |  | define ( 'NAMESPACE_TOMB' ,           'http://purl.org/atompub/tombstones/1.0' ); | 
					
						
							|  |  |  | define ( 'NAMESPACE_ACTIVITY',        'http://activitystrea.ms/spec/1.0/' ); | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | define ( 'NAMESPACE_ACTIVITY_SCHEMA', 'http://activitystrea.ms/schema/1.0/'); | 
					
						
							| 
									
										
										
										
											2010-10-07 02:46:44 +00:00
										 |  |  | define ( 'NAMESPACE_SALMON_ME',       'http://salmon-protocol.org/ns/magic-env'); | 
					
						
							| 
									
										
										
										
											2010-10-13 02:32:15 +00:00
										 |  |  | define ( 'NAMESPACE_OSTATUSSUB',      'http://ostatus.org/schema/1.0/subscribe'); | 
					
						
							| 
									
										
										
										
											2010-10-20 03:52:05 +00:00
										 |  |  | define ( 'NAMESPACE_GEORSS',          'http://www.georss.org/georss'); | 
					
						
							| 
									
										
										
										
											2010-09-10 00:55:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // activity stream defines
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | define ( 'ACTIVITY_LIKE',        NAMESPACE_ACTIVITY_SCHEMA . 'like' ); | 
					
						
							| 
									
										
										
										
											2010-09-10 01:49:19 +00:00
										 |  |  | define ( 'ACTIVITY_DISLIKE',     NAMESPACE_DFRN            . '/dislike' ); | 
					
						
							| 
									
										
										
										
											2010-09-10 00:55:59 +00:00
										 |  |  | define ( 'ACTIVITY_OBJ_HEART',   NAMESPACE_DFRN            . '/heart' ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | define ( 'ACTIVITY_FRIEND',      NAMESPACE_ACTIVITY_SCHEMA . 'make-friend' ); | 
					
						
							| 
									
										
										
										
											2010-10-22 04:48:22 +00:00
										 |  |  | define ( 'ACTIVITY_FOLLOW',      NAMESPACE_ACTIVITY_SCHEMA . 'follow' ); | 
					
						
							|  |  |  | define ( 'ACTIVITY_UNFOLLOW',    NAMESPACE_ACTIVITY_SCHEMA . 'unfollow' ); | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | define ( 'ACTIVITY_POST',        NAMESPACE_ACTIVITY_SCHEMA . 'post' ); | 
					
						
							|  |  |  | define ( 'ACTIVITY_UPDATE',      NAMESPACE_ACTIVITY_SCHEMA . 'update' ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define ( 'ACTIVITY_OBJ_COMMENT', NAMESPACE_ACTIVITY_SCHEMA . 'comment' ); | 
					
						
							|  |  |  | define ( 'ACTIVITY_OBJ_NOTE',    NAMESPACE_ACTIVITY_SCHEMA . 'note' ); | 
					
						
							|  |  |  | define ( 'ACTIVITY_OBJ_PERSON',  NAMESPACE_ACTIVITY_SCHEMA . 'person' ); | 
					
						
							|  |  |  | define ( 'ACTIVITY_OBJ_PHOTO',   NAMESPACE_ACTIVITY_SCHEMA . 'photo' ); | 
					
						
							|  |  |  | define ( 'ACTIVITY_OBJ_P_PHOTO', NAMESPACE_ACTIVITY_SCHEMA . 'profile-photo' ); | 
					
						
							|  |  |  | define ( 'ACTIVITY_OBJ_ALBUM',   NAMESPACE_ACTIVITY_SCHEMA . 'photo-album' ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // item weight for query ordering
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-17 10:10:19 +00:00
										 |  |  | define ( 'GRAVITY_PARENT',       0); | 
					
						
							|  |  |  | define ( 'GRAVITY_LIKE',         3); | 
					
						
							|  |  |  | define ( 'GRAVITY_COMMENT',      6); | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-22 09:13:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Our main application structure for the life of this page
 | 
					
						
							|  |  |  | // Primarily deals with the URL that got us here
 | 
					
						
							|  |  |  | // and tries to make some sense of it, and 
 | 
					
						
							|  |  |  | // stores our page contents and config storage
 | 
					
						
							|  |  |  | // and anything else that might need to be passed around 
 | 
					
						
							|  |  |  | // before we spit the page out. 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! class_exists('App')) { | 
					
						
							|  |  |  | class App { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public  $module_loaded = false; | 
					
						
							|  |  |  | 	public  $config; | 
					
						
							|  |  |  | 	public  $page; | 
					
						
							|  |  |  | 	public  $profile; | 
					
						
							|  |  |  | 	public  $user; | 
					
						
							| 
									
										
										
										
											2010-07-06 04:39:55 +00:00
										 |  |  | 	public  $cid; | 
					
						
							| 
									
										
										
										
											2010-07-17 00:16:50 +00:00
										 |  |  | 	public  $contact; | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	public  $content; | 
					
						
							| 
									
										
										
										
											2010-08-04 05:33:53 +00:00
										 |  |  | 	public  $data; | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	public  $error = false; | 
					
						
							|  |  |  | 	public  $cmd; | 
					
						
							|  |  |  | 	public  $argv; | 
					
						
							|  |  |  | 	public  $argc; | 
					
						
							|  |  |  | 	public  $module; | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 	public  $pager; | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 	public  $strings;    | 
					
						
							| 
									
										
										
										
											2010-08-16 04:49:29 +00:00
										 |  |  | 	public  $path; | 
					
						
							| 
									
										
										
										
											2010-10-18 03:04:17 +00:00
										 |  |  | 	public  $interactive = true; | 
					
						
							| 
									
										
										
										
											2010-07-19 06:23:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	private $scheme; | 
					
						
							|  |  |  | 	private $hostname; | 
					
						
							| 
									
										
										
										
											2010-07-19 03:49:10 +00:00
										 |  |  | 	private $baseurl; | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	private $db; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-14 05:01:23 +00:00
										 |  |  | 	private $curl_code; | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	private $curl_headers; | 
					
						
							| 
									
										
										
										
											2010-10-14 05:01:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	function __construct() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->config = array(); | 
					
						
							|  |  |  | 		$this->page = array(); | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 		$this->pager= array(); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-19 22:51:56 +00:00
										 |  |  | 		$this->scheme = ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']))	?  'https' : 'http' ); | 
					
						
							|  |  |  | 		$this->hostname = $_SERVER['SERVER_NAME']; | 
					
						
							|  |  |  | 		set_include_path("include/$this->hostname" . PATH_SEPARATOR . 'include' . PATH_SEPARATOR . '.' ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(substr($_SERVER['QUERY_STRING'],0,2) == "q=") | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 			$_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'],2); | 
					
						
							|  |  |  | 		$this->cmd = trim($_GET['q'],'/'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 		$this->argv = explode('/',$this->cmd); | 
					
						
							|  |  |  | 		$this->argc = count($this->argv); | 
					
						
							|  |  |  | 		if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) { | 
					
						
							|  |  |  | 			$this->module = $this->argv[0]; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else { | 
					
						
							|  |  |  | 			$this->module = 'home'; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2010-07-23 23:33:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-27 00:24:20 +00:00
										 |  |  | 		if($this->cmd === '.well-known/host-meta') | 
					
						
							| 
									
										
										
										
											2010-07-23 23:33:34 +00:00
										 |  |  | 			require_once('include/hostxrd.php'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 		$this->pager['page'] = ((x($_GET,'page')) ? $_GET['page'] : 1); | 
					
						
							|  |  |  | 		$this->pager['itemspage'] = 50; | 
					
						
							|  |  |  | 		$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; | 
					
						
							|  |  |  | 		$this->pager['total'] = 0; | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function get_baseurl($ssl = false) { | 
					
						
							| 
									
										
										
										
											2010-07-19 03:49:10 +00:00
										 |  |  | 		if(strlen($this->baseurl)) | 
					
						
							|  |  |  | 			return $this->baseurl; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-19 22:51:56 +00:00
										 |  |  | 		$this->baseurl = (($ssl) ? 'https' : $this->scheme) . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' ); | 
					
						
							| 
									
										
										
										
											2010-07-19 03:49:10 +00:00
										 |  |  | 		return $this->baseurl; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function set_baseurl($url) { | 
					
						
							|  |  |  | 		$this->baseurl = $url; | 
					
						
							| 
									
										
										
										
											2010-08-11 05:14:17 +00:00
										 |  |  | 		$this->hostname = basename($url); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-19 06:23:18 +00:00
										 |  |  | 	function get_hostname() { | 
					
						
							|  |  |  | 		return $this->hostname; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function set_hostname($h) { | 
					
						
							|  |  |  | 		$this->hostname = $h; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-07-19 03:49:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	function set_path($p) { | 
					
						
							| 
									
										
										
										
											2010-10-19 22:51:56 +00:00
										 |  |  | 		$this->path = trim(trim($p),'/'); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	}  | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-20 05:52:31 +00:00
										 |  |  | 	function get_path() { | 
					
						
							|  |  |  | 		return $this->path; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 	function set_pager_total($n) { | 
					
						
							|  |  |  | 		$this->pager['total'] = intval($n); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-07-20 05:52:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 	function set_pager_itemspage($n) { | 
					
						
							|  |  |  | 		$this->pager['itemspage'] = intval($n); | 
					
						
							|  |  |  | 		$this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	}  | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	function init_pagehead() { | 
					
						
							| 
									
										
										
										
											2010-09-23 01:00:19 +00:00
										 |  |  | 		$tpl = load_view_file("view/head.tpl"); | 
					
						
							|  |  |  | 		$this->page['htmlhead'] = replace_macros($tpl,array( | 
					
						
							| 
									
										
										
										
											2010-08-16 12:23:26 +00:00
										 |  |  | 			'$baseurl' => $this->get_baseurl() | 
					
						
							|  |  |  | 		)); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-14 05:01:23 +00:00
										 |  |  | 	function set_curl_code($code) { | 
					
						
							|  |  |  | 		$this->curl_code = $code; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function get_curl_code() { | 
					
						
							|  |  |  | 		return $this->curl_code; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	function set_curl_headers($headers) { | 
					
						
							|  |  |  | 		$this->curl_headers = $headers; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function get_curl_headers() { | 
					
						
							|  |  |  | 		return $this->curl_headers; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-07 00:40:58 +00:00
										 |  |  | // retrieve the App structure
 | 
					
						
							|  |  |  | // useful in functions which require it but don't get it passed to them
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(! function_exists('get_app')) { | 
					
						
							|  |  |  | function get_app() { | 
					
						
							|  |  |  | 	global $a; | 
					
						
							|  |  |  | 	return $a; | 
					
						
							|  |  |  | }}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Multi-purpose function to check variable state.
 | 
					
						
							|  |  |  | // Usage: x($var) or $x($array,'key')
 | 
					
						
							|  |  |  | // returns false if variable/key is not set
 | 
					
						
							|  |  |  | // if variable is set, returns 1 if has 'non-zero' value, otherwise returns 0.
 | 
					
						
							|  |  |  | // e.g. x('') or x(0) returns 0;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('x')) { | 
					
						
							|  |  |  | function x($s,$k = NULL) { | 
					
						
							|  |  |  | 	if($k != NULL) { | 
					
						
							|  |  |  | 		if((is_array($s)) && (array_key_exists($k,$s))) { | 
					
						
							|  |  |  | 			if($s[$k]) | 
					
						
							|  |  |  | 				return (int) 1; | 
					
						
							|  |  |  | 			return (int) 0; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else {		 | 
					
						
							|  |  |  | 		if(isset($s)) { | 
					
						
							|  |  |  | 			if($s) { | 
					
						
							|  |  |  | 				return (int) 1; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return (int) 0; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // called from db initialisation if db is dead.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('system_unavailable')) { | 
					
						
							|  |  |  | function system_unavailable() { | 
					
						
							|  |  |  | 	include('system_unavailable.php'); | 
					
						
							|  |  |  | 	killme(); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Primarily involved with database upgrade, but also sets the 
 | 
					
						
							|  |  |  | // base url for use in cmdline programs which don't have
 | 
					
						
							|  |  |  | // $_SERVER variables.
 | 
					
						
							| 
									
										
										
										
											2010-08-15 01:11:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if(! function_exists('check_config')) { | 
					
						
							|  |  |  | function check_config(&$a) { | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-19 11:59:31 +00:00
										 |  |  | 	load_config('system'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 	$build = get_config('system','build'); | 
					
						
							|  |  |  | 	if(! x($build)) | 
					
						
							|  |  |  | 		$build = set_config('system','build',BUILD_ID); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$url = get_config('system','url'); | 
					
						
							|  |  |  | 	if(! x($url)) | 
					
						
							|  |  |  | 		$url = set_config('system','url',$a->get_baseurl()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if($build != BUILD_ID) { | 
					
						
							|  |  |  | 		$stored = intval($build); | 
					
						
							|  |  |  | 		$current = intval(BUILD_ID); | 
					
						
							|  |  |  | 		if(($stored < $current) && file_exists('update.php')) { | 
					
						
							|  |  |  | 			// We're reporting a different version than what is currently installed.
 | 
					
						
							|  |  |  | 			// Run any existing update scripts to bring the database up to current.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require_once('update.php'); | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 			for($x = $stored; $x < $current; $x ++) { | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 				if(function_exists('update_' . $x)) { | 
					
						
							|  |  |  | 					$func = 'update_' . $x; | 
					
						
							|  |  |  | 					$func($a); | 
					
						
							| 
									
										
										
										
											2010-08-15 02:31:10 +00:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 			set_config('system','build', BUILD_ID); | 
					
						
							| 
									
										
										
										
											2010-08-15 02:31:10 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return; | 
					
						
							| 
									
										
										
										
											2010-08-15 01:11:36 +00:00
										 |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // This is our template processor.
 | 
					
						
							|  |  |  | // $s is the string requiring macro substitution.
 | 
					
						
							|  |  |  | // $r is an array of key value pairs (search => replace)
 | 
					
						
							|  |  |  | // returns substituted string.
 | 
					
						
							| 
									
										
										
										
											2010-10-06 02:56:09 +00:00
										 |  |  | // WARNING: this is pretty basic, and doesn't properly handle search strings that are substrings of each other.
 | 
					
						
							|  |  |  | // For instance if 'test' => "foo" and 'testing' => "bar", testing could become either bar or fooing, 
 | 
					
						
							|  |  |  | // depending on the order in which they were declared in the array.   
 | 
					
						
							| 
									
										
										
										
											2010-08-15 01:11:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('replace_macros')) {   | 
					
						
							|  |  |  | function replace_macros($s,$r) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$search = array(); | 
					
						
							|  |  |  | 	$replace = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(is_array($r) && count($r)) { | 
					
						
							|  |  |  | 		foreach ($r as $k => $v ) { | 
					
						
							|  |  |  | 			$search[] =  $k; | 
					
						
							|  |  |  | 			$replace[] = $v; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return str_replace($search,$replace,$s); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // load string translation table for alternate language
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | if(! function_exists('load_translation_table')) { | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | function load_translation_table($lang) { | 
					
						
							|  |  |  | 	global $a; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-07 00:40:58 +00:00
										 |  |  | 	if(file_exists("view/$lang/strings.php")) | 
					
						
							|  |  |  | 		include("view/$lang/strings.php"); | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // translate string if translation exists
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | if(! function_exists('t')) { | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | function t($s) { | 
					
						
							| 
									
										
										
										
											2010-10-07 00:40:58 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	$a = get_app(); | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if($a->strings[$s]) | 
					
						
							|  |  |  | 		return $a->strings[$s]; | 
					
						
							|  |  |  | 	return $s; | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // curl wrapper. If binary flag is true, return binary
 | 
					
						
							|  |  |  | // results. 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('fetch_url')) { | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | function fetch_url($url,$binary = false, &$redirects = 0) { | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	$ch = curl_init($url); | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	if(($redirects > 8) || (! $ch))  | 
					
						
							|  |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-21 23:45:26 +00:00
										 |  |  | 	curl_setopt($ch, CURLOPT_HEADER, true); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); | 
					
						
							| 
									
										
										
										
											2010-10-04 23:04:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// by default we will allow self-signed certs
 | 
					
						
							|  |  |  | 	// but you can override this
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$check_cert = get_config('system','verifyssl'); | 
					
						
							|  |  |  | 	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-18 01:44:13 +00:00
										 |  |  | 	$prx = get_config('system','proxy'); | 
					
						
							|  |  |  | 	if(strlen($prx)) { | 
					
						
							|  |  |  | 		curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); | 
					
						
							|  |  |  | 		curl_setopt($ch, CURLOPT_PROXY, $prx); | 
					
						
							|  |  |  | 		$prxusr = get_config('system','proxyuser'); | 
					
						
							|  |  |  | 		if(strlen($prxusr)) | 
					
						
							|  |  |  | 			curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	if($binary) | 
					
						
							|  |  |  | 		curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$s = curl_exec($ch); | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); | 
					
						
							|  |  |  | 	$header = substr($s,0,strpos($s,"\r\n\r\n")); | 
					
						
							| 
									
										
										
										
											2010-10-21 23:45:26 +00:00
										 |  |  | 	if(stristr($header,'100') && (strlen($header) < 30)) { | 
					
						
							|  |  |  | 		// 100 Continue has two headers, get the real one
 | 
					
						
							|  |  |  | 		$s = substr($s,strlen($header)+4); | 
					
						
							|  |  |  | 		$header = substr($s,0,strpos($s,"\r\n\r\n")); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	if($http_code == 301 || $http_code == 302 || $http_code == 303) { | 
					
						
							|  |  |  |         $matches = array(); | 
					
						
							|  |  |  |         preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); | 
					
						
							|  |  |  |         $url = trim(array_pop($matches)); | 
					
						
							|  |  |  |         $url_parsed = parse_url($url); | 
					
						
							|  |  |  |         if (isset($url_parsed)) { | 
					
						
							|  |  |  |             $redirects++; | 
					
						
							|  |  |  |             return fetch_url($url,$binary,$redirects); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-10-14 05:01:23 +00:00
										 |  |  | 	$a = get_app(); | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	$a->set_curl_code($http_code); | 
					
						
							|  |  |  | 	$body = substr($s,strlen($header)+4); | 
					
						
							|  |  |  | 	$a->set_curl_headers($header); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	curl_close($ch); | 
					
						
							| 
									
										
										
										
											2010-10-21 23:45:26 +00:00
										 |  |  | 	return($body); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // post request to $url. $params is an array of post variables.
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if(! function_exists('post_url')) { | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | function post_url($url,$params, &$redirects = 0) { | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	$ch = curl_init($url); | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	if(($redirects > 8) || (! $ch))  | 
					
						
							|  |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-21 23:45:26 +00:00
										 |  |  | 	curl_setopt($ch, CURLOPT_HEADER, true); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); | 
					
						
							|  |  |  | 	curl_setopt($ch, CURLOPT_POST,1); | 
					
						
							|  |  |  | 	curl_setopt($ch, CURLOPT_POSTFIELDS,$params); | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-04 23:04:52 +00:00
										 |  |  | 	$check_cert = get_config('system','verifyssl'); | 
					
						
							|  |  |  | 	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); | 
					
						
							| 
									
										
										
										
											2010-08-18 01:44:13 +00:00
										 |  |  | 	$prx = get_config('system','proxy'); | 
					
						
							|  |  |  | 	if(strlen($prx)) { | 
					
						
							|  |  |  | 		curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); | 
					
						
							|  |  |  | 		curl_setopt($ch, CURLOPT_PROXY, $prx); | 
					
						
							|  |  |  | 		$prxusr = get_config('system','proxyuser'); | 
					
						
							|  |  |  | 		if(strlen($prxusr)) | 
					
						
							|  |  |  | 			curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	$s = curl_exec($ch); | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); | 
					
						
							|  |  |  | 	$header = substr($s,0,strpos($s,"\r\n\r\n")); | 
					
						
							| 
									
										
										
										
											2010-10-21 23:45:26 +00:00
										 |  |  | 	if(stristr($header,'100') && (strlen($header) < 30)) { | 
					
						
							|  |  |  | 		// 100 Continue has two headers, get the real one
 | 
					
						
							|  |  |  | 		$s = substr($s,strlen($header)+4); | 
					
						
							|  |  |  | 		$header = substr($s,0,strpos($s,"\r\n\r\n")); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	if($http_code == 301 || $http_code == 302 || $http_code == 303) { | 
					
						
							|  |  |  |         $matches = array(); | 
					
						
							|  |  |  |         preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); | 
					
						
							|  |  |  |         $url = trim(array_pop($matches)); | 
					
						
							|  |  |  |         $url_parsed = parse_url($url); | 
					
						
							|  |  |  |         if (isset($url_parsed)) { | 
					
						
							|  |  |  |             $redirects++; | 
					
						
							|  |  |  |             return post_url($url,$binary,$redirects); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-10-14 05:01:23 +00:00
										 |  |  | 	$a = get_app(); | 
					
						
							| 
									
										
										
										
											2010-10-21 11:53:43 +00:00
										 |  |  | 	$a->set_curl_code($http_code); | 
					
						
							|  |  |  | 	$body = substr($s,strlen($header)+4); | 
					
						
							|  |  |  | 	$a->set_curl_headers($header); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	curl_close($ch); | 
					
						
							| 
									
										
										
										
											2010-10-21 23:45:26 +00:00
										 |  |  | 	return($body); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // random hash, 64 chars
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if(! function_exists('random_string')) { | 
					
						
							|  |  |  | function random_string() { | 
					
						
							|  |  |  | 	return(hash('sha256',uniqid(rand(),true))); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // This is our primary input filter. The high bit hack only involved some old
 | 
					
						
							|  |  |  | // IE browser, forget which. 
 | 
					
						
							|  |  |  | // Use this on any text input where angle chars are not valid or permitted
 | 
					
						
							|  |  |  | // They will be replaced with safer brackets. This may be filtered further
 | 
					
						
							|  |  |  | // if these are not allowed either.   
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('notags')) { | 
					
						
							|  |  |  | function notags($string) { | 
					
						
							|  |  |  | 	// protect against :<> with high-bit set
 | 
					
						
							|  |  |  | 	return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string)); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // use this on "body" or "content" input where angle chars shouldn't be removed,
 | 
					
						
							|  |  |  | // and allow them to be safely displayed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('escape_tags')) { | 
					
						
							|  |  |  | function escape_tags($string) { | 
					
						
							| 
									
										
										
										
											2010-07-19 13:58:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return(htmlspecialchars($string)); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // wrapper for adding a login box. If $register == true provide a registration
 | 
					
						
							|  |  |  | // link. This will most always depend on the value of $a->config['register_policy'].
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // returns the complete html for inserting into the page
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('login')) { | 
					
						
							|  |  |  | function login($register = false) { | 
					
						
							|  |  |  | 	$o = ""; | 
					
						
							| 
									
										
										
										
											2010-09-23 01:00:19 +00:00
										 |  |  | 	$register_html = (($register) ? load_view_file("view/register-link.tpl") : ""); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(x($_SESSION,'authenticated')) { | 
					
						
							| 
									
										
										
										
											2010-09-23 01:00:19 +00:00
										 |  |  | 		$o = load_view_file("view/logout.tpl"); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	else { | 
					
						
							| 
									
										
										
										
											2010-09-23 01:00:19 +00:00
										 |  |  | 		$o = load_view_file("view/login.tpl"); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		$o = replace_macros($o,array('$register_html' => $register_html )); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return $o; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // generate a string that's random, but usually pronounceable. 
 | 
					
						
							|  |  |  | // used to generate initial passwords
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if(! function_exists('autoname')) { | 
					
						
							|  |  |  | function autoname($len) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$vowels = array('a','a','ai','au','e','e','e','ee','ea','i','ie','o','ou','u');  | 
					
						
							|  |  |  | 	if(mt_rand(0,5) == 4) | 
					
						
							|  |  |  | 		$vowels[] = 'y'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$cons = array( | 
					
						
							|  |  |  | 			'b','bl','br', | 
					
						
							|  |  |  | 			'c','ch','cl','cr', | 
					
						
							|  |  |  | 			'd','dr', | 
					
						
							|  |  |  | 			'f','fl','fr', | 
					
						
							|  |  |  | 			'g','gh','gl','gr', | 
					
						
							|  |  |  | 			'h', | 
					
						
							|  |  |  | 			'j', | 
					
						
							|  |  |  | 			'k','kh','kl','kr', | 
					
						
							|  |  |  | 			'l', | 
					
						
							|  |  |  | 			'm', | 
					
						
							|  |  |  | 			'n', | 
					
						
							|  |  |  | 			'p','ph','pl','pr', | 
					
						
							|  |  |  | 			'qu', | 
					
						
							|  |  |  | 			'r','rh', | 
					
						
							|  |  |  | 			's','sc','sh','sm','sp','st', | 
					
						
							|  |  |  | 			't','th','tr', | 
					
						
							|  |  |  | 			'v', | 
					
						
							|  |  |  | 			'w','wh', | 
					
						
							|  |  |  | 			'x', | 
					
						
							|  |  |  | 			'z','zh' | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$midcons = array('ck','ct','gn','ld','lf','lm','lt','mb','mm', 'mn','mp', | 
					
						
							|  |  |  | 				'nd','ng','nk','nt','rn','rp','rt'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$noend = array('bl', 'br', 'cl','cr','dr','fl','fr','gl','gr', | 
					
						
							|  |  |  | 				'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$start = mt_rand(0,2); | 
					
						
							|  |  |  |   	if($start == 0) | 
					
						
							|  |  |  |     		$table = $vowels; | 
					
						
							|  |  |  |   	else | 
					
						
							|  |  |  |     		$table = $cons; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$word = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for ($x = 0; $x < $len; $x ++) { | 
					
						
							|  |  |  |   		$r = mt_rand(0,count($table) - 1); | 
					
						
							|  |  |  |   		$word .= $table[$r]; | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   		if($table == $vowels) | 
					
						
							|  |  |  |     			$table = array_merge($cons,$midcons); | 
					
						
							|  |  |  |   		else | 
					
						
							|  |  |  |     			$table = $vowels; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$word = substr($word,0,$len); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	foreach($noend as $noe) { | 
					
						
							|  |  |  |   		if((strlen($word) > 2) && (substr($word,-2) == $noe)) { | 
					
						
							|  |  |  |     			$word = substr($word,0,-1); | 
					
						
							|  |  |  |     			break; | 
					
						
							|  |  |  |   		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if(substr($word,-1) == 'q') | 
					
						
							|  |  |  | 		$word = substr($word,0,-1);     | 
					
						
							|  |  |  | 	return $word; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Used to end the current process, after saving session state. 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('killme')) { | 
					
						
							|  |  |  | function killme() { | 
					
						
							|  |  |  | 	session_write_close(); | 
					
						
							|  |  |  | 	exit; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // redirect to another URL and terminate this process.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('goaway')) { | 
					
						
							|  |  |  | function goaway($s) { | 
					
						
							|  |  |  | 	header("Location: $s"); | 
					
						
							|  |  |  | 	killme(); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Generic XML return
 | 
					
						
							| 
									
										
										
										
											2010-10-10 23:16:29 +00:00
										 |  |  | // Outputs a basic dfrn XML status structure to STDOUT, with a <status> variable 
 | 
					
						
							|  |  |  | // of $st and an optional text <message> of $message and terminates the current process. 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if(! function_exists('xml_status')) { | 
					
						
							| 
									
										
										
										
											2010-10-10 23:16:29 +00:00
										 |  |  | function xml_status($st, $message = '') { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(strlen($message)) | 
					
						
							|  |  |  | 		$xml_message = "\t<message>" . xmlify($message) . "</message>\r\n"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-19 06:23:18 +00:00
										 |  |  | 	header( "Content-type: text/xml" ); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	echo '<?xml version="1.0" encoding="UTF-8"?>'."\r\n"; | 
					
						
							| 
									
										
										
										
											2010-10-10 23:16:29 +00:00
										 |  |  | 	echo "<result>\r\n\t<status>$st</status>\r\n$xml_message</result>\r\n"; | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	killme(); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // Returns the uid of locally logged in user or false.
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('local_user')) { | 
					
						
							|  |  |  | function local_user() { | 
					
						
							|  |  |  | 	if((x($_SESSION,'authenticated')) && (x($_SESSION,'uid'))) | 
					
						
							| 
									
										
										
										
											2010-10-18 07:43:49 +00:00
										 |  |  | 		return intval($_SESSION['uid']); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	return false; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Returns contact id of authenticated site visitor or false
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | if(! function_exists('remote_user')) { | 
					
						
							|  |  |  | function remote_user() { | 
					
						
							| 
									
										
										
										
											2010-07-28 02:27:14 +00:00
										 |  |  | 	if((x($_SESSION,'authenticated')) && (x($_SESSION,'visitor_id'))) | 
					
						
							| 
									
										
										
										
											2010-10-18 07:43:49 +00:00
										 |  |  | 		return intval($_SESSION['visitor_id']); | 
					
						
							| 
									
										
										
										
											2010-07-01 23:48:07 +00:00
										 |  |  | 	return false; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // contents of $s are displayed prominently on the page the next time
 | 
					
						
							|  |  |  | // a page is loaded. Usually used for errors or alerts.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-03 00:02:41 +00:00
										 |  |  | if(! function_exists('notice')) { | 
					
						
							|  |  |  | function notice($s) { | 
					
						
							| 
									
										
										
										
											2010-10-18 03:04:17 +00:00
										 |  |  | 	$a = get_app(); | 
					
						
							|  |  |  | 	if($a->interactive) | 
					
						
							|  |  |  | 		$_SESSION['sysmsg'] .= $s; | 
					
						
							| 
									
										
										
										
											2010-07-08 14:03:25 +00:00
										 |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // wrapper around config to limit the text length of an incoming message
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-19 03:49:10 +00:00
										 |  |  | if(! function_exists('get_max_import_size')) { | 
					
						
							|  |  |  | function get_max_import_size() { | 
					
						
							|  |  |  | 	global $a; | 
					
						
							|  |  |  | 	return ((x($a->config,'max_import_size')) ? $a->config['max_import_size'] : 0 ); | 
					
						
							|  |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-07-08 14:03:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // escape text ($str) for XML transport
 | 
					
						
							|  |  |  | // returns escaped text.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-08 14:03:25 +00:00
										 |  |  | if(! function_exists('xmlify')) { | 
					
						
							|  |  |  | function xmlify($str) { | 
					
						
							|  |  |  | 	$buffer = ''; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	for($x = 0; $x < strlen($str); $x ++) { | 
					
						
							|  |  |  | 		$char = $str[$x]; | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  | 		switch( $char ) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			case "\r" : | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case "&" : | 
					
						
							|  |  |  | 				$buffer .= '&'; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case "'" : | 
					
						
							|  |  |  | 				$buffer .= '''; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			case "\"" : | 
					
						
							|  |  |  | 				$buffer .= '"'; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case '<' : | 
					
						
							|  |  |  | 				$buffer .= '<'; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case '>' : | 
					
						
							|  |  |  | 				$buffer .= '>'; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			case "\n" : | 
					
						
							|  |  |  | 				$buffer .= ' '; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			default : | 
					
						
							|  |  |  | 				$buffer .= $char; | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 		}	 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	$buffer = trim($buffer); | 
					
						
							|  |  |  | 	return($buffer); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // undo an xmlify
 | 
					
						
							|  |  |  | // pass xml escaped text ($s), returns unescaped text
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | if(! function_exists('unxmlify')) { | 
					
						
							| 
									
										
										
										
											2010-07-18 02:26:00 +00:00
										 |  |  | function unxmlify($s) { | 
					
						
							|  |  |  | 	$ret = str_replace('&','&', $s); | 
					
						
							|  |  |  | 	$ret = str_replace(array('<','>','"','''),array('<','>','"',"'"),$ret); | 
					
						
							|  |  |  | 	return $ret;	 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-07-08 14:03:25 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // convenience wrapper, reverse the operation "bin2hex"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | if(! function_exists('hex2bin')) { | 
					
						
							| 
									
										
										
										
											2010-07-08 14:03:25 +00:00
										 |  |  | function hex2bin($s) { | 
					
						
							|  |  |  | 	return(pack("H*",$s)); | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-07-10 05:47:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Automatic pagination.
 | 
					
						
							|  |  |  | // To use, get the count of total items.
 | 
					
						
							|  |  |  | // Then call $a->set_pager_total($number_items);
 | 
					
						
							|  |  |  | // Optionally call $a->set_pager_itemspage($n) to the number of items to display on each page
 | 
					
						
							|  |  |  | // Then call paginate($a) after the end of the display loop to insert the pager block on the page
 | 
					
						
							|  |  |  | // (assuming there are enough items to paginate).
 | 
					
						
							|  |  |  | // When using with SQL, the setting LIMIT %d, %d => $a->pager['start'],$a->pager['itemspage']
 | 
					
						
							|  |  |  | // will limit the results to the correct items for the current page. 
 | 
					
						
							|  |  |  | // The actual page handling is then accomplished at the application layer. 
 | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | if(! function_exists('paginate')) { | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | function paginate(&$a) { | 
					
						
							|  |  |  | 	$o = ''; | 
					
						
							|  |  |  | 	$stripped = ereg_replace("(&page=[0-9]*)","",$_SERVER['QUERY_STRING']); | 
					
						
							|  |  |  | 	$stripped = str_replace('q=','',$stripped); | 
					
						
							|  |  |  | 	$stripped = trim($stripped,'/'); | 
					
						
							|  |  |  | 	$url = $a->get_baseurl() . '/' . $stripped; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	  if($a->pager['total'] > $a->pager['itemspage']) { | 
					
						
							|  |  |  | 		$o .= '<div class="pager">'; | 
					
						
							|  |  |  |     		if($a->pager['page'] != 1) | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 			$o .= '<span class="pager_prev">'."<a href=\"$url".'&page='.($a->pager['page'] - 1).'">' . t('prev') . '</a></span> '; | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 		$o .=  "<span class=\"pager_first\"><a href=\"$url"."&page=1\">" . t('first') . "</a></span> "; | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     		$numpages = $a->pager['total'] / $a->pager['itemspage']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$numstart = 1; | 
					
						
							|  |  |  |     		$numstop = $numpages; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     		if($numpages > 14) { | 
					
						
							|  |  |  |       			$numstart = (($pagenum > 7) ? ($pagenum - 7) : 1); | 
					
						
							|  |  |  |       			$numstop = (($pagenum > ($numpages - 7)) ? $numpages : ($numstart + 14)); | 
					
						
							|  |  |  |     		} | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  | 		for($i = $numstart; $i <= $numstop; $i++){ | 
					
						
							| 
									
										
										
										
											2010-07-10 10:26:21 +00:00
										 |  |  |       			if($i == $a->pager['page']) | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 				$o .= '<span class="pager_current">'.(($i < 10) ? ' '.$i : $i); | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				$o .= "<span class=\"pager_n\"><a href=\"$url"."&page=$i\">".(($i < 10) ? ' '.$i : $i)."</a>";
 | 
					
						
							|  |  |  | 			$o .= '</span> '; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(($a->pager['total'] % $a->pager['itemspage']) != 0) { | 
					
						
							|  |  |  | 			if($i == $a->pager['page']) | 
					
						
							|  |  |  | 				$o .= '<span class="pager_current">'.(($i < 10) ? ' '.$i : $i); | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				$o .= "<span class=\"pager_n\"><a href=\"$url"."&page=$i\">".(($i < 10) ? ' '.$i : $i)."</a>";
 | 
					
						
							|  |  |  | 			$o .= '</span> '; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$lastpage = (($numpages > intval($numpages)) ? intval($numpages)+1 : $numpages); | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 		$o .= "<span class=\"pager_last\"><a href=\"$url"."&page=$lastpage\">" . t('last') . "</a></span> ";
 | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     		if(($a->pager['total'] - ($a->pager['itemspage'] * $a->pager['page'])) > 0) | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 			$o .= '<span class="pager_next">'."<a href=\"$url"."&page=".($a->pager['page'] + 1).'">' . t('next') . '</a></span>'; | 
					
						
							| 
									
										
										
										
											2010-07-10 07:45:18 +00:00
										 |  |  | 		$o .= '</div>'."\r\n"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return $o; | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-07-15 06:04:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Turn user/group ACLs stored as angle bracketed text into arrays
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | if(! function_exists('expand_acl')) { | 
					
						
							| 
									
										
										
										
											2010-07-15 06:04:10 +00:00
										 |  |  | function expand_acl($s) { | 
					
						
							| 
									
										
										
										
											2010-09-27 02:44:03 +00:00
										 |  |  | 	// turn string array of angle-bracketed elements into numeric array
 | 
					
						
							|  |  |  | 	// e.g. "<1><2><3>" => array(1,2,3);
 | 
					
						
							|  |  |  | 	$ret = array(); | 
					
						
							| 
									
										
										
										
											2010-07-15 06:04:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if(strlen($s)) { | 
					
						
							| 
									
										
										
										
											2010-09-27 02:44:03 +00:00
										 |  |  | 		$t = str_replace('<','',$s); | 
					
						
							|  |  |  | 		$a = explode('>',$t); | 
					
						
							|  |  |  | 		foreach($a as $aa) { | 
					
						
							|  |  |  | 			if(intval($aa)) | 
					
						
							|  |  |  | 				$ret[] = intval($aa); | 
					
						
							| 
									
										
										
										
											2010-07-15 06:04:10 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-09-27 02:44:03 +00:00
										 |  |  | 	return $ret; | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | }}		 | 
					
						
							| 
									
										
										
										
											2010-07-27 05:48:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Used to wrap ACL elements in angle brackets for storage 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | if(! function_exists('sanitise_acl')) { | 
					
						
							| 
									
										
										
										
											2010-08-07 13:20:27 +00:00
										 |  |  | function sanitise_acl(&$item) { | 
					
						
							| 
									
										
										
										
											2010-08-10 05:58:58 +00:00
										 |  |  | 	if(intval($item)) | 
					
						
							|  |  |  | 		$item = '<' . intval(notags(trim($item))) . '>'; | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		unset($item); | 
					
						
							| 
									
										
										
										
											2010-08-09 04:03:08 +00:00
										 |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // retrieve a "family" of config variables from database to cached storage
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-19 11:59:31 +00:00
										 |  |  | if(! function_exists('load_config')) { | 
					
						
							|  |  |  | function load_config($family) { | 
					
						
							|  |  |  | 	global $a; | 
					
						
							|  |  |  | 	$r = q("SELECT * FROM `config` WHERE `cat` = '%s'", | 
					
						
							|  |  |  | 		dbesc($family) | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 	if(count($r)) { | 
					
						
							|  |  |  | 		foreach($r as $rr) { | 
					
						
							|  |  |  | 			$k = $rr['k']; | 
					
						
							|  |  |  | 			$a->config[$family][$k] = $rr['v']; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // get a particular config variable given the family name
 | 
					
						
							|  |  |  | // and key. Returns false if not set.
 | 
					
						
							|  |  |  | // $instore is only used by the set_config function
 | 
					
						
							|  |  |  | // to determine if the key already exists in the DB
 | 
					
						
							|  |  |  | // If a key is found in the DB but doesn't exist in
 | 
					
						
							|  |  |  | // local config cache, pull it into the cache so we don't have
 | 
					
						
							|  |  |  | // to hit the DB again for this item.
 | 
					
						
							| 
									
										
										
										
											2010-08-19 11:59:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | if(! function_exists('get_config')) { | 
					
						
							| 
									
										
										
										
											2010-08-19 14:15:41 +00:00
										 |  |  | function get_config($family, $key, $instore = false) { | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-19 11:59:31 +00:00
										 |  |  | 	global $a; | 
					
						
							| 
									
										
										
										
											2010-09-26 23:30:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-19 14:15:41 +00:00
										 |  |  | 	if(! $instore) { | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 		if(isset($a->config[$family][$key])) { | 
					
						
							| 
									
										
										
										
											2010-09-26 23:30:21 +00:00
										 |  |  | 			if($a->config[$family][$key] === '!<unset>!') { | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 				return false; | 
					
						
							| 
									
										
										
										
											2010-09-26 23:30:21 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2010-08-19 14:15:41 +00:00
										 |  |  | 			return $a->config[$family][$key]; | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2010-08-19 14:15:41 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 	$ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", | 
					
						
							|  |  |  | 		dbesc($family), | 
					
						
							|  |  |  | 		dbesc($key) | 
					
						
							|  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2010-08-19 11:59:31 +00:00
										 |  |  | 	if(count($ret)) { | 
					
						
							|  |  |  | 		$a->config[$family][$key] = $ret[0]['v']; | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 		return $ret[0]['v']; | 
					
						
							| 
									
										
										
										
											2010-08-19 11:59:31 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 	else { | 
					
						
							|  |  |  | 		$a->config[$family][$key] = '!<unset>!'; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 	return false; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Store a config value ($value) in the category ($family)
 | 
					
						
							|  |  |  | // under the key ($key)
 | 
					
						
							|  |  |  | // Return the value, or false if the database update failed
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | if(! function_exists('set_config')) { | 
					
						
							|  |  |  | function set_config($family,$key,$value) { | 
					
						
							| 
									
										
										
										
											2010-08-19 11:59:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	global $a; | 
					
						
							|  |  |  | 	$a->config[$family][$key] = $value; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-19 14:15:41 +00:00
										 |  |  | 	if(get_config($family,$key,true) === false) { | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 		$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ", | 
					
						
							|  |  |  | 			dbesc($family), | 
					
						
							|  |  |  | 			dbesc($key), | 
					
						
							|  |  |  | 			dbesc($value) | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 		if($ret)  | 
					
						
							|  |  |  | 			return $value; | 
					
						
							|  |  |  | 		return $ret; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-08-19 14:15:41 +00:00
										 |  |  | 	$ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", | 
					
						
							| 
									
										
										
										
											2010-08-16 05:43:42 +00:00
										 |  |  | 		dbesc($value), | 
					
						
							|  |  |  | 		dbesc($family), | 
					
						
							|  |  |  | 		dbesc($key) | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 	if($ret) | 
					
						
							|  |  |  | 		return $value; | 
					
						
							|  |  |  | 	return $ret; | 
					
						
							|  |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // convert an XML document to a normalised, case-corrected array
 | 
					
						
							|  |  |  | // used by webfinger
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | if(! function_exists('convert_xml_element_to_array')) { | 
					
						
							|  |  |  | function convert_xml_element_to_array($xml_element, &$recursion_depth=0) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // If we're getting too deep, bail out
 | 
					
						
							|  |  |  |         if ($recursion_depth > 512) { | 
					
						
							|  |  |  |                 return(null); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!is_string($xml_element) && | 
					
						
							|  |  |  |         !is_array($xml_element) && | 
					
						
							|  |  |  |         (get_class($xml_element) == 'SimpleXMLElement')) { | 
					
						
							|  |  |  |                 $xml_element_copy = $xml_element; | 
					
						
							|  |  |  |                 $xml_element = get_object_vars($xml_element); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_array($xml_element)) { | 
					
						
							|  |  |  |                 $result_array = array(); | 
					
						
							|  |  |  |                 if (count($xml_element) <= 0) { | 
					
						
							|  |  |  |                         return (trim(strval($xml_element_copy))); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 foreach($xml_element as $key=>$value) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         $recursion_depth++; | 
					
						
							|  |  |  |                         $result_array[strtolower($key)] = | 
					
						
							|  |  |  |                 convert_xml_element_to_array($value, $recursion_depth); | 
					
						
							|  |  |  |                         $recursion_depth--; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 if ($recursion_depth == 0) { | 
					
						
							|  |  |  |                         $temp_array = $result_array; | 
					
						
							|  |  |  |                         $result_array = array( | 
					
						
							|  |  |  |                                 strtolower($xml_element_copy->getName()) => $temp_array, | 
					
						
							|  |  |  |                         ); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return ($result_array); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |                 return (trim(strval($xml_element))); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Given an email style address, perform webfinger lookup and 
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // return the resulting DFRN profile URL, or if no DFRN profile URL
 | 
					
						
							|  |  |  | // is located, returns an OStatus subscription template (prefixed 
 | 
					
						
							|  |  |  | // with the string 'stat:' to identify it as on OStatus template).
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // If this isn't an email style address just return $s.
 | 
					
						
							|  |  |  | // Return an empty string if email-style addresses but webfinger fails,
 | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | // or if the resultant personal XRD doesn't contain a supported 
 | 
					
						
							|  |  |  | // subscription/friend-request attribute.
 | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | if(! function_exists('webfinger_dfrn')) { | 
					
						
							|  |  |  | function webfinger_dfrn($s) { | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 	if(! strstr($s,'@')) { | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 		return $s; | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | 	$links = webfinger($s); | 
					
						
							|  |  |  | 	if(count($links)) { | 
					
						
							|  |  |  | 		foreach($links as $link) | 
					
						
							| 
									
										
										
										
											2010-10-13 00:11:06 +00:00
										 |  |  | 			if($link['@attributes']['rel'] === NAMESPACE_DFRN) | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | 				return $link['@attributes']['href']; | 
					
						
							| 
									
										
										
										
											2010-10-13 02:32:15 +00:00
										 |  |  | 		foreach($links as $link) | 
					
						
							|  |  |  | 			if($link['@attributes']['rel'] === NAMESPACE_OSTATUSSUB) | 
					
						
							| 
									
										
										
										
											2010-10-13 09:47:32 +00:00
										 |  |  | 				return 'stat:' . $link['@attributes']['template'];		 | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return ''; | 
					
						
							|  |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | // Given an email style address, perform webfinger lookup and 
 | 
					
						
							|  |  |  | // return the array of link attributes from the personal XRD file.
 | 
					
						
							|  |  |  | // On error/failure return an empty array.
 | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | if(! function_exists('webfinger')) { | 
					
						
							|  |  |  | function webfinger($s) { | 
					
						
							|  |  |  | 	$host = ''; | 
					
						
							|  |  |  | 	if(strstr($s,'@')) { | 
					
						
							|  |  |  | 		$host = substr($s,strpos($s,'@') + 1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if(strlen($host)) { | 
					
						
							|  |  |  | 		$tpl = fetch_lrdd_template($host); | 
					
						
							|  |  |  | 		if(strlen($tpl)) { | 
					
						
							|  |  |  | 			$pxrd = str_replace('{uri}', urlencode('acct://'.$s), $tpl); | 
					
						
							|  |  |  | 			$links = fetch_xrd_links($pxrd); | 
					
						
							|  |  |  | 			if(! count($links)) { | 
					
						
							|  |  |  | 				// try without the double slashes
 | 
					
						
							|  |  |  | 				$pxrd = str_replace('{uri}', urlencode('acct:'.$s), $tpl); | 
					
						
							|  |  |  | 				$links = fetch_xrd_links($pxrd); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return $links; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return array(); | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Given a host name, locate the LRDD template from that
 | 
					
						
							|  |  |  | // host. Returns the LRDD template or an empty string on
 | 
					
						
							|  |  |  | // error/failure.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(! function_exists('fetch_lrdd_template')) { | 
					
						
							|  |  |  | function fetch_lrdd_template($host) { | 
					
						
							|  |  |  | 	$tpl = ''; | 
					
						
							|  |  |  | 	$url = 'http://' . $host . '/.well-known/host-meta' ; | 
					
						
							|  |  |  | 	$links = fetch_xrd_links($url); | 
					
						
							|  |  |  | 	if(count($links)) { | 
					
						
							|  |  |  | 		foreach($links as $link) | 
					
						
							|  |  |  | 			if($link['@attributes']['rel'] && $link['@attributes']['rel'] === 'lrdd') | 
					
						
							|  |  |  | 				$tpl = $link['@attributes']['template']; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if(! strpos($tpl,'{uri}')) | 
					
						
							|  |  |  | 		$tpl = ''; | 
					
						
							|  |  |  | 	return $tpl; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Given a URL, retrieve the page as an XRD document.
 | 
					
						
							|  |  |  | // Return an array of links.
 | 
					
						
							|  |  |  | // on error/failure return empty array.
 | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | if(! function_exists('fetch_xrd_links')) { | 
					
						
							|  |  |  | function fetch_xrd_links($url) { | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | 	$xml = fetch_url($url); | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 	if (! $xml) | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | 		return array(); | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | 	$h = simplexml_load_string($xml); | 
					
						
							|  |  |  | 	$arr = convert_xml_element_to_array($h); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-12 23:50:12 +00:00
										 |  |  | 	if(isset($arr['xrd']['link'])) { | 
					
						
							|  |  |  | 		$link = $arr['xrd']['link']; | 
					
						
							|  |  |  | 		if(! isset($link[0])) | 
					
						
							|  |  |  | 			$links = array($link); | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			$links = $link; | 
					
						
							|  |  |  | 		return $links; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return array(); | 
					
						
							| 
									
										
										
										
											2010-08-31 04:08:45 +00:00
										 |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Convert an ACL array to a storable string
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | if(! function_exists('perms2str')) { | 
					
						
							|  |  |  | function perms2str($p) { | 
					
						
							|  |  |  | 	$ret = ''; | 
					
						
							|  |  |  | 	$tmp = $p; | 
					
						
							|  |  |  | 	if(is_array($tmp)) { | 
					
						
							|  |  |  | 		array_walk($tmp,'sanitise_acl'); | 
					
						
							|  |  |  | 		$ret = implode('',$tmp); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return $ret; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // generate a guaranteed unique (for this domain) item ID for ATOM
 | 
					
						
							|  |  |  | // safe from birthday paradox
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | if(! function_exists('item_new_uri')) { | 
					
						
							|  |  |  | function item_new_uri($hostname,$uid) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	do { | 
					
						
							|  |  |  | 		$dups = false; | 
					
						
							|  |  |  | 		$hash = random_string(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$uri = "urn:X-dfrn:" . $hostname . ':' . $uid . ':' . $hash; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1", | 
					
						
							|  |  |  | 			dbesc($uri)); | 
					
						
							|  |  |  | 		if(count($r)) | 
					
						
							|  |  |  | 			$dups = true; | 
					
						
							|  |  |  | 	} while($dups == true); | 
					
						
							|  |  |  | 	return $uri; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Generate a guaranteed unique photo ID.
 | 
					
						
							|  |  |  | // safe from birthday paradox
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-14 05:57:31 +00:00
										 |  |  | if(! function_exists('photo_new_resource')) { | 
					
						
							|  |  |  | function photo_new_resource() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	do { | 
					
						
							|  |  |  | 		$found = false; | 
					
						
							|  |  |  | 		$resource = hash('md5',uniqid(mt_rand(),true)); | 
					
						
							|  |  |  | 		$r = q("SELECT `id` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", | 
					
						
							|  |  |  | 			dbesc($resource) | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 		if(count($r)) | 
					
						
							|  |  |  | 			$found = true; | 
					
						
							|  |  |  | 	} while($found == true); | 
					
						
							|  |  |  | 	return $resource; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Take a URL from the wild, prepend http:// if necessary
 | 
					
						
							|  |  |  | // and check DNS to see if it's real
 | 
					
						
							|  |  |  | // return true if it's OK, false if something is wrong with it
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | if(! function_exists('validate_url')) { | 
					
						
							| 
									
										
										
										
											2010-09-14 00:12:54 +00:00
										 |  |  | function validate_url(&$url) { | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 	if(substr($url,0,4) != 'http') | 
					
						
							|  |  |  | 		$url = 'http://' . $url; | 
					
						
							|  |  |  | 	$h = parse_url($url); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-14 00:12:54 +00:00
										 |  |  | 	if(! $h) { | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2010-09-14 00:12:54 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if(! checkdnsrr($h['host'], 'ANY')) { | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2010-09-14 00:12:54 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 	return true; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Check $url against our list of allowed sites,
 | 
					
						
							|  |  |  | // wildcards allowed. If allowed_sites is unset return true;
 | 
					
						
							|  |  |  | // If url is allowed, return true.
 | 
					
						
							|  |  |  | // otherwise, return false
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-14 00:12:54 +00:00
										 |  |  | if(! function_exists('allowed_url')) { | 
					
						
							|  |  |  | function allowed_url($url) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$h = parse_url($url); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(! $h) { | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$str_allowed = get_config('system','allowed_sites'); | 
					
						
							|  |  |  | 	if(! $str_allowed) | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$found = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$host = strtolower($h['host']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// always allow our own site
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if($host == strtolower($_SERVER['SERVER_NAME'])) | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$fnmatch = function_exists('fnmatch'); | 
					
						
							|  |  |  | 	$allowed = explode(',',$str_allowed); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(count($allowed)) { | 
					
						
							|  |  |  | 		foreach($allowed as $a) { | 
					
						
							|  |  |  | 			$pat = strtolower(trim($a)); | 
					
						
							|  |  |  | 			if(($fnmatch && fnmatch($pat,$host)) || ($pat == $host)) { | 
					
						
							|  |  |  | 				$found = true;  | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return $found; | 
					
						
							|  |  |  | }} | 
					
						
							| 
									
										
										
										
											2010-09-09 03:14:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // check if email address is allowed to register here.
 | 
					
						
							|  |  |  | // Compare against our list (wildcards allowed).
 | 
					
						
							|  |  |  | // Returns false if not allowed, true if allowed or if
 | 
					
						
							|  |  |  | // allowed list is not configured.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-23 22:36:21 +00:00
										 |  |  | if(! function_exists('allowed_email')) { | 
					
						
							|  |  |  | function allowed_email($email) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$domain = strtolower(substr($email,strpos($email,'@') + 1)); | 
					
						
							|  |  |  | 	if(! $domain) | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$str_allowed = get_config('system','allowed_email'); | 
					
						
							|  |  |  | 	if(! $str_allowed) | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$found = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$fnmatch = function_exists('fnmatch'); | 
					
						
							|  |  |  | 	$allowed = explode(',',$str_allowed); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(count($allowed)) { | 
					
						
							|  |  |  | 		foreach($allowed as $a) { | 
					
						
							|  |  |  | 			$pat = strtolower(trim($a)); | 
					
						
							|  |  |  | 			if(($fnmatch && fnmatch($pat,$host)) || ($pat == $host)) { | 
					
						
							|  |  |  | 				$found = true;  | 
					
						
							|  |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return $found; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | // Format the like/dislike text for a profile item
 | 
					
						
							|  |  |  | // $cnt = number of people who like/dislike the item
 | 
					
						
							|  |  |  | // $arr = array of pre-linked names of likers/dislikers
 | 
					
						
							|  |  |  | // $type = one of 'like, 'dislike'
 | 
					
						
							|  |  |  | // $id  = item id
 | 
					
						
							|  |  |  | // returns formatted text
 | 
					
						
							| 
									
										
										
										
											2010-09-23 22:36:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-17 10:10:19 +00:00
										 |  |  | if(! function_exists('format_like')) { | 
					
						
							|  |  |  | function format_like($cnt,$arr,$type,$id) { | 
					
						
							|  |  |  | 	if($cnt == 1) | 
					
						
							| 
									
										
										
										
											2010-09-27 00:24:20 +00:00
										 |  |  | 		$o .= $arr[0] . (($type === 'like') ? t(' likes this.') : t(' doesn\'t like this.')) . EOL ; | 
					
						
							| 
									
										
										
										
											2010-09-17 10:10:19 +00:00
										 |  |  | 	else { | 
					
						
							|  |  |  | 		$o .= '<span class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');" >'  | 
					
						
							| 
									
										
										
										
											2010-09-27 00:24:20 +00:00
										 |  |  | 			. $cnt . ' ' . t('people') . '</span> ' . (($type === 'like') ? t('like this.') : t('don\'t like this.')) . EOL ; | 
					
						
							| 
									
										
										
										
											2010-09-17 10:10:19 +00:00
										 |  |  | 		$total = count($arr); | 
					
						
							| 
									
										
										
										
											2010-10-13 00:11:06 +00:00
										 |  |  | 		if($total >= MAX_LIKERS) | 
					
						
							|  |  |  | 			$arr = array_slice($arr, 0, MAX_LIKERS - 1); | 
					
						
							|  |  |  | 		if($total < MAX_LIKERS) | 
					
						
							| 
									
										
										
										
											2010-09-17 10:10:19 +00:00
										 |  |  | 			$arr[count($arr)-1] = t('and') . ' ' . $arr[count($arr)-1]; | 
					
						
							|  |  |  | 		$str = implode(', ', $arr); | 
					
						
							| 
									
										
										
										
											2010-10-13 00:11:06 +00:00
										 |  |  | 		if($total >= MAX_LIKERS) | 
					
						
							|  |  |  | 			$str .= t(', and ') . $total - MAX_LIKERS . t(' other people'); | 
					
						
							| 
									
										
										
										
											2010-09-27 00:24:20 +00:00
										 |  |  | 		$str .= (($type === 'like') ? t(' like this.') : t(' don\'t like this.')); | 
					
						
							| 
									
										
										
										
											2010-10-19 23:09:10 +00:00
										 |  |  | 		$o .= "\t" . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>'; | 
					
						
							| 
									
										
										
										
											2010-09-17 10:10:19 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return $o; | 
					
						
							|  |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 00:16:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // wrapper to load a view template, checking for alternate
 | 
					
						
							|  |  |  | // languages before falling back to the default
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-23 01:00:19 +00:00
										 |  |  | if(! function_exists('load_view_file')) { | 
					
						
							|  |  |  | function load_view_file($s) { | 
					
						
							|  |  |  | 	$b = basename($s); | 
					
						
							|  |  |  | 	$d = dirname($s); | 
					
						
							|  |  |  | 	$lang = get_config('system','language'); | 
					
						
							|  |  |  | 	if($lang && file_exists("$d/$lang/$b")) | 
					
						
							|  |  |  | 		return file_get_contents("$d/$lang/$b"); | 
					
						
							|  |  |  | 	return file_get_contents($s); | 
					
						
							| 
									
										
										
										
											2010-10-19 22:51:56 +00:00
										 |  |  | }} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |