Merge branch 'master' into tres

Conflicts:
	include/notifier.php
This commit is contained in:
friendica 2015-04-29 21:49:43 -07:00
commit c4221f3273
26 changed files with 1229 additions and 1141 deletions

View file

@ -8,7 +8,7 @@ Redmatrix provides distributed web publishing and social communications with [b]
So what exactly are "decentralised permissions"? They give me the ability to share something on my website (photos, media, files, webpages, etc.) with specific people on completely different websites - but not necessarily [i]everybody[/i] on those websites; and they do not need a password on my website and do not need to login to my website to view the things I've shared with them. They have one password on their own website and "magic authentication" between affiliated websites in the network. Also, as it is decentralised, there is no third party which has the ability to bypass permissions and see everything in the network.
Redmatrix combines many features of traditional blogs, social networking and media, content management systems, and personal cloud storage into an easy to use framework. Each node in the matrix can operate standalone or link with other nodes to create a super-network; but leaving privacy in the control of the original publisher.
Redmatrix combines many features of traditional blogs, social networking and media, content management systems, and personal cloud storage into an easy to use framework. Each node in the matrix can operate standalone or link with other nodes to create a super-network; leaving privacy under the control of the original publisher.
Redmatrix is an open source webserver application written originally in PHP/MySQL and is easily installable by those with basic website administration skills. It is also easily extended via plugins and themes and other third-party tools.

View file

@ -155,7 +155,7 @@ function comanche_block($s) {
dbesc($name)
);
if($r) {
$o .= (($var['wrap'] == 'none') ? '' : '<div class="bblock">');
$o .= (($var['wrap'] == 'none') ? '' : '<div class="bblock widget">');
if($r[0]['title'])
$o .= '<h3>' . $r[0]['title'] . '</h3>';

View file

@ -1086,6 +1086,8 @@ function status_editor($a, $x, $popup = false) {
// $plaintext = false;
$voting = feature_enabled(local_channel(), 'consensus_tools');
if(x($x, 'novoting'))
$voting = false;
$mimeselect = '';
if(array_key_exists('mimetype', $x) && $x['mimetype']) {
@ -1190,7 +1192,8 @@ function status_editor($a, $x, $popup = false) {
'$noloc' => ((get_pconfig($x['profile_uid'], 'system', 'use_browser_location')) ? t('Clear browser location') : ''),
'$shortnoloc' => t('clear location'),
'$title' => ((x($x, 'title')) ? htmlspecialchars($x['title'], ENT_COMPAT,'UTF-8') : ''),
'$placeholdertitle' => t('Title (optional)'),
'$placeholdertitle' => ((x($x, 'placeholdertitle')) ? $x['placeholdertitle'] : t('Title (optional)')),
'$hidetitle' => ((x($x, 'hidetitle')) ? $x['hidetitle'] : false),
'$catsenabled' => ((feature_enabled($x['profile_uid'], 'categories') && (! $webpage)) ? 'categories' : ''),
'$category' => "",
'$placeholdercategory' => t('Categories (optional, comma-separated list)'),

View file

@ -4409,7 +4409,7 @@ function zot_feed($uid,$observer_xchan,$arr) {
$limit = " LIMIT 100 ";
if($mindate != NULL_DATE) {
$sql_extra .= " and ( created > '$mindate' or edited > '$mindate' ) ";
$sql_extra .= " and ( created > '$mindate' or changed > '$mindate' ) ";
}
if($message_id) {
@ -4427,7 +4427,7 @@ function zot_feed($uid,$observer_xchan,$arr) {
if(is_sys_channel($uid)) {
require_once('include/security.php');
$r = q("SELECT parent, created from item
$r = q("SELECT parent, created, postopts from item
WHERE uid != %d
and uid in (" . stream_perms_api_uids(PERMS_PUBLIC,10,1) . ") AND item_restrict = 0
AND item_wall = 1
@ -4436,7 +4436,7 @@ function zot_feed($uid,$observer_xchan,$arr) {
);
}
else {
$r = q("SELECT parent, created from item
$r = q("SELECT parent, created, postopts from item
WHERE uid = %d AND item_restrict = 0
AND item_wall = 1
$sql_extra GROUP BY parent ORDER BY created ASC $limit",
@ -4445,6 +4445,12 @@ function zot_feed($uid,$observer_xchan,$arr) {
}
if($r) {
for($x = 0; $x < count($r); $x ++) {
if(strpos($r[$x]['postopts'],'nodeliver') !== false) {
unset($r[$x]);
}
}
$parents_str = ids_to_querystr($r,'parent');
$sys_query = ((is_sys_channel($uid)) ? $sql_extra : '');

View file

@ -350,6 +350,11 @@ function notifier_run($argv, $argc){
return;
}
if(strpos($target_item['postopts'],'nodeliver') !== false) {
logger('notifier: target item is undeliverable', LOGGER_DEBUG);
return;
}
$s = q("select * from channel where channel_id = %d limit 1",
intval($target_item['uid'])
);
@ -374,6 +379,12 @@ function notifier_run($argv, $argc){
if(! $r)
return;
if(strpos($r[0]['postopts'],'nodeliver') !== false) {
logger('notifier: target item is undeliverable', LOGGER_DEBUG);
return;
}
xchan_query($r);
$r = fetch_post_tags($r);
@ -585,18 +596,15 @@ function notifier_run($argv, $argc){
foreach($dhubs as $hub) {
if(defined('DIASPORA_RELIABILITY_EMULATION')) {
$cointoss = mt_rand(0,2);
if($cointoss == 2) {
continue;
}
}
if($hub['hubloc_network'] === 'diaspora' || $hub['hubloc_network'] === 'friendica-over-diaspora') {
if(! get_config('system','diaspora_enabled'))
continue;
// allow this to be set per message
if(strpos($target_item['postopts'],'nodspr') !== false)
continue;
require_once('include/diaspora.php');
diaspora_process_outbound(array(

View file

@ -466,7 +466,7 @@ function poco($a,$extended = false) {
$sql_extra = " and abook_flags = 0 ";
if($cid)
$sql_extra = sprintf(" and abook_id = %d ",intval($cid));
$sql_extra = sprintf(" and abook_id = %d and ( abook_flags & " . ABOOK_FLAG_HIDDEN . " ) = 0 ",intval($cid));
if($system_mode) {
$r = q("SELECT count(*) as `total` from abook where ( abook_flags & " . ABOOK_FLAG_SELF .

View file

@ -17,7 +17,7 @@ with your hosting provider prior to installation. (And preferably before
entering into a long-term contract.)
If you encounter installation issues, please let us know via the Github issue
tracker (https://github.com/friendica/red/issues). Please be as clear as you
tracker (https://github.com/redmatrix/redmatrix/issues). Please be as clear as you
can about your operating environment and provide as much detail as possible
about any error messages you may see, so that we can prevent it from happening
in the future. Due to the large variety of operating systems and PHP platforms

View file

@ -45,8 +45,7 @@
target : null, // rewrite the target of all links
extension : /\.[^.\\/]+$/,
refreshTime : 100,
randomize : false,
ignoreElement: null // a comma seperated list of div element selectors to be ignored e.g.: '.someClass, #someId'
randomize : false
};
function getSuffix(width, height, context) {
@ -572,8 +571,6 @@
var border = extendedSettings.border >= 0 ? extendedSettings.border : extendedSettings.margins;
var ignoreElement = extendedSettings.ignoreElement;
//Context init
context = {
settings : extendedSettings,
@ -622,7 +619,7 @@
checkSettings(context);
context.entries = $gallery.find('> a, > div:not(.spinner, ' + ignoreElement + ')').toArray();
context.entries = $gallery.find('> a, > div:not(.spinner, #page-end)').toArray();
if (context.entries.length === 0) return;
// Randomize

View file

@ -95,6 +95,7 @@ function blocks_content(&$a) {
'ptlabel' => t('Block Name'),
'profile_uid' => intval($owner),
'expanded' => true,
'novoting' => true
);
if($_REQUEST['title'])
@ -106,7 +107,7 @@ function blocks_content(&$a) {
$editor = status_editor($a,$x);
$r = q("select * from item_id left join item on item_id.iid = item.id
$r = q("select iid, sid, mid, title, body, mimetype, created, edited from item_id left join item on item_id.iid = item.id
where item_id.uid = %d and service = 'BUILDBLOCK' order by item.created desc",
intval($owner)
);
@ -118,6 +119,7 @@ function blocks_content(&$a) {
foreach($r as $rr) {
$element_arr = array(
'type' => 'block',
'title' => $rr['title'],
'body' => $rr['body'],
'created' => $rr['created'],
'edited' => $rr['edited'],
@ -127,7 +129,8 @@ function blocks_content(&$a) {
);
$pages[$rr['iid']][] = array(
'url' => $rr['iid'],
'title' => $rr['sid'],
'name' => $rr['sid'],
'title' => $rr['title'],
'created' => $rr['created'],
'edited' => $rr['edited'],
'bb_element' => '[element]' . base64url_encode(json_encode($element_arr)) . '[/element]'
@ -142,6 +145,7 @@ function blocks_content(&$a) {
'$baseurl' => $url,
'$title' => t('Blocks'),
'$name' => t('Block Name'),
'$blocktitle' => t('Block Title'),
'$created' => t('Created'),
'$edited' => t('Edited'),
'$create' => t('Create'),

42
mod/branchtopic.php Normal file
View file

@ -0,0 +1,42 @@
<?php
function branchtopic_init(&$a) {
if(! local_channel())
return;
$item_id = 0;
if(argc() > 1)
$item_id = intval(argv(1));
if(! $item_id)
return;
$channel = $a->get_channel();
if(! $channel)
return;
$r = q("select * from item where id = %d and uid = %d and owner_xchan = '%s' and id != parent limit 1",
intval($item_id),
intval(local_channel()),
dbesc($channel['channel_hash'])
);
if(! $r)
return;
$p = q("select * from item where id = %d and uid = %d limit 1",
intval($r[0]['parent']),
intval(local_channel())
);
$x = q("update item set parent = id, route = '', item_flags = (item_flags | %d) where id = %d",
intval(ITEM_THREAD_TOP),
intval($item_id)
);
return;
}

View file

@ -23,7 +23,6 @@ function editlayout_init(&$a) {
function editlayout_content(&$a) {
if(! $a->profile) {
notice( t('Requested profile is not available.') . EOL );
$a->error = 404;
@ -69,7 +68,6 @@ function editlayout_content(&$a) {
$o = '';
// Figure out which post we're editing
$post_id = ((argc() > 2) ? intval(argv(2)) : 0);
@ -105,7 +103,9 @@ function editlayout_content(&$a) {
$plaintext = true;
$o .= replace_macros(get_markup_template('edpost_head.tpl'), array(
'$title' => t('Edit Layout')
'$title' => t('Edit Layout'),
'$delete' => ((($itm[0]['author_xchan'] === $ob_hash) || ($itm[0]['owner_xchan'] === $ob_hash)) ? t('Delete') : false),
'$id' => $itm[0]['id']
));
$a->page['htmlhead'] .= replace_macros(get_markup_template('jot-header.tpl'), array(
@ -161,8 +161,9 @@ function editlayout_content(&$a) {
'$public' => t('Public post'),
'$jotnets' => $jotnets,
'$title' => htmlspecialchars($itm[0]['title'],ENT_COMPAT,'UTF-8'),
'$placeholdertitle' => t('Title (optional)'),
'$placeholdertitle' => t('Layout Description (Optional)'),
'$pagetitle' => $layout_title,
'$placeholdpagetitle' => t('Layout Name'),
'$category' => '',
'$placeholdercategory' => t('Categories (optional, comma-separated list)'),
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
@ -176,27 +177,6 @@ function editlayout_content(&$a) {
'$feature_expire' => false,
'$expires' => t('Set expiration date'),
));
if(($itm[0]['author_xchan'] === $ob_hash) || ($itm[0]['owner_xchan'] === $ob_hash))
$o .= '<br /><br /><a class="layout-delete-link" href="item/drop/' . $itm[0]['id'] . '" >' . t('Delete Layout') . '</a><br />';
$x = array(
'type' => 'layout',
'title' => $itm[0]['title'],
'body' => $itm[0]['body'],
'term' => $itm[0]['term'],
'created' => $itm[0]['created'],
'edited' => $itm[0]['edited'],
'mimetype' => $itm[0]['mimetype'],
'pagetitle' => $page_title,
'mid' => $itm[0]['mid']
);
$o .= EOL . EOL . t('Share') . EOL . '<textarea onclick="this.select();" class="shareable_element_text" >[element]' . base64url_encode(json_encode($x)) . '[/element]</textarea>' . EOL . EOL;
return $o;

View file

@ -188,7 +188,7 @@ function editwebpage_content(&$a) {
'$video' => t('Insert Vorbis [.ogg] video'),
'$audio' => t('Insert Vorbis [.ogg] audio'),
'$setloc' => t('Set your location'),
'$noloc' => t('Clear browser location'),
'$noloc' => ((get_pconfig($uid, 'system', 'use_browser_location')) ? t('Clear browser location') : ''),
'$wait' => t('Please wait'),
'$permset' => t('Permission settings'),
'$ptyp' => $itm[0]['type'],

View file

@ -118,4 +118,4 @@ function impel_init(&$a) {
json_return_and_die(true);
}
}

View file

@ -88,6 +88,9 @@ function layouts_content(&$a) {
return;
}
//This feature is not exposed in redbasic ui since it is not clear why one would want to
//download a json encoded pdl file - we dont have a possibility to import it.
//Use the buildin share/install feature instead.
if((argc() > 3) && (argv(2) === 'share') && (argv(3))) {
$r = q("select sid, service, mimetype, title, body from item_id
left join item on item.id = item_id.iid
@ -103,18 +106,6 @@ function layouts_content(&$a) {
}
}
$tabs = array(
array(
'label' => t('Layout Help'),
'url' => 'help/Comanche',
'sel' => '',
'title' => t('Help with this feature'),
'id' => 'layout-help-tab',
));
//$o .= replace_macros(get_markup_template('common_tabs.tpl'),array('$tabs' => $tabs));
// Create a status editor (for now - we'll need a WYSIWYG eventually) to create pages
// Nickname is set to the observers xchan, and profile_uid to the owners.
// This lets you post pages at other people's channels.
@ -123,15 +114,15 @@ function layouts_content(&$a) {
'webpage' => ITEM_TYPE_PDL,
'is_owner' => true,
'nickname' => $a->profile['channel_address'],
//do we need that at this place?
//'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid'] || $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
'bang' => '',
'showacl' => false,
'visitor' => false,
'nopreview' => 1,
'ptlabel' => t('Layout Name'),
'profile_uid' => intval($owner),
'expanded' => true
'expanded' => true,
'placeholdertitle' => t('Layout Description (Optional)'),
'novoting' => true
);
if($_REQUEST['title'])
@ -141,11 +132,10 @@ function layouts_content(&$a) {
if($_REQUEST['pagetitle'])
$x['pagetitle'] = $_REQUEST['pagetitle'];
$editor = status_editor($a,$x);
$r = q("select iid, sid, mid from item_id left join item on item.id = item_id.iid
where item_id.uid = %d and service = 'PDL' order by sid asc",
$r = q("select iid, sid, mid, title, body, mimetype, created, edited from item_id left join item on item_id.iid = item.id
where item_id.uid = %d and service = 'PDL' order by item.created desc",
intval($owner)
);
@ -154,10 +144,24 @@ function layouts_content(&$a) {
if($r) {
$pages = array();
foreach($r as $rr) {
$element_arr = array(
'type' => 'layout',
'title' => $rr['title'],
'body' => $rr['body'],
'created' => $rr['created'],
'edited' => $rr['edited'],
'mimetype' => $rr['mimetype'],
'pagetitle' => $rr['sid'],
'mid' => $rr['mid']
);
$pages[$rr['iid']][] = array(
'url' => $rr['iid'],
'title' => $rr['sid'],
'mid' => $rr['mid']
'title' => $rr['sid'],
'descr' => $rr['title'],
'mid' => $rr['mid'],
'created' => $rr['created'],
'edited' => $rr['edited'],
'bb_element' => '[element]' . base64url_encode(json_encode($element_arr)) . '[/element]'
);
}
}
@ -171,8 +175,13 @@ function layouts_content(&$a) {
'$help' => array('text' => t('Help'), 'url' => 'help/Comanche', 'title' => t('Comanche page description language help')),
'$editor' => $editor,
'$baseurl' => $url,
'$name' => t('Layout Name'),
'$descr' => t('Layout Description'),
'$created' => t('Created'),
'$edited' => t('Edited'),
'$edit' => t('Edit'),
'$share' => t('Share'),
'$download' => t('Download PDL file'),
'$pages' => $pages,
'$channel' => $which,
'$view' => t('View'),

View file

@ -148,14 +148,16 @@ function manage_content(&$a) {
intval(local_channel()),
intval(PERMS_A_DELEGATE)
);
if(! $delegates)
$delegates = null;
if($delegates) {
for($x = 0; $x < count($delegates); $x ++) {
$delegates[$x]['link'] = 'magic?f=&dest=' . urlencode($delegates[$x]['xchan_url']) . '&delegate=' . urlencode($delegates[$x]['xchan_addr']);
$delegates[$x]['link'] = 'magic?f=&dest=' . urlencode($delegates[$x]['xchan_url'])
. '&delegate=' . urlencode($delegates[$x]['xchan_addr']);
}
}
else {
$delegates = null;
}

View file

@ -113,7 +113,8 @@ function webpages_content(&$a) {
'profile_uid' => intval($owner),
'mimetype' => $mimetype,
'layout' => $layout,
'expanded' => true
'expanded' => true,
'novoting' => true
);
if($_REQUEST['title'])
@ -149,7 +150,6 @@ function webpages_content(&$a) {
'type' => 'webpage',
'title' => $rr['title'],
'body' => $rr['body'],
'term' => $rr['term'],
'created' => $rr['created'],
'edited' => $rr['edited'],
'mimetype' => $rr['mimetype'],

File diff suppressed because it is too large Load diff

View file

@ -1 +1 @@
2015-04-22.1010
2015-04-28.1016

View file

@ -15,14 +15,18 @@
padding: 7px 3px 7px 10px;
}
#block-list-table th:nth-child(5),
#block-list-table td:nth-child(5){
padding: 7px 3px;
#block-list-table th:nth-child(2){
white-space: nowrap;
}
#block-list-table th:nth-child(6),
#block-list-table td:nth-child(6){
padding: 7px 3px;
white-space: nowrap;
}
#block-list-table th:nth-child(7),
#block-list-table td:nth-child(7){
padding: 7px 10px 7px 7px;
white-space: nowrap;
}

View file

@ -1,3 +1,36 @@
#layout-editor {
display: none;
}
#layout-list-table {
width: 100%;
}
#layout-list-table th:nth-child(1){
padding: 7px 3px 7px 10px;
white-space: nowrap;
}
#layout-list-table td:nth-child(1){
padding: 7px 3px 7px 10px;
}
#layout-list-table th:nth-child(2){
white-space: nowrap;
}
#layout-list-table th:nth-child(6),
#layout-list-table td:nth-child(6){
padding: 7px 3px;
white-space: nowrap;
}
#layout-list-table th:nth-child(7),
#layout-list-table td:nth-child(7){
padding: 7px 10px 7px 7px;
white-space: nowrap;
}
.webpage-list-tool {
padding: 7px 10px;
}

View file

@ -15,6 +15,10 @@
padding: 7px 3px 7px 10px;
}
#webpage-list-table th:nth-child(2){
white-space: nowrap;
}
#webpage-list-table th:nth-child(7),
#webpage-list-table td:nth-child(7){
padding: 7px 3px;

View file

@ -743,7 +743,6 @@ function justifyPhotos() {
$('#photo-album-contents').justifiedGallery({
margins: 3,
border: 0,
ignoreElement: '#page-end',
sizeRangeSuffixes: {
'lt100': '-2',
'lt240': '-2',

View file

@ -1938,6 +1938,7 @@ nav .dropdown-menu {
[id^="webpage-list-item-"]:hover td,
[id^="block-list-item-"]:hover td,
[id^="layout-list-item-"]:hover td,
[id^="menu-list-item-"]:hover td,
[id^="mitem-list-item-"]:hover td {
background-color: $item_colour;

View file

@ -16,7 +16,8 @@
<div id="pagelist-content-wrapper" class="section-content-wrapper-np">
<table id="block-list-table">
<tr>
<th width="97%">{{$name}}</th>
<th width="1%">{{$name}}</th>
<th width="94%">{{$blocktitle}}</th>
<th width="1%"></th>
<th width="1%"></th>
<th width="1%"></th>
@ -28,11 +29,14 @@
<tr id="block-list-item-{{$item.url}}">
<td>
{{if $view}}
<a href="block/{{$channel}}/{{$item.title}}" title="{{$view}}">{{$item.title}}</a>
<a href="block/{{$channel}}/{{$item.name}}" title="{{$view}}">{{$item.name}}</a>
{{else}}
{{$item.title}}
{{$item.name}}
{{/if}}
</td>
<td>
{{$item.title}}
</td>
<td class="webpage-list-tool">
{{if $edit}}
<a href="{{$baseurl}}/{{$item.url}}" title="{{$edit}}"><i class="icon-pencil"></i></a>

View file

@ -15,19 +15,55 @@
{{/if}}
{{if $pages}}
<div id="pagelist-content-wrapper" class="generic-content-wrapper">
<div id="pagelist-content-wrapper" class="section-content-wrapper-np">
<table id="layout-list-table">
<tr>
<th width="1%">{{$name}}</th>
<th width="94%">{{$descr}}</th>
<th width="1%"></th>
<th width="1%"></th>
<th width="1%"></th>
<th width="1%" class="hidden-xs">{{$created}}</th>
<th width="1%" class="hidden-xs">{{$edited}}</th>
</tr>
{{foreach $pages as $key => $items}}
{{foreach $items as $item}}
<div class="page-list-item">
{{if $edit}}<a href="{{$baseurl}}/{{$item.url}}" title="{{$edit}}"><i class="icon-pencil design-icons design-edit-icon btn btn-default"></i></a> {{/if}}
{{if $view}}<a href="page/{{$channel}}/{{$item.title}}" title="{{$view}}"><i class="icon-external-link design-icons design-view-icon btn btn-default"></i></a> {{/if}}
{{if $share}}<a href="layouts/{{$channel}}/share/{{$item.mid}}" title="{{$share}}"><i class="icon-share design-icons btn btn-default"></i></a> {{/if}}
{{*if $preview}}<a href="page/{{$channel}}/{{$item.title}}?iframe=true&width=80%&height=80%" title="{{$preview}}" class="webpage-preview" ><i class="icon-eye-open design-icons design-preview-icon"></i></a> {{/if*}}
{{$item.title}}
</div>
{{/foreach}}
{{foreach $items as $item}}
<tr id="layout-list-item-{{$item.url}}">
<td>
{{if $view}}
<a href="page/{{$channel}}/{{$item.title}}" title="{{$view}}">{{$item.title}}</a>
{{else}}
{{$item.title}}
{{/if}}
</td>
<td>
{{$item.descr}}
</td>
<td class="webpage-list-tool">
{{if $edit}}
<a href="{{$baseurl}}/{{$item.url}}" title="{{$edit}}"><i class="icon-pencil"></i></a>
{{/if}}
</td>
<td class="webpage-list-tool">
{{if $item.bb_element}}
<a href="rpost?attachment={{$item.bb_element}}" title="{{$share}}"><i class="icon-share"></i></a>
{{/if}}
</td>
<td class="webpage-list-tool">
{{if $edit}}
<a href="#" title="{{$delete}}" onclick="dropItem('item/drop/{{$item.url}}', '#layout-list-item-{{$item.url}}'); return false;"><i class="icon-trash drop-icons"></i></a>
{{/if}}
</td>
<td class="hidden-xs">
{{$item.created}}
</td>
<td class="hidden-xs">
{{$item.edited}}
</td>
</tr>
{{/foreach}}
</div>
<div class="clear"></div>
{{/foreach}}
</table>
</div>
<div class="clear"></div>
{{/if}}

View file

@ -1,4 +1,4 @@
{{foreach $photos as $photo}}
{{include file="photo_top.tpl"}}
{{include file="photo_top.tpl"}}
{{/foreach}}
<script>justifyPhotosAjax()</script>