aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSem <sembrestels@riseup.net>2013-11-09 16:14:29 +0100
committerSem <sembrestels@riseup.net>2013-11-09 16:14:29 +0100
commitba0d506ade08ae46ba665474a8b9c81e838f2eee (patch)
treef533d99e7204301d14123384247537fd92d29f4c
parente2a2fbdccaf0f48878903f448428cab5852d0870 (diff)
parentbdd9179742dbd9101b61a5138e1a81b084747dd8 (diff)
downloadelgg-ba0d506ade08ae46ba665474a8b9c81e838f2eee.tar.gz
elgg-ba0d506ade08ae46ba665474a8b9c81e838f2eee.tar.bz2
Add 'mod/friendrequest/' from commit 'bdd9179742dbd9101b61a5138e1a81b084747dd8'
git-subtree-dir: mod/friendrequest git-subtree-mainline: e2a2fbdccaf0f48878903f448428cab5852d0870 git-subtree-split: bdd9179742dbd9101b61a5138e1a81b084747dd8
-rw-r--r--mod/friendrequest/actions/friendrequest/decline.php12
-rw-r--r--mod/friendrequest/actions/friends/add.php53
-rw-r--r--mod/friendrequest/actions/friends/remove.php36
-rw-r--r--mod/friendrequest/languages/ca.php20
-rw-r--r--mod/friendrequest/languages/en.php31
-rw-r--r--mod/friendrequest/languages/es.php22
-rw-r--r--mod/friendrequest/languages/gl.php31
-rw-r--r--mod/friendrequest/languages/pt.php31
-rw-r--r--mod/friendrequest/languages/sr.php31
-rw-r--r--mod/friendrequest/manifest.xml16
-rw-r--r--mod/friendrequest/start.php151
-rw-r--r--mod/friendrequest/views/default/friendrequest/requests.php47
12 files changed, 481 insertions, 0 deletions
diff --git a/mod/friendrequest/actions/friendrequest/decline.php b/mod/friendrequest/actions/friendrequest/decline.php
new file mode 100644
index 000000000..ca3f1c9e4
--- /dev/null
+++ b/mod/friendrequest/actions/friendrequest/decline.php
@@ -0,0 +1,12 @@
+<?php
+
+$user = elgg_get_logged_in_user_entity();
+$friend = get_entity(sanitize_int(get_input("guid")));
+
+if(remove_entity_relationship($friend->guid, 'friendrequest', $user->guid)) {
+ system_message(elgg_echo("friendrequest:decline:success", array($friend->name)));
+} else {
+ system_message(elgg_echo("friendrequest:decline:fail"));
+}
+
+forward(REFERER);
diff --git a/mod/friendrequest/actions/friends/add.php b/mod/friendrequest/actions/friends/add.php
new file mode 100644
index 000000000..e6efe1db1
--- /dev/null
+++ b/mod/friendrequest/actions/friends/add.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Elgg add friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ * @override actions/friends/add.php
+ */
+
+
+// Get the GUID of the user to friend
+$friend_guid = get_input('friend');
+$friend = get_entity($friend_guid);
+if (!$friend) {
+ register_error(elgg_echo('error:missing_data'));
+ forward(REFERER);
+}
+$user = elgg_get_logged_in_user_entity();
+
+$errors = false;
+
+if(check_entity_relationship($friend->guid, "friendrequest", $user->guid)
+ || check_entity_relationship($friend->guid, "friend", $user->guid)) {
+
+ try {
+ if (!$user->addFriend($friend_guid)) {
+ $errors = true;
+ }
+
+ $ia = elgg_set_ignore_access(true);
+ $friend->addFriend($user->guid);
+ elgg_set_ignore_access($ia);
+
+ remove_entity_relationship($friend->guid, "friendrequest", $user->guid);
+
+ } catch (Exception $e) {
+ register_error(elgg_echo("friends:add:failure", array($friend->name)));
+ $errors = true;
+ }
+ if (!$errors) {
+ // add to river
+ add_to_river('river/relationship/friend/create', 'friend', $user->guid, $friend->guid);
+ add_to_river('river/relationship/friend/create', 'friend', $friend->guid, $user->guid);
+ system_message(elgg_echo("friends:add:successful", array($friend->name)));
+ }
+} elseif(add_entity_relationship($user->guid, "friendrequest", $friend->guid)) {
+ system_message(elgg_echo("friendrequest:add:successful", array($friend->name)));
+} else {
+ register_error(elgg_echo("friendrequest:add:exists", array($friend->name)));
+}
+
+// Forward back to the page you friended the user on
+forward(REFERER);
diff --git a/mod/friendrequest/actions/friends/remove.php b/mod/friendrequest/actions/friends/remove.php
new file mode 100644
index 000000000..62bccb891
--- /dev/null
+++ b/mod/friendrequest/actions/friends/remove.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Elgg remove friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ * @override actions/friends/remove.php
+ */
+
+// Get the GUID of the user to friend
+$friend_guid = get_input('friend');
+$friend = get_entity($friend_guid);
+$errors = false;
+
+// Get the user
+try{
+ if ($friend instanceof ElggUser) {
+ elgg_get_logged_in_user_entity()->removeFriend($friend_guid);
+ $ia = elgg_set_ignore_access(true);
+ $friend->removeFriend(elgg_get_logged_in_user_guid());
+ elgg_set_ignore_access($ia);
+ } else {
+ register_error(elgg_echo("friends:remove:failure", array($friend->name)));
+ $errors = true;
+ }
+} catch (Exception $e) {
+ register_error(elgg_echo("friends:remove:failure", array($friend->name)));
+ $errors = true;
+}
+
+if (!$errors) {
+ system_message(elgg_echo("friends:remove:successful", array($friend->name)));
+}
+
+// Forward back to the page you made the friend on
+forward(REFERER);
diff --git a/mod/friendrequest/languages/ca.php b/mod/friendrequest/languages/ca.php
new file mode 100644
index 000000000..ab17319c1
--- /dev/null
+++ b/mod/friendrequest/languages/ca.php
@@ -0,0 +1,20 @@
+<?php
+$language = array (
+ 'friendrequest' => 'Sol·licituds d\'Amistat',
+ 'friendrequest:add:successful' => 'Has enviat una sol·licitud d\'amistat a %s. La ha d\'acceptar. Dóna-li temps.',
+ 'friendrequest:add:failure' => 'Oops! Hi ha hagut algun problema mentre s\'intentava enviar la sol·licitud. Torna-ho a provar.',
+ 'friendrequest:add:exists' => 'Ja has enviat la sol·licitud d\'amistat a %s, no siguis tan insistent.',
+ 'friendrequest:decline:success' => 'Has denegat la sol·licitud d\'amistat de %s',
+ 'friendrequest:decline:fail' => 'Per algun motiu aquesta petició d\'amistat no pot ésser eliminada',
+ 'friendrequest:remove:check' => 'Estas segur de que vols denegar la sol·licitud d\'amistat?',
+ 'friendrequest:none' => 'No hi ha sol·licitud d\'amistat pendents.',
+ 'friendrequest:new:subject' => '%s vol ser la teva amiga',
+ 'friendrequest:new:body' => '% vol ser la teva amiga. Està esperant que aprovis la seva sol·licitud. No la facis esperar!
+
+Pots veure les teves sol·licituds d\'amistat pendents clicant a aquest link (recorda que has d\'estar loginat per veure-la):
+
+%s
+
+(No responguis aquest mail, perquè és una màquina qui l\'envia)',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/friendrequest/languages/en.php b/mod/friendrequest/languages/en.php
new file mode 100644
index 000000000..40bfbd36a
--- /dev/null
+++ b/mod/friendrequest/languages/en.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest English language file.
+ *
+ */
+
+$english = array(
+ 'friendrequest' => 'Friend Requests',
+
+ 'friendrequest:add:successful' => 'You sent a friend request to %s. She has to accept it. Give she time.',
+ 'friendrequest:add:failure' => 'Oops! There was a problem while trying to send the request. Try it again.',
+ 'friendrequest:add:exists' => 'You already sent a friend request to %s, don\'t be so intense.',
+
+ 'friendrequest:decline:success' => 'You just declined %s friend request',
+ 'friendrequest:decline:fail' => 'For any reason this friend request cannot be deleted',
+
+ 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+ 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s want to be your friend',
+ 'friendrequest:new:body' => '%s want to be your friend. She is waiting that you aprovate her petition. Do not her wait!
+
+You can see your pending friend requests following this link (remember you have to be logged in to see it):
+
+ %s
+
+(Do not try to reply this mail, because is a machine who is sending it)',
+
+);
+
+add_translation('en', $english);
diff --git a/mod/friendrequest/languages/es.php b/mod/friendrequest/languages/es.php
new file mode 100644
index 000000000..1677ef4fb
--- /dev/null
+++ b/mod/friendrequest/languages/es.php
@@ -0,0 +1,22 @@
+<?php
+$es = array (
+ 'friendrequest' => 'Peticiones de amistad',
+ 'friendrequest:add:successful' => 'Has enviado una petición de amistad a %s. Tiene que aprobarla antes de salir en tu lista de amigos. Dale tiempo :)',
+ 'friendrequest:add:failure' => 'Ups!, no se sabe muy bien por qué, pero el sistema no puede completar tu petición. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'friendrequest:add:exists' => 'Ya has enviado antes una petición de amistad a %s. Ya lo leerá, ¡ten paciencia!',
+ 'friendrequest:decline:success' => 'Has rechazado la petición de amistad de %s',
+ 'friendrequest:decline:fail' => 'No ha sido posible borrar la petición de amistad. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'friendrequest:remove:check' => 'Estás seguro de rechazar esta petición de amistad?',
+ 'friendrequest:none' => 'No hay peticiones de amistad pendientes.',
+ 'friendrequest:new:subject' => '%s quiere ser tu amigx',
+ 'friendrequest:new:body' => '%s quiere ser tu amigx. Está esperando a que apruebes su petición, no hagas que se impaciente ;)
+
+Puedes ver las peticiones que tienes pendientes a través del siguiente link (recuerda que tienes estar logeadx en la red para poder hacerlo):
+
+ %s
+
+No puedes responder a este email porque soy una máquina y no te leeré, no lo intentes ;)',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/friendrequest/languages/gl.php b/mod/friendrequest/languages/gl.php
new file mode 100644
index 000000000..9b8c12440
--- /dev/null
+++ b/mod/friendrequest/languages/gl.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest galician language file.
+ *
+ */
+
+$galician = array(
+ 'friendrequest' => 'Peticións de amizade',
+
+ 'friendrequest:add:successful' => 'Enviaches unha petición de amizade a %s. Ten que aprobala se quere, dálle tempo :)',
+ 'friendrequest:add:failure' => 'Mimá!, non se sabe moi ben por qué, pero o sistema non pode completa-la túa petición. Téntao de novo ou ponte en contacto cxs administran a rede.',
+ 'friendrequest:add:exists' => 'Xa lle tes enviado unha petición de amizade s %s. Xa o lerá, ten paciencia meu!',
+
+ 'friendrequest:decline:success' => 'Borrache-la petición de amizade',
+ 'friendrequest:decline:fail' => 'Non foi posible borra-la petición de amizade. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+
+// 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+// 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s quere ter amizade contigo',
+ 'friendrequest:new:body' => '%s quere ter amizade contigo. Está a agardar a que aprobe-la súa petición, non fagas que se impaciente ;)
+
+Si te logueaches na rede, podes ve-las peticións que tes pendentes a través da seguinte ligazón:
+
+%s
+
+Non podes responder a este email porque son unha máquina e non te vou ler, non o tentes ;)',
+
+);
+
+add_translation('gl', $galician);
diff --git a/mod/friendrequest/languages/pt.php b/mod/friendrequest/languages/pt.php
new file mode 100644
index 000000000..73010fd06
--- /dev/null
+++ b/mod/friendrequest/languages/pt.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest Portuguese language file.
+ *
+ */
+
+$portuguese = array(
+ 'friendrequest' => 'Pedidos de amizade',
+
+ 'friendrequest:add:successful' => 'Você enviou um pedido de amizade a &amp;s. Elx tem que aprova-la antes de aparecer na tua lista de amigxs. Espere um pouco :)',
+ 'friendrequest:add:failure' => 'Erro. Não foi possível completar seu pedido. Tente novamente ou entre em contato com xs administradorxs.',
+ 'friendrequest:add:exists' => 'Você já enviou um pedido de amizade a &amp;s. Elx Leerá em breve, seja paciente!',
+
+ 'friendrequest:decline:success' => 'O pedido de amizade foi apagado corretamente',
+ 'friendrequest:decline:fail' => 'Não foi possível apagar o pedido de amizade. Tente novamente ou entre em contato com xs administradorxs.',
+
+// 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+// 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s quer ser teu/tua amigx!',
+ 'friendrequest:new:body' => '%s quer ser teu/tua amigx. Elx está esperando que você aceite o pedido.
+
+Você pode ver os teus pedidos pendentes clicando em (lembre-se que você tem que estar loga)):
+
+%s
+
+Não responda a esta mensagem porque eu sou uma máquina e não vou te ler ;)',
+
+);
+
+add_translation('pt', $portuguese);
diff --git a/mod/friendrequest/languages/sr.php b/mod/friendrequest/languages/sr.php
new file mode 100644
index 000000000..d7d693a09
--- /dev/null
+++ b/mod/friendrequest/languages/sr.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest Serbian language file.
+ *
+ */
+
+$serbian = array(
+ 'friendrequest' => 'Dodaj u prijatelje',
+
+ 'friendrequest:add:successful' => 'Zahtevao si da postanes prijatelj sa %s. Moras sacekati da odobri tvoj zahtev pre nego sto se pojave u tvojoj listi prijatelja.',
+ 'friendrequest:add:failure' => 'Izvini, zbog sistemske greske nismo u mogucnosti da izvrsimo zahtev. Molim pokusaj ponovo.',
+ 'friendrequest:add:exists' => 'Vec si pozvao %s da budete prijatelji.',
+
+ 'friendrequest:decline:success' => 'Uspesno uklonjen zahtev za prijateljstvo.',
+ 'friendrequest:decline:fail' => 'Nemogu da uklonim zahtev za prijateljstvo.',
+
+// 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+// 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s zeli da bude tvoj prijatelj!',
+ 'friendrequest:new:body' => '%s zeli da bude tvoj prijatelj! Ali ceka da odobris zahtev...uloguj se sada i odobri zahtev!
+
+Mozes pogledati cekajuce zahteve na:
+
+%s
+
+(Ne mozes odgovoriti na ovaj email.)',
+
+);
+
+add_translation('sr', $serbian);
diff --git a/mod/friendrequest/manifest.xml b/mod/friendrequest/manifest.xml
new file mode 100644
index 000000000..e5b4aad6a
--- /dev/null
+++ b/mod/friendrequest/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Friend request</name>
+ <author>Bosssumon and Zac Hopkinson, Lorea</author>
+ <version>1.8.0</version>
+ <category>social</category>
+ <description>Let users confirm friend requests. Make all friend requests reciprocal</description>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Lorea 2011-2013</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/friendrequest/start.php b/mod/friendrequest/start.php
new file mode 100644
index 000000000..2ea3c80f9
--- /dev/null
+++ b/mod/friendrequest/start.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * Elgg friend request plugin.
+ *
+ * @package ElggFriendRequest
+ */
+
+elgg_register_event_handler('init', 'system', 'friendrequest_init');
+
+function friendrequest_init() {
+
+ //This will let users view their friend requests
+ elgg_register_page_handler('friendrequests', 'friendrequest_page_handler');
+
+ elgg_register_plugin_hook_handler('register', 'menu:topbar', 'friendrequest_topbar_menu');
+ elgg_register_plugin_hook_handler('register', 'menu:page', 'friendrequest_page_menu');
+
+ //We need to override the friend remove action to remove the relationship we created
+ $actions_dir = elgg_get_plugins_path().'friendrequest/actions/friends';
+ elgg_register_action('friends/add', "$actions_dir/add.php");
+ elgg_register_action('friends/remove', "$actions_dir/remove.php");
+
+ $actions_dir = elgg_get_plugins_path().'friendrequest/actions/friendrequest';
+ elgg_register_action('friendrequest/decline', "$actions_dir/decline.php");
+
+ //Regular Elgg engine sends out an email via an event. The 400 priority will let us run first.
+ //Then we return false to stop the event chain. The normal event handler will never get to run.
+ //elgg_register_event_handler('create', 'friend', 'friendrequest_event_create_friend', 400);
+
+ //Handle our add action event:
+ elgg_register_event_handler('create', 'friendrequest', 'friendrequest_event_create_friendrequest');
+
+}
+
+function friendrequest_page_handler($page){
+
+ //Keep the URLs uniform:
+ if (isset($page[0])) {
+ forward("friendrequests");
+ }
+
+ gatekeeper();
+
+ elgg_push_context('friends');
+
+ $title = elgg_echo('friendrequest');
+
+ $page_owner = elgg_get_logged_in_user_entity();
+ elgg_set_page_owner_guid($page_owner->guid);
+
+ $requests = elgg_get_entities_from_relationship(array(
+ 'type' => 'user',
+ 'relationship' => 'friendrequest',
+ 'relationship_guid' => $page_owner->guid,
+ 'inverse_relationship' => true,
+ 'limit' => 0,
+ ));
+ $content = elgg_view('friendrequest/requests', array(
+ 'requests' => $requests,
+ ));
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+
+ return true;
+}
+
+function friendrequest_count(){
+ return elgg_get_entities_from_relationship(array(
+ 'type' => 'user',
+ 'relationship' => 'friendrequest',
+ 'relationship_guid' => elgg_get_logged_in_user_guid(),
+ 'inverse_relationship' => true,
+ 'limit' => 0,
+ 'count' => true,
+ ));
+}
+
+function friendrequest_topbar_menu($hook, $entity_type, $returnvalue, $params) {
+ $count = friendrequest_count();
+ if($count) {
+ foreach($returnvalue as $item) {
+ if($item->getName() == 'friends') {
+ $item->setText(
+ $item->getText() . elgg_view('output/url', array(
+ 'href' => 'friendrequests',
+ 'text' => "<span class=\"messages-new\">$count</span>",
+ 'title' => elgg_echo('friendrequest'),
+ ))
+ );
+ return $returnvalue;
+ }
+ }
+ }
+ return $returnvalue;
+}
+
+function friendrequest_page_menu($hook, $entity_type, $returnvalue, $params) {
+ if(elgg_in_context('friends')){
+ foreach($returnvalue as $i => $item) {
+ if($item->getName() == 'friends:of') {
+ unset($returnvalue[$i]);
+ }
+ }
+ if (elgg_is_logged_in()) {
+ $count = friendrequest_count();
+ $item = new ElggMenuItem('friendrequests', elgg_echo('friendrequest').($count? " ($count)": ""), "friendrequests");
+ $returnvalue[] = $item;
+ }
+ }
+ return $returnvalue;
+}
+
+function friendrequest_event_create_friend($event, $object_type, $object){var_dump($object);elgg_echo('hola');
+ if (($object instanceof ElggRelationship) && ($event == 'create') && ($object_type == 'friend')) {
+ //We don't want anything happening here... (no email/etc)
+
+ //Returning false will interrupt the rest of the chain.
+ //The normal handler for the create friend event has a priority of 500 so it will never be called.
+ return false;
+ }
+ return true; //Shouldn't get here...
+}
+
+function friendrequest_event_create_friendrequest($event, $object_type, $object){
+ if (($object instanceof ElggRelationship) && ($event == 'create') && ($object_type == 'friendrequest')) {
+ $requester = get_entity($object->guid_one);
+ $requested = get_entity($object->guid_two);
+
+ $friendrequests_url = elgg_get_site_url() . "friendrequests/";
+
+ // Notify target user
+ return notify_user(
+ $requested,
+ $requester,
+ elgg_echo('friendrequest:newfriend:subject', array(
+ $requester->name
+ ), $requested->language),
+ elgg_echo('friendrequest:newfriend:body', array(
+ $requester->name,
+ $friendrequests_url,
+ ), $requested->language)
+ );
+ }
+}
diff --git a/mod/friendrequest/views/default/friendrequest/requests.php b/mod/friendrequest/views/default/friendrequest/requests.php
new file mode 100644
index 000000000..1680bdc4e
--- /dev/null
+++ b/mod/friendrequest/views/default/friendrequest/requests.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * The friend requests' list
+ *
+ * @uses $vars['requests'] Array of ElggUsers
+ */
+
+if (!empty($vars['requests']) && is_array($vars['requests'])) {
+ $user = elgg_get_logged_in_user_entity();
+ echo '<ul class="elgg-list">';
+ foreach ($vars['requests'] as $user) {
+ $icon = elgg_view_entity_icon($user, 'tiny', array('use_hover' => 'true'));
+
+ $user_title = elgg_view('output/url', array(
+ 'href' => $user->getURL(),
+ 'text' => $user->name,
+ 'is_trusted' => true,
+ ));
+
+ $url = "action/friends/add?friend={$user->guid}";
+ $accept_button = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('accept'),
+ 'class' => 'elgg-button elgg-button-submit',
+ 'is_action' => true,
+ 'is_trusted' => true,
+ ));
+
+ $url = "action/friendrequest/decline?guid={$user->guid}";
+ $delete_button = elgg_view('output/confirmlink', array(
+ 'href' => $url,
+ 'confirm' => elgg_echo('friendrequest:remove:check'),
+ 'text' => elgg_echo('delete'),
+ 'class' => 'elgg-button elgg-button-delete mlm',
+ ));
+
+ $body = "<h4>$user_title</h4>";
+ $alt = $accept_button . $delete_button;
+
+ echo '<li class="pvs">';
+ echo elgg_view_image_block($icon, $body, array('image_alt' => $alt));
+ echo '</li>';
+ }
+ echo '</ul>';
+} else {
+ echo '<p class="mtm">' . elgg_echo('friendrequest:none') . "</p>";
+}