Friendika widgets.
This commit is contained in:
		
							
								
								
									
										61
									
								
								addon/widgets/widgets.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								addon/widgets/widgets.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| /** | ||||
|  * @author Fabio Comuni | ||||
|  */ | ||||
|  | ||||
| var f9a_widget = { | ||||
| 	entrypoint : "$entrypoint", | ||||
| 	key	: "$key", | ||||
| 	widgetid: "$widget_id", | ||||
| 	xmlhttp : null, | ||||
| 	 | ||||
| 	getXHRObj : function(){ | ||||
| 		if (window.XMLHttpRequest) { | ||||
| 			// code for IE7+, Firefox, Chrome, Opera, Safari | ||||
| 		 	this.xmlhttp = new XMLHttpRequest(); | ||||
| 		} else { | ||||
| 			// code for IE6, IE5 | ||||
| 			this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); | ||||
| 		} | ||||
| 	}, | ||||
| 	 | ||||
| 	dorequest : function(args, cb) { | ||||
| 		if (args===null) args = new Array(); | ||||
| 		args['k']=this.key; | ||||
| 		args['s']=window.location; | ||||
| 		var urlencodedargs = new Array(); | ||||
| 		for(k in args){ urlencodedargs.push( encodeURIComponent(k)+"="+encodeURIComponent(args[k]) ); } | ||||
| 	 | ||||
| 		var url = this.entrypoint + "?"+ urlencodedargs.join("&"); | ||||
|  | ||||
| 		this.xmlhttp.open("GET", url  ,true); | ||||
| 		this.xmlhttp.send(); | ||||
| 		this.xmlhttp.onreadystatechange=function(){ | ||||
| 		  if (this.readyState==4){ | ||||
| 		  	if (this.status==200) { | ||||
| 		    	cb(this.responseText); | ||||
| 			} else { | ||||
| 		  		document.getElementById(f9a_widget.widgetid).innerHTML="Error loading widget."; | ||||
| 		  	} | ||||
| 		  } | ||||
| 		}  | ||||
|  | ||||
| 	}, | ||||
| 	 | ||||
| 	requestcb: function(responseText) { | ||||
| 		document.getElementById(f9a_widget.widgetid).innerHTML=responseText; | ||||
| 	}, | ||||
| 	 | ||||
| 	load : function (){ | ||||
| 		this.getXHRObj(); | ||||
| 		this.dorequest(null, this.requestcb); | ||||
| 	} | ||||
|  | ||||
| }; | ||||
|  | ||||
| (function() { | ||||
| 	f9a_widget.load();	 | ||||
| })(); | ||||
|  | ||||
| document.writeln("<div id='$widget_id' class='f9k_widget'>"); | ||||
| document.writeln("<img id='$widget_id_ld' src='$loader'>"); | ||||
| document.writeln("</div>"); | ||||
							
								
								
									
										169
									
								
								addon/widgets/widgets.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								addon/widgets/widgets.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,169 @@ | ||||
| <?php | ||||
| 	/** | ||||
| 	 * widgets from friendika | ||||
| 	 *  | ||||
| 	 * allow to embed info from friendika into another site | ||||
| 	 */ | ||||
| 	  | ||||
| 	  | ||||
| function widgets_install() { | ||||
| 	//  we need some hooks, for the configuration and for sending tweets | ||||
| 	register_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings');  | ||||
| 	register_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); | ||||
|  | ||||
| 	logger("installed widgets"); | ||||
| } | ||||
|  | ||||
| function widgets_settings_post(){ | ||||
| 	 | ||||
| 	if (isset($_POST['widgets-submit'])){ | ||||
| 		set_pconfig(local_user(), 'widgets', 'site', $_POST['widgets-site']); | ||||
| 		set_pconfig(local_user(), 'widgets', 'key', $_POST['widgets-key']); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| function widgets_settings(&$a,&$o) { | ||||
|     if(! local_user()) | ||||
| 		return;		 | ||||
| 	 | ||||
| 	$key    = get_pconfig(local_user(), 'widgets', 'key' ); | ||||
| 	$site    = get_pconfig(local_user(), 'widgets', 'site' ); | ||||
|  | ||||
| 	if ($key=='') $key = mt_rand();  | ||||
|  | ||||
| 	$o .=' | ||||
| 	<h3 class="settings-heading">Widgets</h3> | ||||
| 	<div id="settings-username-wrapper"> | ||||
| 		<label for="widgets-site" id="settings-username-label">'.t('Remote site: ').'</label> | ||||
| 		<input type="text" value="'.$site.'" id="settings-username" name="widgets-site"> | ||||
| 	</div> | ||||
| 	<div id="settings-username-end"></div> | ||||
| 	<div id="settings-username-wrapper"> | ||||
| 		<label for="widgets-key" id="settings-username-label">'.t('Widgets key: ').'</label> | ||||
| 		<input type="hidden" value="'.$key.'" id="settings-username" name="widgets-key"> | ||||
| 		<strong>'.$key.'</strong> | ||||
| 	</div> | ||||
| 	<div id="settings-username-end"></div> | ||||
| 	 | ||||
| 	 | ||||
| 		 | ||||
| 	<div class="settings-submit-wrapper"> | ||||
| 		<input type="submit" value="'.t('Submit').'" class="settings-submit" name="widgets-submit"> | ||||
| 	</div>	 | ||||
| 	'; | ||||
| 	 | ||||
| 	if ($key!='' and $site!='') { | ||||
| 		$o.='<h4>Widgets:</h4> | ||||
| 		<ul> | ||||
| 			<li><a href="'.$a->get_baseurl().'/widgets/friends/?p=1&k='.$key.'">Friend list</a></li> | ||||
| 		</ul> | ||||
| 		'; | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| function widgets_module() { | ||||
| 	return; | ||||
| } | ||||
|  | ||||
| function _abs_url($s){ | ||||
| 	$a = get_app(); | ||||
| 	return preg_replace("|href=(['\"])([^h][^t][^t][^p])|", "href=\$1".$a->get_baseurl()."/\$2", $s); | ||||
| } | ||||
|  | ||||
|  | ||||
| function widgets_content(&$a) { | ||||
|  | ||||
| 	if (!isset($_GET['k'])) { | ||||
| 		if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();} | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	$r = q("SELECT * FROM pconfig WHERE uid IN (SELECT uid FROM pconfig  WHERE v='%s')AND  cat='widgets'", | ||||
| 			dbesc($_GET['k']) | ||||
| 		 ); | ||||
| 	if (!count($r)){ | ||||
| 		if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();} | ||||
| 		return; | ||||
| 	}     | ||||
| 	$conf = array(); | ||||
| 	$conf['uid'] = $r[0]['uid']; | ||||
| 	foreach($r as $e) { $conf[$e['k']]=$e['v']; } | ||||
|  | ||||
| 	$o = "";	 | ||||
|  | ||||
| //	echo "<pre>"; var_dump($a->argv); die(); | ||||
| 	if ($a->argv[2]=="cb"){ | ||||
| 		switch($a->argv[1]) { | ||||
| 			case 'friends':  | ||||
| 				widget_friends_content($a, $o, $conf); | ||||
| 				break; | ||||
| 		} | ||||
| 		 | ||||
| 	} else { | ||||
|  | ||||
| 		 | ||||
| 		if (isset($_GET['p'])) { | ||||
| 			$o .= "<style>.f9k_widget { float: left;border:1px solid black; }</style>"; | ||||
| 			$o .= "<h1>Preview Widget</h1>"; | ||||
| 			$o .= '<a href="'.$a->get_baseurl().'/settings/addon">'. t("Plugin Settings") .'</a>'; | ||||
| 			$o .= "<br style='clear:left'/><br/>"; | ||||
| 			$o .= "<script>"; | ||||
| 		} else { | ||||
| 			header("content-type: application/x-javascript"); | ||||
| 		} | ||||
| 	 | ||||
| 	 | ||||
|  | ||||
| 	 | ||||
| 		$script = file_get_contents(dirname(__file__)."/widgets.js"); | ||||
| 		$o .= replace_macros($script, array( | ||||
| 			'$entrypoint' => $a->get_baseurl()."/widgets/".$a->argv[1]."/cb/", | ||||
| 			'$key' => $conf['key'], | ||||
| 			'$widget_id' => 'f9k_'.$a->argv[1]."_".time(), | ||||
| 			'$loader' => $a->get_baseurl()."/images/rotator.gif", | ||||
| 		)); | ||||
|  | ||||
| 	 | ||||
| 		if (isset($_GET['p'])) { | ||||
| 			$o .= "</script> | ||||
| 			<br style='clear:left'/><br/> | ||||
| 			<h4>Copy and paste this code</h4> | ||||
| 			<code>" | ||||
| 			 | ||||
| 			.htmlspecialchars('<script src="'.$a->get_baseurl().'/widgets/'.$a->argv[1].'?k='.$conf['key'].'"></script>') | ||||
| 			."</code>"; | ||||
| 			return $o; | ||||
| 		}	 | ||||
| 		 | ||||
| 	}	 | ||||
| 	 | ||||
| 	echo $o; | ||||
| 	killme(); | ||||
| } | ||||
|  | ||||
|  | ||||
| function widget_friends_content(&$a, &$o, $conf){ | ||||
| 	if (!local_user()){ | ||||
| 		if (!isset($_GET['s'])) | ||||
| 			header('HTTP/1.0 400 Bad Request'); | ||||
| 		 | ||||
| 		if (substr($_GET['s'],0,strlen($conf['site'])) !== $conf['site']) | ||||
| 			header('HTTP/1.0 400 Bad Request'); | ||||
| 	}  | ||||
| 	$r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `user`.* FROM `profile`  | ||||
| 			LEFT JOIN `user` ON `profile`.`uid` = `user`.`uid` | ||||
| 			WHERE `user`.`uid` = %s AND `profile`.`is-default` = 1 LIMIT 1", | ||||
| 			intval($conf['uid']) | ||||
| 	); | ||||
| 	 | ||||
| 	if(!count($r)) return; | ||||
| 	$a->profile = $r[0]; | ||||
|  | ||||
| 	$o .= _abs_url(contact_block()); | ||||
| 	$o .= "<a href='".$a->get_baseurl().'/profile/'.$a->profile['nickname']."'>". t('Connect on Friendika!') ."</a>"; | ||||
| 	 | ||||
|  | ||||
| } | ||||
|   | ||||
| ?> | ||||
		Reference in New Issue
	
	Block a user