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-04 19:09:34 +00:00
require_once dirname ( __FILE__ ) . '/inc/Readability.php' ;
require_once dirname ( __FILE__ ) . '/inc/Encoding.php' ;
include dirname ( __FILE__ ) . '/inc/functions.php' ;
2013-04-03 13:14:01 +00:00
try
{
2013-04-04 18:12:50 +00:00
$db_handle = new PDO ( 'sqlite:db/poche.sqlite' );
2013-04-03 13:14:01 +00:00
$db_handle -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
}
catch ( Exception $e )
{
2013-04-04 17:51:24 +00:00
die ( 'database error : ' . $e -> getMessage ());
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-03 13:14:01 +00:00
$query = $db_handle -> prepare ( 'INSERT INTO entries ( url, title ) VALUES (?, ?)' );
$query -> execute ( array ( $url , $title ));
break ;
2013-04-04 17:51:24 +00:00
case 'toggle_fav' :
2013-04-05 07:41:34 +00:00
$sql_action = " UPDATE entries SET is_fav=~is_fav WHERE id=? " ;
$params_action = array ( $id );
2013-04-03 13:14:01 +00:00
break ;
2013-04-04 17:51:24 +00:00
case 'toggle_archive' :
2013-04-05 07:41:34 +00:00
$sql_action = " UPDATE entries SET is_read=~is_read WHERE id=? " ;
$params_action = array ( $id );
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-04 17:51:24 +00:00
$query = $db_handle -> prepare ( $sql_action );
$query -> execute ( $params_action );
}
}
catch ( Exception $e )
{
die ( 'query error : ' . $e -> getMessage ());
}
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-05 07:41:34 +00:00
$query = $db_handle -> prepare ( $sql );
2013-04-04 17:51:24 +00:00
$query -> execute ( $params );
$entries = $query -> fetchAll ();
}
catch ( Exception $e )
{
die ( 'query error : ' . $e -> getMessage ());
}
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-05 13:30:50 +00:00
< div id = " main " class = " w960p " >
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-05 13:30:50 +00:00
< div id = " entries " >
2013-04-04 17:51:24 +00:00
< ? php
2013-04-05 13:30:50 +00:00
$i = 0 ;
2013-04-05 07:41:34 +00:00
foreach ( $entries as $entry )
{
2013-04-05 13:30:50 +00:00
if ( $i == 0 ) {
echo '<section class="line grid3">' ;
}
2013-04-08 17:17:29 +00:00
echo '<aside class="mod entrie mb2"><h2 class="h6-like"><a href="readityourself.php?url=' . urlencode ( $entry [ 'url' ]) . '">' . $entry [ 'title' ] . '</h2><div class="tools"><a href="?action=toggle_archive&id=' . $entry [ 'id' ] . '" title="toggle mark as read" class="tool">✓</a> <a href="?action=toggle_fav&id=' . $entry [ 'id' ] . '" title="toggle favorite" class="tool">' . (( $entry [ 'is_fav' ] == 0 ) ? '☆' : '★' ) . '</a> <a href="?action=delete&id=' . $entry [ 'id' ] . '" title="toggle delete" onclick="return confirm(\'Are you sure?\')" class="tool">⨯</a></div></aside>' ;
2013-04-05 13:30:50 +00:00
$i ++ ;
if ( $i == 3 ) {
echo '</section>' ;
$i = 0 ;
}
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 " >
< p >< a href = " http://github.com/nicosomb/poche " > poche </ a > is a read it later open source system , based on < a href = " http://www.memiks.fr/readityourself/ " > ReadItYourself </ a >.< br />
Follow us on < a href = " https://twitter.com/getpoche " title = " follow us on twitter " >@ getpoche </ a >.</< br />
Logo by < a href = " http://www.iconfinder.com/icondetails/43256/128/jeans_monotone_pocket_icon " > Brightmix </ a >.< br />
poche is developed by < a href = " http://nicolas.loeuillet.org " > Nicolas Lœuillet </ a > under the < a href = " http://www.wtfpl.net/ " > WTFPL </ a >.</ p >
2013-04-03 13:14:01 +00:00
</ footer >
2013-04-04 17:51:24 +00:00
</ body >
2013-04-09 08:44:59 +00:00
</ html >