diff options
-rw-r--r-- | addon/widgets/widget_friends.php | 32 | ||||
-rw-r--r-- | addon/widgets/widget_like.php | 22 | ||||
-rw-r--r-- | addon/widgets/widgets.js | 64 | ||||
-rw-r--r-- | addon/widgets/widgets.php | 168 |
4 files changed, 286 insertions, 0 deletions
diff --git a/addon/widgets/widget_friends.php b/addon/widgets/widget_friends.php new file mode 100644 index 000000000..2286f68ca --- /dev/null +++ b/addon/widgets/widget_friends.php @@ -0,0 +1,32 @@ +<?php + +function friends_widget_name() { + return "Shows profile contacts"; +} +function friends_widget_help() { + return ""; +} + +function friends_widget_args(){ + return Array(); +} + +function friends_widget_content(&$a, $conf){ + + $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 = ""; + $o .= "<style> + .f9k_widget .contact-block-div { display: block !important; float: left!important; width: 50px!important; height: 50px!important; margin: 2px!important;} + .f9k_widget #contact-block-end { clear: left; } + </style>"; + $o .= _abs_url(contact_block()); + $o .= "<a href='".$a->get_baseurl().'/profile/'.$a->profile['nickname']."'>". t('Connect on Friendika!') ."</a>"; + return $o; +} diff --git a/addon/widgets/widget_like.php b/addon/widgets/widget_like.php new file mode 100644 index 000000000..9b54212a8 --- /dev/null +++ b/addon/widgets/widget_like.php @@ -0,0 +1,22 @@ +<?php + +function like_widget_name() { + return "Shows likes"; +} +function like_widget_help() { + return "Search first item wich contains <em>KEY</em> and print like/dislike count"; +} + +function like_widget_args(){ + return Array("KEY"); +} + +function like_widget_content(&$a, $conf){ + $args = explode(",",$_GET['a']); + + if ($args[0]!=""){ + return " #TODO like/dislike count for item with <em>" .$args[0]. "</em> # "; + } else { + return " #TODO# "; + } +} diff --git a/addon/widgets/widgets.js b/addon/widgets/widgets.js new file mode 100644 index 000000000..45d36c4d7 --- /dev/null +++ b/addon/widgets/widgets.js @@ -0,0 +1,64 @@ +/** + * @author Fabio Comuni + */ + +var f9a_widget_$widget_id = { + entrypoint : "$entrypoint", + key : "$key", + widgetid: "$widget_id", + argstr: "$args", + 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; + args['a']=this.argstr; + 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.obj = this; + this.xmlhttp.onreadystatechange=function(){ + if (this.readyState==4){ + if (this.status==200) { + cb(this.obj, this.responseText); + } else { + document.getElementById(this.obj.widgetid).innerHTML="Error loading widget."; + } + } + } + + }, + + requestcb: function(obj, responseText) { + document.getElementById(obj.widgetid).innerHTML=responseText; + }, + + load : function (){ + this.getXHRObj(); + this.dorequest(null, this.requestcb); + } + +}; + +(function() { + f9a_widget_$widget_id.load(); +})(); + +document.writeln("<div id='$widget_id' class='f9k_widget'>"); +document.writeln("<img id='$widget_id_ld' src='$loader'>"); +document.writeln("</div>"); diff --git a/addon/widgets/widgets.php b/addon/widgets/widgets.php new file mode 100644 index 000000000..6bd7a73d1 --- /dev/null +++ b/addon/widgets/widgets.php @@ -0,0 +1,168 @@ +<?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'])){ + del_pconfig(local_user(), 'widgets', 'key'); + + } +} + +function widgets_settings(&$a,&$o) { + if(! local_user()) + return; + + + $key = get_pconfig(local_user(), 'widgets', 'key' ); + if ($key=='') { $key = mt_rand(); set_pconfig(local_user(), 'widgets', 'key', $key); } + + $o .='<h3 class="settings-heading">Widgets</h3>'; + + + $o.=' + <div id="settings-username-wrapper"> + '. t('Widgets key: ') .'<strong>'.$key.'</strong> + </div> + <div id="settings-username-end"></div> + <div class="settings-submit-wrapper"> + <input type="submit" value="'.t('Generate new key').'" class="settings-submit" name="widgets-submit"> + </div>'; + + + $o.='<h4>Widgets:</h4>'; + $o .= '<ul>'; + $d = dir(dirname(__file__)); + while(false !== ($f = $d->read())) { + if(substr($f,0,7)=="widget_") { + preg_match("|widget_([^.]+).php|", $f, $m); + $w=$m[1]; + require_once($f); + $o.='<li><a href="'.$a->get_baseurl().'/widgets/'.$w.'/?k='.$key.'&p=1">'. call_user_func($w."_widget_name") .'</a></li>'; + } + } + + $o .= '</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 = ""; + + $widgetfile =dirname(__file__)."/widget_".$a->argv[1].".php"; + if (file_exists($widgetfile)){ + require_once($widgetfile); + } else { + if($a->argv[2]=="cb"){header('HTTP/1.0 400 Bad Request'); killme();} + return; + } + + + + + //echo "<pre>"; var_dump($a->argv); die(); + if ($a->argv[2]=="cb"){ + /*if (!local_user()){ + if (!isset($_GET['s'])) + {header('HTTP/1.0 400 Bad Request'); killme();} + + if (substr($_GET['s'],0,strlen($conf['site'])) !== $conf['site']) + {header('HTTP/1.0 400 Bad Request'); killme();} + } */ + $o .= call_user_func($a->argv[1].'_widget_content',$a, $conf); + + } else { + + + if (isset($_GET['p']) && local_user()==$conf['uid'] ) { + $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 .= "<h4>".call_user_func($a->argv[1].'_widget_name')."</h4>"; + $o .= call_user_func($a->argv[1].'_widget_help'); + $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", + '$args' => (isset($_GET['a'])?$_GET['a']:''), + )); + + + if (isset($_GET['p'])) { + $jsargs = implode("</em>,<em>", call_user_func($a->argv[1].'_widget_args')); + if ($jsargs!='') $jsargs = "&a=<em>".$jsargs."</em>"; + + $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']) + .$jsargs + .htmlspecialchars('"></script>') + ."</code>"; + return $o; + } + + } + + echo $o; + killme(); +} + + + + +?> |