sources management page

This commit is contained in:
friendica 2013-09-29 18:18:05 -07:00
parent 046ddea9e8
commit a26e48b013
6 changed files with 205 additions and 0 deletions

View file

@ -35,6 +35,7 @@ function get_features() {
t('Post Composition Features'),
array('richtext', t('Richtext Editor'), t('Enable richtext editor')),
array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them')),
array('channel_sources', t('Channel Sources'), t('Automatically import channel content from other channels or feeds')),
),
// Network Tools

140
mod/sources.php Normal file
View file

@ -0,0 +1,140 @@
<?php /** @file */
function sources_post(&$a) {
if(! local_user())
return;
if(! feature_enabled(local_user(),'channel_sources'))
return '';
$source = intval($_REQUEST['source']);
$xchan = $_REQUEST['xchan'];
$words = $_REQUEST['words'];
$frequency = $_REQUEST['frequency'];
$channel = $a->get_channel();
if(! $source) {
$r = q("insert into source ( src_channel_id, src_channel_xchan, src_xchan, src_patt )
values ( %d, '%s', '%s', '%s' ) ",
intval(local_user()),
dbesc($channel['channel_hash']),
dbesc($xchan),
dbesc($words)
);
if($r) {
info( t('Source created.') . EOL);
}
goaway(z_root() . '/sources');
}
else {
$r = q("update source set src_xchan = '%s', src_patt = '%s' where src_channel_id = %d and src_id = %d limit 1",
dbesc($xchan),
dbesc($words),
intval(local_user()),
intval($source)
);
if($r) {
info( t('Source updated.') . EOL);
}
}
}
function sources_content(&$a) {
if(! local_user()) {
notice( t('Permission denied.') . EOL);
return '';
}
if(! feature_enabled(local_user(),'channel_sources')) {
return '';
}
// list sources
if(argc() == 1) {
$r = q("select source.*, xchan.* from source left join xchan on src_xchan = xchan_hash where src_channel_id = %d",
intval(local_user())
);
if($r) {
for($x = 0; $x < count($r); $x ++) {
$r[$x]['src_patt'] = htmlspecialchars($r[$x]['src_patt']);
}
}
$o = replace_macros(get_markup_template('sources_list.tpl'), array(
'$title' => t('Channel Sources'),
'$desc' => t('Manage remote sources of content for your channel.'),
'$new' => t('New Source'),
'$sources' => $r
));
return $o;
}
if(argc() == 2 && argv(1) === 'new') {
// TODO add the words 'or RSS feed' and corresponding code to manage feeds and frequency
$o = replace_macros(get_markup_template('sources_new.tpl'), array(
'$title' => t('New Source'),
'$desc' => t('Import all or selected content from the following channel into this channel and distribute it according to your channel settings.'),
'$words' => array( 'words', t('Only import content with these words (one per line)'),'',t('Leave blank to import all public content')),
'$name' => array( 'name', t('Channel Name'), '', ''),
'$submit' => t('Submit')
));
return $o;
}
if(argc() == 2 && intval(argv(1))) {
// edit source
$r = q("select source.*, xchan.* from source left join xchan on src_xchan = xchan_hash where src_id = %d and src_channel_id = %d limit 1",
intval(argv(1)),
intval(local_user())
);
if(! $r) {
notice( t('Source not found.') . EOL);
return '';
}
$r[0]['src_patt'] = htmlspecialchars($r[0]['src_patt']);
$o = replace_macros(get_markup_template('sources_edit.tpl'), array(
'$title' => t('Edit Source'),
'$drop' => t('Delete Source'),
'$id' => $r[0]['src_id'],
'$desc' => t('Import all or selected content from the following channel into this channel and distribute it according to your channel settings.'),
'$words' => array( 'words', t('Only import content with these words (one per line)'),$r[0]['src_patt'],t('Leave blank to import all public content')),
'$xchan' => $r[0]['src_xchan'],
'$name' => array( 'name', t('Channel Name'), $r[0]['xchan_name'], ''),
'$submit' => t('Submit')
));
return $o;
}
if(argc() == 3 && intval(argv(1)) && argv(2) === 'drop') {
$r = q("select * from source where src_id = %d and src_channel_id = %d limit 1",
intval(argv(1)),
intval(local_user())
);
if(! $r) {
notice( t('Source not found.') . EOL);
return '';
}
$r = q("delete from source where src_id = %d and src_channel_id = %d limit 1",
intval(argv(1)),
intval(local_user())
);
if($r)
info( t('Source removed') . EOL);
else
notice( t('Unable to remove source.') . EOL);
goaway(z_root() . '/sources');
}
// shouldn't get here.
}

12
view/js/mod_sources.js Normal file
View file

@ -0,0 +1,12 @@
$(document).ready(function() {
var a;
a = $("#id_name").autocomplete({
serviceUrl: baseurl + '/acl',
minChars: 2,
width: 350,
onSelect: function(value,data) {
$("#id_xchan").val(data);
}
});
});

22
view/tpl/sources_edit.tpl Normal file
View file

@ -0,0 +1,22 @@
<h1>{{$title}}</h1>
<div class="descriptive-text">{{$desc}}</div>
<form action="sources" method="post">
<input type="hidden" name="source" value="{{$id}}" />
<input type="hidden" id="id_xchan" name="xchan" value="{{$xchan}}" />
{{include file="field_input.tpl" field=$name}}
{{include file="field_textarea.tpl" field=$words}}
<div class="sources-submit-wrapper" >
<input type="submit" name="submit" class="sources-submit" value="{{$submit}}" />
</div>
</form>
<br />
<br />
<a href="sources/{{$id}}/drop">{{$drop}}</a>

15
view/tpl/sources_list.tpl Normal file
View file

@ -0,0 +1,15 @@
<h1>{{$title}}</h1>
<div class="descriptive-text">{{$desc}}</div>
<div class="sources-links">
<a href="sources/new">{{$new}}</a>
</div>
{{if $sources}}
<ul class="sources-list">
{{foreach $sources as $source}}
<li><a href="sources/{{$source.src_id}}">{{$source.xchan_name}}</a></li>
{{/foreach}}
</ul>
{{/if}}

15
view/tpl/sources_new.tpl Normal file
View file

@ -0,0 +1,15 @@
<h1>{{$title}}</h1>
<div class="descriptive-text">{{$desc}}</div>
<form action="sources" method="post">
<input type="hidden" id="id_xchan" name="xchan" value="{{$xchan}}" />
{{include file="field_input.tpl" field=$name}}
{{include file="field_textarea.tpl" field=$words}}
<div class="sources-submit-wrapper" >
<input type="submit" name="submit" class="sources-submit" value="{{$submit}}" />
</div>
</form>