2013-04-03 13:14:01 +00:00
< ? php
/**
* poche , a read it later open source system
*
* @ category poche
* @ author Nicolas Lœuillet < nicolas @ loeuillet . org >
* @ copyright 2013
* @ license http :// www . wtfpl . net / see COPYING file
*/
2013-04-09 13:18:39 +00:00
include dirname ( __FILE__ ) . '/inc/config.php' ;
$db = new db ( DB_PATH );
2013-04-03 13:14:01 +00:00
$action = ( isset ( $_GET [ 'action' ])) ? htmlspecialchars ( $_GET [ 'action' ]) : '' ;
2013-04-05 07:41:34 +00:00
$view = ( isset ( $_GET [ 'view' ])) ? htmlspecialchars ( $_GET [ 'view' ]) : '' ;
2013-04-05 13:30:50 +00:00
$id = ( isset ( $_GET [ 'id' ])) ? htmlspecialchars ( $_GET [ 'id' ]) : '' ;
2013-04-03 13:14:01 +00:00
2013-04-05 07:41:34 +00:00
switch ( $action )
{
2013-04-03 13:14:01 +00:00
case 'add' :
2013-04-04 19:09:34 +00:00
$url = ( isset ( $_GET [ 'url' ])) ? $_GET [ 'url' ] : '' ;
2013-04-05 07:41:34 +00:00
if ( $url == '' )
continue ;
$url = html_entity_decode ( trim ( $url ));
2013-04-08 13:32:44 +00:00
// We remove the annoying parameters added by FeedBurner and GoogleFeedProxy (?utm_source=...)
// from shaarli, by sebsauvage
$i = strpos ( $url , '&utm_source=' ); if ( $i !== false ) $url = substr ( $url , 0 , $i );
$i = strpos ( $url , '?utm_source=' ); if ( $i !== false ) $url = substr ( $url , 0 , $i );
$i = strpos ( $url , '#xtor=RSS-' ); if ( $i !== false ) $url = substr ( $url , 0 , $i );
2013-04-05 07:41:34 +00:00
$title = $url ;
if ( ! preg_match ( '!^https?://!i' , $url ))
$url = 'http://' . $url ;
2013-04-04 19:09:34 +00:00
$html = Encoding :: toUTF8 ( get_external_file ( $url , 15 ));
2013-04-05 07:41:34 +00:00
if ( isset ( $html ) and strlen ( $html ) > 0 )
{
2013-04-04 19:09:34 +00:00
$r = new Readability ( $html , $url );
2013-04-05 07:41:34 +00:00
if ( $r -> init ())
{
2013-04-04 19:09:34 +00:00
$title = $r -> articleTitle -> innerHTML ;
}
}
2013-04-12 10:25:58 +00:00
try
{
# insert query
$query = $db -> getHandle () -> prepare ( 'INSERT INTO entries ( url, title, content ) VALUES (?, ?, ?)' );
$query -> execute ( array ( $url , $title , $r -> articleContent -> innerHTML ));
}
catch ( Exception $e )
{
error_log ( 'insert query error : ' . $e -> getMessage ());
}
2013-04-03 13:14:01 +00:00
break ;
case 'delete' :
2013-04-05 07:41:34 +00:00
$sql_action = " DELETE FROM entries WHERE id=? " ;
$params_action = array ( $id );
2013-04-03 13:14:01 +00:00
break ;
default :
break ;
}
2013-04-03 13:22:19 +00:00
2013-04-04 17:51:24 +00:00
try
{
# action query
2013-04-05 07:41:34 +00:00
if ( isset ( $sql_action ))
{
2013-04-09 13:18:39 +00:00
$query = $db -> getHandle () -> prepare ( $sql_action );
2013-04-04 17:51:24 +00:00
$query -> execute ( $params_action );
}
}
catch ( Exception $e )
{
2013-04-12 10:25:58 +00:00
die ( 'action query error : ' . $e -> getMessage ());
2013-04-04 17:51:24 +00:00
}
2013-04-05 07:41:34 +00:00
switch ( $view )
{
2013-04-04 17:51:24 +00:00
case 'archive' :
2013-04-08 08:54:30 +00:00
$sql = " SELECT * FROM entries WHERE is_read=? ORDER BY id desc " ;
2013-04-04 17:51:24 +00:00
$params = array ( - 1 );
break ;
case 'fav' :
2013-04-08 08:54:30 +00:00
$sql = " SELECT * FROM entries WHERE is_fav=? ORDER BY id desc " ;
2013-04-04 17:51:24 +00:00
$params = array ( - 1 );
break ;
default :
2013-04-08 08:54:30 +00:00
$sql = " SELECT * FROM entries WHERE is_read=? ORDER BY id desc " ;
2013-04-04 17:51:24 +00:00
$params = array ( 0 );
2013-04-09 09:49:22 +00:00
$view = 'index' ;
2013-04-04 17:51:24 +00:00
break ;
}
# view query
try
{
2013-04-09 13:18:39 +00:00
$query = $db -> getHandle () -> prepare ( $sql );
2013-04-04 17:51:24 +00:00
$query -> execute ( $params );
$entries = $query -> fetchAll ();
}
catch ( Exception $e )
{
2013-04-12 10:25:58 +00:00
die ( 'view query error : ' . $e -> getMessage ());
2013-04-04 17:51:24 +00:00
}
2013-04-03 13:14:01 +00:00
?>
<! DOCTYPE html >
<!-- [ if lte IE 6 ] > < html class = " no-js ie6 ie67 ie678 " lang = " en " > <! [ endif ] -->
<!-- [ if lte IE 7 ] > < html class = " no-js ie7 ie67 ie678 " lang = " en " > <! [ endif ] -->
<!-- [ if IE 8 ] > < html class = " no-js ie8 ie678 " lang = " en " > <! [ endif ] -->
<!-- [ if gt IE 8 ] ><!--> < html class = " no-js " lang = " en " > <!--<! [ endif ] -->
< html >
< head >
< meta name = " viewport " content = " width=device-width, minimum-scale=1.0, maximum-scale=1.0 " >
< meta charset = " utf-8 " >
< meta http - equiv = " X-UA-Compatible " content = " IE=10 " >
2013-04-05 07:41:34 +00:00
< title > poche , a read it later open source system </ title >
2013-04-08 17:17:29 +00:00
< link rel = " shortcut icon " type = " image/x-icon " href = " img/favicon.ico " />
2013-04-08 12:38:03 +00:00
< link rel = " apple-touch-icon-precomposed " sizes = " 144x144 " href = " img/apple-touch-icon-144x144-precomposed.png " >
< link rel = " apple-touch-icon-precomposed " sizes = " 72x72 " href = " img/apple-touch-icon-72x72-precomposed.png " >
< link rel = " apple-touch-icon-precomposed " href = " img/apple-touch-icon-precomposed.png " >
2013-04-03 13:14:01 +00:00
< link rel = " stylesheet " href = " css/knacss.css " media = " all " >
< link rel = " stylesheet " href = " css/style.css " media = " all " >
</ head >
< body >
2013-04-04 17:51:24 +00:00
< header >
2013-04-05 07:41:34 +00:00
< h1 >< img src = " img/logo.png " alt = " logo poche " /> poche </ h1 >
2013-04-04 17:51:24 +00:00
</ header >
2013-04-09 13:18:39 +00:00
< div id = " main " >
2013-04-04 17:51:24 +00:00
< ul id = " links " >
2013-04-09 09:49:22 +00:00
< li >< a href = " index.php " < ? php echo (( $view == 'index' ) ? 'class="current"' : '' ); ?> >home</a></li>
< li >< a href = " ?view=fav " < ? php echo (( $view == 'fav' ) ? 'class="current"' : '' ); ?> >favorites</a></li>
< li >< a href = " ?view=archive " < ? php echo (( $view == 'archive' ) ? 'class="current"' : '' ); ?> >archive</a></li>
2013-04-08 12:21:42 +00:00
< li >< a style = " cursor: move " title = " i am a bookmarklet, use me ! " href = " javascript:(function() { var%20url%20=%20location.href;var%20title%20=%20document.title%20||%20url;window.open('<?php echo url()?>?action=add&url='%20+%20encodeURIComponent(url),'_self');})(); " > poche it !</ a ></ li >
2013-04-04 17:51:24 +00:00
</ ul >
2013-04-09 13:18:39 +00:00
< div id = " content " >
2013-04-04 17:51:24 +00:00
< ? php
2013-04-05 07:41:34 +00:00
foreach ( $entries as $entry )
{
2013-04-09 13:18:39 +00:00
?>
2013-04-12 09:33:34 +00:00
< div id = " entry-<?php echo $entry['id'] ; ?> " class = " entrie mb2 " >
2013-04-09 13:18:39 +00:00
< span class = " content " >
< h2 class = " h6-like " >
2013-04-12 10:25:58 +00:00
< a href = " view.php?id=<?php echo $entry['id'] ; ?> " >< ? php echo $entry [ 'title' ]; ?>
2013-04-09 13:18:39 +00:00
</ h2 >
< div class = " tools " >
< a title = " toggle mark as read " class = " tool archive <?php echo ( ( $entry['is_read'] == '0') ? 'archive-off' : '' ); ?> " onclick = " toggle_archive(<?php echo $entry['id'] ; ?>) " >< span ></ span ></ a >
< a title = " toggle favorite " class = " tool fav <?php echo ( ( $entry['is_fav'] == '0') ? 'fav-off' : '' ); ?> " onclick = " toggle_favorite(this, <?php echo $entry['id'] ; ?>) " >< span ></ span ></ a >
< a href = " ?action=delete&id=<?php echo $entry['id'] ; ?> " title = " toggle delete " onclick = " return confirm('Are you sure?') " class = " tool delete " >< span ></ span ></ a >
</ div >
</ span >
2013-04-12 09:33:34 +00:00
</ div >
2013-04-09 13:18:39 +00:00
< ? php
2013-04-04 17:51:24 +00:00
}
?>
2013-04-05 13:30:50 +00:00
</ div >
2013-04-04 17:51:24 +00:00
</ div >
2013-04-09 08:44:59 +00:00
< footer class = " mr2 mt3 smaller " >
2013-04-11 17:20:35 +00:00
< p > download poche on < a href = " http://github.com/nicosomb/github " > github </ a >< br /> follow us on < a href = " https://twitter.com/getpoche " title = " follow us on twitter " > twitter </ a ></ p >
2013-04-03 13:14:01 +00:00
</ footer >
2013-04-09 13:18:39 +00:00
< script type = " text/javascript " src = " js/jquery-1.9.1.min.js " ></ script >
2013-04-12 09:33:34 +00:00
< script type = " text/javascript " src = " js/jquery.masonry.min.js " ></ script >
2013-04-09 13:18:39 +00:00
< script type = " text/javascript " src = " js/poche.js " ></ script >
2013-04-12 09:33:34 +00:00
< script type = " text/javascript " >
$ ( window ) . load ( function ()
{
var columns = 3 ,
setColumns = function () { columns = $ ( window ) . width () > 640 ? 3 : $ ( window ) . width () > 320 ? 2 : 1 ; };
setColumns ();
$ ( window ) . resize ( setColumns );
$ ( '#content' ) . masonry (
{
itemSelector : '.entrie' ,
columnWidth : function ( containerWidth ) { return containerWidth / columns ; }
});
});
</ script >
2013-04-04 17:51:24 +00:00
</ body >
2013-04-09 08:44:59 +00:00
</ html >