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'), t('Post Composition Features'),
array('richtext', t('Richtext Editor'), t('Enable richtext editor')), array('richtext', t('Richtext Editor'), t('Enable richtext editor')),
array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them')), 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 // 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>