aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzotlabs <mike@macgirvin.com>2018-09-17 19:38:40 -0700
committerzotlabs <mike@macgirvin.com>2018-09-17 19:38:40 -0700
commitdfdf11d461d9c72fa4fb54fd28949af2a90209b3 (patch)
tree8b3cddfb1f235c60125763066f13c3822c0ac530
parentcc5ef57843f4012f7319a0ffd687fe26950a7790 (diff)
parentc4c1b1f5a2ab90873bf1eef31ed794d94fdd6077 (diff)
downloadvolse-hubzilla-dfdf11d461d9c72fa4fb54fd28949af2a90209b3.tar.gz
volse-hubzilla-dfdf11d461d9c72fa4fb54fd28949af2a90209b3.tar.bz2
volse-hubzilla-dfdf11d461d9c72fa4fb54fd28949af2a90209b3.zip
Merge branch 'dev'
-rw-r--r--Zotlabs/Lib/Apps.php3
-rw-r--r--Zotlabs/Module/Articles.php2
-rw-r--r--Zotlabs/Module/Settings/Network.php128
-rw-r--r--Zotlabs/Web/SubModule.php17
-rw-r--r--include/attach.php5
-rw-r--r--include/message.php8
-rw-r--r--include/msglib.php28
-rw-r--r--include/text.php8
-rw-r--r--include/zot.php8
-rwxr-xr-xview/tpl/settings_module.tpl15
10 files changed, 210 insertions, 12 deletions
diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php
index 6b87ac6cb..aa7e2282d 100644
--- a/Zotlabs/Lib/Apps.php
+++ b/Zotlabs/Lib/Apps.php
@@ -722,6 +722,9 @@ class Apps {
);
if($r) {
+ $hookinfo = Array('uid'=>$uid,'deleted'=>$deleted,'cats'=>$cats,'apps'=>$r);
+ call_hooks('app_list',$hookinfo);
+ $r = $hookinfo['apps'];
for($x = 0; $x < count($r); $x ++) {
if(! $r[$x]['app_system'])
$r[$x]['type'] = 'personal';
diff --git a/Zotlabs/Module/Articles.php b/Zotlabs/Module/Articles.php
index d622b221a..7af1ab6b8 100644
--- a/Zotlabs/Module/Articles.php
+++ b/Zotlabs/Module/Articles.php
@@ -45,7 +45,7 @@ class Articles extends Controller {
return $o;
}
- nav_set_selected(t('Articles'));
+ nav_set_selected('Articles');
head_add_link([
'rel' => 'alternate',
diff --git a/Zotlabs/Module/Settings/Network.php b/Zotlabs/Module/Settings/Network.php
new file mode 100644
index 000000000..14a118f2c
--- /dev/null
+++ b/Zotlabs/Module/Settings/Network.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace Zotlabs\Module\Settings;
+
+
+class Network {
+
+ function post() {
+ check_form_security_token_redirectOnErr('/settings/network', 'settings_network');
+
+ $features = self::get_features();
+
+ foreach($features as $f) {
+ $k = $f[0];
+ if(array_key_exists("feature_$k",$_POST))
+ set_pconfig(local_channel(),'feature',$k, (string) $_POST["feature_$k"]);
+ else
+ set_pconfig(local_channel(),'feature', $k, '');
+ }
+
+ build_sync_packet();
+ return;
+ }
+
+ function get() {
+
+ $features = self::get_features();
+
+ foreach($features as $f) {
+ $arr[] = array('feature_' . $f[0],$f[1],((intval(feature_enabled(local_channel(),$f[0]))) ? "1" : ''),$f[2],array(t('Off'),t('On')));
+ }
+
+ $tpl = get_markup_template("settings_module.tpl");
+
+ $o .= replace_macros($tpl, array(
+ '$action_url' => 'settings/network',
+ '$form_security_token' => get_form_security_token("settings_network"),
+ '$title' => t('Activity Settings'),
+ '$features' => $arr,
+ '$baseurl' => z_root(),
+ '$submit' => t('Submit'),
+ ));
+
+ return $o;
+ }
+
+ function get_features() {
+ $arr = [
+
+ [
+ 'archives',
+ t('Search by Date'),
+ t('Ability to select posts by date ranges'),
+ false,
+ get_config('feature_lock','archives')
+ ],
+
+ [
+ 'savedsearch',
+ t('Saved Searches'),
+ t('Save search terms for re-use'),
+ false,
+ get_config('feature_lock','savedsearch')
+ ],
+
+ [
+ 'order_tab',
+ t('Alternate Stream Order'),
+ t('Ability to order the stream by last post date, last comment date or unthreaded activities'),
+ false,
+ get_config('feature_lock','order_tab')
+ ],
+
+ [
+ 'name_tab',
+ t('Contact Filter'),
+ t('Ability to display only posts of a selected contact'),
+ false,
+ get_config('feature_lock','name_tab')
+ ],
+
+ [
+ 'forums_tab',
+ t('Forum Filter'),
+ t('Ability to display only posts of a specific forum'),
+ false,
+ get_config('feature_lock','forums_tab')
+ ],
+
+ [
+ 'personal_tab',
+ t('Personal Posts Filter'),
+ t('Ability to display only posts that you\'ve interacted on'),
+ false,
+ get_config('feature_lock','personal_tab')
+ ],
+
+ [
+ 'affinity',
+ t('Affinity Tool'),
+ t('Filter stream activity by depth of relationships'),
+ false,
+ get_config('feature_lock','affinity')
+ ],
+
+ [
+ 'suggest',
+ t('Suggest Channels'),
+ t('Show friend and connection suggestions'),
+ false,
+ get_config('feature_lock','suggest')
+ ],
+
+ [
+ 'connfilter',
+ t('Connection Filtering'),
+ t('Filter incoming posts from connections based on keywords/content'),
+ false,
+ get_config('feature_lock','connfilter')
+ ]
+
+ ];
+
+ return $arr;
+
+ }
+
+}
diff --git a/Zotlabs/Web/SubModule.php b/Zotlabs/Web/SubModule.php
index 7c8404201..763a55d86 100644
--- a/Zotlabs/Web/SubModule.php
+++ b/Zotlabs/Web/SubModule.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Web;
+use Zotlabs\Extend\Route;
+
/*
* @brief
*
@@ -31,9 +33,23 @@ class SubModule {
$filename = 'Zotlabs/Module/' . ucfirst(argv(0)) . '/'. ucfirst(argv($whicharg)) . '.php';
$modname = '\\Zotlabs\\Module\\' . ucfirst(argv(0)) . '\\' . ucfirst(argv($whicharg));
+
if(file_exists($filename)) {
$this->controller = new $modname();
}
+
+ $routes = Route::get();
+
+ if($routes) {
+ foreach($routes as $route) {
+ if(is_array($route) && strtolower($route[1]) === strtolower(argv(0)) . '/' . strtolower(argv($whicharg))) {
+ include_once($route[0]);
+ if(class_exists($modname)) {
+ $this->controller = new $modname;
+ }
+ }
+ }
+ }
}
/**
@@ -43,6 +59,7 @@ class SubModule {
* @return boolean|mixed
*/
function call($method) {
+
if(! $this->controller)
return false;
diff --git a/include/attach.php b/include/attach.php
index 202412263..4db5bc435 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -1428,6 +1428,8 @@ function attach_delete($channel_id, $resource, $is_photo = 0) {
if(! $r) {
attach_drop_photo($channel_id,$resource);
+ $arr = ['channel_id' => $channel_id, 'resource' => $resource, 'is_photo'=>$is_photo];
+ call_hooks("attach_delete",$arr);
return;
}
@@ -1486,6 +1488,9 @@ function attach_delete($channel_id, $resource, $is_photo = 0) {
intval($channel_id)
);
+ $arr = ['channel_id' => $channel_id, 'resource' => $resource, 'is_photo'=>$is_photo];
+ call_hooks("attach_delete",$arr);
+
file_activity($channel_id, $object, $object['allow_cid'], $object['allow_gid'], $object['deny_cid'], $object['deny_gid'], 'update', true);
return;
diff --git a/include/message.php b/include/message.php
index 4a673b961..936c01631 100644
--- a/include/message.php
+++ b/include/message.php
@@ -4,6 +4,7 @@
require_once('include/crypto.php');
require_once('include/attach.php');
+require_once('include/msglib.php');
function mail_prepare_binary($item) {
@@ -498,11 +499,8 @@ function private_messages_drop($channel_id, $messageitem_id, $drop_conversation
}
else {
xchan_mail_query($x[0]);
- $x[0]['mail_deleted'] = true;
- $r = q("DELETE FROM mail WHERE id = %d AND channel_id = %d",
- intval($messageitem_id),
- intval($channel_id)
- );
+ $x[0]['mail_deleted'] = true;
+ msg_drop($messageitem_id, $channel_id, $x[0]['conv_guid']);
build_sync_packet($channel_id,array('mail' => array(encode_mail($x,true))));
return true;
}
diff --git a/include/msglib.php b/include/msglib.php
new file mode 100644
index 000000000..f0bf523de
--- /dev/null
+++ b/include/msglib.php
@@ -0,0 +1,28 @@
+<?php
+
+/* Common private message processing functions */
+
+function msg_drop($message_id, $channel_id, $conv_guid) {
+
+ // Delete message
+ $r = q("DELETE FROM mail WHERE id = %d AND channel_id = %d",
+ intval($message_id),
+ intval($channel_id)
+ );
+
+ // Get new first message...
+ $r = q("SELECT mid, parent_mid FROM mail WHERE conv_guid = '%s' AND channel_id = %d ORDER BY id ASC LIMIT 1",
+ dbesc($conv_guid),
+ intval($channel_id)
+ );
+ // ...and if wasn't first before...
+ if ($r[0]['mid'] != $r[0]['parent_mid']) {
+ // ...refer whole thread to it
+ q("UPDATE mail SET parent_mid = '%s', mail_isreply = abs(mail_isreply - 1) WHERE conv_guid = '%s' AND channel_id = %d",
+ dbesc($r[0]['mid']),
+ dbesc($conv_guid),
+ intval($channel_id)
+ );
+ }
+
+}
diff --git a/include/text.php b/include/text.php
index 8a07dc113..4b5442985 100644
--- a/include/text.php
+++ b/include/text.php
@@ -37,7 +37,13 @@ function replace_macros($s, $r) {
call_hooks('replace_macros', $arr);
$t = App::template_engine();
- $output = $t->replace_macros($arr['template'], $arr['params']);
+
+ try {
+ $output = $t->replace_macros($arr['template'], $arr['params']);
+ } catch (Exception $e) {
+ logger("Unable to render template: ",$e->getMessage());
+ $output = "<h3>ERROR: there was an error creating the output.</h3>";
+ }
return $output;
}
diff --git a/include/zot.php b/include/zot.php
index b29e86dfa..e31d650d2 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -12,6 +12,7 @@ require_once('include/crypto.php');
require_once('include/items.php');
require_once('include/queue_fn.php');
require_once('include/perm_upgrade.php');
+require_once('include/msglib.php');
/**
@@ -2331,16 +2332,13 @@ function process_mail_delivery($sender, $arr, $deliveries) {
}
- $r = q("select id from mail where mid = '%s' and channel_id = %d limit 1",
+ $r = q("select id, conv_guid from mail where mid = '%s' and channel_id = %d limit 1",
dbesc($arr['mid']),
intval($channel['channel_id'])
);
if($r) {
if(intval($arr['mail_recalled'])) {
- $x = q("delete from mail where id = %d and channel_id = %d",
- intval($r[0]['id']),
- intval($channel['channel_id'])
- );
+ msg_drop($r[0]['id'], $channel['channel_id'], $r[0]['conv_guid']);
$DR->update('mail recalled');
$result[] = $DR->get();
logger('mail_recalled');
diff --git a/view/tpl/settings_module.tpl b/view/tpl/settings_module.tpl
new file mode 100755
index 000000000..b2ac5462f
--- /dev/null
+++ b/view/tpl/settings_module.tpl
@@ -0,0 +1,15 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+ <form action="{{$action_url}}" method="post" autocomplete="off">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ {{foreach $features as $feature}}
+ {{include file="field_checkbox.tpl" field=$feature}}
+ {{/foreach}}
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+</div>