2013-08-04 20:58:31 +02:00
< ? php
/**
* poche , a read it later open source system
*
* @ category poche
* @ author Nicolas Lœuillet < support @ inthepoche . com >
* @ copyright 2013
* @ license http :// www . wtfpl . net / see COPYING file
*/
class Poche
{
2013-08-06 14:18:03 +02:00
public $user ;
2013-08-04 20:58:31 +02:00
public $store ;
public $tpl ;
2013-08-05 15:54:37 +02:00
public $messages ;
2013-08-05 21:56:32 +02:00
public $pagination ;
2013-08-04 20:58:31 +02:00
2013-08-07 14:24:07 +02:00
function __construct ()
2013-08-04 20:58:31 +02:00
{
2013-08-15 10:54:14 +02:00
$this -> initTpl ();
if ( ! $this -> checkBeforeInstall ()) {
exit ;
2013-08-09 11:47:37 +02:00
}
2013-08-07 14:24:07 +02:00
$this -> store = new Database ();
2013-08-04 20:58:31 +02:00
$this -> init ();
2013-08-05 21:56:32 +02:00
$this -> messages = new Messages ();
2013-08-04 20:58:31 +02:00
# installation
if ( ! $this -> store -> isInstalled ())
{
$this -> install ();
}
}
2013-08-15 10:54:14 +02:00
/**
* all checks before installation .
* @ return boolean
*/
private function checkBeforeInstall ()
2013-08-04 20:58:31 +02:00
{
2013-08-15 10:54:14 +02:00
$msg = '' ;
$allIsGood = TRUE ;
if ( file_exists ( './install' ) && ! DEBUG_POCHE ) {
Tools :: logm ( 'folder /install exists' );
$msg = 'If you want to update your poche, you just have to delete /install folder. <br />To install your poche with sqlite, copy /install/poche.sqlite in /db and delete the folder /install. you have to delete the /install folder before using poche.' ;
$allIsGood = FALSE ;
}
2013-08-06 15:51:48 +02:00
2013-08-15 10:54:14 +02:00
if ( STORAGE == 'sqlite' && ! is_writable ( STORAGE_SQLITE )) {
Tools :: logm ( 'you don\'t have write access on db file' );
$msg = 'You don\'t have write access on ' . STORAGE_SQLITE . ' file.' ;
$allIsGood = FALSE ;
2013-08-06 15:51:48 +02:00
}
2013-08-15 10:54:14 +02:00
if ( ! $allIsGood ) {
echo $this -> tpl -> render ( 'error.twig' , array (
'msg' => $msg
));
2013-08-06 15:51:48 +02:00
}
2013-08-06 14:18:03 +02:00
2013-08-15 10:54:14 +02:00
return $allIsGood ;
}
2013-08-04 20:58:31 +02:00
2013-08-15 10:54:14 +02:00
private function initTpl ()
{
2013-08-04 20:58:31 +02:00
# template engine
$loader = new Twig_Loader_Filesystem ( TPL );
2013-08-07 14:24:07 +02:00
if ( DEBUG_POCHE ) {
$twig_params = array ();
}
else {
$twig_params = array ( 'cache' => CACHE );
}
$this -> tpl = new Twig_Environment ( $loader , $twig_params );
2013-08-04 20:58:31 +02:00
$this -> tpl -> addExtension ( new Twig_Extensions_Extension_I18n ());
2013-08-05 15:54:37 +02:00
# filter to display domain name of an url
$filter = new Twig_SimpleFilter ( 'getDomain' , 'Tools::getDomain' );
$this -> tpl -> addFilter ( $filter );
2013-08-04 20:58:31 +02:00
2013-08-09 08:25:16 +02:00
# filter for reading time
$filter = new Twig_SimpleFilter ( 'getReadingTime' , 'Tools::getReadingTime' );
$this -> tpl -> addFilter ( $filter );
2013-08-15 10:54:14 +02:00
}
private function init ()
{
Tools :: initPhp ();
Session :: init ();
if ( isset ( $_SESSION [ 'poche_user' ]) && $_SESSION [ 'poche_user' ] != array ()) {
$this -> user = $_SESSION [ 'poche_user' ];
}
else {
# fake user, just for install & login screens
$this -> user = new User ();
$this -> user -> setConfig ( $this -> getDefaultConfig ());
}
# l10n
$language = $this -> user -> getConfigValue ( 'language' );
putenv ( 'LC_ALL=' . $language );
setlocale ( LC_ALL , $language );
bindtextdomain ( $language , LOCALE );
textdomain ( $language );
2013-08-09 08:25:16 +02:00
2013-08-06 14:18:03 +02:00
# Pagination
2013-08-06 15:51:48 +02:00
$this -> pagination = new Paginator ( $this -> user -> getConfigValue ( 'pager' ), 'p' );
2013-08-04 20:58:31 +02:00
}
private function install ()
{
Tools :: logm ( 'poche still not installed' );
echo $this -> tpl -> render ( 'install.twig' , array (
2013-08-05 21:56:32 +02:00
'token' => Session :: getToken ()
2013-08-04 20:58:31 +02:00
));
if ( isset ( $_GET [ 'install' ])) {
if (( $_POST [ 'password' ] == $_POST [ 'password_repeat' ])
&& $_POST [ 'password' ] != " " && $_POST [ 'login' ] != " " ) {
# let's rock, install poche baby !
$this -> store -> install ( $_POST [ 'login' ], Tools :: encodeString ( $_POST [ 'password' ] . $_POST [ 'login' ]));
Session :: logout ();
2013-08-05 21:56:32 +02:00
Tools :: logm ( 'poche is now installed' );
Tools :: redirect ();
}
else {
Tools :: logm ( 'error during installation' );
2013-08-04 20:58:31 +02:00
Tools :: redirect ();
}
}
exit ();
}
2013-08-06 15:51:48 +02:00
public function getDefaultConfig ()
{
return array (
'pager' => PAGINATION ,
'language' => LANG ,
);
}
2013-08-04 20:58:31 +02:00
/**
* Call action ( mark as fav , archive , delete , etc . )
*/
2013-08-07 19:14:28 +02:00
public function action ( $action , Url $url , $id = 0 , $import = FALSE )
2013-08-04 20:58:31 +02:00
{
switch ( $action )
{
case 'add' :
if ( $parametres_url = $url -> fetchContent ()) {
2013-08-06 15:51:48 +02:00
if ( $this -> store -> add ( $url -> getUrl (), $parametres_url [ 'title' ], $parametres_url [ 'content' ], $this -> user -> getId ())) {
2013-08-04 20:58:31 +02:00
Tools :: logm ( 'add link ' . $url -> getUrl ());
2013-08-07 19:14:28 +02:00
$sequence = '' ;
if ( STORAGE == 'postgres' ) {
$sequence = 'entries_id_seq' ;
}
$last_id = $this -> store -> getLastId ( $sequence );
2013-08-04 20:58:31 +02:00
if ( DOWNLOAD_PICTURES ) {
$content = filtre_picture ( $parametres_url [ 'content' ], $url -> getUrl (), $last_id );
2013-08-09 23:30:20 +02:00
Tools :: logm ( 'updating content article' );
$this -> store -> updateContent ( $last_id , $content , $this -> user -> getId ());
2013-08-04 20:58:31 +02:00
}
2013-08-07 19:14:28 +02:00
if ( ! $import ) {
$this -> messages -> add ( 's' , _ ( 'the link has been added successfully' ));
}
2013-08-04 20:58:31 +02:00
}
else {
2013-08-07 19:14:28 +02:00
if ( ! $import ) {
$this -> messages -> add ( 'e' , _ ( 'error during insertion : the link wasn\'t added' ));
Tools :: logm ( 'error during insertion : the link wasn\'t added ' . $url -> getUrl ());
}
2013-08-04 20:58:31 +02:00
}
}
else {
2013-08-07 19:14:28 +02:00
if ( ! $import ) {
$this -> messages -> add ( 'e' , _ ( 'error during fetching content : the link wasn\'t added' ));
Tools :: logm ( 'error during content fetch ' . $url -> getUrl ());
}
}
if ( ! $import ) {
Tools :: redirect ();
2013-08-04 20:58:31 +02:00
}
break ;
case 'delete' :
2013-08-07 14:24:07 +02:00
$msg = 'delete link #' . $id ;
2013-08-06 15:51:48 +02:00
if ( $this -> store -> deleteById ( $id , $this -> user -> getId ())) {
2013-08-04 20:58:31 +02:00
if ( DOWNLOAD_PICTURES ) {
remove_directory ( ABS_PATH . $id );
}
2013-08-05 21:56:32 +02:00
$this -> messages -> add ( 's' , _ ( 'the link has been deleted successfully' ));
2013-08-04 20:58:31 +02:00
}
else {
2013-08-05 21:56:32 +02:00
$this -> messages -> add ( 'e' , _ ( 'the link wasn\'t deleted' ));
2013-08-07 14:24:07 +02:00
$msg = 'error : can\'t delete link #' . $id ;
2013-08-04 20:58:31 +02:00
}
2013-08-07 14:24:07 +02:00
Tools :: logm ( $msg );
Tools :: redirect ( '?' );
2013-08-04 20:58:31 +02:00
break ;
case 'toggle_fav' :
2013-08-06 15:51:48 +02:00
$this -> store -> favoriteById ( $id , $this -> user -> getId ());
2013-08-04 20:58:31 +02:00
Tools :: logm ( 'mark as favorite link #' . $id );
2013-08-07 19:14:28 +02:00
if ( ! $import ) {
Tools :: redirect ();
}
2013-08-04 20:58:31 +02:00
break ;
case 'toggle_archive' :
2013-08-06 15:51:48 +02:00
$this -> store -> archiveById ( $id , $this -> user -> getId ());
2013-08-04 20:58:31 +02:00
Tools :: logm ( 'archive link #' . $id );
2013-08-07 19:14:28 +02:00
if ( ! $import ) {
Tools :: redirect ();
}
2013-08-04 20:58:31 +02:00
break ;
default :
break ;
}
}
function displayView ( $view , $id = 0 )
{
$tpl_vars = array ();
switch ( $view )
{
case 'config' :
2013-08-05 12:34:16 +02:00
$dev = $this -> getPocheVersion ( 'dev' );
$prod = $this -> getPocheVersion ( 'prod' );
$compare_dev = version_compare ( POCHE_VERSION , $dev );
$compare_prod = version_compare ( POCHE_VERSION , $prod );
$tpl_vars = array (
'dev' => $dev ,
'prod' => $prod ,
'compare_dev' => $compare_dev ,
'compare_prod' => $compare_prod ,
);
2013-08-04 20:58:31 +02:00
Tools :: logm ( 'config view' );
break ;
case 'view' :
2013-08-06 15:51:48 +02:00
$entry = $this -> store -> retrieveOneById ( $id , $this -> user -> getId ());
2013-08-04 20:58:31 +02:00
if ( $entry != NULL ) {
Tools :: logm ( 'view link #' . $id );
$content = $entry [ 'content' ];
if ( function_exists ( 'tidy_parse_string' )) {
$tidy = tidy_parse_string ( $content , array ( 'indent' => true , 'show-body-only' => true ), 'UTF8' );
$tidy -> cleanRepair ();
$content = $tidy -> value ;
}
$tpl_vars = array (
'entry' => $entry ,
'content' => $content ,
);
}
else {
2013-08-09 22:15:40 +02:00
Tools :: logm ( 'error in view call : entry is null' );
2013-08-04 20:58:31 +02:00
}
break ;
default : # home view
2013-08-06 15:51:48 +02:00
$entries = $this -> store -> getEntriesByView ( $view , $this -> user -> getId ());
2013-08-05 21:56:32 +02:00
$this -> pagination -> set_total ( count ( $entries ));
$page_links = $this -> pagination -> page_links ( '?view=' . $view . '&sort=' . $_SESSION [ 'sort' ] . '&' );
2013-08-06 15:51:48 +02:00
$datas = $this -> store -> getEntriesByView ( $view , $this -> user -> getId (), $this -> pagination -> get_limit ());
2013-08-04 20:58:31 +02:00
$tpl_vars = array (
2013-08-05 21:56:32 +02:00
'entries' => $datas ,
'page_links' => $page_links ,
2013-08-04 20:58:31 +02:00
);
2013-08-05 21:56:32 +02:00
Tools :: logm ( 'display ' . $view . ' view' );
2013-08-04 20:58:31 +02:00
break ;
}
return $tpl_vars ;
}
2013-08-04 21:42:46 +02:00
2013-08-08 12:33:02 +02:00
/**
* update the password of the current user .
* if MODE_DEMO is TRUE , the password can ' t be updated .
* @ todo add the return value
* @ todo set the new password in function header like this updatePassword ( $newPassword )
* @ return boolean
*/
2013-08-04 21:42:46 +02:00
public function updatePassword ()
{
2013-08-05 15:54:37 +02:00
if ( MODE_DEMO ) {
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 'i' , _ ( 'in demo mode, you can\'t update your password' ));
2013-08-05 15:54:37 +02:00
Tools :: logm ( 'in demo mode, you can\'t do this' );
2013-08-05 21:56:32 +02:00
Tools :: redirect ( '?view=config' );
2013-08-05 15:54:37 +02:00
}
else {
if ( isset ( $_POST [ 'password' ]) && isset ( $_POST [ 'password_repeat' ])) {
if ( $_POST [ 'password' ] == $_POST [ 'password_repeat' ] && $_POST [ 'password' ] != " " ) {
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 's' , _ ( 'your password has been updated' ));
$this -> store -> updatePassword ( $this -> user -> getId (), Tools :: encodeString ( $_POST [ 'password' ] . $this -> user -> getUsername ()));
2013-08-04 21:42:46 +02:00
Session :: logout ();
2013-08-06 15:51:48 +02:00
Tools :: logm ( 'password updated' );
2013-08-04 21:42:46 +02:00
Tools :: redirect ();
}
else {
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 'e' , _ ( 'the two fields have to be filled & the password must be the same in the two fields' ));
2013-08-05 21:56:32 +02:00
Tools :: redirect ( '?view=config' );
2013-08-04 21:42:46 +02:00
}
}
}
}
2013-08-08 12:33:02 +02:00
/**
* checks if login & password are correct and save the user in session .
* it redirects the user to the $referer link
* @ param string $referer the url to redirect after login
* @ todo add the return value
* @ return boolean
*/
2013-08-04 21:42:46 +02:00
public function login ( $referer )
{
if ( ! empty ( $_POST [ 'login' ]) && ! empty ( $_POST [ 'password' ])) {
2013-08-06 14:18:03 +02:00
$user = $this -> store -> login ( $_POST [ 'login' ], Tools :: encodeString ( $_POST [ 'password' ] . $_POST [ 'login' ]));
if ( $user != array ()) {
# Save login into Session
Session :: login ( $user [ 'username' ], $user [ 'password' ], $_POST [ 'login' ], Tools :: encodeString ( $_POST [ 'password' ] . $_POST [ 'login' ]), array ( 'poche_user' => new User ( $user )));
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 's' , _ ( 'welcome to your poche' ));
2013-08-04 21:42:46 +02:00
if ( ! empty ( $_POST [ 'longlastingsession' ])) {
$_SESSION [ 'longlastingsession' ] = 31536000 ;
$_SESSION [ 'expires_on' ] = time () + $_SESSION [ 'longlastingsession' ];
session_set_cookie_params ( $_SESSION [ 'longlastingsession' ]);
} else {
session_set_cookie_params ( 0 );
}
session_regenerate_id ( true );
2013-08-06 15:51:48 +02:00
Tools :: logm ( 'login successful' );
2013-08-04 21:42:46 +02:00
Tools :: redirect ( $referer );
}
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 'e' , _ ( 'login failed: bad login or password' ));
2013-08-04 21:42:46 +02:00
Tools :: logm ( 'login failed' );
Tools :: redirect ();
} else {
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 'e' , _ ( 'login failed: you have to fill all fields' ));
2013-08-04 21:42:46 +02:00
Tools :: logm ( 'login failed' );
Tools :: redirect ();
}
}
2013-08-08 12:33:02 +02:00
/**
* log out the poche user . It cleans the session .
* @ todo add the return value
* @ return boolean
*/
2013-08-04 21:42:46 +02:00
public function logout ()
{
2013-08-06 14:18:03 +02:00
$this -> user = array ();
2013-08-04 21:42:46 +02:00
Session :: logout ();
2013-08-07 19:14:28 +02:00
$this -> messages -> add ( 's' , _ ( 'see you soon!' ));
Tools :: logm ( 'logout' );
2013-08-04 21:42:46 +02:00
Tools :: redirect ();
}
2013-08-08 12:33:02 +02:00
/**
* import from Instapaper . poche needs a ./ instapaper - export . html file
* @ todo add the return value
* @ return boolean
*/
2013-08-04 22:35:08 +02:00
private function importFromInstapaper ()
2013-08-04 21:42:46 +02:00
{
2013-08-05 10:32:15 +02:00
# TODO gestion des articles favs
2013-08-05 09:43:33 +02:00
$html = new simple_html_dom ();
$html -> load_file ( './instapaper-export.html' );
2013-08-07 19:14:28 +02:00
Tools :: logm ( 'starting import from instapaper' );
2013-08-05 09:43:33 +02:00
$read = 0 ;
$errors = array ();
foreach ( $html -> find ( 'ol' ) as $ul )
{
foreach ( $ul -> find ( 'li' ) as $li )
{
$a = $li -> find ( 'a' );
$url = new Url ( base64_encode ( $a [ 0 ] -> href ));
2013-08-07 19:14:28 +02:00
$this -> action ( 'add' , $url , 0 , TRUE );
2013-08-05 09:43:33 +02:00
if ( $read == '1' ) {
2013-08-07 19:14:28 +02:00
$sequence = '' ;
if ( STORAGE == 'postgres' ) {
$sequence = 'entries_id_seq' ;
}
$last_id = $this -> store -> getLastId ( $sequence );
$this -> action ( 'toggle_archive' , $url , $last_id , TRUE );
2013-08-05 09:43:33 +02:00
}
}
2013-08-05 10:32:15 +02:00
# the second <ol> is for read links
2013-08-05 09:43:33 +02:00
$read = 1 ;
}
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 's' , _ ( 'import from instapaper completed' ));
2013-08-04 22:35:08 +02:00
Tools :: logm ( 'import from instapaper completed' );
Tools :: redirect ();
}
2013-08-04 21:42:46 +02:00
2013-08-08 12:33:02 +02:00
/**
* import from Pocket . poche needs a ./ ril_export . html file
* @ todo add the return value
* @ return boolean
*/
2013-08-04 22:35:08 +02:00
private function importFromPocket ()
{
2013-08-05 10:32:15 +02:00
# TODO gestion des articles favs
2013-08-04 22:35:08 +02:00
$html = new simple_html_dom ();
$html -> load_file ( './ril_export.html' );
2013-08-07 19:14:28 +02:00
Tools :: logm ( 'starting import from pocket' );
2013-08-04 22:35:08 +02:00
$read = 0 ;
$errors = array ();
foreach ( $html -> find ( 'ul' ) as $ul )
{
foreach ( $ul -> find ( 'li' ) as $li )
2013-08-04 21:42:46 +02:00
{
2013-08-04 22:35:08 +02:00
$a = $li -> find ( 'a' );
$url = new Url ( base64_encode ( $a [ 0 ] -> href ));
2013-08-07 19:14:28 +02:00
$this -> action ( 'add' , $url , 0 , TRUE );
2013-08-04 22:35:08 +02:00
if ( $read == '1' ) {
2013-08-07 19:14:28 +02:00
$sequence = '' ;
if ( STORAGE == 'postgres' ) {
$sequence = 'entries_id_seq' ;
}
$last_id = $this -> store -> getLastId ( $sequence );
$this -> action ( 'toggle_archive' , $url , $last_id , TRUE );
2013-08-04 21:42:46 +02:00
}
}
2013-08-05 10:32:15 +02:00
# the second <ul> is for read links
2013-08-04 22:35:08 +02:00
$read = 1 ;
2013-08-04 21:42:46 +02:00
}
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 's' , _ ( 'import from pocket completed' ));
2013-08-04 22:35:08 +02:00
Tools :: logm ( 'import from pocket completed' );
Tools :: redirect ();
}
2013-08-04 21:42:46 +02:00
2013-08-08 12:33:02 +02:00
/**
* import from Readability . poche needs a ./ readability file
* @ todo add the return value
* @ return boolean
*/
2013-08-04 22:35:08 +02:00
private function importFromReadability ()
{
2013-08-05 10:32:15 +02:00
# TODO gestion des articles lus / favs
2013-08-04 22:35:08 +02:00
$str_data = file_get_contents ( " ./readability " );
$data = json_decode ( $str_data , true );
2013-08-07 19:14:28 +02:00
Tools :: logm ( 'starting import from Readability' );
2013-08-04 22:35:08 +02:00
foreach ( $data as $key => $value ) {
$url = '' ;
2013-08-05 10:32:15 +02:00
foreach ( $value as $attr => $attr_value ) {
if ( $attr == 'article__url' ) {
$url = new Url ( base64_encode ( $attr_value ));
2013-08-04 21:42:46 +02:00
}
2013-08-07 19:14:28 +02:00
$sequence = '' ;
if ( STORAGE == 'postgres' ) {
$sequence = 'entries_id_seq' ;
}
2013-08-05 10:32:15 +02:00
// if ($attr_value == 'favorite' && $attr_value == 'true') {
2013-08-07 19:14:28 +02:00
// $last_id = $this->store->getLastId($sequence);
2013-08-05 10:32:15 +02:00
// $this->store->favoriteById($last_id);
2013-08-07 19:14:28 +02:00
// $this->action('toogle_fav', $url, $last_id, TRUE);
2013-08-05 10:32:15 +02:00
// }
2013-08-07 19:14:28 +02:00
if ( $attr_value == 'archive' && $attr_value == 'true' ) {
$last_id = $this -> store -> getLastId ( $sequence );
$this -> action ( 'toggle_archive' , $url , $last_id , TRUE );
}
2013-08-04 21:42:46 +02:00
}
2013-08-04 22:35:08 +02:00
if ( $url -> isCorrect ())
2013-08-07 19:14:28 +02:00
$this -> action ( 'add' , $url , 0 , TRUE );
2013-08-04 21:42:46 +02:00
}
2013-08-06 15:51:48 +02:00
$this -> messages -> add ( 's' , _ ( 'import from Readability completed' ));
2013-08-04 22:35:08 +02:00
Tools :: logm ( 'import from Readability completed' );
Tools :: redirect ();
2013-08-04 21:42:46 +02:00
}
2013-08-08 12:33:02 +02:00
/**
* import datas into your poche
* @ param string $from name of the service to import : pocket , instapaper or readability
* @ todo add the return value
* @ return boolean
*/
2013-08-04 22:35:08 +02:00
public function import ( $from )
2013-08-04 21:42:46 +02:00
{
2013-08-04 22:35:08 +02:00
if ( $from == 'pocket' ) {
2013-08-08 12:33:02 +02:00
return $this -> importFromPocket ();
2013-08-04 22:35:08 +02:00
}
else if ( $from == 'readability' ) {
2013-08-08 12:33:02 +02:00
return $this -> importFromReadability ();
2013-08-04 22:35:08 +02:00
}
else if ( $from == 'instapaper' ) {
2013-08-08 12:33:02 +02:00
return $this -> importFromInstapaper ();
2013-08-04 22:35:08 +02:00
}
}
2013-08-04 21:42:46 +02:00
2013-08-08 12:33:02 +02:00
/**
* export poche entries in json
* @ return json all poche entries
*/
2013-08-04 22:35:08 +02:00
public function export ()
{
2013-08-06 15:51:48 +02:00
$entries = $this -> store -> retrieveAll ( $this -> user -> getId ());
2013-08-04 22:35:08 +02:00
echo $this -> tpl -> render ( 'export.twig' , array (
'export' => Tools :: renderJson ( $entries ),
));
Tools :: logm ( 'export view' );
2013-08-04 21:42:46 +02:00
}
2013-08-05 12:34:16 +02:00
2013-08-08 12:33:02 +02:00
/**
2013-08-08 13:49:57 +02:00
* Checks online the latest version of poche and cache it
2013-08-08 12:33:02 +02:00
* @ param string $which 'prod' or 'dev'
* @ return string latest $which version
*/
2013-08-05 12:34:16 +02:00
private function getPocheVersion ( $which = 'prod' )
{
$cache_file = CACHE . '/' . $which ;
2013-08-08 13:49:57 +02:00
# checks if the cached version file exists
2013-08-05 12:34:16 +02:00
if ( file_exists ( $cache_file ) && ( filemtime ( $cache_file ) > ( time () - 86400 ))) {
$version = file_get_contents ( $cache_file );
} else {
2013-08-07 14:24:07 +02:00
$version = file_get_contents ( 'http://static.inthepoche.com/versions/' . $which );
2013-08-05 12:34:16 +02:00
file_put_contents ( $cache_file , $version , LOCK_EX );
}
return $version ;
}
2013-08-04 20:58:31 +02:00
}