]> git.mxchange.org Git - friendica-addons.git/blobdiff - jappixmini/jappixmini.php
Merge https://github.com/tonybaldwin/friendica-addons into apull
[friendica-addons.git] / jappixmini / jappixmini.php
index b177507a6bbbbfa27b135f617e92a78cb2428921..d4b1993f7da0e1dc25bcb942fbac3f40b7e00733 100644 (file)
@@ -1,14 +1,19 @@
 <?php
 
-
 /**
 * Name: jappixmini
-* Description: Inserts a jabber chat
+* Description: Provides a Facebook-like chat using Jappix Mini
 * Version: 1.0
-* Author: leberwurscht
+* Author: leberwurscht <leberwurscht@hoegners.de>
 *
 */
 
+//
+// Copyright 2012 "Leberwurscht" <leberwurscht@hoegners.de>
+//
+// This file is dual-licensed under the MIT license (see MIT.txt) and the AGPL license (see jappix/COPYING).
+//
+
 /*
 
 Problem:
@@ -80,7 +85,11 @@ if (!$info_text) set_config("jappixmini", "infotext",
 );
 
 $bosh_proxy = get_config("jappixmini", "bosh_proxy");
-if ($bosh_proxy==="") set_config("jappixmini", "bosh_proxy", 1);
+if ($bosh_proxy==="") set_config("jappixmini", "bosh_proxy", "1");
+
+// set addon version so that safe updates are possible later
+$addon_version = get_config("jappixmini", "version");
+if ($addon_version==="") set_config("jappixmini", "version", "1");
 }
 
 
@@ -99,14 +108,8 @@ unregister_hook('about_hook', 'addon/jappixmini/jappixmini.php', 'jappixmini_dow
 function jappixmini_plugin_admin(&$a, &$o) {
        // display instructions and warnings on addon settings page for admin
 
-       if (!file_exists("addon/jappixmini/jappix")) {
-               $o .= '<p><strong>You need to install the Jappix application, adapted for Friendica (see README).</strong></p>';
-       }
-       else if (!file_exists("addon/jappixmini/jappix.zip")) {
-               $o .= '<p><strong style="color:#fff;background-color:#f00">The source archive jappix.zip does not exist. This is probably a violation of the Jappix License (see README).</strong></p>';
-       }
-       else {
-               $o .= '<p>Jappix is installed.</p>';
+       if (!file_exists("addon/jappixmini.tgz")) {
+               $o .= '<p><strong style="color:#fff;background-color:#f00">The source archive jappixmini.tgz does not exist. This is probably a violation of the Jappix License (AGPL).</strong></p>';
        }
 
        // warn if cron job has not yet been executed
@@ -144,8 +147,6 @@ function jappixmini_init(&$a) {
        // module page where other Friendica sites can submit Jabber addresses to and also can query Jabber addresses
         // of local users
 
-       if (!file_exists("addon/jappixmini/jappix")) killme();
-
        $dfrn_id = $_REQUEST["dfrn_id"];
        if (!$dfrn_id) killme();
 
@@ -218,8 +219,6 @@ function jappixmini_init(&$a) {
 function jappixmini_settings(&$a, &$s) {
     // addon settings for a user
 
-    if (!file_exists("addon/jappixmini/jappix")) return;
-
     $activate = get_pconfig(local_user(),'jappixmini','activate');
     $activate = intval($activate) ? ' checked="checked"' : '';
 
@@ -242,14 +241,20 @@ function jappixmini_settings(&$a, &$s) {
     $info_text = htmlentities($info_text);
     $info_text = str_replace("\n", "<br />", $info_text);
 
+    // count contacts
+    $r = q("SELECT COUNT(1) as `cnt` FROM `pconfig` WHERE `uid`=%d AND `cat`='jappixmini' AND `k` LIKE 'id:%%'", local_user());
+    if (count($r)) $contact_cnt = $r[0]["cnt"];
+    else $contact_cnt = 0;
+
+    // count jabber addresses
+    $r = q("SELECT COUNT(1) as `cnt` FROM `pconfig` WHERE `uid`=%d AND `cat`='jappixmini' AND `k` LIKE 'id:%%' AND `v` LIKE '%%@%%'", local_user());
+    if (count($r)) $address_cnt = $r[0]["cnt"];
+    else $address_cnt = 0;
+
     if (!$activate) {
        // load scripts if not yet activated so that password can be saved
         $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;g=mini.xml"></script>'."\r\n";
-        $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js"></script>'."\r\n";
-
-        $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=caps.js"></script>'."\r\n";
-        $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=name.js"></script>'."\r\n";
-        $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=roster.js"></script>'."\r\n";
+        $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js~caps.js~name.js~roster.js"></script>'."\r\n";
 
         $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/lib.js"></script>'."\r\n";
     }
@@ -293,6 +298,7 @@ function jappixmini_settings(&$a, &$s) {
     $s .= ' <input id="jappixmini-purge" type="checkbox" name="jappixmini-purge" value="1" />';
     $s .= '<br />';
     if ($info_text) $s .= '<br />Configuration help:<p style="margin-left:2em;">'.$info_text.'</p>';
+    $s .= '<br />Status:<p style="margin-left:2em;">Addon knows '.$address_cnt.' Jabber addresses of '.$contact_cnt.' Friendica contacts (takes some time, usually 10 minutes, to update).</p>';
     $s .= '<input type="submit" name="jappixmini-submit" value="' . t('Submit') . '" />';
     $s .= ' <input type="button" value="Add contact" onclick="jappixmini_addon_subscribe();" />';
     $s .= '</div>';
@@ -338,8 +344,6 @@ function jappixmini_settings(&$a, &$s) {
 function jappixmini_settings_post(&$a,&$b) {
        // save addon settings for a user
 
-       if (!file_exists("addon/jappixmini/jappix")) return;
-
        if(! local_user()) return;
        $uid = local_user();
 
@@ -379,7 +383,7 @@ function jappixmini_settings_post(&$a,&$b) {
                info( 'Jappix Mini settings saved.' );
 
                if ($purge) {
-                       q("DELETE FROM `pconfig` WHERE `uid`=$uid AND `cat`='jappixmini' and `k` LIKE 'id%%'");
+                       q("DELETE FROM `pconfig` WHERE `uid`=$uid AND `cat`='jappixmini' AND `k` LIKE 'id:%%'");
                        info( 'List of addresses purged.' );
                }
        }
@@ -388,18 +392,13 @@ function jappixmini_settings_post(&$a,&$b) {
 function jappixmini_script(&$a,&$s) {
     // adds the script to the page header which starts Jappix Mini
 
-    if (!file_exists("addon/jappixmini/jappix")) return;
     if(! local_user()) return;
 
     $activate = get_pconfig(local_user(),'jappixmini','activate');
     if (!$activate) return;
 
     $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;g=mini.xml"></script>'."\r\n";
-    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js"></script>'."\r\n";
-
-    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=caps.js"></script>'."\r\n";
-    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=name.js"></script>'."\r\n";
-    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=roster.js"></script>'."\r\n";
+    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=presence.js~caps.js~name.js~roster.js"></script>'."\r\n";
 
     $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/lib.js"></script>'."\r\n";
 
@@ -422,7 +421,7 @@ function jappixmini_script(&$a,&$s) {
     // set proxy if necessary
     $use_proxy = get_config('jappixmini','bosh_proxy');
     if ($use_proxy) {
-        $proxy = $a->get_baseurl().'/addon/jappixmini/jappix/php/bosh.php';
+        $proxy = $a->get_baseurl().'/addon/jappixmini/proxy.php';
     }
     else {
         $proxy = "";
@@ -431,7 +430,7 @@ function jappixmini_script(&$a,&$s) {
     // get a list of jabber accounts of the contacts
     $contacts = Array();
     $uid = local_user();
-    $rows = q("SELECT * FROM `pconfig` WHERE `uid`=$uid AND `cat`='jappixmini' and `k` LIKE 'id%%'");
+    $rows = q("SELECT * FROM `pconfig` WHERE `uid`=$uid AND `cat`='jappixmini' AND `k` LIKE 'id:%%'");
     foreach ($rows as $row) {
         $key = $row['k'];
        $pos = strpos($key, ":");
@@ -451,6 +450,7 @@ function jappixmini_script(&$a,&$s) {
        $contacts[$address] = $name;
     }
     $contacts_json = json_encode($contacts);
+    $contacts_hash = sha1($contacts_json);
 
     // get nickname
     $r = q("SELECT `username` FROM `user` WHERE `uid`=$uid");
@@ -459,7 +459,7 @@ function jappixmini_script(&$a,&$s) {
     // add javascript to start Jappix Mini
     $a->page['htmlhead'] .= "<script type=\"text/javascript\">
         jQuery(document).ready(function() {
-           jappixmini_addon_start('$server', '$username', '$proxy', '$bosh', $encrypt, '$password', $nickname, $contacts_json, $autoapprove, $autosubscribe);
+           jappixmini_addon_start('$server', '$username', '$proxy', '$bosh', $encrypt, '$password', $nickname, $contacts_json, '$contacts_hash', $autoapprove, $autosubscribe);
         });
     </script>";
 
@@ -469,13 +469,8 @@ function jappixmini_script(&$a,&$s) {
 function jappixmini_login(&$a, &$o) {
     // create client secret on login to be able to encrypt jabber passwords
 
-    if (!file_exists("addon/jappixmini/jappix")) return;
-
-    // for setDB, needed by jappixmini_addon_set_client_secret
-    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=datastore.js"></script>'."\r\n";
-
-    // for str_sha1, needed by jappixmini_addon_set_client_secret
-    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=jsjac.js"></script>'."\r\n";
+    // for setDB and str_sha1, needed by jappixmini_addon_set_client_secret
+    $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/jappix/php/get.php?t=js&amp;f=datastore.js~jsjac.js"></script>'."\r\n";
 
     // for jappixmini_addon_set_client_secret
     $a->page['htmlhead'] .= '<script type="text/javascript" src="' . $a->get_baseurl() . '/addon/jappixmini/lib.js"></script>'."\r\n";
@@ -489,8 +484,6 @@ function jappixmini_cron(&$a, $d) {
 
        set_config("jappixmini", "last_cron_execution", $d);
 
-       if (!file_exists("addon/jappixmini/jappix")) return;
-
        // go through list of users with jabber enabled
        $users = q("SELECT `uid` FROM `pconfig` WHERE `cat`='jappixmini' AND (`k`='autosubscribe' OR `k`='autoapprove') AND `v`='1'");
        logger("jappixmini: Update list of contacts' jabber accounts for ".count($users)." users.");
@@ -584,9 +577,7 @@ function jappixmini_cron(&$a, $d) {
 function jappixmini_download_source(&$a,&$b) {
        // Jappix Mini source download link on About page
 
-       if (!file_exists("addon/jappixmini/jappix")) return;
-
        $b .= '<h1>Jappix Mini</h1>';
-       $b .= '<p>This site uses Jappix Mini by the <a href="'.$a->get_baseurl().'/addon/jappixmini/jappix/AUTHORS">Jappix authors</a>, which is distributed under the terms of the <a href="'.$a->get_baseurl().'/addon/jappixmini/jappix/COPYING">GNU Affero General Public License</a>.</p>';
-       $b .= '<p>You can download the <a href="'.$a->get_baseurl().'/addon/jappixmini/jappix.zip">source code</a>.</p>';
+       $b .= '<p>This site uses the jappixmini addon, which includes Jappix Mini by the <a href="'.$a->get_baseurl().'/addon/jappixmini/jappix/AUTHORS">Jappix authors</a> and is distributed under the terms of the <a href="'.$a->get_baseurl().'/addon/jappixmini/jappix/COPYING">GNU Affero General Public License</a>.</p>';
+       $b .= '<p>You can download the <a href="'.$a->get_baseurl().'/addon/jappixmini.tgz">source code of the addon</a>. The rest of Friendica is distributed under compatible licenses and can be retrieved from <a href="https://github.com/friendica/friendica">https://github.com/friendica/friendica</a> and <a href="https://github.com/friendica/friendica-addons">https://github.com/friendica/friendica-addons</a></p>';
 }