aboutsummaryrefslogtreecommitdiffhomepage
path: root/inc
diff options
context:
space:
mode:
authorNicolas LÅ“uillet <nicolas.loeuillet@gmail.com>2013-08-05 15:54:37 +0200
committerNicolas LÅ“uillet <nicolas.loeuillet@gmail.com>2013-08-05 15:54:37 +0200
commit55821e04c188997d258645975220828e195d0df4 (patch)
tree9a85831aa55c35c2fa69122220f7c873d73a9143 /inc
parentb161295d0b53a5ae194e236b0a7c662e9ac2ff9a (diff)
downloadwallabag-55821e04c188997d258645975220828e195d0df4.tar.gz
wallabag-55821e04c188997d258645975220828e195d0df4.tar.zst
wallabag-55821e04c188997d258645975220828e195d0df4.zip
share email +twitter / class messages
Diffstat (limited to 'inc')
-rwxr-xr-xinc/3rdparty/class.messages.php231
-rw-r--r--inc/poche/Poche.class.php27
-rw-r--r--inc/poche/Tools.class.php11
-rw-r--r--inc/poche/config.inc.php5
4 files changed, 268 insertions, 6 deletions
diff --git a/inc/3rdparty/class.messages.php b/inc/3rdparty/class.messages.php
new file mode 100755
index 00000000..e60bd3a1
--- /dev/null
+++ b/inc/3rdparty/class.messages.php
@@ -0,0 +1,231 @@
1<?php
2//--------------------------------------------------------------------------------------------------
3// Session-Based Flash Messages v1.0
4// Copyright 2012 Mike Everhart (http://mikeeverhart.net)
5//
6// Licensed under the Apache License, Version 2.0 (the "License");
7// you may not use this file except in compliance with the License.
8// You may obtain a copy of the License at
9//
10// http://www.apache.org/licenses/LICENSE-2.0
11//
12// Unless required by applicable law or agreed to in writing, software
13// distributed under the License is distributed on an "AS IS" BASIS,
14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15// See the License for the specific language governing permissions and
16// limitations under the License.
17//
18//------------------------------------------------------------------------------
19// Description:
20//------------------------------------------------------------------------------
21//
22// Stores messages in Session data to be easily retrieved later on.
23// This class includes four different types of messages:
24// - Success
25// - Error
26// - Warning
27// - Information
28//
29// See README for basic usage instructions, or see samples/index.php for more advanced samples
30//
31//--------------------------------------------------------------------------------------------------
32// Changelog
33//--------------------------------------------------------------------------------------------------
34//
35// 2011-05-15 - v1.0 - Initial Version
36//
37//--------------------------------------------------------------------------------------------------
38
39class Messages {
40
41 //-----------------------------------------------------------------------------------------------
42 // Class Variables
43 //-----------------------------------------------------------------------------------------------
44 var $msgId;
45 var $msgTypes = array( 'help', 'info', 'warning', 'success', 'error' );
46 var $msgClass = 'messages';
47 var $msgWrapper = "<div class='%s %s'><a href='#' class='closeMessage'>X</a>\n%s</div>\n";
48 var $msgBefore = '<p>';
49 var $msgAfter = "</p>\n";
50
51
52 /**
53 * Constructor
54 * @author Mike Everhart
55 */
56 public function __construct() {
57
58 // Generate a unique ID for this user and session
59 $this->msgId = md5(uniqid());
60
61 // Create the session array if it doesnt already exist
62 if( !array_key_exists('flash_messages', $_SESSION) ) $_SESSION['flash_messages'] = array();
63
64 }
65
66 /**
67 * Add a message to the queue
68 *
69 * @author Mike Everhart
70 *
71 * @param string $type The type of message to add
72 * @param string $message The message
73 * @param string $redirect_to (optional) If set, the user will be redirected to this URL
74 * @return bool
75 *
76 */
77 public function add($type, $message, $redirect_to=null) {
78
79 if( !isset($_SESSION['flash_messages']) ) return false;
80
81 if( !isset($type) || !isset($message[0]) ) return false;
82
83 // Replace any shorthand codes with their full version
84 if( strlen(trim($type)) == 1 ) {
85 $type = str_replace( array('h', 'i', 'w', 'e', 's'), array('help', 'info', 'warning', 'error', 'success'), $type );
86
87 // Backwards compatibility...
88 } elseif( $type == 'information' ) {
89 $type = 'info';
90 }
91
92 // Make sure it's a valid message type
93 if( !in_array($type, $this->msgTypes) ) die('"' . strip_tags($type) . '" is not a valid message type!' );
94
95 // If the session array doesn't exist, create it
96 if( !array_key_exists( $type, $_SESSION['flash_messages'] ) ) $_SESSION['flash_messages'][$type] = array();
97
98 $_SESSION['flash_messages'][$type][] = $message;
99
100 if( !is_null($redirect_to) ) {
101 header("Location: $redirect_to");
102 exit();
103 }
104
105 return true;
106
107 }
108
109 //-----------------------------------------------------------------------------------------------
110 // display()
111 // print queued messages to the screen
112 //-----------------------------------------------------------------------------------------------
113 /**
114 * Display the queued messages
115 *
116 * @author Mike Everhart
117 *
118 * @param string $type Which messages to display
119 * @param bool $print True = print the messages on the screen
120 * @return mixed
121 *
122 */
123 public function display($type='all', $print=true) {
124 $messages = '';
125 $data = '';
126
127 if( !isset($_SESSION['flash_messages']) ) return false;
128
129 if( $type == 'g' || $type == 'growl' ) {
130 $this->displayGrowlMessages();
131 return true;
132 }
133
134 // Print a certain type of message?
135 if( in_array($type, $this->msgTypes) ) {
136 foreach( $_SESSION['flash_messages'][$type] as $msg ) {
137 $messages .= $this->msgBefore . $msg . $this->msgAfter;
138 }
139
140 $data .= sprintf($this->msgWrapper, $this->msgClass, $type, $messages);
141
142 // Clear the viewed messages
143 $this->clear($type);
144
145 // Print ALL queued messages
146 } elseif( $type == 'all' ) {
147 foreach( $_SESSION['flash_messages'] as $type => $msgArray ) {
148 $messages = '';
149 foreach( $msgArray as $msg ) {
150 $messages .= $this->msgBefore . $msg . $this->msgAfter;
151 }
152 $data .= sprintf($this->msgWrapper, $this->msgClass, $type, $messages);
153 }
154
155 // Clear ALL of the messages
156 $this->clear();
157
158 // Invalid Message Type?
159 } else {
160 return false;
161 }
162
163 // Print everything to the screen or return the data
164 if( $print ) {
165 echo $data;
166 } else {
167 return $data;
168 }
169 }
170
171
172 /**
173 * Check to see if there are any queued error messages
174 *
175 * @author Mike Everhart
176 *
177 * @return bool true = There ARE error messages
178 * false = There are NOT any error messages
179 *
180 */
181 public function hasErrors() {
182 return empty($_SESSION['flash_messages']['error']) ? false : true;
183 }
184
185 /**
186 * Check to see if there are any ($type) messages queued
187 *
188 * @author Mike Everhart
189 *
190 * @param string $type The type of messages to check for
191 * @return bool
192 *
193 */
194 public function hasMessages($type=null) {
195 if( !is_null($type) ) {
196 if( !empty($_SESSION['flash_messages'][$type]) ) return $_SESSION['flash_messages'][$type];
197 } else {
198 foreach( $this->msgTypes as $type ) {
199 if( !empty($_SESSION['flash_messages']) ) return true;
200 }
201 }
202 return false;
203 }
204
205 /**
206 * Clear messages from the session data
207 *
208 * @author Mike Everhart
209 *
210 * @param string $type The type of messages to clear
211 * @return bool
212 *
213 */
214 public function clear($type='all') {
215 if( $type == 'all' ) {
216 unset($_SESSION['flash_messages']);
217 } else {
218 unset($_SESSION['flash_messages'][$type]);
219 }
220 return true;
221 }
222
223 public function __toString() { return $this->hasMessages(); }
224
225 public function __destruct() {
226 //$this->clear();
227 }
228
229
230} // end class
231?> \ No newline at end of file
diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php
index f9bcf85b..80bf6919 100644
--- a/inc/poche/Poche.class.php
+++ b/inc/poche/Poche.class.php
@@ -12,6 +12,7 @@ class Poche
12{ 12{
13 public $store; 13 public $store;
14 public $tpl; 14 public $tpl;
15 public $messages;
15 16
16 function __construct($storage_type) 17 function __construct($storage_type)
17 { 18 {
@@ -41,6 +42,9 @@ class Poche
41 'cache' => CACHE, 42 'cache' => CACHE,
42 )); 43 ));
43 $this->tpl->addExtension(new Twig_Extensions_Extension_I18n()); 44 $this->tpl->addExtension(new Twig_Extensions_Extension_I18n());
45 # filter to display domain name of an url
46 $filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain');
47 $this->tpl->addFilter($filter);
44 48
45 Tools::initPhp(); 49 Tools::initPhp();
46 Session::init(); 50 Session::init();
@@ -113,10 +117,12 @@ class Poche
113 case 'toggle_fav' : 117 case 'toggle_fav' :
114 $this->store->favoriteById($id); 118 $this->store->favoriteById($id);
115 Tools::logm('mark as favorite link #' . $id); 119 Tools::logm('mark as favorite link #' . $id);
120 Tools::redirect();
116 break; 121 break;
117 case 'toggle_archive' : 122 case 'toggle_archive' :
118 $this->store->archiveById($id); 123 $this->store->archiveById($id);
119 Tools::logm('archive link #' . $id); 124 Tools::logm('archive link #' . $id);
125 Tools::redirect();
120 break; 126 break;
121 default: 127 default:
122 break; 128 break;
@@ -174,16 +180,21 @@ class Poche
174 180
175 public function updatePassword() 181 public function updatePassword()
176 { 182 {
177 if (isset($_POST['password']) && isset($_POST['password_repeat'])) { 183 if (MODE_DEMO) {
178 if ($_POST['password'] == $_POST['password_repeat'] && $_POST['password'] != "") { 184 $this->messages->add('i', 'in demo mode, you can\'t update your password');
179 if (!MODE_DEMO) { 185 Tools::logm('in demo mode, you can\'t do this');
186 }
187 else {
188 if (isset($_POST['password']) && isset($_POST['password_repeat'])) {
189 if ($_POST['password'] == $_POST['password_repeat'] && $_POST['password'] != "") {
180 Tools::logm('password updated'); 190 Tools::logm('password updated');
191 $this->messages->add('s', 'your password has been updated');
181 $this->store->updatePassword(Tools::encodeString($_POST['password'] . $_SESSION['login'])); 192 $this->store->updatePassword(Tools::encodeString($_POST['password'] . $_SESSION['login']));
182 Session::logout(); 193 Session::logout();
183 Tools::redirect(); 194 Tools::redirect();
184 } 195 }
185 else { 196 else {
186 Tools::logm('in demo mode, you can\'t do this'); 197 $this->messages->add('e', 'the two fields have to be filled & the password must be the same in the two fields');
187 } 198 }
188 } 199 }
189 } 200 }
@@ -194,7 +205,7 @@ class Poche
194 if (!empty($_POST['login']) && !empty($_POST['password'])) { 205 if (!empty($_POST['login']) && !empty($_POST['password'])) {
195 if (Session::login($_SESSION['login'], $_SESSION['pass'], $_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']))) { 206 if (Session::login($_SESSION['login'], $_SESSION['pass'], $_POST['login'], Tools::encodeString($_POST['password'] . $_POST['login']))) {
196 Tools::logm('login successful'); 207 Tools::logm('login successful');
197 208 $this->messages->add('s', 'login successful, welcome to your poche');
198 if (!empty($_POST['longlastingsession'])) { 209 if (!empty($_POST['longlastingsession'])) {
199 $_SESSION['longlastingsession'] = 31536000; 210 $_SESSION['longlastingsession'] = 31536000;
200 $_SESSION['expires_on'] = time() + $_SESSION['longlastingsession']; 211 $_SESSION['expires_on'] = time() + $_SESSION['longlastingsession'];
@@ -205,9 +216,11 @@ class Poche
205 session_regenerate_id(true); 216 session_regenerate_id(true);
206 Tools::redirect($referer); 217 Tools::redirect($referer);
207 } 218 }
219 $this->messages->add('e', 'login failed, bad login or password');
208 Tools::logm('login failed'); 220 Tools::logm('login failed');
209 Tools::redirect(); 221 Tools::redirect();
210 } else { 222 } else {
223 $this->messages->add('e', 'login failed, you have to fill all fields');
211 Tools::logm('login failed'); 224 Tools::logm('login failed');
212 Tools::redirect(); 225 Tools::redirect();
213 } 226 }
@@ -215,6 +228,7 @@ class Poche
215 228
216 public function logout() 229 public function logout()
217 { 230 {
231 $this->messages->add('s', 'logout successful, see you soon!');
218 Tools::logm('logout'); 232 Tools::logm('logout');
219 Session::logout(); 233 Session::logout();
220 Tools::redirect(); 234 Tools::redirect();
@@ -244,6 +258,7 @@ class Poche
244 # the second <ol> is for read links 258 # the second <ol> is for read links
245 $read = 1; 259 $read = 1;
246 } 260 }
261 $this->messages->add('s', 'import from instapaper completed');
247 Tools::logm('import from instapaper completed'); 262 Tools::logm('import from instapaper completed');
248 Tools::redirect(); 263 Tools::redirect();
249 } 264 }
@@ -272,6 +287,7 @@ class Poche
272 # the second <ul> is for read links 287 # the second <ul> is for read links
273 $read = 1; 288 $read = 1;
274 } 289 }
290 $this->messages->add('s', 'import from pocket completed');
275 Tools::logm('import from pocket completed'); 291 Tools::logm('import from pocket completed');
276 Tools::redirect(); 292 Tools::redirect();
277 } 293 }
@@ -300,6 +316,7 @@ class Poche
300 if ($url->isCorrect()) 316 if ($url->isCorrect())
301 $this->action('add', $url); 317 $this->action('add', $url);
302 } 318 }
319 $this->messages->add('s', 'import from Readability completed');
303 Tools::logm('import from Readability completed'); 320 Tools::logm('import from Readability completed');
304 Tools::redirect(); 321 Tools::redirect();
305 } 322 }
diff --git a/inc/poche/Tools.class.php b/inc/poche/Tools.class.php
index 834940ff..7bc8830a 100644
--- a/inc/poche/Tools.class.php
+++ b/inc/poche/Tools.class.php
@@ -210,4 +210,15 @@ class Tools
210 { 210 {
211 return ((isset ($_REQUEST["$var"])) ? htmlentities($_REQUEST["$var"]) : $default); 211 return ((isset ($_REQUEST["$var"])) ? htmlentities($_REQUEST["$var"]) : $default);
212 } 212 }
213
214 public static function getDomain($url)
215 {
216 $pieces = parse_url($url);
217 $domain = isset($pieces['host']) ? $pieces['host'] : '';
218 if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
219 return $regs['domain'];
220 }
221
222 return FALSE;
223 }
213} \ No newline at end of file 224} \ No newline at end of file
diff --git a/inc/poche/config.inc.php b/inc/poche/config.inc.php
index 27be1857..d49df190 100644
--- a/inc/poche/config.inc.php
+++ b/inc/poche/config.inc.php
@@ -15,6 +15,7 @@ define ('CONVERT_LINKS_FOOTNOTES', FALSE);
15define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE); 15define ('REVERT_FORCED_PARAGRAPH_ELEMENTS', FALSE);
16define ('DOWNLOAD_PICTURES', FALSE); 16define ('DOWNLOAD_PICTURES', FALSE);
17define ('SHARE_TWITTER', TRUE); 17define ('SHARE_TWITTER', TRUE);
18define ('SHARE_MAIL', TRUE);
18define ('SALT', '464v54gLLw928uz4zUBqkRJeiPY68zCX'); 19define ('SALT', '464v54gLLw928uz4zUBqkRJeiPY68zCX');
19define ('ABS_PATH', 'assets/'); 20define ('ABS_PATH', 'assets/');
20define ('TPL', './tpl'); 21define ('TPL', './tpl');
@@ -34,9 +35,11 @@ require_once './inc/store/store.class.php';
34require_once './inc/store/' . $storage_type . '.class.php'; 35require_once './inc/store/' . $storage_type . '.class.php';
35require_once './vendor/autoload.php'; 36require_once './vendor/autoload.php';
36require_once './inc/3rdparty/simple_html_dom.php'; 37require_once './inc/3rdparty/simple_html_dom.php';
38require_once './inc/3rdparty/class.messages.php';
37 39
38if (DOWNLOAD_PICTURES) { 40if (DOWNLOAD_PICTURES) {
39 require_once './inc/poche/pochePictures.php'; 41 require_once './inc/poche/pochePictures.php';
40} 42}
41 43
42$poche = new Poche($storage_type); \ No newline at end of file 44$poche = new Poche($storage_type);
45$poche->messages = new Messages(); \ No newline at end of file