Compare commits

...

307 Commits

Author SHA1 Message Date
5c2d5b5ad2 Adding README.md. 2015-10-03 12:53:03 +02:00
4b5059bfc4 Batch tagging (first pass but working).
Search will now look in bookmarks addresses too.
Some bugfixes.
2015-09-20 05:49:33 +02:00
e567e30ce0 Separate Netscape bookmark parser and add a license header. 2015-09-18 20:19:37 +02:00
0600f02a13 Shoulder surfing protection with new default option. Enabled only
for logged users as we use logged user's tags to decide what
should be hidden. Tags linked to the tag defined in the
configuration, associated bookmarks, relevant links and
"last searches" block will be hidden. Hidden state is active
unless disabled by clicking on the top right button :
require user's password. This setting is remembered by
a session cookie.
2015-09-18 19:53:21 +02:00
2b4044a26a Block everything if global private mode enabled and user not logged on. 2015-09-15 02:35:06 +02:00
02185ad7e4 Merge branch 'yohan' into HEAD
Conflicts:
	www/bookmarks.php
	www/importNetscape.php

Successful merging.
2015-09-13 04:52:16 +02:00
7699c685e6 Better import for XML bookmark file.
Support for adding multiple bookmarks at once with my modified Firefox's Scuttle plugin.
2015-09-13 03:33:39 +02:00
Christian Weiske
200aa3c793 link another theme 2015-07-26 08:02:35 +02:00
Christian Weiske
11e56e5861 Integrate Firefox Social API for bookmarking 2015-01-21 22:05:12 +01:00
Christian Weiske
f6902bc09d link pear manual ldap options 2014-07-20 21:50:42 +02:00
Christian Weiske
6b3f1d4bb5 Add support for phancap website thumbnailer.
Drop support for artviper, since their service is gone.
2014-04-23 23:12:55 +02:00
Christian Weiske
af2a061ecd mention scuttle for android 2014-03-31 11:13:15 +02:00
Christian Weiske
e37b58a15a mention scuttle for android 2014-03-31 11:11:50 +02:00
Christian Weiske
f095a0bd71 add scuttleoid to docs/tools 2014-03-31 11:08:03 +02:00
David Glenck
0a5eed2dd3 add option to get last modified date instead of creation date 2014-03-26 22:15:09 +01:00
David Glenck
49f1259c42 add status attribute to post in all relevant api functions 2014-01-16 21:07:17 +01:00
Christian Weiske
c57960623b link flat theme by Roman Lehnhof 2013-10-29 08:34:22 +01:00
Christian Weiske
91cc4a26fb fix typo 2013-08-20 21:16:22 +02:00
Christian Weiske
e6494f9767 Fix bug #161: URLs broken on 1&1 server 2013-08-20 20:58:28 +02:00
Christian Weiske
f309a61b71 Fix #158: Correct documentation on the PostgreSQL tables file name, add example 2013-07-02 14:59:38 +02:00
Christian Weiske
f8066ea76a set max width of docs page 2013-03-22 08:38:25 +01:00
Christian Weiske
19202ab64c add tools section in docs 2013-03-22 08:37:17 +01:00
Christian Weiske
25ae541840 fix timing bug in tests by using title sort order instead of date sort, fix bug when no user was in db 2013-03-21 18:23:34 +01:00
Christian Weiske
69596125d7 Fix E_STRICT error: we explicitely have to cast resources to (int) 2013-03-21 18:09:37 +01:00
Christian Weiske
dfaf1d026a Fix two broken tests 2013-03-21 17:57:48 +01:00
Christian Weiske
5c8833d5f5 CS 2013-03-21 17:57:12 +01:00
Ricardo Soares de Lima
1cc149fbd6 document unit test dependencies 2013-03-21 06:51:46 +01:00
Christian Weiske
26352761d3 The hasTag was always returning false, which probably is a bug. Fixed it and added a test to catch it. Thanks for Ricardo Soares de Lima for the first patch version 2013-03-21 06:49:37 +01:00
Christian Weiske
20e3b5ebd7 fix some CS, remove unneeded include - file is included in header.php 2013-03-21 06:44:11 +01:00
Ricardo Soares de Lima
2f865db513 The method attachTags was raising a Notice error, fix it and adds a test for this situation. 2013-03-21 06:42:13 +01:00
Christian Weiske
3e2d817fc7 fix tag::normalize test 2013-03-21 06:40:17 +01:00
Ricardo Soares de Lima
72269aa1d6 Using a foreach loop avoids Notice warnings when the array doesn't have sequential indexes, ex: 0, 1, 3... 2013-03-21 06:39:23 +01:00
Christian Weiske
c4ba9ef2d2 add (broken) tests for Services_Tag::normalize and Bookmark2Tag::attachTags with some empty tags 2013-03-21 06:39:11 +01:00
Christian Weiske
f8b5ad1cad Merge branch '0.98' 2013-03-21 06:31:16 +01:00
Christian Weiske
85e2ccd942 remove php4-style object reference passing #2 2013-03-20 20:00:25 +01:00
Christian Weiske
54b5726157 prepare release of 0.98.5 2013-03-20 18:06:15 +01:00
Christian Weiske
409b7e681d Fix bug #110: Talk about searching for slashes 2013-03-18 23:06:53 +01:00
Christian Weiske
326bca9731 get rid of deprecated eregi function and fix replacement 2013-03-18 23:06:49 +01:00
Christian Weiske
943d149e31 Fix bug #109: preserve privacy setting from Delicious export files.
Thanks for David Glenck for the initial version of this patch.
2013-03-18 23:06:41 +01:00
José María Mateos
a67a7f761d Changed commit comment information 2013-03-18 23:06:36 +01:00
Christian Weiske
fc4c79df8a Fix bug #110: Talk about searching for slashes 2013-03-18 23:04:49 +01:00
Christian Weiske
530e0c0541 get rid of deprecated eregi function and fix replacement 2013-03-18 22:30:12 +01:00
Christian Weiske
0a040e2134 Fix bug #109: preserve privacy setting from Delicious export files.
Thanks for David Glenck for the initial version of this patch.
2013-03-18 22:18:13 +01:00
Christian Weiske
d0ed9adec8 remove php4-style object reference passing 2013-03-17 22:22:16 +01:00
José María Mateos
defe7c0035 Changed commit comment information 2013-03-17 21:45:59 +01:00
James
6607747b37 Require that user type in two passwords and check they match when registering. 2012-10-28 10:29:40 +01:00
Christian Weiske
cb4b0469ca skip tests if unittest url is not set instead of failing 2012-01-25 23:20:51 +01:00
Christian Weiske
e715e41cd9 travis-ci: install another pear dep 2012-01-25 23:14:07 +01:00
Christian Weiske
36c0585fce another dependency 2012-01-25 23:13:53 +01:00
Christian Weiske
5aa4f0ae1e travis-ci: install pear itself for the exception file 2012-01-25 23:07:05 +01:00
Christian Weiske
2b345be6de travis-ci: install pear packages before building 2012-01-25 23:00:11 +01:00
Christian Weiske
6dc5dc9f4a add http_request2 to the list of required packages (for the unit tests) 2012-01-25 22:59:43 +01:00
Christian Weiske
a0ab456798 travis-ci: setup database and config file before running tests 2012-01-25 22:51:35 +01:00
Christian Weiske
7b50608138 set proper exit status when config file does not exist 2012-01-25 22:51:11 +01:00
Christian Weiske
a484c99273 travis configuration file 2012-01-25 22:22:10 +01:00
Christian Weiske
95a8ca8a99 Merge branch '0.98' 2012-01-21 13:44:58 +01:00
Christian Weiske
795de13414 prepare release of 0.98.4 2012-01-21 13:02:42 +01:00
Christian Weiske
814f99d471 Fix bug #3111254: getIdFromUser() always returns an integer now (part 2) 2012-01-21 12:38:17 +01:00
Christian Weiske
df00540d4c fix artviper title 2012-01-21 12:23:05 +01:00
Christian Weiske
01b91b22f3 subtitle was escaped too often in http://bm.bogo/bookmarks/userb/userb-tag 2012-01-21 12:23:05 +01:00
Christian Weiske
1cf83b6732 fix artviper title 2012-01-21 12:22:30 +01:00
Christian Weiske
335d6563b7 subtitle was escaped too often in http://bm.bogo/bookmarks/userb/userb-tag 2012-01-21 12:10:33 +01:00
Christian Weiske
6ff4370a20 Merge branch '0.98' 2012-01-20 22:10:30 +01:00
Christian Weiske
d6d44c6cfa Fix bug #3396727: Title of http://lesscss.org/ not loaded 2012-01-20 22:04:10 +01:00
Christian Weiske
a9df65da08 Fix bug #3468293: Delicious import does not preserve private links 2012-01-20 21:27:04 +01:00
Christian Weiske
22eaa812bf Fix bug #3413459: Thumbnails not in one line, thanks http://quirksmode.org/css/clearing.html for the CSS hint 2012-01-20 21:12:46 +01:00
Christian Weiske
8253c0df48 fix artviper thumbnail registration api url 2012-01-20 20:58:19 +01:00
Christian Weiske
645f21b1a9 Fix bug: Invalid HTML when website thumbnails are activated 2012-01-20 15:20:16 +01:00
Christian Weiske
d8ee343473 Fix bug #3384416: Use URL with protocol in bookmarklet 2012-01-20 15:09:39 +01:00
Christian Weiske
f8b7d0243c Fully fix bug #3463481: use proper self URL, different page url 2012-01-20 15:03:29 +01:00
Christian Weiske
87f495d31b Part of bug #3463481: add guid to items 2012-01-20 14:58:16 +01:00
Christian Weiske
cf80b6c5b8 Part of bug #3463481: Add atom self url to rss feed 2012-01-20 14:54:54 +01:00
Christian Weiske
728d642563 Part of bug #3463481: Add HTTP protocol to self URL in feed 2012-01-20 14:52:36 +01:00
Christian Weiske
79d1e2de10 Part of #3476011: mention Frederics name 2012-01-20 14:28:50 +01:00
Christian Weiske
39b44229ad Implement patch #3476011: PostgreSQL tables can not be initialized 2012-01-20 14:24:33 +01:00
Christian Weiske
1226015681 test file for #3469257: file with long description 2012-01-20 14:15:57 +01:00
Christian Weiske
a0d2750fb2 changelog entry for Fix bug #3436624: Wrong URL for Delicious API when importing 2012-01-20 14:00:30 +01:00
Christian Weiske
ab9d41c898 Part of bug #3436624: compile all translations 2012-01-20 13:59:55 +01:00
Christian Weiske
b4a2f0b931 update all translation files from translation base file 2012-01-20 13:59:18 +01:00
Christian Weiske
515ef6eaa6 Part of bug #3436624: Fix delicious URL in template and translation base file 2012-01-20 13:58:46 +01:00
Christian Weiske
9335708325 mention missing bug number #3439729 in changelog 2012-01-20 13:47:57 +01:00
Christian Weiske
d16ca92351 Merge branch '0.98' 2011-11-02 06:42:54 +01:00
Christian Weiske
8d9e1665f7 sort changelog entries by bug number 2011-11-02 06:42:48 +01:00
Christian Weiske
a0f0b2caf7 Fix bug #3431742: open_basedir problems with /etc/ config files 2011-11-02 06:42:14 +01:00
Christian Weiske
37a7bd4d31 Merge branch '0.98' 2011-11-01 17:19:53 +01:00
Christian Weiske
c45ea5a3c6 Implement request #3403609: fr_CA translation update, compiled file 2011-11-01 17:19:43 +01:00
Christian Weiske
8242df8b68 Implement request #3403609: fr_CA translation update 2011-11-01 17:19:17 +01:00
Christian Weiske
caa9459438 fix script to update translation base file 2011-11-01 17:18:12 +01:00
Christian Weiske
a49bd7222c update translation base file 2011-11-01 17:17:58 +01:00
Christian Weiske
8f19cdad3d first part of #3403609: fr_CA translation update 2011-11-01 07:24:46 +01:00
Christian Weiske
0203feae1c Merge branch '0.98' 2011-11-01 06:49:45 +01:00
Christian Weiske
d97b4589ad Fix bug #3407728: Can't delete users from admin page 2011-11-01 06:49:40 +01:00
Christian Weiske
db60113312 Merge branch '0.98'
Conflicts:
	doc/ChangeLog
2011-11-01 06:42:00 +01:00
Christian Weiske
e81599e437 Fix bug #3399815: PHP error in opensearch API in 0.98.3 2011-11-01 06:41:25 +01:00
Christian Weiske
a1b909ceb5 implement request #3428721: talk about PEAR package installation 2011-10-31 17:59:47 +01:00
Christian Weiske
5d929ec8e0 Fix bug #3388219: Incorrect URL when cancelling tag2tag-actions 2011-09-05 18:51:36 +02:00
Christian Weiske
adf2655b23 Fix bug #3393951: Logo images missing on bookmark page 2011-09-05 18:51:32 +02:00
Christian Weiske
7a82f3ef2d revise bugfix of unescaped subtitle 2011-09-05 18:51:26 +02:00
Christian Weiske
000daf70ca Fix bug: Subtitle was not escaped 2011-09-05 18:51:22 +02:00
Christian Weiske
34600fe502 Fix bug: URLs were escaped too often in bookmark list 2011-09-05 18:50:49 +02:00
Christian Weiske
160ce01f7b prevent notice when sidebar blocks are not defined 2011-09-05 18:50:42 +02:00
Christian Weiske
cf4036104b fix sioc export 2011-09-05 18:50:25 +02:00
Christian Weiske
11f62ca038 Merge remote-tracking branch 'gh-echza/master' 2011-08-31 10:19:53 +02:00
Christian Weiske
9bfdcd3c2a Fix bug #3388219: Incorrect URL when cancelling tag2tag-actions 2011-08-19 19:16:45 +02:00
Christian Weiske
4eedf216dc Fix bug #3393951: Logo images missing on bookmark page 2011-08-19 19:01:19 +02:00
Christian Weiske
1b984c4e4e revise bugfix of unescaped subtitle 2011-08-18 16:18:28 +02:00
Christian Weiske
880b94498a Fix bug: Subtitle was not escaped 2011-08-17 18:24:26 +02:00
Christian Weiske
196db46097 Fix bug: URLs were escaped too often in bookmark list 2011-08-17 18:20:52 +02:00
Christian Weiske
a468938a5a prevent notice when sidebar blocks are not defined 2011-08-17 18:16:50 +02:00
Christian Weiske
ec5ad71342 fix sioc export 2011-08-16 20:09:41 +02:00
Christian Weiske
efe5988df3 Merge branch '0.98'
Conflicts:
	build.xml
2011-08-09 08:17:35 +02:00
Christian Weiske
057bc0b932 prepare 0.98.3 2011-08-09 08:12:02 +02:00
Christian Weiske
062fe09d43 update release howto 2011-08-08 08:12:20 +02:00
Christian Weiske
4c9560cf67 Merge branch '0.98' 2011-08-08 07:46:45 +02:00
Christian Weiske
6df5f60e44 add scripts to pear package 2011-08-08 07:41:16 +02:00
Christian Weiske
fe7c4d4090 fix xml 2011-08-08 07:31:47 +02:00
Christian Weiske
08435a517a prepare 0.98.2 2011-08-08 07:30:59 +02:00
Christian Weiske
2a22f9d0a5 Merge branch '0.98' 2011-08-07 17:04:33 +02:00
Christian Weiske
dd29ad13eb Fix bug #3382126: Linked tags does not work for tags with spaces 2011-08-07 16:53:17 +02:00
Christian Weiske
57d3cc84e5 Merge branch '0.98' 2011-08-06 11:08:34 +02:00
Christian Weiske
889ca453ec Fix delicious API help page link, update all translations 2011-08-06 11:05:45 +02:00
Christian Weiske
d2e437b4db Merge branch '0.98' 2011-08-06 10:38:44 +02:00
Christian Weiske
097ecf9c51 add TOC 2011-08-06 10:35:38 +02:00
Christian Weiske
2807d04083 Fix bug #3384416: Update documentation to explain HTTP/HTTPS root problem 2011-08-06 10:34:13 +02:00
Christian Weiske
5571ec0a4d script to fix unfiled bugs (for bug #3386178) 2011-08-05 19:48:46 +02:00
Christian Weiske
9c18fe1cc7 Fix bug #3386178: "system:unfiled" secret tag does not work 2011-08-05 06:47:37 +02:00
Christian Weiske
c1528d1c5b we can retrieve system tags now 2011-08-05 06:33:40 +02:00
Christian Weiske
587674b355 Fix bug #3385724 part 2: cancelling tag edit broken 2011-08-04 17:08:42 +02:00
Christian Weiske
6b24f99048 Fix bug #3385724: Rename tag ends with XML Parsing Error 2011-08-04 06:37:32 +02:00
Christian Weiske
5743a34a6c move filesets into project so we can re-use them later for the phar 2011-08-02 17:10:26 +02:00
Christian Weiske
008b65a1b2 Merge branch '0.98' 2011-08-01 22:34:11 +02:00
Christian Weiske
8c9b9a3334 prepare 0.98.1 2011-08-01 21:53:00 +02:00
Christian Weiske
8216ae476c Merge branch '0.98'
Conflicts:
	doc/ChangeLog
2011-08-01 19:58:39 +02:00
Christian Weiske
4775d7bf5a Fix bug #3376618: Broken tag completion for private bookmarks 2011-08-01 18:25:14 +02:00
Yalçın Can
2fe213fa49 another test 2011-07-27 14:42:15 +03:00
Yalçın Can
efd842174f Merge remote-tracking branch 'upstream/master' 2011-07-27 14:23:37 +03:00
Yalçın Can
8cd40b3d76 Progress save 80% 2011-07-27 14:20:04 +03:00
Yalçın Can
69ec4ee02d Turkish locale progress 70% 2011-07-26 16:36:35 +03:00
Yalçın Can
bcb863d68a Turkish locale added. 2011-07-26 00:54:36 +03:00
Christian Weiske
9a8d73db1f fix typo 2011-07-23 17:50:26 +02:00
Christian Weiske
81aa17b852 fix typo 2011-07-23 17:47:51 +02:00
Christian Weiske
3d78c99636 Merge branch '0.98' 2011-07-23 14:19:47 +02:00
Christian Weiske
320d673344 Fix bug #3160512: Make SemantiScuttle work with FastCGI 2011-07-23 14:19:09 +02:00
Christian Weiske
0396dee730 fix typo 2011-07-23 14:07:58 +02:00
Christian Weiske
41fed87698 Merge branch '0.98' 2011-07-23 08:34:12 +02:00
Christian Weiske
ba6465e310 Fix bug #3375428: Forgot to remove some old dojo files 2011-07-23 08:33:52 +02:00
Christian Weiske
20530bd5c5 doc header, currently unused 2011-07-23 08:29:44 +02:00
Christian Weiske
dc69d1ad13 Fix bug #3375635: XML parsing problem in top.inc.php (happened only when short_open_tags were activated) 2011-07-23 08:27:17 +02:00
Christian Weiske
7cb53eb4e5 task to deploy the demo to the website 2011-07-21 23:22:29 +02:00
Christian Weiske
d970754ff1 doc deployment task 2011-07-21 23:15:18 +02:00
Christian Weiske
6f93d0b020 task to copy docs to website dir 2011-07-21 23:10:53 +02:00
Christian Weiske
71b486e533 set release date 2011-07-21 22:56:52 +02:00
Christian Weiske
6a25b80037 tell to register user 2011-07-21 22:36:17 +02:00
Christian Weiske
62afbfc184 include sql files in pear package 2011-07-21 22:33:27 +02:00
Christian Weiske
83714e3889 make release docs more readable, update version to 0.98, update pear package changelog, fix pear package inclusion files 2011-07-21 22:28:42 +02:00
Christian Weiske
37db60735a link config docs 2011-07-21 22:08:46 +02:00
Christian Weiske
82ee59779e support global and per-host configuration files 2011-07-21 21:32:48 +02:00
Christian Weiske
846e3a38cf allinone file, which we do not use for now 2011-07-05 19:55:01 +02:00
Christian Weiske
651d5df1f9 add stylesheet to docs 2011-07-05 06:46:51 +02:00
Christian Weiske
ae86aa2b56 doc directories are created automatically 2011-07-04 18:25:15 +02:00
Christian Weiske
25e05c573b add TOC to some pages 2011-07-04 18:14:58 +02:00
Christian Weiske
9994e92a3c link changelog 2011-07-04 18:08:38 +02:00
Christian Weiske
257ea4ff6e make rST rendering work fully 2011-07-04 18:05:33 +02:00
Christian Weiske
38c87907f1 add merged features to changelog, mention brett and mark 2011-06-30 19:17:47 +02:00
Christian Weiske
90b6e65b11 escape feed links properly and fix some bugs in the feed link parameters 2011-06-27 23:03:31 +02:00
Christian Weiske
3d11286cbc privatekey -> privateKey everywhere 2011-06-27 22:31:24 +02:00
Christian Weiske
763d394436 test global feed with private bookmarks 2011-06-27 22:27:17 +02:00
Christian Weiske
673fdc8758 rename methods to keep them clear 2011-06-27 21:55:07 +02:00
Christian Weiske
57a5f6864d add own assertion to make it easier to switch to atom 2011-06-27 20:04:03 +02:00
Christian Weiske
588d63a2c7 better method names 2011-06-27 19:59:06 +02:00
Christian Weiske
f2ac531f26 test that using the private key does not leave unwanted login cookies 2011-06-27 19:52:02 +02:00
Christian Weiske
6ec3b102aa make the private tests really test something 2011-06-27 19:39:38 +02:00
Christian Weiske
d2aecd8a76 move private key generation to adduser 2011-06-27 19:16:33 +02:00
Christian Weiske
9eab02af5f fix typo 2011-06-27 19:09:19 +02:00
Mark Pemberton
f9dbdc6645 Fixed issue with storing RSS login in session 2011-06-15 08:47:50 -04:00
Mark Pemberton
045d139d64 Added RSS Feed tests 2011-06-15 00:58:29 -04:00
Mark Pemberton
74bab13f05 Fixed auth issue with private RSS feed 2011-06-14 22:39:47 -04:00
Christian Weiske
dd34ad3407 fix E_NOTICE 2011-06-09 09:13:42 +02:00
Christian Weiske
5deeecc408 make bookmarks.php tests easier to read and use the TestBaseApi to get the urls 2011-06-08 07:22:13 +02:00
Christian Weiske
5009535d34 docblocks for url and urlPart variables 2011-06-08 07:21:33 +02:00
Christian Weiske
39dfe3f1ac CS 2011-06-08 07:00:24 +02:00
Christian Weiske
44a65eddac fix tests for people that use a separate test database 2011-06-08 07:00:17 +02:00
Mark Pemberton
1dc33f4416 Refined rss feed description 2011-06-07 22:42:21 -04:00
Mark Pemberton
cd2756a4d0 Refined bookmarksTest.php and added indexTest.php 2011-06-07 22:13:50 -04:00
Mark Pemberton
032ea9ec25 Fixed missing change that was in master 2011-06-07 21:42:11 -04:00
Mark Pemberton
b628e63e01 Merge branch 'master' into privatekey2
Conflicts:

	data/templates/default/bookmarks.tpl.php
2011-06-04 00:38:07 -04:00
Mark Pemberton
84e603aa91 Reverted changes of date() to gdate(), added tests to confirm existence of private RSS feed, and finalized changes to the user session usage with rss.php 2011-06-04 00:29:04 -04:00
Christian Weiske
4c8a53c5bc update changelog 2011-05-27 07:01:22 +02:00
Christian Weiske
2419885577 make upgrade file fully rST-compatible and move SQL commands out into single schema files 2011-05-27 06:59:33 +02:00
Christian Weiske
5111249347 we fixed more bugs while coding 2011-05-27 06:44:29 +02:00
Christian Weiske
628260297a fix name 2011-05-26 22:02:40 +02:00
Christian Weiske
fa64fb2a49 fix file name 2011-05-26 22:01:45 +02:00
Christian Weiske
d2e4df06c3 move readme.txt to rst 2011-05-26 22:00:41 +02:00
Christian Weiske
4e04131d2f make readme proper rST 2011-05-26 22:00:08 +02:00
Christian Weiske
17dcda30e7 more documentation rST fixes 2011-05-26 21:44:29 +02:00
Christian Weiske
b55b3a6c67 hint about docutils 2011-05-26 21:39:06 +02:00
Christian Weiske
df4c6af956 rename auth docs 2011-05-26 21:37:20 +02:00
Christian Weiske
2ddbf1703f fix authentication docs and integrate them in index.rst 2011-05-26 21:37:06 +02:00
Christian Weiske
324225f10b make translation docs valid rST 2011-05-26 21:22:43 +02:00
Christian Weiske
47005bb1c6 make INSTALL.txt file valid rST 2011-05-26 21:21:37 +02:00
Christian Weiske
2dc582cfbb make INSTALL.txt file valid rST 2011-05-26 21:19:47 +02:00
Christian Weiske
bb4b6574bc ignore license file when building docs 2011-05-26 21:19:26 +02:00
Christian Weiske
a396759f22 build doc files only if source files are newer than rendered files 2011-05-26 21:05:59 +02:00
Christian Weiske
b56d604e7e let the doc build fail if rst2html finds errors 2011-05-26 18:19:35 +02:00
Christian Weiske
189449c0d7 doc building works now 2011-05-26 18:17:26 +02:00
Christian Weiske
7820014667 task to generate docs from rst files. does not fully work yet 2011-05-26 18:03:46 +02:00
Christian Weiske
18989f97f1 documentation index 2011-05-26 08:20:04 +02:00
Christian Weiske
b279ded757 move themes to 0.98 2011-05-25 19:51:16 +02:00
Christian Weiske
772442eeaf Merge branch 'themes' 2011-05-25 19:44:06 +02:00
Christian Weiske
5ba53394fc implement request #1989987: theme support. merge themes branch with --squash 2011-05-25 19:43:36 +02:00
Christian Weiske
3e7808a8fd mention skins 2011-05-25 19:24:21 +02:00
Christian Weiske
11341abac9 name proper feature request for theming 2011-05-25 19:24:03 +02:00
Christian Weiske
42632fff23 show how to modify a template 2011-05-25 17:15:41 +02:00
Christian Weiske
49fa996cd7 more information on custom theme creation 2011-05-25 17:12:59 +02:00
Christian Weiske
a96c038b09 update changelog 2011-05-25 17:07:18 +02:00
Christian Weiske
eb3ae40f35 sample theme for demonstration purposes 2011-05-25 17:00:30 +02:00
Christian Weiske
060e731865 Merge branch 'master' into themes 2011-05-25 06:58:01 +02:00
Christian Weiske
63b0a4b8cb make tag and common tag description pages valid html 2011-05-25 06:57:55 +02:00
Christian Weiske
1c180e28ff use theme->resource() method to get paths to themable filse 2011-05-25 06:55:16 +02:00
Christian Weiske
e01c813101 introduce theme model and use it in jsscuttle. rest will follow 2011-05-24 18:21:54 +02:00
Christian Weiske
85d201b0ad Merge branch 'master' into themes 2011-05-24 06:54:47 +02:00
Christian Weiske
07656f6724 make changelog fully rST-parsable. that was easy! 2011-05-24 06:54:38 +02:00
Christian Weiske
2e58d5cfa9 Merge branch 'master' into themes 2011-05-23 18:16:50 +02:00
Christian Weiske
74c72b5cab check if the charset parameter really exists 2011-05-23 18:16:41 +02:00
Christian Weiske
554a358539 updates theme documentation 2011-05-23 18:13:40 +02:00
Christian Weiske
3e3c070b31 move image and css files to theme folder 2011-05-23 18:10:51 +02:00
Christian Weiske
2d2e7f97e4 first themes docs 2011-05-23 07:35:36 +02:00
Christian Weiske
581eca06d6 make themes work 2011-05-23 06:56:46 +02:00
Christian Weiske
a11432db93 first try to implement theming support, which currently does not work at all 2011-05-23 06:53:31 +02:00
Mark Pemberton
342d1c3205 Altered tests to be more timezone friendly 2011-05-21 22:06:44 -04:00
Mark Pemberton
b105867e75 Merge branch 'master' into privatekey2 2011-05-21 21:38:25 -04:00
Mark Pemberton
e0149e24e2 Resolve some failed bookmark and tag tests 2011-05-21 14:36:29 -04:00
Christian Weiske
97bba97049 no need for that anymore 2011-05-20 17:11:45 +02:00
Christian Weiske
1bbc36f8a4 fix test 2011-05-20 17:08:39 +02:00
Christian Weiske
191f08683e all but one test work now with a different unittest database 2011-05-20 07:02:52 +02:00
Christian Weiske
675aa6291a automatically append unittestmode parameter to url 2011-05-20 06:58:28 +02:00
Mark Pemberton
5203848b12 revert getBookmarks() back to original 2011-05-19 19:40:22 -04:00
Christian Weiske
b436b4273d ignore test configs 2011-05-19 07:39:42 +02:00
Christian Weiske
ef23f01eba begin supporting a different database for unit tests 2011-05-19 07:38:35 +02:00
Mark Pemberton
1c6ff8cea6 fixed merge issue 2011-05-17 00:27:48 -04:00
Mark Pemberton
920f7fc623 Updated PrivateKey to include Tag searches 2011-05-17 00:24:43 -04:00
Christian Weiske
2c3f6338e3 there is no onClick attribute, only onclick 2011-05-16 12:54:05 +02:00
Mark Pemberton
10214c43b5 Updated 'Generate New Key' button to use ajax if javascript enabled. 2011-05-16 00:35:31 -04:00
Mark Pemberton
16791766de Fixed SQL structure for PrivateKey 2011-05-14 23:08:46 -04:00
Mark Pemberton
6ed90e647a Fixed sql commands where resources were not freed 2011-05-14 21:46:35 -04:00
Christian Weiske
e118a7d97b update changelog with google custom search changes 2011-05-14 10:31:28 +02:00
Christian Weiske
8d29eaf349 CS 2011-05-14 10:30:43 +02:00
Christian Weiske
01f21995dd fix google custom search xml 2011-05-14 10:30:01 +02:00
Christian Weiske
81714ab878 make custom search more valid html 2011-05-14 10:26:38 +02:00
Christian Weiske
e616b19304 proper status code when gsearch is deactivated 2011-05-14 10:18:46 +02:00
Mark Pemberton
ec345f7a13 new privatekey2 branch with privatekey changes 2011-05-13 14:26:51 -04:00
Christian Weiske
d9e7463978 add note about SNI 2011-05-13 18:16:25 +02:00
Christian Weiske
62afb01482 allow ssl client login with other authentication sources 2011-05-13 18:11:14 +02:00
Christian Weiske
ccb6d8a513 fix ssl client cert login process 2011-05-13 18:10:25 +02:00
Christian Weiske
803b83fb7d Merge branch 'master' into ssl-client-certs 2011-05-13 06:57:54 +02:00
Christian Weiske
88d7b9631b Merge branch 'master' into configurable-privacy2 2011-05-12 19:25:03 +02:00
Christian Weiske
fbfbd8d5ca Merge branch 'master' into ssl-client-certs 2011-05-12 19:24:34 +02:00
Christian Weiske
0901501fc7 typo 2011-05-12 09:05:08 +02:00
Christian Weiske
86bfda2564 ignore html files in doc/ dir - that is only compiled rST 2011-05-12 09:03:59 +02:00
Christian Weiske
0ff131fbb1 ssl client certificate docs 2011-05-12 09:03:21 +02:00
Christian Weiske
9cc4b5ffc2 add SSL client certificate translations for german (de_DE) 2011-05-11 18:00:31 +02:00
Christian Weiske
d3615844ae update translation base file 2011-05-11 17:51:55 +02:00
Christian Weiske
d5c73cd864 seems I actually forget to use the methods only parameter 2011-05-11 08:00:07 +02:00
Christian Weiske
708dc19122 use correct variable and show error messages 2011-05-11 07:55:01 +02:00
Christian Weiske
1c415919cb deleting ssl client certificates from profile page works now 2011-05-11 07:33:15 +02:00
Christian Weiske
b0665b03d1 registering the current client certificate works now 2011-05-11 06:57:07 +02:00
Christian Weiske
73792c5807 document template parameters and correct form action 2011-05-11 06:48:40 +02:00
Christian Weiske
9d91f1bee1 do not use links but POST form to change SSL settings. Proper web apps should never change data with GET requests 2011-05-11 06:44:49 +02:00
Christian Weiske
c13689813e prepare user interface to register and delete client certificates on the profile page 2011-05-10 15:23:58 +02:00
Christian Weiske
967ba79ece show current users certificates on profile page 2011-05-09 18:16:53 +02:00
Christian Weiske
2fba302003 automatically register SSL client cert when user registers 2011-05-09 08:13:17 +02:00
Christian Weiske
6447ca7186 move ssl client cert handling into separate service class 2011-05-09 07:52:44 +02:00
bretticvs
fc093a5fe5 Moved testDefaultPrivacyEdit() to tests/www/editTest.php.
Moved testDefaultPrivacyImportNetscape() to tests/www/importNetscapeTest.php.
Moved testDefaultPrivacyImport() to tests/www/importTest.php.
Moved testDefaultPrivacyBookmarksAddMissingTitleMissingPrivacy() to tests/www/bookmarksTest.php.
Moved testDefaultPrivacyBookmarksAdd() to tests/www/bookmarksTest.php.
Kept testDefaultPrivacyPrivate() in tests/api/PostsAddTest.php.
Kept testDefaultPrivacyPublic() in tests/api/PostsAddTest.php.
2011-05-05 16:24:21 -06:00
Christian Weiske
c7ec370b47 also match client issuer (CA) 2011-05-05 12:01:39 +02:00
Christian Weiske
b212c837f0 autofill registration form email address if user has a ssl client certificate 2011-05-04 17:13:14 +02:00
Christian Weiske
4e63a9a679 part of request #3163623: add support to login via ssl client certificate. web interface to register certificates is still missing 2011-05-04 17:08:25 +02:00
Christian Weiske
8be81abfe6 merge master 2011-05-02 18:07:15 +02:00
Christian Weiske
f629d081dd make privacy tests clearer 2011-05-02 09:03:35 +02:00
Christian Weiske
6b02db7920 use cookie jar instead of manually creating the cookie 2011-04-26 07:01:48 +02:00
Christian Weiske
3e5cadc764 use cookie jar instead of manually creating the cookie 2011-04-26 07:00:33 +02:00
Christian Weiske
43b6021be7 use xpath instead of manual string-search to verify test results 2011-04-26 06:59:23 +02:00
Christian Weiske
8e7138bf1f make html valid xml to be able to load it with an xml parser 2011-04-26 06:58:49 +02:00
Christian Weiske
106bdcec66 replace named html entities with their numeric name to be able to load the generated pages with an xml parser 2011-04-26 06:53:50 +02:00
Christian Weiske
da36ba7b7e replace deprecated split 2011-04-26 06:48:26 +02:00
Christian Weiske
79e3f4e121 make import test easier 2011-04-18 22:39:06 +02:00
Christian Weiske
6f04c888bf make importnetscape-test easier 2011-04-18 22:37:42 +02:00
Christian Weiske
5d5ca9efdd clarify documentation; we are returning get requests 2011-04-18 19:20:58 +02:00
Christian Weiske
87eab925e4 make edit test much easier and do not rely on manual cookie setting 2011-04-18 19:16:58 +02:00
Christian Weiske
f3fdb6ca14 start the session when we are in http unittest mode 2011-04-18 19:16:18 +02:00
Christian Weiske
b937d6ee42 fix tests that did not find the data file 2011-04-18 07:50:20 +02:00
bretticvs
3b582fd875 Moved unit tests to PostsAddTest.php in Api directory. 2011-04-17 17:42:49 -06:00
Christian Weiske
200cb1d3c5 move privacy tests for api/post_add to the correct location 2011-04-06 09:52:02 +02:00
Christian Weiske
3306261b3e ignore unittest config file 2011-04-06 09:50:58 +02:00
Christian Weiske
366987a97d move unittest config deletion to setup since that makes it easier to debug, and does not break config when the test fatal errored 2011-04-06 09:50:42 +02:00
Christian Weiske
cba0776325 cherry-pick:
move setUnittestConfig to TestBaseApi since it makes only sense to use it there

Conflicts:

	tests/TestBaseApi.php
2011-04-06 08:43:42 +02:00
Christian Weiske
c81566f5d8 cherry-pick:
add new feature: allow unit test mode enabling via HTTP GET parameter
2011-04-06 08:42:26 +02:00
Christian Weiske
1a2b37cc34 tell people why we need that variable 2011-04-06 07:58:01 +02:00
Christian Weiske
988e564ec3 always delete all bookmarks in setUp since almost all methods do it anyway 2011-04-06 07:46:55 +02:00
bretticvs
1aa20d38ca Re-adding test data without carriage returns. 2011-03-31 16:49:21 -07:00
bretticvs
a0ca398372 Trying to remove carriage returns from test data. 2011-03-31 16:42:44 -07:00
bretticvs
42942507c4 Revert "Revert "Updates for configurable-privacy2, hopefully without carriage returns.""
This reverts commit f072059f2d.
2011-03-31 16:18:36 -07:00
bretticvs
f072059f2d Revert "Updates for configurable-privacy2, hopefully without carriage returns."
This reverts commit 675eadd584.
2011-03-31 16:17:53 -07:00
bretticvs
675eadd584 Updates for configurable-privacy2, hopefully without carriage returns. 2011-03-31 15:59:44 -07:00
U-SYBASE\bdee
8cbfef8115 Revert "Further updates for configurable-privacy2."
This reverts commit ef88147d45.
2011-03-31 13:25:37 -07:00
bretticvs
ef88147d45 Further updates for configurable-privacy2. 2011-03-30 22:31:51 -07:00
bretticvs
eaa62a6c45 Adding directory and files for test data. 2011-03-30 22:04:39 -07:00
bretticvs
65bd4bfab8 Updates for feature request 3164348: Make default privacy configurable. 2011-03-15 07:53:39 +01:00
245 changed files with 29044 additions and 13133 deletions

4
.gitignore vendored
View File

@ -1,4 +1,8 @@
doc/*.html
dist/
build.properties
package.xml
semanticscuttle-dump.sql
data/config.php
data/config.testing.php
data/config.testing-tmp.php

15
.travis.yml Normal file
View File

@ -0,0 +1,15 @@
language: php
phps:
- 5.3
script: cd tests && phpunit .
notifications:
irc: "irc.freenode.org#semanticscuttle"
before_script:
- mysql -e 'create database semanticscuttle_test;'
- mysql semanticscuttle_test < data/tables.sql
- cat data/config.php.dist | sed "s/'username'/'root'/" | sed "s/'password'/''/" | sed "s/'scuttle'/'semanticscuttle_test'/" | sed "s/'mysql4'/'mysqli'/" > data/config.php
- pyrus install pear/HTTP_Request2
- pyrus install pear/PEAR
- pyrus install pear/Stream_Var
- phpenv rehash

12
README.md Normal file
View File

@ -0,0 +1,12 @@
Patched SemanticScuttle (social bookmarking tool).
================================================
### New :
* Better import for XML bookmark file.
* Support for adding multiple bookmarks at once with my modified Firefox's Scuttle plugin.
* Block everything if global private mode enabled and user not logged on.
* Shoulder surfing protection.
* Batch tagging.
* Search will now look in bookmarks addresses too.

244
build.xml
View File

@ -9,18 +9,16 @@
<property file="build.properties" />
<property file="html.properties" />
<property name="version-m" value="0.97" />
<property name="version" value="0.97.0" />
<property name="version-m" value="0.98" />
<property name="version" value="0.98.5" />
<property name="stability" value="beta" />
<property name="releasenotes" value="- Many SQL optimizations
- SemanticScuttle shows bookmarks 4 times faster now
- New config option to skip 'SET NAMES UTF8' call: $dbneedssetnames
- Do not highlight admin bookmarks when $enableAdminColors is disabled
- Add russian translation
- Make HTML export follow the specifications a bit better
- Fix bug #2953732: faulty error message for duplicate bookmarks
- Fix bug #2960663: do not send content-type headers twice for ajax/api scripts
- Fix bug #2976593: fr_FR locale is vietnamese
<property name="releasenotes" value="
- Fix bug #109: preserve privacy setting from Delicious export files
(Thanks to David Glenck)
- Fix bug #110: Document solution for &quot;searching slashes&quot;
- Fix bug #111: Comments in config.php mention *.inc.php files
(José María Mateos [rinze])
- Fix bug: Do not use eregi functions anymore
" />
<property name="zipfile" value="${phing.project.name}-${version}.zip" />
<property name="pkgfile" value="${phing.project.name}-${version}.tgz" />
@ -30,7 +28,36 @@
<property name="sffilepath" value="s/se/semanticscuttle/" />
<property name="svnpath" value="https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/" />
<taskdef classname="phing.tasks.ext.d51PearPkg2Task" name="d51pearpkg2" />
<fileset id="fs.zip" dir=".">
<include name="data/**"/>
<include name="doc/**"/>
<include name="src/**"/>
<include name="www/**"/>
<include name="scripts/avahi-export.php"/>
<include name="scripts/fix-unfiled-tags.php"/>
<exclude name="**/.gitignore/"/>
<exclude name="**/.svn/"/>
<exclude name="data/config.php"/>
<exclude name="data/config.testing.php"/>
<exclude name="data/config.testing-tmp.php"/>
<exclude name="data/locales/messages.po"/>
<exclude name="data/locales/*/LC_MESSAGES/messages.po"/>
<exclude name="src/php-gettext/examples/" />
<exclude name="src/php-gettext/tests/"/>
</fileset>
<fileset id="fs.doc" dir="doc">
<include name="ChangeLog"/>
<include name="**.txt"/>
<include name="**.rst"/>
<include name="**/*.rst"/>
<exclude name="LICENSE.txt"/>
<exclude name="developers/TODO.rst"/>
<exclude name="allinone.rst"/>
</fileset>
<taskdef name="rST" classname="phing.tasks.ext.rSTTask" />
<taskdef name="d51pearpkg2" classname="phing.tasks.ext.d51PearPkg2Task" />
<target name="zip" depends="check"
description="Create zip file for release"
@ -41,24 +68,10 @@
Test your zip with: unzip -l SemanticScuttle-0.95.0.zip
-->
<mkdir dir="dist" />
<echo msg="Creating distribution zip for SemanticScuttle ${version}"/>
<delete file="${distfile}" failonerror="false"/>
<zip destfile="${distfile}" prefix="${phing.project.name}-${version}/">
<fileset dir=".">
<include name="data/**"/>
<include name="doc/**"/>
<include name="src/**"/>
<include name="www/**"/>
<exclude name="**/.gitignore/"/>
<exclude name="**/.svn/"/>
<exclude name="data/config.php"/>
<exclude name="data/locales/messages.po"/>
<exclude name="data/locales/*/LC_MESSAGES/messages.po"/>
<exclude name="doc/developers/"/>
<exclude name="src/php-gettext/examples/" />
<exclude name="src/php-gettext/bin/"/>
</fileset>
<fileset refid="fs.zip"/>
</zip>
</target>
@ -67,7 +80,6 @@
<target name="package" depends="check"
description="Creates the pear package"
>
<!-- fixme: create package.xml with d51pearpkg2 -->
<d51pearpkg2 dir="." baseinstalldir="/">
<name>SemanticScuttle</name>
<summary>A social bookmarking tool</summary>
@ -93,6 +105,15 @@
channel="pear.php.net"
minimum_version="0.4.0"
/>
<!-- unit tests: -->
<package name="HTML_Request2"
channel="pear.php.net"
minimum_version="2.0.0"
/>
<package name="Stream_Var"
channel="pear.php.net"
minimum_version="1.1.0"
/>
</dependencies>
@ -100,6 +121,7 @@
<dirroles key="www">www</dirroles>
<dirroles key="data">data</dirroles>
<dirroles key="doc">doc</dirroles>
<dirroles key="scripts">doc</dirroles>
<dirroles key="src">php</dirroles>
<dirroles key="tests">test</dirroles>
@ -109,33 +131,109 @@
<ignore>**/.svn</ignore>
<ignore>build*</ignore>
<ignore>data/config.php</ignore>
<ignore>data/config.testing.php</ignore>
<ignore>data/config.testing-tmp.php</ignore>
<ignore>data/locales/messages.po</ignore>
<ignore>data/locales/*/LC_MESSAGES/messages.po</ignore>
<ignore>dist/**</ignore>
<ignore>doc/developers/**</ignore>
<ignore>scripts/**</ignore>
<ignore>src/php-gettext/examples/**</ignore>
<ignore>src/php-gettext/bin/**</ignore>
<ignore>*.tgz</ignore>
<ignore>src/php-gettext/tests/**</ignore>
<ignore>*.properties</ignore>
<ignore>semanticscuttle-dump.sql</ignore>
<ignore>*.tgz</ignore>
<replacement
path="src/SemanticScuttle/header.php"
type="pear-config"
from="@data_dir@" to="data_dir"
<replacement path="src/SemanticScuttle/header.php"
type="pear-config" from="@data_dir@" to="data_dir"
/>
<replacement
path="www/www-header.php"
type="pear-config"
from="@data_dir@" to="data_dir"
<replacement path="src/SemanticScuttle/header.php"
type="pear-config" from="@www_dir@" to="www_dir"
/>
<replacement
path="tests/prepare.php"
type="pear-config"
from="@data_dir@" to="data_dir"
<replacement path="src/SemanticScuttle/Config.php"
type="pear-config" from="@data_dir@" to="data_dir"
/>
<replacement path="src/SemanticScuttle/Config.php"
type="pear-config" from="@www_dir@" to="www_dir"
/>
<replacement path="www/www-header.php"
type="pear-config" from="@data_dir@" to="data_dir"
/>
<replacement path="tests/prepare.php"
type="pear-config" from="@data_dir@" to="data_dir"
/>
<changelog version="0.97" date="2010-06-09" license="GPL">
<changelog version="0.98.5" date="2013-03-20" license="GPL">
- Fix bug #109: preserve privacy setting from Delicious export files
(Thanks to David Glenck)
- Fix bug #110: Document solution for "searching slashes"
- Fix bug #111: Comments in config.php mention *.inc.php files
(José María Mateos [rinze])
- Fix bug: Do not use eregi functions anymore
</changelog>
<changelog version="0.98.4" date="2012-01-21" license="GPL">
- Fix bug #3439729: URLs were escaped too often in bookmark list
- Fix bug: Subtitle was not escaped
- Fix bug #3388219: Incorrect URL when cancelling tag2tag-actions
- Fix bug #3393951: Logo images missing on bookmark page
- Fix bug #3399815: PHP error in opensearch API in 0.98.3
- Fix bug #3407728: Can't delete users from admin page
- Fix bug #3431742: open_basedir problems with /etc/ config files
- Fix bug #3436624: Wrong URL for Delicious API when importing
- Fix bug #3463481: RSS feed show warnings in feedvalidator.org
- Fix bug #3384416: Use URL with protocol in bookmarklet
- Fix bug: Invalid HTML when website thumbnails are activated
- Fix bug #3413459: Thumbnails not in one line
- Fix bug #3468293: Delicious import does not preserve private links
- Fix bug #3396727: Title of http://lesscss.org/ not loaded
- Fix bug #3111254: getIdFromUser() always returns an integer now (part 2)
- Implement request #3403609: fr_CA translation update
- Implement patch #3476011: PostgreSQL tables can not be initialized
(Frédéric Fauberteau [triaxx])
</changelog>
<!-- 0.98.3 was not needed -->
<changelog version="0.98.2" date="2011-08-08" license="GPL">
- Fix bug #3385724: Rename tag ends with XML Parsing Error
- Fix bug #3386178: "system:unfiled" secret tag does not work
- Fix bug #3384416: Update documentation to explain HTTP/HTTPS root problem
- Fix bug #3382126: Linked tags does not work for tags with spaces
- Fix delicious API help page link
</changelog>
<changelog version="0.98.1" date="2011-08-01" license="GPL">
- Fix bug #3375635: XML parsing problem in top.inc.php
- Fix bug #3375428: Forgot to remove some old dojo files
- Fix bug #3160512: Make SemanticScuttle work with FastCGI
- Fix bug #3376618: Broken tag completion for private bookmarks
</changelog>
<changelog version="0.98.0" date="2011-07-21" license="GPL">
- Switch to jQuery and drop dojo
- Implement request #2928950: Private keys for RSS feeds (Mark Pemberton)
- Implement request #3164348: Configurable default privacy (Brett Dee)
- Implement request #1989987: Theming support
- Implement request #3054906: Show user's full name instead of nickname
- Implement patch #3059829: update ``FR_CA`` translation
- Fix bug #3187177: Wrong URL / Export XML Bookmarks
- Fix bug #3097187: Using opensearch with two tags does not work in Firefox
- Fix bug #3251877: French translation JavaScript Bug when editing bookmarks
- Fix bug #3168521: Title of tag-filtered RSS Feed is broken
- Fix bug #2853627: Javascript warning
- Fix bug in ``getTagsForBookmarks()`` that fetched all tags
- Fix privacy issue when fetching tags of several users
- Fix Google custom search XML
- Show error message on mysqli connection errors
- Update php-gettext library to 1.0.10
- ``api/posts/add`` respects the 'replace' parameter now
- Only URLs with an allowed protocol may be added to the database
- Support HTTPS connections when ``$root`` is not configured
- SQL schema version table to ease future database upgrades
- Documentation is written with rST (reStructuredText) now
- Support per-host configuration files
</changelog>
<changelog version="0.97.0" date="2010-06-09" license="GPL">
- Many SQL optimizations - SemanticScuttle shows bookmarks 4 times faster now
- New config option to skip "SET NAMES UTF8" call: $dbneedssetnames
- Do not highlight admin bookmarks when $enableAdminColors is disabled
@ -207,6 +305,26 @@
</target>
<target name="build-docs" description="render documentation">
<rST format="html" uptodate="true"
toolparam="--stylesheet=res/docs/style.css"
>
<fileset refid="fs.doc"/>
<mapper type="regexp" from="^doc/(.+?)(.rst|.txt)?$" to="dist/docs/\1.html"/>
<!--
<filterchain>
<replacetokenswithfile dir="res/docs">
<
</replacetokenswithfile>
</filterchain>
-->
</rST>
</target>
<target name="clean-docs" description="delete rendered documentation files">
<delete dir="dist/docs" includeemptydirs="yes"/>
</target>
<target name="release" depends="check,zip,package,deploy-sf"
description="Release the version on sourceforge"
@ -242,7 +360,7 @@
<target name="deploy-sf-pear" depends="check,package"
description="Update PEAR channel on sourceforge"
description="Update PEAR channel + website on sourceforge"
>
<available file="${websitedir}"
type="dir" property="available.websitedir"
@ -307,6 +425,38 @@
</target>
<target name="deploy-docs" depends="build-docs"
description="sync docs to sourceforge website"
>
<copy todir="${websitedir}/docs">
<fileset dir="dist/docs">
<include name="**"/>
</fileset>
</copy>
<exec
command="rsync -avP -e ssh . ${sfuser},${sfproject}@web.sourceforge.net:htdocs/docs"
dir="${websitedir}/docs"
escape="false" checkreturn="false"
passthru="true"
/>
</target>
<target name="deploy-demo"
description="sync demo to sourceforge website"
>
<exec
command="rsync -avP -e ssh . ${sfuser},${sfproject}@web.sourceforge.net:htdocs/demo"
dir="${websitedir}/demo"
escape="false" checkreturn="false"
passthru="true"
/>
</target>
<target name="check"
description="Check variables"
>
@ -314,6 +464,8 @@
<fail unless="sfuser" message="Sourceforge username not defined!" />
<fail unless="sfproject" message="Sourceforge project name not defined!" />
<fail unless="sffilepath" message="Sourceforge project file path not defined!" />
<mkdir dir="dist" />
</target>
</project>

1
data/.gitignore vendored
View File

@ -1 +0,0 @@
config.php

View File

@ -14,6 +14,13 @@
* @link http://sourceforge.net/projects/semanticscuttle/
*/
/**
* Array for defaults.
*
* @var array
*/
$defaults = array();
/***************************************************
* HTML output configuration
@ -56,6 +63,15 @@ $sidebarTopMessage = '';
*/
$sidebarBottomMessage = '';
/**
* The HTML theme to use. With themes, you can give your semanticscuttle
* installation a new look.
*
* Themes are the folders in data/templates/
*
* @var string
*/
$theme = 'default';
/***************************************************
@ -65,13 +81,15 @@ $sidebarBottomMessage = '';
/**
* SemanticScuttle root directory.
*
* Set to NULL to autodetect the root url of the website.
*
* If your installation is in a subdirectory like
* "http://www.example.com/semanticscuttle/" then
* replace NULL by your address (between "" and with trailing '/')
*
* The autodetection works for both HTTP and HTTPS urls.
* If you offer HTTP *only*, then set your root url here.
*
* @var string
*/
$root = null;
@ -235,10 +253,13 @@ $adminsAreAdvisedTagsFromOtherAdmins = false;
*
* @var array
*/
$reservedusers = array('all', 'watchlist');
$reservedusers = array('all', 'watchlist');
/**
* If global private mode is enabled (everything will be blocked for unlogged users).
* @var boolean
*/
$privatemode = false;
/***************************************************
* Anti SPAM measures
@ -508,41 +529,43 @@ $votingMode = 2;
*/
$hideBelowVoting = null;
/**
* Default privacy setting for bookmarks:
* 0 - Public
* 1 - Shared with Watchlist
* 2 - Private
*
* @var integer
*/
$defaults['privacy'] = 0;
/****************************
* Website Thumbnails
*/
/**
* Enable bookmark website thumbnails.
* Which thumbnail service type to use.
*
* According to artviper.net license, buy a license if you
* gain profit with your pages.
*
* @var boolean
* @link http://www.websitethumbnail.de/
*/
$enableWebsiteThumbnails = false;
/**
* User ID from websitethumbnail.de
*
* You need to register on
* http://www.artviper.net/registerAPI.php
* in order to use thumbnails on your domain
*
* @var string
* @link http://www.artviper.net/registerAPI.php
*/
$thumbnailsUserId = null;
/**
* API key.
* Sent to you by artviper.net after registration.
* Currently supported:
* - null (no screenshots)
* - 'phancap', see http://cweiske.de/phancap.htm
*
* @var string
*/
$thumbnailsKey = null;
$thumbnailsType = null;
/**
* Configuration for thumbnail service.
*
* Phancap requires an array with the following keys:
* - url: URL to phancap's get.php file
* - token: user name (if access protected)
* - secret: password for the user (if access protected)
*
* @var array
*/
$thumbnailsConfig = array();
@ -592,6 +615,13 @@ $menu2Tags = array(
'menu2', 'tags', 'configurable', 'in', 'data/config.php'
);
/**
* Tag protected from shoulder surfing.
* This tag, his children and the associated bookmarks won't appear anywhere unless enabled in the UI.
*
* @var string
*/
$shoulderSurfingProtectedTag = 's_hidden';
/****************************

View File

@ -2,11 +2,12 @@
/**
* Configuration for SemanticScuttle.
*
* Copy this file to config.inc.php and adjust it.
* Copy this file to config.php and adjust it.
*
* See config.default.inc.php for more options.
* See config.default.php for more options.
*/
/**
* The name of this site.
*
@ -116,6 +117,21 @@ $adminemail = 'admin@example.org';
$admin_users = array();
/***************************************************
* Bookmarks
*/
/**
* Default privacy setting for bookmarks.
* 0 - Public
* 1 - Shared with Watchlist
* 2 - Private
*
* @var integer
*/
$defaults['privacy'] = 0;
/**
* You have completed the basic configuration!
* More options can be found in config.default.php.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

20
data/schema/1.sql Normal file
View File

@ -0,0 +1,20 @@
RENAME TABLE `sc_tags` TO `sc_bookmarks2tags` ;
CREATE TABLE `sc_searchhistory` (
`shId` int(11) NOT NULL auto_increment,
`shTerms` varchar(255) NOT NULL default '',
`shRange` varchar(32) NOT NULL default '',
`shDatetime` datetime NOT NULL default '0000-00-00 00:00:00',
`shNbResults` int(6) NOT NULL default '0',
`uId` int(11) NOT NULL default '0',
PRIMARY KEY (`shId`)
);
CREATE TABLE `sc_tags` (
`tId` int(11) NOT NULL auto_increment,
`tag` varchar(32) NOT NULL default '',
`uId` int(11) NOT NULL default '0',
`tDescription` varchar(255) default NULL,
PRIMARY KEY (`tId`),
UNIQUE KEY `sc_tags_tag_uId` (`tag`, `uId`)
);

10
data/schema/2.sql Normal file
View File

@ -0,0 +1,10 @@
ALTER TABLE `sc_bookmarks` CHANGE `bDescription` `bDescription` VARCHAR( 1500 )
CREATE TABLE `sc_tagscache` (
`tcId` int(11) NOT NULL auto_increment,
`tag1` varchar(100) NOT NULL default '',
`tag2` varchar(100) NOT NULL default '',
`relationType` varchar(32) NOT NULL default '',
`uId` int(11) NOT NULL default '0',
PRIMARY KEY (`tcId`),
UNIQUE KEY `sc_tagscache_tag1_tag2_type_uId` (`tag1`,`tag2`,`relationType`,`uId`)
);

85
data/schema/3.sql Normal file
View File

@ -0,0 +1,85 @@
/* modify and add fields */
ALTER TABLE `sc_bookmarks` MODIFY `bAddress` varchar(1500) NOT NULL;
ALTER TABLE `sc_bookmarks` MODIFY `bDescription` TEXT default NULL;
ALTER TABLE `sc_bookmarks` ADD `bPrivateNote` TEXT NULL AFTER `bDescription` ;
ALTER TABLE `sc_tags` MODIFY `tDescription` TEXT default NULL;
ALTER TABLE `sc_commondescription` MODIFY `cdDescription` TEXT default NULL;
/* convert to UTF-8 if your table is ISO-something (through BLOB: tips provided by MYSQL documentation)*/
/* first need to remove index keys because of BLOB constraints*/
ALTER TABLE `sc_tags` DROP INDEX `sc_tags_tag_uId`;
ALTER TABLE `sc_bookmarks2tags` DROP INDEX `sc_bookmarks2tags_tag_bId`;
ALTER TABLE `sc_bookmarks2tags` DROP INDEX `sc_bookmarks2tags_bId`;
ALTER TABLE `sc_tags2tags` DROP INDEX `sc_tags2tags_tag1_tag2_uId`;
ALTER TABLE `sc_commondescription` DROP INDEX `sc_commondescription_tag_datetime`;
ALTER TABLE `sc_tagscache` DROP INDEX `sc_tagscache_tag1_tag2_type_uId`;
ALTER TABLE `sc_tagsstats` DROP INDEX `sc_tagsstats_tag1_type_uId`;
/* secondly convert through BLOB type */
ALTER TABLE `sc_bookmarks` CHANGE `bTitle` `bTitle` BLOB;
ALTER TABLE `sc_bookmarks` CHANGE `bTitle` `bTitle` varchar(255) CHARACTER SET utf8;
ALTER TABLE `sc_bookmarks` CHANGE `bAddress` `bAddress` BLOB;
ALTER TABLE `sc_bookmarks` CHANGE `bAddress` `bAddress` varchar(1500) CHARACTER SET utf8;
ALTER TABLE `sc_bookmarks` CHANGE `bDescription` `bDescription` BLOB;
ALTER TABLE `sc_bookmarks` CHANGE `bDescription` `bDescription` text CHARACTER SET utf8;
ALTER TABLE `sc_bookmarks` CHANGE `bPrivateNote` `bPrivateNote` BLOB;
ALTER TABLE `sc_bookmarks` CHANGE `bPrivateNote` `bPrivateNote` text CHARACTER SET utf8;
ALTER TABLE `sc_tags` CHANGE `tag` `tag` BLOB;
ALTER TABLE `sc_tags` CHANGE `tag` `tag` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_tags` CHANGE `tDescription` `tDescription` BLOB;
ALTER TABLE `sc_tags` CHANGE `tDescription` `tDescription` text CHARACTER SET utf8;
ALTER TABLE `sc_bookmarks2tags` CHANGE `tag` `tag` BLOB;
ALTER TABLE `sc_bookmarks2tags` CHANGE `tag` `tag` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_users` CHANGE `name` `name` BLOB;
ALTER TABLE `sc_users` CHANGE `name` `name` varchar(50) CHARACTER SET utf8;
ALTER TABLE `sc_users` CHANGE `uContent` `uContent` BLOB;
ALTER TABLE `sc_users` CHANGE `uContent` `uContent` text CHARACTER SET utf8;
ALTER TABLE `sc_tags2tags` CHANGE `tag1` `tag1` BLOB;
ALTER TABLE `sc_tags2tags` CHANGE `tag1` `tag1` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_tags2tags` CHANGE `tag2` `tag2` BLOB;
ALTER TABLE `sc_tags2tags` CHANGE `tag2` `tag2` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_tagsstats` CHANGE `tag1` `tag1` BLOB;
ALTER TABLE `sc_tagsstats` CHANGE `tag1` `tag1` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_tagscache` CHANGE `tag1` `tag1` BLOB;
ALTER TABLE `sc_tagscache` CHANGE `tag1` `tag1` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_tagscache` CHANGE `tag2` `tag2` BLOB;
ALTER TABLE `sc_tagscache` CHANGE `tag2` `tag2` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_commondescription` CHANGE `tag` `tag` BLOB;
ALTER TABLE `sc_commondescription` CHANGE `tag` `tag` varchar(100) CHARACTER SET utf8;
ALTER TABLE `sc_commondescription` CHANGE `cdTitle` `cdTitle` BLOB;
ALTER TABLE `sc_commondescription` CHANGE `cdTitle` `cdTitle` varchar(255) CHARACTER SET utf8;
ALTER TABLE `sc_commondescription` CHANGE `cdDescription` `cdDescription` BLOB;
ALTER TABLE `sc_commondescription` CHANGE `cdDescription` `cdDescription` text CHARACTER SET utf8;
ALTER TABLE `sc_searchhistory` CHANGE `shTerms` `shTerms` BLOB;
ALTER TABLE `sc_searchhistory` CHANGE `shTerms` `shTerms` varchar(255) CHARACTER SET utf8;
ALTER TABLE `sc_searchhistory` CHANGE `shRange` `shRange` BLOB;
ALTER TABLE `sc_searchhistory` CHANGE `shRange` `shRange` varchar(32) CHARACTER SET utf8;
/* Thirdly re-add index keys */
ALTER TABLE `sc_tags` ADD UNIQUE KEY `sc_tags_tag_uId` (`tag`, `uId`);
ALTER TABLE `sc_bookmarks2tags` ADD UNIQUE KEY `sc_bookmarks2tags_tag_bId` (`tag`,`bId`);
ALTER TABLE `sc_bookmarks2tags` ADD KEY `sc_bookmarks2tags_bId` (`bId`);
ALTER TABLE `sc_tags2tags` ADD UNIQUE KEY `sc_tags2tags_tag1_tag2_uId` (`tag1`,`tag2`,`relationType`,`uId`);
ALTER TABLE `sc_commondescription` ADD UNIQUE KEY `sc_commondescription_tag_datetime` (`tag`,`cdDatetime`);
ALTER TABLE `sc_tagscache` ADD UNIQUE KEY `sc_tagscache_tag1_tag2_type_uId` (`tag1`,`tag2`,`relationType`,`uId`);
ALTER TABLE `sc_tagsstats` ADD UNIQUE KEY `sc_tagsstats_tag1_type_uId` (`tag1`,`relationType`,`uId`);
/* Change tables to utf-8 charset */
ALTER TABLE `sc_bookmarks` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_tags` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_bookmarks2tags` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_users` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_watched` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_tags2tags` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_tagsstats` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_tagscache` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_commondescription` CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_searchhistory` CHARACTER SET utf8 COLLATE utf8_general_ci;

11
data/schema/4.sql Normal file
View File

@ -0,0 +1,11 @@
ALTER TABLE `sc_bookmarks` ADD `bVoting` INT NOT NULL;
ALTER TABLE `sc_bookmarks` ADD `bVotes` INT NOT NULL;
CREATE TABLE `sc_votes` (
`bId` INT NOT NULL ,
`uId` INT NOT NULL ,
`vote` INT( 2 ) NOT NULL ,
UNIQUE KEY `bid_2` (`bId`,`uId`),
KEY `bid` (`bId`),
KEY `uid` (`uId`)
) CHARACTER SET utf8 COLLATE utf8_general_ci ;

1
data/schema/5.sql Normal file
View File

@ -0,0 +1 @@
ALTER TABLE `sc_bookmarks` ADD `bShort` VARCHAR(16) NULL DEFAULT NULL;

View File

@ -2,3 +2,18 @@ CREATE TABLE `sc_version` (
`schema_version` int(11) NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `sc_version` (`schema_version`) VALUES ('6');
CREATE TABLE `sc_users_sslclientcerts` (
`id` INT NOT NULL AUTO_INCREMENT ,
`uId` INT NOT NULL ,
`sslSerial` VARCHAR( 32 ) NOT NULL ,
`sslClientIssuerDn` VARCHAR( 1024 ) NOT NULL ,
`sslName` VARCHAR( 64 ) NOT NULL ,
`sslEmail` VARCHAR( 64 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (`id`)
) CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `sc_users` ADD `privateKey` VARCHAR(33) NULL;
CREATE UNIQUE INDEX `privateKey` ON `sc_users` (`privateKey`);

259
data/tables-postgresql.sql Normal file
View File

@ -0,0 +1,259 @@
-- Semantic Scuttle - Tables creation SQL script
-- ! Dont forget to change table names according to $tableprefix defined in config.php !
--
-- Table structure for table "sc_bookmarks"
--
CREATE SEQUENCE bIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_bookmarks (
bId integer DEFAULT nextval('bIds'::text) PRIMARY KEY,
uId integer NOT NULL,
bIp varchar(40) DEFAULT NULL,
bStatus smallint NOT NULL,
bDatetime timestamp with time zone DEFAULT now() NOT NULL,
bModified timestamp with time zone DEFAULT now() NOT NULL,
bTitle varchar(255) DEFAULT '' NOT NULL,
bAddress varchar(1500) DEFAULT '' NOT NULL,
bDescription text,
bPrivateNote text,
bHash varchar(32) DEFAULT '' NOT NULL,
bVotes integer NOT NULL,
bVoting integer NOT NULL,
bShort varchar(16) DEFAULT NULL
);
CREATE INDEX sc_bookmarks_usd ON sc_bookmarks (uId, bStatus, bDatetime);
CREATE INDEX sc_bookmarks_hui ON sc_bookmarks (bHash, uId, bId);
CREATE INDEX sc_bookmarks_du ON sc_bookmarks (bDatetime, uId);
--
-- Table structure for table "sc_bookmarks2tags"
--
CREATE SEQUENCE b2tIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_bookmarks2tags (
id integer DEFAULT nextval('b2tIds'::text) PRIMARY KEY,
bId integer NOT NULL,
tag varchar(100) DEFAULT '' NOT NULL
);
CREATE UNIQUE INDEX sc_bookmarks2tags_tag_bId on sc_bookmarks2tags (tag, bId);
CREATE INDEX sc_bookmarks2tags_bId on sc_bookmarks2tags (bId);
--
-- Table structure for table "sc_commondescription"
--
CREATE SEQUENCE cdIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_commondescription (
cdId integer DEFAULT nextval('cdIds'::text) PRIMARY KEY,
uId integer NOT NULL,
tag varchar(100) DEFAULT '' NOT NULL,
bHash varchar(32) DEFAULT '' NOT NULL,
cdTitle varchar(255) DEFAULT '' NOT NULL,
cdDescription text,
cdDatetime timestamp with time zone DEFAULT now() NOT NULL
);
CREATE UNIQUE INDEX sc_commondescription_tag_timestamp on sc_commondescription (tag, cdDatetime);
CREATE UNIQUE INDEX sc_commondescription_bookmark_timestamp on sc_commondescription (bHash, cdDatetime);
--
-- Table structure for table "sc_searchhistory"
--
CREATE SEQUENCE shIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_searchhistory (
shId integer DEFAULT nextval('shIds'::text) PRIMARY KEY,
shTerms varchar(255) NOT NULL DEFAULT '',
shRange varchar(32) NOT NULL DEFAULT '',
shDatetime timestamp with time zone DEFAULT now() NOT NULL,
shNbResults integer NOT NULL,
uId integer NOT NULL
);
--
-- Table structure for table "sc_tags"
--
CREATE SEQUENCE tIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_tags (
tId integer DEFAULT nextval('tIds'::text) PRIMARY KEY,
tag varchar(100) NOT NULL DEFAULT '',
uId integer NOT NULL,
tDescription text
);
CREATE UNIQUE INDEX sc_tags_tag_uId on sc_tags (tag, uId);
--
-- Table structure for table "sc_tags2tags"
--
CREATE SEQUENCE ttIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_tags2tags (
ttId integer DEFAULT nextval('ttIds'::text) PRIMARY KEY,
tag1 varchar(100) NOT NULL DEFAULT '',
tag2 varchar(100) NOT NULL DEFAULT '',
relationType varchar(32) NOT NULL DEFAULT '',
uId integer NOT NULL
);
CREATE UNIQUE INDEX sc_tags2tags_tag1_tag2_uId on sc_tags2tags (tag1, tag2, relationType, uId);
--
-- Table structure for table "sc_tagscache"
--
CREATE SEQUENCE tcIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_tagscache (
tcId integer DEFAULT nextval('tcIds'::text) PRIMARY KEY,
tag1 varchar(100) NOT NULL DEFAULT '',
tag2 varchar(100) NOT NULL DEFAULT '',
relationType varchar(32) NOT NULL DEFAULT '',
uId integer NOT NULL DEFAULT '0'
);
CREATE UNIQUE INDEX sc_tagscache_tag1_tag2_type_uId on sc_tagscache (tag1, tag2, relationType, uId);
--
-- Table structure for table "sc_tagsstats"
--
CREATE SEQUENCE tstIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_tagsstats (
tstId integer DEFAULT nextval('tstIds'::text) PRIMARY KEY,
tag1 varchar(100) NOT NULL DEFAULT '',
relationType varchar(32) NOT NULL DEFAULT '',
uId integer NOT NULL,
nb integer NOT NULL,
depth integer NOT NULL,
nbupdate integer NOT NULL
);
CREATE UNIQUE INDEX sc_tagsstats_tag1_type_uId on sc_tagsstats (tag1, relationType, uId);
--
-- Table structure for table "sc_users"
--
CREATE SEQUENCE uIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_users (
uId integer DEFAULT nextval('uIds'::text) PRIMARY KEY,
username varchar(25) NOT NULL DEFAULT '',
password varchar(40) NOT NULL DEFAULT '',
uDatetime timestamp with time zone DEFAULT now() NOT NULL,
uModified timestamp with time zone DEFAULT now() NOT NULL,
name varchar(50) DEFAULT NULL,
email varchar(50) NOT NULL DEFAULT '',
homepage varchar(255) DEFAULT NULL,
uContent text,
privateKey varchar(33) DEFAULT NULL
);
CREATE UNIQUE INDEX privateKey on sc_users (privateKey);
--
-- Table structure for table "sc_users_sslclientcerts"
--
CREATE SEQUENCE ids
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_users_sslclientcerts (
id integer DEFAULT nextval('ids'::text) PRIMARY KEY,
uId integer NOT NULL,
sslSerial varchar(32) DEFAULT '' NOT NULL,
sslClientIssuerDn varchar(1024) DEFAULT '' NOT NULL,
sslName varchar(64) DEFAULT '' NOT NULL,
sslEmail varchar(64) DEFAULT '' NOT NULL
);
--
-- Table structure for table "sc_version"
--
CREATE TABLE sc_version (
schema_version integer NOT NULL
);
--
-- Table structure for table "sc_votes"
--
CREATE TABLE sc_votes (
bId integer NOT NULL,
uId integer NOT NULL,
vote integer NOT NULL
);
CREATE UNIQUE INDEX bid_2 on sc_votes (bId, uId);
CREATE INDEX bid on sc_votes (bId);
CREATE INDEX uid on sc_votes (uId);
--
-- Table structure for table "sc_watched"
--
CREATE SEQUENCE wIds
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
CREATE TABLE sc_watched (
wId integer DEFAULT nextval('wIds'::text) PRIMARY KEY,
uId integer NOT NULL,
watched integer NOT NULL
);
CREATE INDEX sc_watched_uId on sc_watched (uId);

View File

@ -72,11 +72,23 @@ CREATE TABLE `sc_users` (
`email` varchar(50) NOT NULL default '',
`homepage` varchar(255) default NULL,
`uContent` text,
PRIMARY KEY (`uId`)
`privateKey` varchar(33) default NULL,
PRIMARY KEY (`uId`),
UNIQUE KEY `privateKey` (`privateKey`)
) CHARACTER SET utf8 COLLATE utf8_general_ci ;
-- --------------------------------------------------------
CREATE TABLE `sc_users_sslclientcerts` (
`id` INT NOT NULL AUTO_INCREMENT ,
`uId` INT NOT NULL ,
`sslSerial` VARCHAR( 32 ) NOT NULL ,
`sslClientIssuerDn` VARCHAR( 1024 ) NOT NULL ,
`sslName` VARCHAR( 64 ) NOT NULL ,
`sslEmail` VARCHAR( 64 ) NOT NULL ,
PRIMARY KEY ( `id` )
) CHARACTER SET utf8 COLLATE utf8_general_ci;
--
-- Table structure for table `sc_watched`
--

View File

@ -1,18 +0,0 @@
<?php
/**
* Bookmark thumbnail image
* Shows the website thumbnail for the bookmark.
*
* Expects a $row variable with bookmark data.
*/
if (!$GLOBALS['enableWebsiteThumbnails']) {
return;
}
$thumbnailHash = md5(
$address . $GLOBALS['thumbnailsUserId'] . $GLOBALS['thumbnailsKey']
);
//echo '<a href="'. $address .'"'. $rel .' ><img class="thumbnail" src="http://www.artviper.net/screenshots/screener.php?url='.$address.'&w=120&sdx=1280&userID='.$GLOBALS['thumbnailsUserId'].'&hash='.$thumbnailHash.'" />';
echo '<img class="thumbnail" onclick="window.location.href=\''.$address.'\'" src="http://www.artviper.net/screenshots/screener.php?url='.$address.'&w=120&sdx=1280&userID='.$GLOBALS['thumbnailsUserId'].'&hash='.$thumbnailHash.'" />';
?>

View File

@ -12,12 +12,12 @@ $this->includeTemplate($GLOBALS['top_include']);
<h3><?php echo T_('Geek Stuff'); ?></h3>
<ul>
<li><a href="http://sourceforge.net/projects/semanticscuttle/">Semantic Scuttle</a> <?php echo T_('is licensed under the ');?> <a href="http://www.gnu.org/copyleft/gpl.html"><acronym title="GNU\'s Not Unix">GNU</acronym> General Public License</a> (<?php echo T_('you can freely host it on your own web server.'); ?>)</li>
<li><?php echo sprintf(T_('%1$s supports most of the <a href="http://del.icio.us/doc/api">del.icio.us <abbr title="Application Programming Interface">API</abbr></a>. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won\'t let you change the API address, ask the creator to add this setting. You never know, they might just do it.'), $GLOBALS['sitename']); ?></li>
<li><?php echo sprintf(T_('%1$s supports most of the <a href="http://www.delicious.com/help/api">del.icio.us <abbr title="Application Programming Interface">API</abbr></a>. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won\'t let you change the API address, ask the creator to add this setting. You never know, they might just do it.'), $GLOBALS['sitename']); ?></li>
<?php if(!is_null($currentUser) && $currentUser->isAdmin()): ?>
<li>SemanticScuttle v0.97.0</li>
<li>SemanticScuttle v0.98.5</li>
<?php endif ?>
</ul>

View File

@ -45,7 +45,7 @@ if (browser == "Opera") {
+ '<?php
$popupLink = 'javascript:'
. "location.href='"
. createURL('bookmarks', $GLOBALS['user'])
. addProtocolToUrl(createURL('bookmarks', $GLOBALS['user']))
. '?action=add'
. "&address='+encodeURIComponent(document.location.href)+'"
. "&title='+encodeURIComponent(document.title)+'"
@ -71,7 +71,7 @@ echo jsEscTitle(htmlspecialchars($link));
+ '<?php
$popupLink = 'javascript:'
. 'open('
. "'" . createURL('bookmarks', $GLOBALS['user'])
. "'" . addProtocolToUrl(createURL('bookmarks', $GLOBALS['user']))
. '?action=add'
. '&popup=1'
. "&address='+encodeURIComponent(document.location.href)+'"
@ -97,7 +97,7 @@ echo jsEscTitle(htmlspecialchars($link));
} else {
$('#bookmarklet').append(
'<ul>'
+ '<li><a class="bookmarklet" href="javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');location.href=\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&amp;address=\'+a+\'&amp;title=\'+t+\'&amp;description=\'+d;void 0;"><?php echo jsEscTitle(sprintf(T_('Post to %s'), $GLOBALS['sitename'])); ?><\/a><\/li>'
+ '<li><a class="bookmarklet" href="javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');location.href=\'<?php echo addProtocolToUrl(createURL('bookmarks', $GLOBALS['user'])); ?>?action=add&amp;address=\'+a+\'&amp;title=\'+t+\'&amp;description=\'+d;void 0;"><?php echo jsEscTitle(sprintf(T_('Post to %s'), $GLOBALS['sitename'])); ?><\/a><\/li>'
+ '<li>'
+ '<a class="bookmarklet" href="'
+ 'javascript:x=document;'
@ -105,7 +105,7 @@ echo jsEscTitle(htmlspecialchars($link));
+ 't=encodeURIComponent(x.title);'
+ 'd=encodeURIComponent('+selection+');'
+ 'open('
+ '\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&amp;popup=1&amp;address=\'+a+\'&amp;title=\'+t+\'&amp;description=\'+d,\'<?php echo htmlspecialchars(jsEscTitleDouble($GLOBALS['sitename'])); ?>\',\'modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=790,height=465,left=\'+(screen.width-790)/2+\',top=\'+(screen.height-425)/2'
+ '\'<?php echo addProtocolToUrl(createURL('bookmarks', $GLOBALS['user'])); ?>?action=add&amp;popup=1&amp;address=\'+a+\'&amp;title=\'+t+\'&amp;description=\'+d,\'<?php echo htmlspecialchars(jsEscTitleDouble($GLOBALS['sitename'])); ?>\',\'modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=790,height=465,left=\'+(screen.width-790)/2+\',top=\'+(screen.height-425)/2'
+ ');void 0;">'
+ '<?php echo jsEscTitle(sprintf(T_('Post to %s (Pop-up)'), $GLOBALS['sitename'])); ?>'
+ '</a>'
@ -115,3 +115,38 @@ echo jsEscTitle(htmlspecialchars($link));
}
//]]>
</script>
<script type="text/javascript">
function activateSocialApi(node) {
var baseurl = <?php echo json_encode(addProtocolToUrl(createURL())); ?>;
var socialApiData = {
// currently required
"name": <?php echo json_encode($GLOBALS['sitename']); ?>,
"iconURL": baseurl + "themes/default/images/logo.png",
"icon32URL": baseurl + "themes/default/images/logo.png",
"icon64URL": baseurl + "themes/default/images/logo.png",
"markURL": "<?php echo addProtocolToUrl(createURL('bookmarks', $GLOBALS['user'])); ?>?action=add&amp;popup=1&amp;width=800&amp;height=470&amp;address=%{url}&amp;title=%{title}&amp;description=%{description}%{text}",
"markedIcon": baseurl + "themes/default/images/logo.png",
"unmarkedIcon": baseurl + "themes/default/images/logo-empty.png",
// should be available for display purposes
"description": "Self-hosted bookmark manager",
"author": "Christian Weiske",
"homepageURL": "http://semanticscuttle.sf.net/",
// optional
"version": "0.0.3"
};
var event = new CustomEvent("ActivateSocialFeature");
node.setAttribute("data-service", JSON.stringify(socialApiData));
node.dispatchEvent(event);
}
</script>
<p>
<button onclick="activateSocialApi(this)" title="activate semanticscuttle in firefox">
Add SemanticScuttle to Firefox
</button>
</p>

View File

@ -0,0 +1,18 @@
<?php
/**
* Bookmark thumbnail image
* Shows the website thumbnail for the bookmark.
*
* Expects a $row variable with bookmark data.
*/
$thumbnailer = SemanticScuttle_Service_Factory::get('Thumbnails')->getThumbnailer();
$imgUrl = $thumbnailer->getThumbnailUrl($address, 120, 90);
if ($imgUrl !== false) {
echo '<a href="' . htmlspecialchars($address) . '">'
. '<img class="thumbnail" width="120" height="90" src="'
. htmlspecialchars($imgUrl).
'" />'
. '</a>';
}
?>

View File

@ -39,7 +39,9 @@ include('search.menu.php');
<?php if($GLOBALS['enableAdminColors']!=false && isset($userid) && $userservice->isAdmin($userid) && $pageName != PAGE_WATCHLIST) : ?>
<div style="width:70%;text-align:center;">
<img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/> <?php echo T_('Bookmarks on this page are managed by an admin user.'); ?><img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/>
<img src="<?php echo $theme->resource('images/logo_24.gif'); ?>" width="12px"/>
<?php echo T_('Bookmarks on this page are managed by an admin user.'); ?>
<img src="<?php echo $theme->resource('images/logo_24.gif'); ?>" width="12px"/>
</div>
<?php endif?>
@ -70,7 +72,7 @@ if ($userservice->isLoggedOn()) {
) {
echo ' <a href="'. createURL('tagcommondescriptionedit', $currenttag).'" title="'.T_('Edit the common description of this tag').'">';
echo !is_array($cDescription) || strlen($cDescription['cdDescription'])==0?T_('Edit the common description of this tag'):'';
echo ' <img src="'.ROOT.'images/b_edit.png" /></a>';
echo ' <img src="' . $theme->resource('images/b_edit.png') . '" /></a>';
} else if (isset($hash)) {
echo ' (<a href="'.createURL('bookmarkcommondescriptionedit', $hash).'" title="'.T_('Edit the common description of this bookmark').'">';
echo T_('Edit the common description of this bookmark').'</a>)';
@ -95,7 +97,7 @@ if($userservice->isLoggedOn()) {
if($currenttag!= '') {
echo ' <a href="'. createURL('tagedit', $currenttag).'" title="'.T_('Edit your personal description of this tag').'" >';
echo strlen($pDescription['tDescription'])==0?T_('Edit your personal description of this tag'):'';
echo ' <img src="'.ROOT.'images/b_edit.png" /></a>';
echo ' <img src="' . $theme->resource('images/b_edit.png') . '" /></a>';
}
}
?></p>
@ -105,7 +107,7 @@ if($userservice->isLoggedOn()) {
}
?>
<?php if (count($bookmarks) > 0) { ?>
<?php if (isset($bookmarks) && count($bookmarks) > 0) { ?>
<script type="text/javascript">
window.onload = playerLoad;
</script>
@ -160,6 +162,14 @@ default:
<a href="?sort=<?php echo $votingSort ?>"><?php echo T_("Voting").$votingArrow; ?></a>
<span>/</span>
<?php } ?>
<?php
if ($userservice->isLoggedOn() && $_SERVER['PHP_SELF'] !== "/index.php") {
echo '<form method="get" action="'. $_SERVER['REQUEST_URI'] .'">';
echo '<input type="hidden" name="batch" value="1"/>';
echo '<input type="submit" value="Batch tagging"/>';
echo "</form>";
}
?>
<?php
if ($currenttag!= '') {
@ -176,7 +186,6 @@ if ($currenttag!= '') {
}
}
?></p>
<?php
// PAGINATION
@ -219,10 +228,13 @@ if ($currenttag!= '') {
$brss = '';
$size = count($rsschannels);
for ($i = 0; $i < $size; $i++) {
$brss = '<a style="background:#FFFFFF" href="'. htmlspecialchars($rsschannels[$i][1]) . '"'
. ' title="' . htmlspecialchars($rsschannels[$i][0]) . '">'
. '<img src="' . ROOT . 'images/rss.gif" width="16" height="16" alt="' . htmlspecialchars($rsschannels[$i][0]) .'"/>'
. '</a>';
$brss = '<a style="background:#FFFFFF"'
. ' href="'. htmlspecialchars($rsschannels[$i][1]) . '"'
. ' title="' . htmlspecialchars($rsschannels[$i][0]) . '">'
. '<img src="' . $theme->resource('images/rss.gif') . '"'
. ' width="16" height="16"'
. ' alt="' . htmlspecialchars($rsschannels[$i][0]) .'"/>'
. '</a>';
}
$pagesBanner = '<p class="paging">'. $bfirst .'<span> / </span>'. $bprev .'<span> / </span>'. $bnext .'<span> / </span>'. $blast .'<span> / </span>'. sprintf(T_('Page %d of %d'), $page, $totalpages) ." ". $brss ." </p>\n";
@ -353,7 +365,7 @@ if ($currenttag!= '') {
$rel = ' rel="nofollow"';
}
$address = filter($row['bAddress']);
$address = $row['bAddress'];
$oaddress = $address;
// Redirection option
if ($GLOBALS['useredir']) {
@ -361,9 +373,15 @@ if ($currenttag!= '') {
}
// Admin specific design
if ($userservice->isAdmin($row['username']) && $GLOBALS['enableAdminColors']) {
if ($userservice->isAdmin($row['username'])
&& $GLOBALS['enableAdminColors']
) {
$adminBgClass = ' class="adminBackground"';
$adminStar = ' <img src="'. ROOT .'images/logo_24.gif" width="12px" title="'. T_('This bookmark is certified by an admin user.') .'" />';
$adminStar = ' <img'
. ' src="' . $theme->resource('images/logo_24.gif') . '"'
. ' width="12px"'
. ' title="' . T_('This bookmark is certified by an admin user.') . '"'
. '/>';
} else {
$adminBgClass = '';
$adminStar = '';
@ -407,7 +425,7 @@ if ($currenttag!= '') {
}
echo ' <div class="description">'. nl2br($bkDescription) ."</div>\n";
echo ' <div class="address">' . shortenString($oaddress) . "</div>\n";
echo ' <div class="address">' . htmlspecialchars(shortenString($oaddress)) . "</div>\n";
echo ' <div class="meta">'
. $cats . "\n"

View File

@ -6,11 +6,6 @@ echo '<a href="'.createURL('about').'">'.T_('About').'</a>';
echo ' - ';
echo T_("Propulsed by ");
echo " <a href=\"https://sourceforge.net/projects/semanticscuttle/\">SemanticScuttle</a>";
if($GLOBALS['enableWebsiteThumbnails']) {
// Licence to the thumbnails provider (OBLIGATORY IF YOU USE ARTVIPER SERVICE)
echo ' (Thumbnails by <script type="text/ecmascript" src="http://www.artviper.net/link.js"></script>)';
}
?>
</div>

View File

@ -25,13 +25,13 @@ $b2tservice = SemanticScuttle_Service_Factory :: get('Bookmark2Tag');
$logged_on_userid = $userservice->getCurrentUserId();
//tags from current user
$userPopularTags =& $b2tservice->getPopularTags($logged_on_userid, 25, $logged_on_userid);
$userPopularTagsCloud =& $b2tservice->tagCloud($userPopularTags, 5, 90, 175);
$userPopularTags = $b2tservice->getPopularTags($logged_on_userid, 25, $logged_on_userid);
$userPopularTagsCloud = $b2tservice->tagCloud($userPopularTags, 5, 90, 175);
$userPopularTagsCount = count($userPopularTags);
//tags from all users
$allPopularTags =& $b2tservice->getPopularTags(null, 5, $logged_on_userid);
$allPopularTagsCloud =& $b2tservice->tagCloud($allPopularTags, 5, 90, 175);
$allPopularTags = $b2tservice->getPopularTags(null, 5, $logged_on_userid);
$allPopularTagsCloud = $b2tservice->tagCloud($allPopularTags, 5, 90, 175);
$allPopularTagsCount = count($allPopularTags);

View File

@ -1,6 +1,5 @@
<?php
$this->includeTemplate($GLOBALS['top_include']);
$accessPublic = '';
$accessShared = '';
$accessPrivate = '';
@ -33,6 +32,14 @@ if (is_array($row['tags'])) {
$row['tags'] = implode(', ', $row['tags']);
}
if (! is_array($row['bAddress'])) {
$row['bAddress'] = array($row['bAddress']);
}
if (! is_array($row['bTitle'])) {
$row['bTitle'] = array($row['bTitle']);
}
$ajaxUrl = ROOT . 'ajax/'
. (
($GLOBALS['adminsAreAdvisedTagsFromOtherAdmins'] && $currentUser->isAdmin())
@ -40,18 +47,8 @@ $ajaxUrl = ROOT . 'ajax/'
: 'getcontacttags'
) . '.php';
?>
<form action="<?php echo $formaction; ?>" method="post">
<form onsubmit="var ind = 0; var cb = document.getElementById('checkbox'+ind); while (cb !== null) {var title = document.getElementById('titleField'+ind); var address = document.getElementById('address'+ind); if(cb.checked) {cb.parentNode.removeChild(cb);} else {cb.parentNode.removeChild(cb); title.parentNode.removeChild(title); address.parentNode.removeChild(address);} ind++; cb = document.getElementById('checkbox'+ind);}" action="<?php echo $formaction; ?>" method="post">
<table>
<tr>
<th align="left"><?php echo T_('Address'); ?></th>
<td><input type="text" id="address" name="address" size="75" maxlength="65535" value="<?php echo filter($row['bAddress'], 'xml'); ?>" onblur="useAddress(this)" /></td>
<td> <?php echo T_('Required'); ?></td>
</tr>
<tr>
<th align="left"><?php echo T_('Title'); ?></th>
<td><input type="text" id="titleField" name="title" size="75" maxlength="255" value="<?php echo filter($row['bTitle'], 'xml'); ?>" onkeypress="this.style.backgroundImage = 'none';" /></td>
<td> <?php echo T_('Required'); ?></td>
</tr>
<tr>
<th align="left">
<?php echo T_('Description'); ?>
@ -78,13 +75,44 @@ $ajaxUrl = ROOT . 'ajax/'
<td> <?php echo T_('Just visible by you and your contacts.'); ?>
</td>
</tr>
<?php if(! isset($batch)): ?>
<tr>
<th align="left"><?php echo T_('Tags'); ?></th>
<td class="scuttletheme">
<input type="text" id="tags" name="tags" size="75" value="<?php echo filter($row['tags'], 'xml'); ?>"/>
<input type="text" id="tags" class="tags" name="tags" size="75" value="<?php echo filter($row['tags'], 'xml'); ?>"/>
</td>
<td> <?php echo T_('Comma-separated'); ?></td>
</tr>
<?php else: ?>
<tr>
<th align="left"><?php echo 'Common tags'; ?></th>
<td class="scuttletheme">
<span><?php echo filter($commontags, 'xml'); ?></span>
</td>
<td> <?php echo 'Tags common to all those bookmarks'; ?></td>
</tr>
<tr>
<th align="left"><?php echo 'Associated tags'; ?></th>
<td class="scuttletheme">
<span><?php echo filter($alltags, 'xml'); ?></span>
</td>
<td> <?php echo 'All tags associated to those bookmarks'; ?></td>
</tr>
<tr>
<th align="left"><?php echo 'Add those tags'; ?></th>
<td class="scuttletheme">
<input type="text" id="tags" class="tags" name="tags" size="75" value="<?php echo filter($row['tags'], 'xml'); ?>"/>
</td>
<td> <?php echo T_('Comma-separated'); ?></td>
</tr>
<tr>
<th align="left"><?php echo 'Remove those tags'; ?></th>
<td class="scuttletheme">
<input type="text" id="removetags" class="tags" name="removetags" size="75" value="<?php echo filter($row['tags'], 'xml'); ?>"/>
</td>
<td> <?php echo T_('Comma-separated'); ?></td>
</tr>
<?php endif; ?>
<tr>
<th></th>
<td align="right"><small><?php echo htmlspecialchars(T_('Note: use ">" to include one tag in another. e.g.: europe>france>paris'))?></small></td>
@ -115,6 +143,9 @@ $ajaxUrl = ROOT . 'ajax/'
<input type="submit" name="delete" value="<?php echo T_('Delete Bookmark'); ?>" />
<?php
}
?>
<button type="button" id="button" title="Invert selection" onclick="var ind = 0; var cb = document.getElementById('checkbox'+ind); while (cb !== null) {var title = document.getElementById('titleField'+ind); var address = document.getElementById('address'+ind); if(cb.checked) {cb.checked=false;} else {cb.checked=true;} ind++; cb = document.getElementById('checkbox'+ind);}">Invert selection</button>
<?php
if (isset($showdelete) && $showdelete) {
echo ' (<a href="'.createURL('bookmarkcommondescriptionedit', $row['bHash']).'">';
echo T_('edit common description').'</a>)';
@ -126,14 +157,42 @@ $ajaxUrl = ROOT . 'ajax/'
<?php
} elseif (isset($referrer)) {
?>
<input type="hidden" name="referrer" value="<?php echo $referrer; ?>" />
<input type="hidden" name="referrer" value="<?php echo filter($referrer, 'xml'); ?>" />
<?php
}
?>
</td>
<td></td>
</tr>
</table>
<?php
$ind = 0;
foreach($row['bAddress'] as $index => $address) {
?>
<tr>
<td height="20px"></td>
<td><input type="checkbox" id="checkbox<?php echo $ind; ?>" checked="checked" /></td>
<td></td>
</tr>
<tr>
<th align="left"><?php echo T_('Address'); ?></th>
<td><input type="text" id="address<?php echo $ind; ?>" name="address[<?php echo $index; ?>]" size="75" maxlength="65535" value="<?php echo filter($address, 'xml'); ?>" onblur="useAddress(this)" /></td>
<td> <?php echo T_('Required'); ?></td>
</tr>
<tr>
<th align="left"><?php echo T_('Title'); ?></th>
<td><input type="text" id="titleField<?php echo $ind; ?>" name="title[<?php echo $index; ?>]" size="75" maxlength="255" value="<?php echo filter($row['bTitle'][$index], 'xml'); ?>" onkeypress="this.style.backgroundImage = 'none';" /></td>
<td> <?php echo T_('Required'); ?></td>
</tr>
<tr>
<td height="20px"></td>
<td></td>
<td></td>
</tr>
<?php
$ind++;
}
?>
</table>
</form>
<link href="<?php echo ROOT ?>js/jquery-ui-1.8.11/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css"/>
@ -156,7 +215,8 @@ jQuery(document).ready(function() {
}
//var availableTags = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"];
jQuery("input#tags").autocomplete({
//jQuery("input#tags").autocomplete({
jQuery("input.tags").autocomplete({
autoFocus: true,
minLength: 1,

View File

@ -0,0 +1,60 @@
<?php
/**
* User's own profile page: SSL client certificate settings
*
* @param array $sslClientCerts Array of SSL client certificate objects
* @param string $formaction URL where to send the forms to
* @param SemanticScuttle_Model_User_SslClientCert
* $currentCert Current SSL client certificate (may be null)
*/
?>
<h3><?php echo T_('SSL client certificates'); ?></h3>
<?php if (count($sslClientCerts)) { ?>
<table>
<thead>
<tr>
<th>Options</th>
<th><?php echo T_('Serial'); ?></th>
<th><?php echo T_('Name'); ?></th>
<th><?php echo T_('Email'); ?></th>
<th><?php echo T_('Issuer'); ?></th>
</tr>
</thead>
<tbody>
<?php foreach($sslClientCerts as $cert) { ?>
<tr <?php if ($cert->isCurrent()) { echo 'class="ssl-current"'; } ?>>
<td>
<form method="post" action="<?php echo $formaction; ?>">
<input type="hidden" name="certId" value="<?php echo $cert->id; ?>"/>
<button type="submit" name="action" value="deleteClientCert">
<?php echo T_('delete'); ?>
</button>
</form>
</td>
<td><?php echo htmlspecialchars($cert->sslSerial); ?></td>
<td><?php echo htmlspecialchars($cert->sslName); ?></td>
<td><?php echo htmlspecialchars($cert->sslEmail); ?></td>
<td><?php echo htmlspecialchars($cert->sslClientIssuerDn); ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php } else { ?>
<p><?php echo T_('No certificates registered'); ?></p>
<?php } ?>
<?php if ($currentCert) { ?>
<?php if ($currentCert->isRegistered($sslClientCerts)) { ?>
<p><?php echo T_('Your current certificate is already registered with your account.'); ?></p>
<?php } else { ?>
<p>
<form method="post" action="<?php echo $formaction; ?>">
<button type="submit" name="action" value="registerCurrentCert">
<?php echo T_('Register current certificate to automatically login.'); ?>
</button>
</form>
</p>
<?php } ?>
<?php } else { ?>
<p><?php echo T_('Your browser does not provide a certificate.'); ?></p>
<?php } ?>

View File

@ -28,6 +28,14 @@ $this->includeTemplate($GLOBALS['top_include']);
<td><input type="text" name="pMail" size="75" value="<?php echo filter($objectUser->getEmail(), 'xml'); ?>" /></td>
<td> <?php echo T_('Required'); ?></td>
</tr>
<tr>
<th align="left"><?php echo T_('Private RSS Feed'); ?></th>
<td><input type="checkbox" id="pEnablePrivateKey" name="pEnablePrivateKey" value="true" <?php echo $privateKeyIsEnabled;?> />
<label for="pEnablePrivateKey"><?php echo T_('Enable'); ?></label>&nbsp;&nbsp;&nbsp;
<input type="text" id="pPrivateKey" name="pPrivateKey" size="40" value="<?php echo $privateKey;?>" readonly="readonly" />
<a onclick="getNewPrivateKey(this); return false;"><button type="submit" name="submittedPK" value="1"><?php echo T_('Generate New Key'); ?></button></a>
</td>
</tr>
</table>
<h3><?php echo T_('Personal Details'); ?></h3>
@ -50,13 +58,15 @@ $this->includeTemplate($GLOBALS['top_include']);
<td><input type="submit" name="submitted" value="<?php echo T_('Save Changes'); ?>" /></td>
</tr>
</table>
<?php include 'editprofile-sslclientcerts.tpl.php'; ?>
<h3><?php echo T_('Actions'); ?></h3>
<table class="profile">
<tr>
<th align="left"><?php echo T_('Export bookmarks'); ?></th>
<td>
<a href="../api/export_html.php"><?php echo T_('HTML file (for browsers)')?></a> /
<a href="../api/posts_all.php"><?php echo T_('XML file (like del.icio.us)')?></a> /
<a href="../api/posts_all.php"><?php echo T_('XML file (like del.icio.us)')?></a> /
<a href="../api/export_csv.php"><?php echo T_('CSV file (for spreadsheet tools)')?></a>
</td>
</tr>

View File

@ -30,7 +30,7 @@ $this->includeTemplate($GLOBALS['top_include']);
<h3><?php echo T_('Instructions'); ?></h3>
<ol>
<li><?php echo T_('Log in to the <a href="http://del.icio.us/api/posts/all">export page at del.icio.us</a>'); ?>.</li>
<li><?php echo T_('Log in to the <a href="https://api.del.icio.us/v1/posts/all">export page at del.icio.us</a>'); ?>.</li>
<li><?php echo T_('Save the resulting <abbr title="Extensible Markup Language">XML</abbr> file to your computer'); ?>.</li>
<li><?php echo T_('Click <kbd>Browse...</kbd> to find this file on your computer. The maximum size the file can be is 1MB'); ?>.</li>
<li><?php echo T_('Select the default privacy setting for your imported bookmarks'); ?>.</li>

View File

@ -22,9 +22,14 @@ window.onload = function() {
<td><input type="password" id="password" name="password" size="20" class="required" /></td>
<td></td>
</tr>
<tr>
<th align="left"><label for="password2"><?php echo T_('Repeat Password'); ?></label></th>
<td><input type="password" id="password2" name="password2" size="20" class="required" /></td>
<td></td>
</tr>
<tr>
<th align="left"><label for="email"><?php echo T_('E-mail'); ?></label></th>
<td><input type="text" id="email" name="email" size="40" class="required" /></td>
<td><input type="text" id="email" name="email" size="40" class="required" value="<?php echo htmlspecialchars(POST_MAIL); ?>" /></td>
<td><?php echo '←'.T_(' to send you your password if you forget it')?></td>
</tr>

View File

@ -1,10 +1,13 @@
<?php
echo '<' . '?xml version="1.0" encoding="utf-8" ?' . ">\n";
?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><?php echo htmlspecialchars($feedtitle); ?></title>
<link><?php echo htmlspecialchars($feedlink); ?></link>
<title><?php echo $feedtitle; ?></title>
<link><?php echo htmlspecialchars($pagelink); ?></link>
<atom:link rel="self" type="application/rss+xml" href="<?php echo htmlspecialchars($feedlink); ?>"/>
<description><?php echo htmlspecialchars($feeddescription); ?></description>
<pubDate><?php echo date('r'); ?></pubDate>
<lastBuildDate><?php echo $feedlastupdate ?></lastBuildDate>
@ -14,6 +17,7 @@ echo '<' . '?xml version="1.0" encoding="utf-8" ?' . ">\n";
<item>
<title><?php echo htmlspecialchars($bookmark['title']); ?></title>
<link><?php echo htmlspecialchars($bookmark['link']); ?></link>
<guid><?php echo $bookmark['guid']; ?></guid>
<description><?php echo htmlspecialchars($bookmark['description']); ?></description>
<dc:creator><?php echo htmlspecialchars($bookmark['creator']); ?></dc:creator>
<pubDate><?php echo $bookmark['pubdate']; ?></pubDate>
@ -23,4 +27,4 @@ echo '<' . '?xml version="1.0" encoding="utf-8" ?' . ">\n";
</item>
<?php endforeach; ?>
</channel>
</rss>
</rss>

View File

@ -1,7 +1,7 @@
<?php
$b2tservice =SemanticScuttle_Service_Factory::get('Bookmark2Tag');
$commonTags =& $b2tservice->getRelatedTagsByHash($hash);
$commonTags =& $b2tservice->tagCloud($commonTags, 5, 90, 225, 'alphabet_asc');
$commonTags = $b2tservice->getRelatedTagsByHash($hash);
$commonTags = $b2tservice->tagCloud($commonTags, 5, 90, 225, 'alphabet_asc');
if ($commonTags && count($commonTags) > 0) {
?>

View File

@ -14,7 +14,7 @@ require_once('sidebar.linkedtags.inc.php');
/* Manage input */
$user = isset($user)?$user:'';
$userid = isset($userid)?$userid:0;
$currenttag = isset($currenttag)?$currenttag:'';
$currenttag = isset($currenttag) ? str_replace('+', ',', $currenttag) : '';
//$summarizeLinkedTags = isset($summarizeLinkedTags)?$summarizeLinkedTags:false;
$logged_on_userid = $userservice->getCurrentUserId();

View File

@ -14,8 +14,8 @@ $logged_on_userid = $userservice->getCurrentUserId();
if ($logged_on_userid === false) {
$logged_on_userid = NULL;
}
$popularTags =& $b2tservice->getPopularTags($userid, $popCount, $logged_on_userid);
$popularTags =& $b2tservice->tagCloud($popularTags, 5, 90, 225, 'alphabet_asc');
$popularTags = $b2tservice->getPopularTags($userid, $popCount, $logged_on_userid);
$popularTags = $b2tservice->tagCloud($popularTags, 5, 90, 225, 'alphabet_asc');
if ($popularTags && count($popularTags) > 0) {
?>

View File

@ -10,7 +10,7 @@ if ($logged_on_userid === false) {
$logged_on_userid = NULL;
}
$recentTags = $b2tservice->getPopularTags($userid, $popCount, $logged_on_userid, $GLOBALS['defaultRecentDays']);
$recentTags =& $b2tservice->tagCloud($recentTags, 5, 90, 225, 'alphabet_asc');
$recentTags = $b2tservice->tagCloud($recentTags, 5, 90, 225, 'alphabet_asc');
if ($recentTags && count($recentTags) > 0) {
?>

View File

@ -0,0 +1,23 @@
<?php if ($GLOBALS['enableAdminColors'] != false
&& isset($userid) && $userservice->isAdmin($userid)
): ?>
<div id="sidebar" class="adminBackground">
<?php else: ?>
<div id="sidebar">
<?php endif ?>
<?php
echo $GLOBALS['sidebarTopMessage'].' ';
if (isset($sidebar_blocks) && count($sidebar_blocks)) {
$size = count($sidebar_blocks);
for ($i = 0; $i < $size; $i++) {
$this->includeTemplate('sidebar.block.'. $sidebar_blocks[$i]);
}
}
echo $GLOBALS['sidebarBottomMessage'];
?>
</div>

View File

@ -36,7 +36,6 @@ window.onload = function() {
<td></td>
</tr>
</table>
</p>
<?php if (isset($referrer)): ?>
<div><input type="hidden" name="referrer" value="<?php echo $referrer; ?>" /></div>

View File

@ -21,7 +21,6 @@ window.onload = function() {
<td></td>
</tr>
</table>
</p>
<?php if (isset($referrer)): ?>
<div><input type="hidden" name="referrer" value="<?php echo $referrer; ?>" /></div>

View File

@ -28,7 +28,6 @@ window.onload = function() {
</tr>
</table>
</p>
<?php if (isset($referrer)): ?>
<div><input type="hidden" name="referrer" value="<?php echo $referrer; ?>" /></div>

View File

@ -0,0 +1,85 @@
<?php
if ($userservice->isLoggedOn() && is_object($currentUser)) {
$cUserId = $userservice->getCurrentUserId();
$cUsername = $currentUser->getUsername();
?>
<ul id="navigation">
<li><a href="<?php echo createURL(''); ?>"><?php echo T_('Home'); ?></a></li>
<li><a href="<?php echo createURL('bookmarks', $cUsername); ?>"><?php echo T_('Bookmarks'); ?></a></li>
<li><a href="<?php echo createURL('alltags', $cUsername); ?>"><?php echo T_('Tags'); ?></a></li>
<li><a href="<?php echo createURL('watchlist', $cUsername); ?>"><?php echo T_('Watchlist'); ?></a></li>
<li><a href="<?php echo $userservice->getProfileUrl($cUserId, $cUsername); ?>"><?php echo T_('Profile'); ?></a></li>
<li><a href="<?php echo createURL('bookmarks', $cUsername . '?action=add'); ?>"><?php echo T_('Add a Bookmark'); ?></a></li>
<?php if (isset($loadjs)) :?>
<li class="access"><button type="button" id="button" title="shoulder surfing protection" onclick="if(! $.cookie('noshoulderSurfingProtection')) {toggle();} else {$.removeCookie('noshoulderSurfingProtection', { path: '/' }); location.reload();}"><?php if(! isset($_COOKIE["noshoulderSurfingProtection"])) {echo "Protected";} else {echo "Unprotected";} ?></button></li>
<?php endif ?>
<li class="access"><?php echo $cUsername?><a href="<?php echo ROOT ?>?action=logout">(<?php echo T_('Log Out'); ?>)</a></li>
<li><a href="<?php echo createURL('about'); ?>"><?php echo T_('About'); ?></a></li>
<?php if($currentUser->isAdmin()): ?>
<li><a href="<?php echo createURL('admin', ''); ?>"><?php echo '['.T_('Admin').']'; ?></a></li>
<?php endif; ?>
</ul>
<?php if (isset($loadjs)) :?>
<div id="password-form" style="background:white; z-index: 2; position:absolute; top:55px; right:10px; visibility:hidden;">
<form id="noshoulderSurfingProtectionPassword">
<input type="password" name="password" id="password" size="40" placeholder="Type your password then press Enter to unprotect."/>
<!-- Allow form submission with keyboard without duplicating the dialog button -->
<input type="submit" tabindex="-1" style="position:absolute; top:-1000px"/>
</form>
</div>
<script>
// Prevents browser autocompletion. autocomplete="off" as input type="password" attribute only works with HTML5.
setTimeout(
clear(),
1000 //1,000 milliseconds = 1 second
);
function clear() {
$('#password').val('');
}
function toggle() {
if ($("#password-form").css("visibility") == "visible") {
$("#password-form").css("visibility", "hidden");
}
else {
clear();
$("#password-form").css("visibility", "visible");
}
}
$( "#noshoulderSurfingProtectionPassword" ).submit(function( event ) {
$.post(
'<?php echo ROOT ?>ajax/checkpassword.php',
{
password : $("#password").val(),
},
function(data) {
if(data == 'true') {
$.cookie('noshoulderSurfingProtection', 'null', { path: '/' });
location.reload();
}
},
'text'
);
event.preventDefault();
});
</script>
<?php endif ?>
<?php
} else {
?>
<ul id="navigation">
<li><a href="<?php echo createURL(''); ?>"><?php echo T_('Home'); ?></a></li>
<li><a href="<?php echo createURL('populartags'); ?>"><?php echo T_('Popular Tags'); ?></a></li>
<li><a href="<?php echo createURL('about'); ?>"><?php echo T_('About'); ?></a></li>
<li class="access"><a href="<?php echo createURL('login'); ?>"><?php echo T_('Log In'); ?></a></li>
<?php if ($GLOBALS['enableRegistration']) { ?>
<li class="access"><a href="<?php echo createURL('register'); ?>"><?php echo T_('Register'); ?></a></li>
<?php } ?>
</ul>
<?php
}
?>

View File

@ -0,0 +1,84 @@
<?php echo '<'; ?>?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<title><?php echo filter($GLOBALS['sitename'] .(isset($pagetitle) ? ' » ' . $pagetitle : '')); ?></title>
<link rel="icon" type="image/png" href="<?php echo $theme->resource('icon.png');?>" />
<link rel="stylesheet" type="text/css" href="<?php echo $theme->resource('scuttle.css');?>" />
<link rel="search" type="application/opensearchdescription+xml" href="<?php echo ROOT ?>api/opensearch.php" title="<?php echo htmlspecialchars($GLOBALS['sitename']) ?>"/>
<?php
if (isset($rsschannels)) {
$size = count($rsschannels);
for ($i = 0; $i < $size; $i++) {
echo ' <link rel="alternate" type="application/rss+xml" title="'
. htmlspecialchars($rsschannels[$i][0]) . '"'
. ' href="'. htmlspecialchars($rsschannels[$i][1]) .'" />' . "\n";
}
}
?>
<?php if (isset($loadjs)) :?>
<?php if (DEBUG_MODE) : ?>
<script type="text/javascript" src="<?php echo ROOT_JS ?>jquery-1.4.2.js"></script>
<script type="text/javascript" src="<?php echo ROOT_JS ?>jquery.jstree.js"></script>
<script type="text/javascript" src="<?php echo ROOT_JS ?>jquery.cookie-1.4.1.js"></script>
<?php else: ?>
<script type="text/javascript" src="<?php echo ROOT_JS ?>jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="<?php echo ROOT_JS ?>jquery.jstree.min.js"></script>
<script type="text/javascript" src="<?php echo ROOT_JS ?>jquery.cookie-1.4.1.js"></script>
<?php endif ?>
<script type="text/javascript" src="<?php echo ROOT ?>jsScuttle.php"></script>
<?php endif ?>
</head>
<?php
$bodystyle = '';
if (isset($_GET['popup'])) {
if (isset($_GET['height'])) {
$bodystyle .= 'height:' . intval($_GET['height']) . 'px;';
}
if (isset($_GET['width'])) {
$bodystyle .= 'width:' . intval($_GET['width']) . 'px;';
}
if ($bodystyle != '') {
$bodystyle = ' style="' . $bodystyle . '"';
}
}
?>
<body<?php echo $bodystyle; ?>>
<?php
$headerstyle = '';
if (isset($_GET['popup'])) {
$headerstyle = ' class="popup"';
}
?>
<div id="header" <?php echo $headerstyle; ?>>
<h1><a href="<?php echo ROOT ?>"><?php echo $GLOBALS['sitename']; ?></a></h1>
<?php
if(!isset($_GET['popup'])) {
$this->includeTemplate('toolbar.inc');
}
?></div>
<?php
if (isset($subtitlehtml)) {
echo '<h2>' . $subtitlehtml . "</h2>\n";
} else if (isset($subtitle)) {
echo '<h2>' . htmlspecialchars($subtitle) . "</h2>\n";
}
if(DEBUG_MODE) {
echo '<p class="error">'. T_('Admins, your installation is in "Debug Mode" ($debugMode = true). To go in "Normal Mode" and hide debugging messages, change $debugMode to false into config.php.') ."</p>\n";
}
if (isset($error) && $error!='') {
echo '<p class="error">'. $error ."</p>\n";
}
if (isset($msg) && $msg!='') {
echo '<p class="success">'. $msg ."</p>\n";
}
if (isset($tipMsg) && $tipMsg!='') {
echo '<p class="tipMsg">'. $tipMsg ."</p>\n";
}
?>

Some files were not shown because too many files have changed in this diff Show More