aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--application/PageBuilder.php3
-rw-r--r--application/PluginManager.php25
-rw-r--r--index.php1
-rw-r--r--plugins/demo_plugin/demo_plugin.php17
-rw-r--r--plugins/readityourself/readityourself.php19
-rw-r--r--plugins/wallabag/wallabag.php19
-rw-r--r--tests/plugins/PluginReadityourselfTest.php23
-rw-r--r--tests/plugins/PluginWallabagTest.php23
-rw-r--r--tpl/daily.html6
-rw-r--r--tpl/dailyrss.html2
-rw-r--r--tpl/export.bookmarks.html2
-rw-r--r--tpl/feed.atom.html2
-rw-r--r--tpl/feed.rss.html2
-rw-r--r--tpl/linklist.html4
-rw-r--r--tpl/page.header.html2
-rw-r--r--tpl/picwall.html2
-rw-r--r--tpl/tagcloud.html2
17 files changed, 127 insertions, 27 deletions
diff --git a/application/PageBuilder.php b/application/PageBuilder.php
index 42932f32..32c7f9f1 100644
--- a/application/PageBuilder.php
+++ b/application/PageBuilder.php
@@ -77,9 +77,6 @@ class PageBuilder
77 $this->tpl->assign('openshaarli', $this->conf->get('security.open_shaarli', false)); 77 $this->tpl->assign('openshaarli', $this->conf->get('security.open_shaarli', false));
78 $this->tpl->assign('showatom', $this->conf->get('feed.show_atom', false)); 78 $this->tpl->assign('showatom', $this->conf->get('feed.show_atom', false));
79 $this->tpl->assign('hide_timestamps', $this->conf->get('privacy.hide_timestamps', false)); 79 $this->tpl->assign('hide_timestamps', $this->conf->get('privacy.hide_timestamps', false));
80 if (!empty($GLOBALS['plugin_errors'])) {
81 $this->tpl->assign('plugin_errors', $GLOBALS['plugin_errors']);
82 }
83 $this->tpl->assign('token', getToken($this->conf)); 80 $this->tpl->assign('token', getToken($this->conf));
84 // To be removed with a proper theme configuration. 81 // To be removed with a proper theme configuration.
85 $this->tpl->assign('conf', $this->conf); 82 $this->tpl->assign('conf', $this->conf);
diff --git a/application/PluginManager.php b/application/PluginManager.php
index 1e132a7f..59ece4fa 100644
--- a/application/PluginManager.php
+++ b/application/PluginManager.php
@@ -25,6 +25,11 @@ class PluginManager
25 protected $conf; 25 protected $conf;
26 26
27 /** 27 /**
28 * @var array List of plugin errors.
29 */
30 protected $errors;
31
32 /**
28 * Plugins subdirectory. 33 * Plugins subdirectory.
29 * @var string $PLUGINS_PATH 34 * @var string $PLUGINS_PATH
30 */ 35 */
@@ -44,6 +49,7 @@ class PluginManager
44 public function __construct(&$conf) 49 public function __construct(&$conf)
45 { 50 {
46 $this->conf = $conf; 51 $this->conf = $conf;
52 $this->errors = array();
47 } 53 }
48 54
49 /** 55 /**
@@ -106,6 +112,7 @@ class PluginManager
106 112
107 /** 113 /**
108 * Load a single plugin from its files. 114 * Load a single plugin from its files.
115 * Call the init function if it exists, and collect errors.
109 * Add them in $loadedPlugins if successful. 116 * Add them in $loadedPlugins if successful.
110 * 117 *
111 * @param string $dir plugin's directory. 118 * @param string $dir plugin's directory.
@@ -128,6 +135,14 @@ class PluginManager
128 $conf = $this->conf; 135 $conf = $this->conf;
129 include_once $pluginFilePath; 136 include_once $pluginFilePath;
130 137
138 $initFunction = $pluginName . '_init';
139 if (function_exists($initFunction)) {
140 $errors = call_user_func($initFunction, $this->conf);
141 if (!empty($errors)) {
142 $this->errors = array_merge($this->errors, $errors);
143 }
144 }
145
131 $this->loadedPlugins[] = $pluginName; 146 $this->loadedPlugins[] = $pluginName;
132 } 147 }
133 148
@@ -195,6 +210,16 @@ class PluginManager
195 210
196 return $metaData; 211 return $metaData;
197 } 212 }
213
214 /**
215 * Return the list of encountered errors.
216 *
217 * @return array List of errors (empty array if none exists).
218 */
219 public function getErrors()
220 {
221 return $this->errors;
222 }
198} 223}
199 224
200/** 225/**
diff --git a/index.php b/index.php
index 5bc13d49..f7e73bde 100644
--- a/index.php
+++ b/index.php
@@ -778,6 +778,7 @@ function renderPage($conf, $pluginManager)
778 $PAGE = new PageBuilder($conf); 778 $PAGE = new PageBuilder($conf);
779 $PAGE->assign('linkcount', count($LINKSDB)); 779 $PAGE->assign('linkcount', count($LINKSDB));
780 $PAGE->assign('privateLinkcount', count_private($LINKSDB)); 780 $PAGE->assign('privateLinkcount', count_private($LINKSDB));
781 $PAGE->assign('plugin_errors', $pluginManager->getErrors());
781 782
782 // Determine which page will be rendered. 783 // Determine which page will be rendered.
783 $query = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : ''; 784 $query = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : '';
diff --git a/plugins/demo_plugin/demo_plugin.php b/plugins/demo_plugin/demo_plugin.php
index 18834e53..7335c9d4 100644
--- a/plugins/demo_plugin/demo_plugin.php
+++ b/plugins/demo_plugin/demo_plugin.php
@@ -15,6 +15,23 @@
15 */ 15 */
16 16
17/** 17/**
18 * Initialization function.
19 * It will be called when the plugin is loaded.
20 * This function can be used to return a list of initialization errors.
21 *
22 * @param $conf ConfigManager instance.
23 *
24 * @return array List of errors (optional).
25 */
26function demo_plugin_init($conf)
27{
28 $conf->get('toto', 'nope');
29
30 $errors[] = 'This a demo init error.';
31 return $errors;
32}
33
34/**
18 * Hook render_header. 35 * Hook render_header.
19 * Executed on every page redering. 36 * Executed on every page redering.
20 * 37 *
diff --git a/plugins/readityourself/readityourself.php b/plugins/readityourself/readityourself.php
index 4bfcf501..961c5bda 100644
--- a/plugins/readityourself/readityourself.php
+++ b/plugins/readityourself/readityourself.php
@@ -8,10 +8,21 @@
8// it seems kinda dead. 8// it seems kinda dead.
9// Not tested. 9// Not tested.
10 10
11$riyUrl = $conf->get('plugins.READITYOUSELF_URL'); 11/**
12if (empty($riyUrl)) { 12 * Init function, return an error if the server is not set.
13 $GLOBALS['plugin_errors'][] = 'Readityourself plugin error: '. 13 *
14 'Please define the "READITYOUSELF_URL" setting in the plugin administration page.'; 14 * @param $conf ConfigManager instance.
15 *
16 * @return array Eventual error.
17 */
18function readityourself_init($conf)
19{
20 $riyUrl = $conf->get('plugins.READITYOUSELF_URL');
21 if (empty($riyUrl)) {
22 $error = 'Readityourself plugin error: '.
23 'Please define the "READITYOUSELF_URL" setting in the plugin administration page.';
24 return array($error);
25 }
15} 26}
16 27
17/** 28/**
diff --git a/plugins/wallabag/wallabag.php b/plugins/wallabag/wallabag.php
index ec09c8a1..641e4cc2 100644
--- a/plugins/wallabag/wallabag.php
+++ b/plugins/wallabag/wallabag.php
@@ -6,10 +6,21 @@
6 6
7require_once 'WallabagInstance.php'; 7require_once 'WallabagInstance.php';
8 8
9$wallabagUrl = $conf->get('plugins.WALLABAG_URL'); 9/**
10if (empty($wallabagUrl)) { 10 * Init function, return an error if the server is not set.
11 $GLOBALS['plugin_errors'][] = 'Wallabag plugin error: '. 11 *
12 'Please define the "WALLABAG_URL" setting in the plugin administration page.'; 12 * @param $conf ConfigManager instance.
13 *
14 * @return array Eventual error.
15 */
16function wallabag_init($conf)
17{
18 $wallabagUrl = $conf->get('plugins.WALLABAG_URL');
19 if (empty($wallabagUrl)) {
20 $error = 'Wallabag plugin error: '.
21 'Please define the "WALLABAG_URL" setting in the plugin administration page.';
22 return array($error);
23 }
13} 24}
14 25
15/** 26/**
diff --git a/tests/plugins/PluginReadityourselfTest.php b/tests/plugins/PluginReadityourselfTest.php
index d73e666a..532db146 100644
--- a/tests/plugins/PluginReadityourselfTest.php
+++ b/tests/plugins/PluginReadityourselfTest.php
@@ -4,8 +4,6 @@
4 * PluginReadityourselfTest.php.php 4 * PluginReadityourselfTest.php.php
5 */ 5 */
6 6
7// FIXME! add an init method.
8$conf = new ConfigManager('');
9require_once 'plugins/readityourself/readityourself.php'; 7require_once 'plugins/readityourself/readityourself.php';
10 8
11/** 9/**
@@ -23,6 +21,27 @@ class PluginReadityourselfTest extends PHPUnit_Framework_TestCase
23 } 21 }
24 22
25 /** 23 /**
24 * Test Readityourself init without errors.
25 */
26 function testReadityourselfInitNoError()
27 {
28 $conf = new ConfigManager('');
29 $conf->set('plugins.READITYOUSELF_URL', 'value');
30 $errors = readityourself_init($conf);
31 $this->assertEmpty($errors);
32 }
33
34 /**
35 * Test Readityourself init with errors.
36 */
37 function testReadityourselfInitError()
38 {
39 $conf = new ConfigManager('');
40 $errors = readityourself_init($conf);
41 $this->assertNotEmpty($errors);
42 }
43
44 /**
26 * Test render_linklist hook. 45 * Test render_linklist hook.
27 */ 46 */
28 function testReadityourselfLinklist() 47 function testReadityourselfLinklist()
diff --git a/tests/plugins/PluginWallabagTest.php b/tests/plugins/PluginWallabagTest.php
index 302ee296..2c268cbd 100644
--- a/tests/plugins/PluginWallabagTest.php
+++ b/tests/plugins/PluginWallabagTest.php
@@ -4,8 +4,6 @@
4 * PluginWallabagTest.php.php 4 * PluginWallabagTest.php.php
5 */ 5 */
6 6
7// FIXME! add an init method.
8$conf = new ConfigManager('');
9require_once 'plugins/wallabag/wallabag.php'; 7require_once 'plugins/wallabag/wallabag.php';
10 8
11/** 9/**
@@ -23,6 +21,27 @@ class PluginWallabagTest extends PHPUnit_Framework_TestCase
23 } 21 }
24 22
25 /** 23 /**
24 * Test wallabag init without errors.
25 */
26 function testWallabagInitNoError()
27 {
28 $conf = new ConfigManager('');
29 $conf->set('plugins.WALLABAG_URL', 'value');
30 $errors = wallabag_init($conf);
31 $this->assertEmpty($errors);
32 }
33
34 /**
35 * Test wallabag init with errors.
36 */
37 function testWallabagInitError()
38 {
39 $conf = new ConfigManager('');
40 $errors = wallabag_init($conf);
41 $this->assertNotEmpty($errors);
42 }
43
44 /**
26 * Test render_linklist hook. 45 * Test render_linklist hook.
27 */ 46 */
28 function testWallabagLinklist() 47 function testWallabagLinklist()
diff --git a/tpl/daily.html b/tpl/daily.html
index dde1f376..b82ad483 100644
--- a/tpl/daily.html
+++ b/tpl/daily.html
@@ -42,10 +42,10 @@
42 <div class="clear"></div> 42 <div class="clear"></div>
43 43
44 {if="$linksToDisplay"} 44 {if="$linksToDisplay"}
45 {loop="cols"} 45 {loop="$cols"}
46 {if="isset($value[0])"} 46 {if="isset($value[0])"}
47 <div id="daily_col{$counter+1}"> 47 <div id="daily_col{$counter+1}">
48 {loop="value"} 48 {loop="$value"}
49 {$link=$value} 49 {$link=$value}
50 <div class="dailyEntry"> 50 <div class="dailyEntry">
51 <div class="dailyEntryPermalink"> 51 <div class="dailyEntryPermalink">
@@ -60,7 +60,7 @@
60 {/if} 60 {/if}
61 {if="$link.tags"} 61 {if="$link.tags"}
62 <div class="dailyEntryTags"> 62 <div class="dailyEntryTags">
63 {loop="link.taglist"} 63 {loop="$link.taglist"}
64 {$value} - 64 {$value} -
65 {/loop} 65 {/loop}
66 </div> 66 </div>
diff --git a/tpl/dailyrss.html b/tpl/dailyrss.html
index b14a3859..ddbd6c5e 100644
--- a/tpl/dailyrss.html
+++ b/tpl/dailyrss.html
@@ -4,7 +4,7 @@
4 <link>{$absurl}</link> 4 <link>{$absurl}</link>
5 <pubDate>{$rssdate}</pubDate> 5 <pubDate>{$rssdate}</pubDate>
6 <description><![CDATA[ 6 <description><![CDATA[
7 {loop="links"} 7 {loop="$links"}
8 <h3><a href="{$value.url}">{$value.title}</a></h3> 8 <h3><a href="{$value.url}">{$value.title}</a></h3>
9 <small>{if="!$hide_timestamps"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br> 9 <small>{if="!$hide_timestamps"}{function="strftime('%c', $value.timestamp)"} - {/if}{if="$value.tags"}{$value.tags}{/if}<br>
10 {$value.url}</small><br> 10 {$value.url}</small><br>
diff --git a/tpl/export.bookmarks.html b/tpl/export.bookmarks.html
index da733257..127a5c20 100644
--- a/tpl/export.bookmarks.html
+++ b/tpl/export.bookmarks.html
@@ -5,6 +5,6 @@
5 Do Not Edit! -->{ignore}The RainTPL loop is formatted to avoid generating extra newlines{/ignore} 5 Do Not Edit! -->{ignore}The RainTPL loop is formatted to avoid generating extra newlines{/ignore}
6<TITLE>{$pagetitle}</TITLE> 6<TITLE>{$pagetitle}</TITLE>
7<H1>Shaarli export of {$selection} bookmarks on {$date}</H1> 7<H1>Shaarli export of {$selection} bookmarks on {$date}</H1>
8<DL><p>{loop="links"} 8<DL><p>{loop="$links"}
9<DT><A HREF="{$value.url}" ADD_DATE="{$value.timestamp}" PRIVATE="{$value.private}" TAGS="{$value.taglist}">{$value.title}</A>{if="$value.description"}{$eol}<DD>{$value.description}{/if}{/loop} 9<DT><A HREF="{$value.url}" ADD_DATE="{$value.timestamp}" PRIVATE="{$value.private}" TAGS="{$value.taglist}">{$value.title}</A>{if="$value.description"}{$eol}<DD>{$value.description}{/if}{/loop}
10</DL><p> 10</DL><p>
diff --git a/tpl/feed.atom.html b/tpl/feed.atom.html
index 1932f507..40fd421a 100644
--- a/tpl/feed.atom.html
+++ b/tpl/feed.atom.html
@@ -17,7 +17,7 @@
17 </author> 17 </author>
18 <id>{$index_url}</id> 18 <id>{$index_url}</id>
19 <generator>Shaarli</generator> 19 <generator>Shaarli</generator>
20 {loop="links"} 20 {loop="$links"}
21 <entry> 21 <entry>
22 <title>{$value.title}</title> 22 <title>{$value.title}</title>
23 {if="$usepermalinks"} 23 {if="$usepermalinks"}
diff --git a/tpl/feed.rss.html b/tpl/feed.rss.html
index 4bfe4196..e18dbf9b 100644
--- a/tpl/feed.rss.html
+++ b/tpl/feed.rss.html
@@ -12,7 +12,7 @@
12 <!-- PubSubHubbub Discovery --> 12 <!-- PubSubHubbub Discovery -->
13 <atom:link rel="hub" href="{$pubsubhub_url}" /> 13 <atom:link rel="hub" href="{$pubsubhub_url}" />
14 {/if} 14 {/if}
15 {loop="links"} 15 {loop="$links"}
16 <item> 16 <item>
17 <title>{$value.title}</title> 17 <title>{$value.title}</title>
18 <guid isPermaLink="{if="$usepermalinks"}true{else}false{/if}">{$value.guid}</guid> 18 <guid isPermaLink="{if="$usepermalinks"}true{else}false{/if}">{$value.guid}</guid>
diff --git a/tpl/linklist.html b/tpl/linklist.html
index 9979f12a..ddfd729a 100644
--- a/tpl/linklist.html
+++ b/tpl/linklist.html
@@ -63,7 +63,7 @@
63 </div> 63 </div>
64 {/if} 64 {/if}
65 <ul> 65 <ul>
66 {loop="links"} 66 {loop="$links"}
67 <li{if="$value.class"} class="{$value.class}"{/if}> 67 <li{if="$value.class"} class="{$value.class}"{/if}>
68 <a id="{$value.shorturl}"></a> 68 <a id="{$value.shorturl}"></a>
69 <div class="thumbnail">{$value.url|thumbnail}</div> 69 <div class="thumbnail">{$value.url|thumbnail}</div>
@@ -110,7 +110,7 @@
110 <a href="{$value.real_url}"><span class="linkurl" title="Short link">{$value.url}</span></a><br> 110 <a href="{$value.real_url}"><span class="linkurl" title="Short link">{$value.url}</span></a><br>
111 {if="$value.tags"} 111 {if="$value.tags"}
112 <div class="linktaglist"> 112 <div class="linktaglist">
113 {loop="value.taglist"}<span class="linktag" title="Add tag"><a href="?addtag={$value|urlencode}">{$value}</a></span> {/loop} 113 {loop="$value.taglist"}<span class="linktag" title="Add tag"><a href="?addtag={$value|urlencode}">{$value}</a></span> {/loop}
114 </div> 114 </div>
115 {/if} 115 {/if}
116 116
diff --git a/tpl/page.header.html b/tpl/page.header.html
index 0012c689..eac2ed4a 100644
--- a/tpl/page.header.html
+++ b/tpl/page.header.html
@@ -43,7 +43,7 @@
43 43
44{if="!empty($plugin_errors) && isLoggedIn()"} 44{if="!empty($plugin_errors) && isLoggedIn()"}
45 <ul class="errors"> 45 <ul class="errors">
46 {loop="plugin_errors"} 46 {loop="$plugin_errors"}
47 <li>{$value}</li> 47 <li>{$value}</li>
48 {/loop} 48 {/loop}
49 </ul> 49 </ul>
diff --git a/tpl/picwall.html b/tpl/picwall.html
index 230c948b..4e227e37 100644
--- a/tpl/picwall.html
+++ b/tpl/picwall.html
@@ -14,7 +14,7 @@
14 14
15<div class="center"> 15<div class="center">
16 <div id="picwall_container"> 16 <div id="picwall_container">
17 {loop="linksToDisplay"} 17 {loop="$linksToDisplay"}
18 <div class="picwall_pictureframe"> 18 <div class="picwall_pictureframe">
19 {$value.thumbnail}<a href="{$value.real_url}"><span class="info">{$value.title}</span></a> 19 {$value.thumbnail}<a href="{$value.real_url}"><span class="info">{$value.title}</span></a>
20 {loop="$value.picwall_plugin"} 20 {loop="$value.picwall_plugin"}
diff --git a/tpl/tagcloud.html b/tpl/tagcloud.html
index e449f293..05e45273 100644
--- a/tpl/tagcloud.html
+++ b/tpl/tagcloud.html
@@ -11,7 +11,7 @@
11 </div> 11 </div>
12 12
13 <div id="cloudtag"> 13 <div id="cloudtag">
14 {loop="tags"} 14 {loop="$tags"}
15 <span class="count">{$value.count}</span><a 15 <span class="count">{$value.count}</span><a
16 href="?searchtags={$key|urlencode}" style="font-size:{$value.size}em;">{$key}</a> 16 href="?searchtags={$key|urlencode}" style="font-size:{$value.size}em;">{$key}</a>
17 {loop="$value.tag_plugin"} 17 {loop="$value.tag_plugin"}