2016-04-19 03:38:38 +00:00
< ? php
namespace Zotlabs\Module ; /** @file */
class Sources extends \Zotlabs\Web\Controller {
function post () {
if ( ! local_channel ())
return ;
2016-05-02 05:45:38 +00:00
2016-04-19 03:38:38 +00:00
if ( ! feature_enabled ( local_channel (), 'channel_sources' ))
return '' ;
$source = intval ( $_REQUEST [ 'source' ]);
2018-06-19 03:44:59 +00:00
$xchan = escape_tags ( $_REQUEST [ 'xchan' ]);
2016-04-19 03:38:38 +00:00
$abook = intval ( $_REQUEST [ 'abook' ]);
2018-06-19 03:44:59 +00:00
$words = escape_tags ( $_REQUEST [ 'words' ]);
$resend = intval ( $_REQUEST [ 'resend' ]);
2016-04-19 03:38:38 +00:00
$frequency = $_REQUEST [ 'frequency' ];
2018-06-19 03:44:59 +00:00
$name = escape_tags ( $_REQUEST [ 'name' ]);
$tags = escape_tags ( $_REQUEST [ 'tags' ]);
2016-04-19 03:38:38 +00:00
$channel = \App :: get_channel ();
if ( $name == '*' )
$xchan = '*' ;
if ( $abook ) {
$r = q ( " select abook_xchan from abook where abook_id = %d and abook_channel = %d limit 1 " ,
intval ( $abook ),
intval ( local_channel ())
);
if ( $r )
$xchan = $r [ 0 ][ 'abook_xchan' ];
}
if ( ! $xchan ) {
notice ( t ( 'Failed to create source. No channel selected.' ) . EOL );
return ;
}
2016-05-02 05:45:38 +00:00
2018-06-19 03:44:59 +00:00
set_abconfig ( local_channel (), $xchan , 'system' , 'rself' , $resend );
2016-04-19 03:38:38 +00:00
if ( ! $source ) {
2016-05-02 05:45:38 +00:00
$r = q ( " insert into source ( src_channel_id, src_channel_xchan, src_xchan, src_patt, src_tag )
values ( % d , '%s' , '%s' , '%s' , '%s' ) " ,
2016-04-19 03:38:38 +00:00
intval ( local_channel ()),
dbesc ( $channel [ 'channel_hash' ]),
dbesc ( $xchan ),
2016-05-02 05:45:38 +00:00
dbesc ( $words ),
dbesc ( $tags )
2016-04-19 03:38:38 +00:00
);
if ( $r ) {
info ( t ( 'Source created.' ) . EOL );
}
goaway ( z_root () . '/sources' );
}
else {
2016-05-02 05:45:38 +00:00
$r = q ( " update source set src_xchan = '%s', src_patt = '%s', src_tag = '%s' where src_channel_id = %d and src_id = %d " ,
2016-04-19 03:38:38 +00:00
dbesc ( $xchan ),
dbesc ( $words ),
2016-05-02 05:45:38 +00:00
dbesc ( $tags ),
2016-04-19 03:38:38 +00:00
intval ( local_channel ()),
intval ( $source )
);
if ( $r ) {
info ( t ( 'Source updated.' ) . EOL );
}
}
2016-05-02 05:45:38 +00:00
2016-04-19 03:38:38 +00:00
}
2018-06-19 03:44:59 +00:00
function get () {
2016-04-19 03:38:38 +00:00
if ( ! local_channel ()) {
notice ( t ( 'Permission denied.' ) . EOL );
return '' ;
}
if ( ! feature_enabled ( local_channel (), '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_channel ())
);
if ( $r ) {
for ( $x = 0 ; $x < count ( $r ); $x ++ ) {
if ( $r [ $x ][ 'src_xchan' ] == '*' ) {
$r [ $x ][ 'xchan_name' ] = t ( '*' );
}
$r [ $x ][ 'src_patt' ] = htmlspecialchars ( $r [ $x ][ 'src_patt' ], ENT_COMPAT , 'UTF-8' );
}
}
$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' ), '' , '' ),
2016-05-02 08:18:18 +00:00
'$tags' => array ( 'tags' , t ( 'Add the following categories to posts imported from this source (comma separated)' ), '' , t ( 'Optional' )),
2018-06-19 03:44:59 +00:00
'$resend' => [ 'resend' , t ( 'Resend posts with this channel as author' ), 0 , t ( 'Copyrights may apply' ), [ t ( 'No' ), t ( 'Yes' ) ]],
2016-04-19 03:38:38 +00:00
'$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_channel ())
);
if ( $r ) {
$x = q ( " select abook_id from abook where abook_xchan = '%s' and abook_channel = %d limit 1 " ,
dbesc ( $r [ 0 ][ 'src_xchan' ]),
intval ( local_channel ())
);
}
if ( ! $r ) {
notice ( t ( 'Source not found.' ) . EOL );
return '' ;
}
$r [ 0 ][ 'src_patt' ] = htmlspecialchars ( $r [ 0 ][ 'src_patt' ], ENT_QUOTES , 'UTF-8' );
$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' ],
'$abook' => $x [ 0 ][ 'abook_id' ],
2016-05-02 08:18:18 +00:00
'$tags' => array ( 'tags' , t ( 'Add the following categories to posts imported from this source (comma separated)' ), $r [ 0 ][ 'src_tag' ], t ( 'Optional' )),
2018-06-19 03:44:59 +00:00
'$resend' => [ 'resend' , t ( 'Resend posts with this channel as author' ), get_abconfig ( local_channel (), $r [ 0 ][ 'xchan_hash' ], 'system' , 'rself' ), t ( 'Copyrights may apply' ), [ t ( 'No' ), t ( 'Yes' ) ]],
2016-04-19 03:38:38 +00:00
'$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_channel ())
);
if ( ! $r ) {
notice ( t ( 'Source not found.' ) . EOL );
return '' ;
}
$r = q ( " delete from source where src_id = %d and src_channel_id = %d " ,
intval ( argv ( 1 )),
intval ( local_channel ())
);
if ( $r )
info ( t ( 'Source removed' ) . EOL );
else
notice ( t ( 'Unable to remove source.' ) . EOL );
goaway ( z_root () . '/sources' );
}
// shouldn't get here.
}
}