Compare commits

...

572 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
b57c8d4581 do not automatically store user id in session 2011-05-12 19:23:53 +02:00
Christian Weiske
aea9c9ddbb fix a test that failed when using a base URL without protocol 2011-05-12 19:09:30 +02:00
Christian Weiske
f647c48477 reformat userservice::getWatchNames 2011-05-12 09:22:04 +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
dda05f5cc7 SQL schema version table to ease future database upgrades 2011-05-04 08:02:33 +02:00
Christian Weiske
69e58d8632 Support HTTPS connections when $root is not configured 2011-05-04 07:24:52 +02:00
Christian Weiske
e2c4b53ecb update changelog; bug #3251877 has been fixed with the query switch 2011-05-03 19:21:26 +02:00
Christian Weiske
69d0ef4ff5 update changelog 2011-05-03 19:17:28 +02:00
Christian Weiske
c8a5f29677 show proper error message when url is invalid 2011-05-03 19:15:36 +02:00
Christian Weiske
4a3fdcc4dd rename test method 2011-05-03 19:10:30 +02:00
Christian Weiske
fb11021ed7 do not add bookmarks with an invalid URL 2011-05-03 19:10:12 +02:00
Christian Weiske
218ac05e71 docblock for isValidUrl method 2011-05-03 09:19:08 +02:00
Christian Weiske
2077464d46 begin bookmark model class with URL validation method 2011-05-03 09:14:32 +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
40b4674e47 exclude database layer files from coverage 2011-04-15 19:22:19 +02:00
Christian Weiske
a1989cff06 add test to search for multiple tags, which fails currently 2011-04-15 19:15:57 +02:00
Christian Weiske
0f0a95998e use correct url 2011-04-15 08:00:26 +02:00
Christian Weiske
b2c48977bb use xml parser, not html 2011-04-15 07:56:50 +02:00
Christian Weiske
a25838b267 Fix bug #3097187: Using opensearch with two tags does not work in Firefox 2011-04-15 07:55:06 +02:00
Christian Weiske
5d22905ce7 verify we get the correct search URL 2011-04-14 17:04:57 +02:00
Christian Weiske
8a87a245b8 test opensearch api content type 2011-04-14 16:58:47 +02:00
Christian Weiske
dbccc1781e remove fixme 2011-04-14 16:55:51 +02:00
Christian Weiske
f5ac88ea87 test that opensearch link is the main page HTML head 2011-04-14 16:53:46 +02:00
Christian Weiske
542824a9ba include HTTP_Request2 in api base file 2011-04-14 16:53:09 +02:00
Christian Weiske
bdebe6598c use bootstrap file declared in phpunit.xml and do not include it in every single test file. also get rid of the PHPUnit_MAIN_METHOD declarations since using phpunit directly is preferred 2011-04-12 09:29:59 +02:00
Christian Weiske
90f29d6e67 first test for service factory 2011-04-12 08:47:44 +02:00
Christian Weiske
36ff61b38e fix E_NOTICE in rss when calling i.e. http://bm.bogo/rss.php/test?sort=date_desc 2011-04-07 19:04:32 +02:00
Christian Weiske
12c77161ac move doc-todo to doc-todo file 2011-04-06 19:03:52 +02: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
Christian Weiske
599ac400f2 update changelog with jquery merge 2011-04-05 19:05:31 +02:00
Christian Weiske
cbf36891ae set width of autocomplete dropdown 2011-04-05 19:02:52 +02:00
Christian Weiske
705d016301 move bookmarklet code to own template file 2011-04-05 18:56:51 +02:00
Christian Weiske
1527555a96 restructure opera bookmarklet popup code (doesnt work currently :)) and make normal opera bookmarklet code a bit easier to read 2011-04-04 23:11:05 +02:00
Christian Weiske
361c94895d explain opera button commands 2011-04-04 22:26:19 +02:00
Christian Weiske
28460d52cb end user docs todo 2011-04-04 22:26:00 +02:00
Christian Weiske
51763183e0 FINALLY get the first opera bookmarklet working, with cleaner code now 2011-04-04 22:07:39 +02:00
Christian Weiske
43974a15f2 make popup bookmarklet work in firefox when the title contains double and single quotes. opera still broken, though 2011-04-01 08:17:01 +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
Christian Weiske
7a45f330a7 re-enable browser bookmarklets after fixing some naaaaaaaaaaaaaasty bugs with site titles that have special chars in them 2011-03-31 19:13:07 +02: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
Christian Weiske
28c8cdaf58 make dynamictags (tagcloud) work again 2011-03-30 19:20:26 +02:00
Christian Weiske
c7c702f544 begin to fix dynamictags for xhtml compatibility 2011-03-29 18:04:26 +02:00
Christian Weiske
407daf0bfa work around minLength problem in jquery-ui-autocomplete 2011-03-29 08:05:15 +02:00
Christian Weiske
24bb9eea92 do not load all css files 2011-03-29 08:02:37 +02:00
Christian Weiske
13fb8739db split words also by =, < and > 2011-03-29 07:57:35 +02:00
Christian Weiske
3f6bf4a5eb update from 1.8.5 to jquery-ui 1.8.11 2011-03-29 07:54:47 +02:00
Christian Weiske
5c1d75ae65 use getadmintags.php if configured so 2011-03-28 19:24:44 +02:00
Christian Weiske
833dde3f53 jquey-autocomplete works! 2011-03-28 19:17:51 +02:00
Christian Weiske
a5bd778929 introduce assertResponseJson200 for API/ajax tests and use it 2011-03-28 08:34:12 +02:00
Christian Weiske
1dfff5d3d8 add tests for getadmintags beginsWith and limit parameters 2011-03-28 08:01:02 +02:00
Christian Weiske
a1545004f2 rewrite ajax/getadmintags.php 2011-03-26 17:04:21 +01:00
Christian Weiske
a756799ef4 move setUnittestConfig to TestBaseApi since it makes only sense to use it there 2011-03-26 17:04:00 +01:00
Christian Weiske
361c18469a add new feature: allow unit test mode enabling via HTTP GET parameter 2011-03-26 15:09:22 +01:00
Christian Weiske
0935c98499 test the limit parameter 2011-03-26 13:55:46 +01:00
Christian Weiske
78654369e9 test for beginsWith parameter and a bugfix :) 2011-03-26 11:54:47 +01:00
Christian Weiske
0f9d06c664 first working unittest for ajax/getcontacttags with login! 2011-03-26 10:00:18 +01:00
Christian Weiske
6d49b0622d begin modifying ajax/getcontacttags 2011-03-25 19:26:42 +01:00
Christian Weiske
db71e63467 begin with ajax unittests - but they do not work yet 2011-03-25 19:26:21 +01:00
Christian Weiske
d6e99db40d do not generate invalid SQL when called with a not-so valid array 2011-03-25 08:00:32 +01:00
Christian Weiske
e667feb0ca beginsWith-parameter for getPopulartags, getContactTags and getAdminTags 2011-03-25 07:44:07 +01:00
Christian Weiske
d761abb05e docblock for deleteAll 2011-03-24 19:11:06 +01:00
Christian Weiske
e1370d949c update changelog 2011-03-24 19:09:19 +01:00
Christian Weiske
30f84b3ca3 fix privacy protection issue when fetching tags of several users 2011-03-24 19:07:50 +01:00
Christian Weiske
3f57237b88 make getPopularTags a tiny bit easier 2011-03-24 08:50:18 +01:00
Christian Weiske
0f481a99ea fix docblock 2011-03-24 08:45:03 +01:00
Christian Weiske
3828cfe6d6 replace assertType with assertInternalType to please phpunit 2011-03-24 08:41:02 +01:00
Christian Weiske
637e276ac7 unittest for Bookmark2Tag::getContactTags, CS and docblock 2011-03-24 08:36:54 +01:00
Christian Weiske
cb28cd3371 unittest for getAdminTags as well as CS and docblock fixes on it 2011-03-23 19:11:38 +01:00
Christian Weiske
66c60880d2 rename three to thr to make the code look nicer 2011-03-23 19:00:25 +01:00
Christian Weiske
5c480c9bab format getPopularTags and add docblock 2011-03-23 18:52:01 +01:00
Christian Weiske
9f46e9f3ff getPopularTags is fully covered now 2011-03-23 08:58:20 +01:00
Christian Weiske
821c17d9e3 exclude tests directory from coverage 2011-03-23 08:54:40 +01:00
Christian Weiske
7d31d9d165 test for the days parameter 2011-03-23 08:33:49 +01:00
Christian Weiske
d4ccb1d3d3 first unit tests for Bookmark2Tag::getPopularTags 2011-03-23 08:23:36 +01:00
Christian Weiske
f67250a720 do not error out when the bookmark cannot be saved 2011-03-22 21:08:17 +01:00
Christian Weiske
21c583a4cd autocomplete with jquery (hardcoded tag list for now) 2011-03-22 18:20:37 +01:00
Christian Weiske
abc2ca6f79 add jquery-ui with autocomplete 2011-03-22 18:06:43 +01:00
Christian Weiske
0717da92ae remove fcbkcomplete javascript and css; we will be using jquery autocomplete 2011-03-22 17:57:29 +01:00
Christian Weiske
bc178983b3 Merge branch 'master' into jquery
Conflicts:
	doc/ChangeLog
2011-03-20 22:15:34 +01:00
Christian Weiske
8146646a0e prepare jquery autocomplete (does not work yet) 2011-03-17 08:46:15 +01:00
Christian Weiske
975809a834 unit test for the new SemanticScuttle_Model_UserArray class 2011-03-15 19:18:57 +01:00
Christian Weiske
82ada0d75f Implement request #3054906: Show user's full name instead of nickname 2011-03-15 19:13:14 +01:00
Christian Weiske
3e9e2154a6 Fix bug #3187177: Wrong URL / Export XML Bookmarks 2011-03-15 07:59:03 +01:00
bretticvs
65bd4bfab8 Updates for feature request 3164348: Make default privacy configurable. 2011-03-15 07:53:39 +01:00
Christian Weiske
4cc46f2686 get rid of phpunits warnings about deprecated assertType usages 2011-02-18 08:01:18 +01:00
Christian Weiske
0dd5540bfb Fix bug #3065284: AjaxVote problem with Webkit browsers 2011-02-16 08:49:01 +01:00
Christian Weiske
66ee4cbe40 set release date of 0.97.2 2011-02-16 00:45:06 +01:00
Christian Weiske
525b509bd2 remove svntag task from build file; we do not have svn anymore 2011-02-16 00:42:45 +01:00
Christian Weiske
4b6e2ea2bc another merged bugfix 2011-02-15 08:00:00 +01:00
Christian Weiske
96f7172de0 move changes into 0.97.2 where I merged them 2011-02-15 07:56:20 +01:00
Christian Weiske
a46146d016 Fix bug #3178597: Broken link to context in gsearch admin index page 2011-02-14 18:13:59 +01:00
Christian Weiske
6e46a9329e fcbkcomplete files 2011-02-14 17:55:48 +01:00
Christian Weiske
6d752be4de documentation todo 2011-02-14 17:53:31 +01:00
Christian Weiske
966fdf808c rename $range to $status as it is used in all other methods; add privacy to the parameter description so we find it again next time 2011-02-09 07:15:56 +01:00
Christian Weiske
2c4bf8dacf make unittests run with phpunit 3.5.x 2011-02-02 23:08:43 +01:00
Christian Weiske
5a8327be1d Fix bug #3111254: Search in my_watchlist results in error 2010-11-19 07:06:08 +01:00
Christian Weiske
29e7cf1aa5 Fix bug #3111254: Search in my_watchlist results in error 2010-11-19 06:51:01 +01:00
Christian Weiske
77f4b48f9d fix broken XML 2010-11-02 19:14:31 +01:00
Christian Weiske
9c412f89ff we do not need the entities anymore since we will be using the characters themselves now 2010-11-02 19:09:27 +01:00
Christian Weiske
a04938f559 get rid of arrow entities 2010-11-02 19:07:59 +01:00
Christian Weiske
10ee2e79cc fix bookmark adding in strict mode 2010-10-29 22:35:22 +02:00
Christian Weiske
548d95d132 remove jqueryui, we will be using FCBKcomplete 2010-10-26 18:16:34 +02:00
Christian Weiske
d94f6bdd2e add jqueryui 1.8.5 2010-10-26 18:05:54 +02:00
Christian Weiske
c2875e45ab makde linked block look nice in non-strict mode in opera and chrome 2010-10-14 08:23:40 +02:00
Christian Weiske
8fd61c0d8d make sidebar work with chrome and opera in non-strict mode 2010-10-14 08:21:13 +02:00
Christian Weiske
52e65759bd make linked tags work on opera - "parent" is apparently a reserved word 2010-10-13 19:18:42 +02:00
Christian Weiske
69cac0dd84 use ROOT_JS for jstree theme includes 2010-10-13 19:01:49 +02:00
Christian Weiske
5e1b9533ee load minified javascript if debug mode is off; add minified version (generated with "yuicompressor --nomunge") of jstree 2010-10-13 18:58:46 +02:00
Christian Weiske
45cbe47f81 move jstree into a version-specific directory so we can update it more easily 2010-10-09 17:04:52 +02:00
Christian Weiske
ea3beb1690 put jquery+jstree into top template since we need it most times 2010-10-09 16:58:20 +02:00
Christian Weiske
001534eb2b make export_html work in strict mode, too 2010-10-09 13:16:41 +02:00
Christian Weiske
2d90851b33 fix menu2 2010-10-09 13:13:34 +02:00
Christian Weiske
7b56d8c0ad make tree menu look proper 2010-10-09 13:12:16 +02:00
Christian Weiske
efdcf11bb0 activate strict xhtml mode only on debug mode 2010-10-09 13:09:46 +02:00
Christian Weiske
b4f9d3b126 fix E_NOTICE in tag2tagadd and make tag2tagadd xhtml valid 2010-10-09 13:06:09 +02:00
Christian Weiske
6bf4e76495 make add/del tag nav links work again 2010-10-09 13:03:55 +02:00
Christian Weiske
1263a62179 make watchlist valid xhtml 2010-10-09 12:57:17 +02:00
Christian Weiske
c7a77dcb4c make admin page valid 2010-10-09 12:54:33 +02:00
Christian Weiske
6c85981406 make edit profile page valid 2010-10-09 12:53:45 +02:00
Christian Weiske
129926f1e7 fix jstree xhtml bug 2010-10-09 12:43:10 +02:00
Christian Weiske
2e89b28ed9 embed the delete link directly in html instead of using javascript 2010-10-09 12:15:11 +02:00
Christian Weiske
894011dd0f make the short date a valid ISO date format. 2010-10-09 12:14:34 +02:00
Christian Weiske
f359fd685f make the page valid and keep chromium happy 2010-10-09 12:09:39 +02:00
Christian Weiske
48cd84921f make the page valid 2010-10-09 12:09:25 +02:00
Christian Weiske
22e46a9b45 make linkedtags sidebar tree menu work with jquery/jstree now 2010-10-09 10:20:14 +02:00
Christian Weiske
aaf293b18d make the bookmark page valid xhtml 2010-10-09 10:18:52 +02:00
Christian Weiske
be126cc958 tests for getadminlinkedtags 2010-10-08 17:43:05 +02:00
Christian Weiske
cd023dea53 scripts to dump and restore the semanticscuttle database quickly - useful to keep the database even when running unit tests 2010-10-08 16:59:04 +02:00
Christian Weiske
8e3daac73e we do not need that service 2010-10-07 19:46:55 +02:00
Christian Weiske
20cd1969d1 prettier html in menu2 tags 2010-10-07 19:46:20 +02:00
Christian Weiske
aa6b6863b8 CS on constants 2010-10-07 19:02:06 +02:00
Christian Weiske
b812deefa1 give admin tags a link href :) 2010-10-07 18:59:27 +02:00
Christian Weiske
24e344f787 remove dojo css 2010-10-01 21:37:53 +02:00
Christian Weiske
df5aca497a remove unneeded dojo code from menu2 2010-10-01 21:36:40 +02:00
Christian Weiske
bd92516e6f make the admin tag menu behave correctly now and show only arrows on nodes that have children 2010-10-01 21:34:11 +02:00
Christian Weiske
cb1d41054b make adminlinkedtags (menu2Tags) finally work with jquery 2010-10-01 18:21:33 +02:00
Christian Weiske
04d360dadb CS, docblocks 2010-10-01 18:21:16 +02:00
Christian Weiske
b53b77d0dc make sidebar menu2 use jquery.jstree. ajax loading of subtags is still missing 2010-09-30 19:12:49 +02:00
Christian Weiske
95c05e49a7 remove deprecate split() 2010-09-30 07:58:07 +02:00
Christian Weiske
2d31b55b24 merge master 2010-09-30 07:46:51 +02:00
cweiske
e1f9d9e3a0 merge changelog from 0.97 branch
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@781 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 22:01:29 +00:00
cweiske
8e2b25a095 api/posts/add respects the "replace" parameter now
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@777 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:57:30 +00:00
cweiske
66af94feaf reformat api/posts/add and document it better
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@776 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:56:10 +00:00
cweiske
3ff661c0e0 send 400 status code if a parameter is missing
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@775 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:55:14 +00:00
cweiske
da272b5a20 check datetime setting
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@774 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:53:57 +00:00
cweiske
c9398ccd5b first tests for api/posts/add
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@773 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:52:59 +00:00
cweiske
2f3b23f96a first tests for api/posts/add
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@772 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:52:01 +00:00
cweiske
20ec8b4958 test for api/posts/update
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@771 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:50:38 +00:00
cweiske
70c39a8eea delicious returns a proper error message when deleting non-existant items, which we do now, too
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@770 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-29 20:49:14 +00:00
cweiske
22c9a01ee8 rewrite api/posts/delete to be more secure and add unit tests for it
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@769 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-28 22:14:31 +00:00
cweiske
df8216d607 execute api tests
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@768 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-28 22:12:55 +00:00
cweiske
b31886b67a tests for deleting bookmarks via the API. two of them fail currently because of a security issue
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@767 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-28 22:11:59 +00:00
cweiske
6b3f1d476e update docblocks
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@766 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-28 22:10:53 +00:00
cweiske
b9256b1437 add header to httpauth.inc.php
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@765 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-28 22:09:58 +00:00
cweiske
f20135d16a add gettext changelog entry
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@764 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-28 22:08:58 +00:00
cweiske
da20b90bba update php-gettext to 1.0.10
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@763 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-28 22:08:02 +00:00
Christian Weiske
5565b0695f begin converting menu2 to jquery 2010-09-28 18:48:37 +02:00
Christian Weiske
3f78133df6 add gettext changelog entry 2010-09-28 08:54:25 +02:00
Christian Weiske
8da16ca4a6 update php-gettext to 1.0.10 2010-09-28 08:53:03 +02:00
cweiske
15b8b6ab23 now we have tests for all history all methods
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@762 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-27 20:49:01 +00:00
cweiske
42666d0991 test automatic search history deletion
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@761 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-27 20:47:41 +00:00
cweiske
a242689285 defined main method before including includes
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@760 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-27 20:46:45 +00:00
cweiske
bcb817c50d defined main method before including includes
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@759 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-27 20:45:51 +00:00
cweiske
ab618a8908 test deleteall in searchhistory
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@758 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-27 20:44:29 +00:00
cweiske
f0456530b4 Fix bug #3074816: French translation breaks edit javascript
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@757 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-27 20:43:35 +00:00
cweiske
eb105d379b tell which test covers which method
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@756 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:29:51 +00:00
cweiske
84224c3294 explain $sizeSearchHistory
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@755 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:28:54 +00:00
cweiske
93e5201658 add some new tests
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@754 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:10:54 +00:00
cweiske
5c65da5bff fix nasty bug with $withResults in getAllSearches()
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@753 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:09:55 +00:00
cweiske
daee83fd2c reformat the code (CS)
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@752 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:08:44 +00:00
cweiske
f52cba5cb3 make html more readable
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@751 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:07:36 +00:00
cweiske
8b45ba9e75 escape the installation name; html code was broken when one had quotes in the name
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@750 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:06:31 +00:00
cweiske
fbf28d0753 give bookmarks.tpl.php nice looking generated html code
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@749 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-26 22:05:20 +00:00
cweiske
a62dfd6d70 Fix CS, fix docblocks
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@748 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:35:11 +00:00
cweiske
647a13499e Move user IP resolution into own class method
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@747 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:34:47 +00:00
cweiske
6fb9201996 update description
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@746 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:34:25 +00:00
cweiske
b17e8f940c Fix bug #3073215: Updating bookmark time does not work
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@745 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:34:05 +00:00
cweiske
ea4c9fa4f7 update changelog
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@744 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:33:38 +00:00
cweiske
e3f7ed95cd implement patch 3059829: update FR_CA translation
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@743 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:33:15 +00:00
cweiske
4faa30a7e0 update french translations
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@742 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:32:54 +00:00
cweiske
4b79fdc6a6 update database optimization todo
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@741 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:32:27 +00:00
cweiske
43c7481da2 fix typo
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@740 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:32:09 +00:00
cweiske
c7c94fec72 update main translation file from source code
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@739 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:31:51 +00:00
cweiske
9807c70fb9 update TODO
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@738 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:31:28 +00:00
cweiske
b5eee3e761 finally fix the problem that watchlist count tests failed every second alltests run
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@737 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:31:10 +00:00
cweiske
17a1595b31 add more countother-watchlist tests that are simpler than the previous test
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@736 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-23 07:30:49 +00:00
cweiske
930cfd784a changelog
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@735 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-14 19:21:19 +00:00
cweiske
7fefe84b2e allow debugging of connection errors
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@734 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-09-14 19:20:31 +00:00
cweiske
3ff9d9f574 ignore property files
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@732 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-08-22 12:55:51 +00:00
cweiske
9b9c592774 add package dep
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@724 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-08-22 12:46:13 +00:00
cweiske
1e52fa69c7 re-enable rsync to/from sourceforge
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@723 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-08-22 12:45:47 +00:00
cweiske
603cb2e544 use our own index file instead of pirum generated index
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@722 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-08-22 12:45:32 +00:00
cweiske
71aaf514b1 add sourceforge logo to pirum html file
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@721 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-08-22 12:45:14 +00:00
cweiske
19bcf4933f make pear channel update deployment work via phing!
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@720 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-08-22 11:10:15 +00:00
cweiske
05832245e2 Merge branch 'pearpkg'
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@717 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-08-21 23:47:56 +00:00
Christian Weiske
25baf614b8 package generation is fully working now 2010-08-22 01:46:20 +02:00
Christian Weiske
b243ecd53f remove unneeded code 2010-08-22 01:33:58 +02:00
Christian Weiske
8fd5efb7c7 make test running on installed pear package work: pear run-tests -pu __uri/semanticscuttle 2010-08-22 01:32:14 +02:00
Christian Weiske
f93aa6c7ac make files use pear directories 2010-08-22 01:26:30 +02:00
Christian Weiske
aba3327b5b time to test the package 2010-08-22 01:07:29 +02:00
Christian Weiske
eaa847a93d package.xml now looks really good 2010-08-22 01:04:03 +02:00
Christian Weiske
4d9b6950cf on the way making package.xml better 2010-08-22 00:57:31 +02:00
Christian Weiske
d51768ab40 nearly there; using d51pearpkg2 now 2010-08-22 00:25:54 +02:00
Christian Weiske
8798309bfe basic package.xml generation with native pearpkg2 task - does not really work since file roles are not supported 2010-08-12 22:01:48 +02:00
Christian Weiske
95887ff823 update readme 2010-08-12 21:08:50 +02:00
Christian Weiske
0a8dadf87e Merge branch 'master' into pearpkg 2010-08-12 20:49:35 +02:00
mensonge
d80fcf8de6 Change "localhost" into 127.0.0.1 because it avoids a bug in Windows Seven.
http://serverfault.com/questions/4689/windows-7-localhost-name-resolution-is-handled-within-dns-itself-why

git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@716 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-07-21 18:44:54 +00:00
cweiske
31570df64c Fix bug getTagsForBookmarks() that fetched all tags, see http://sourceforge.net/projects/semanticscuttle/forums/forum/759510/topic/3752670 for details
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@715 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-07-09 10:04:35 +00:00
cweiske
1962e3d2bc update upgrade.txt file and ajust changelog
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@713 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-06-09 06:05:48 +00:00
cweiske
7333049082 prepare release of 0.97.0
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@712 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-06-09 05:59:51 +00:00
cweiske
549cae3de4 put sergey's name in the russian translation file
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@711 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-06-09 05:58:48 +00:00
cweiske
54d3ac4a79 update changelog
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@710 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-05-03 06:26:19 +00:00
cweiske
a95280c935 add compiled russian translation
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@709 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-05-03 06:26:00 +00:00
cweiske
b98ba3e0bd Revert "Vietnamese translation" - was accidentially put into fr_FR
This reverts commit d8dc6eb9e0.

git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@708 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-05-03 06:25:31 +00:00
cweiske
1b8977f23a typo
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@707 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-05-03 06:25:05 +00:00
cweiske
1ccb373871 add russian translation, thanks to Serge
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@706 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-05-03 06:24:38 +00:00
cweiske
ea0527fc83 make export_html follow the "specs" a bit more and add format documentation url
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@705 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:11:56 +00:00
cweiske
7e6de50232 fix multiple tags in html export
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@704 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:10:57 +00:00
cweiske
ccbc63aec4 test that public bookmarks of other people are not exported via csv
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@703 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:09:59 +00:00
cweiske
74dc9ea6a4 make export_csv support filtering to multiple tags
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@702 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:08:38 +00:00
cweiske
90f7d528d3 more tests for csv export api
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@701 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:07:18 +00:00
cweiske
a518928796 add test for api/export_csv.php
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@700 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:06:07 +00:00
cweiske
ccabc1cdfa support username and password change
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@699 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:04:53 +00:00
cweiske
78bac4580c add unittest url parameter
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@698 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-28 18:03:52 +00:00
cweiske
3981208405 note fixation of bug #2960663 in changelog
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@697 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-19 07:44:21 +00:00
cweiske
b18869f6d7 remove another 9 queries for logged in users!
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@696 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-19 07:43:42 +00:00
cweiske
0f3c51ef7e fix notice
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@695 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-19 07:43:21 +00:00
cweiske
a42a6eb2ba test for the failure we fixed one commit ago
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@694 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-18 19:28:42 +00:00
cweiske
d249a8ad19 fix bad bug that was introduced due to performance optimizations
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@693 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-18 19:26:09 +00:00
cweiske
602ec95bbb unify hashing code in a separate method
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@692 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-18 19:24:21 +00:00
cweiske
8c213f0e6e fix typo
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@691 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-18 19:22:26 +00:00
cweiske
4d3d00ade2 Fix bug #2960663: do not send content-type headers twice for ajax/api scripts
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@690 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-17 20:11:21 +00:00
cweiske
db7a46b235 note fixing of bug #2953732 in the changelog
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@689 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-17 20:08:20 +00:00
cweiske
5a93096431 fix bug #2953732 and make corresponding test work.
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@688 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-17 20:07:04 +00:00
cweiske
f9e0714350 write failing test for bug #2953732
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@687 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-17 20:05:43 +00:00
cweiske
e0dff57cbb remove part of broken merge :/
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@686 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-17 20:04:47 +00:00
cweiske
46c13c46f2 remove unneeded ampersand
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@685 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-03-17 20:03:49 +00:00
cweiske
d665bb742e Do not highlight admin bookmarks when $enableAdminColors is disabled
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@684 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-22 19:41:21 +00:00
cweiske
858b188f87 add missing piece of faulty merge
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@683 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:44:06 +00:00
cweiske
e993e994bb re-fix isAdmin() sql optimization
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@682 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:42:44 +00:00
cweiske
53f0a57de0 sql optimization: reduce by 9 sql queries when logged in and looking at bookmarks
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@681 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:41:01 +00:00
cweiske
17374001b8 add SemanticScuttle_Service_Bookmark::bookmarksExist() method to check for existance of multiple bookmarks at once for future sql optimization
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@680 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:39:03 +00:00
cweiske
6a2f1f4f57 reformat query
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@679 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:37:03 +00:00
cweiske
cae9f4de38 fix tests after last commit
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@678 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:35:16 +00:00
cweiske
41a29f49ee save another query
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@677 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:33:11 +00:00
cweiske
51e844e17e save another query
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@676 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:31:18 +00:00
cweiske
35058ddd07 reformat _getuser and add docblock
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@675 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:29:31 +00:00
cweiske
74614e0f99 header docblock
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@674 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:27:57 +00:00
cweiske
ab75c7ff44 docblock
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@673 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:26:16 +00:00
cweiske
edfd04698a remove end date condition since it seems unneccessary to me
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@672 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:24:47 +00:00
cweiske
01c792a789 new config option to disable "SET NAMES UTF8" sql call
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@671 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:23:07 +00:00
cweiske
40ca013e42 sql optimization: 9 queries less!
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@670 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:20:32 +00:00
cweiske
6c9542f24b make isAdmin accept a user name, too
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@669 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:18:49 +00:00
cweiske
6a6cba1a4d sql optimization: fetch all tags at once
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@668 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:16:34 +00:00
cweiske
3e9c2cd0a5 add new method for better sql performance: Bookmark2Tag::getTagsForBookmarks()
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@667 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:14:39 +00:00
cweiske
c4b8719b5b reformat and CS
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@666 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:12:51 +00:00
cweiske
0685081d46 make tests better
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@665 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:11:26 +00:00
cweiske
512e3a6811 add bookmark2tagtest to alltests
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@664 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:10:08 +00:00
cweiske
97c3d1ed63 add test for Bookmark2Tag::getTagsForBookmark()
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@663 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:08:52 +00:00
cweiske
46b96044fb test getBookmarks() with tag loading functionality
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@662 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:07:37 +00:00
cweiske
fe522e5719 first sql optimization: fetch countOthers() for all bookmarks at once instead of each single
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@661 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:06:12 +00:00
cweiske
05c2369507 replace some strange foreach constructs with the proper variant
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@660 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:04:51 +00:00
cweiske
6b7217daf2 make countOthers() accept an array of addresses
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@659 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-20 11:03:20 +00:00
cweiske
91da444e76 reformat countOthers()
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@658 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-16 21:59:39 +00:00
cweiske
2f13a1c819 test complex combination of watches, publics and private bookmarks with countOthers()
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@657 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-16 21:58:00 +00:00
cweiske
57d4892eb3 allow setting of status during addBookmark in tests
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@656 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-16 21:57:03 +00:00
cweiske
157adfd7eb multiple tests for SemanticScuttle_Service_Bookmark::countOthers()
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@655 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-16 21:55:50 +00:00
cweiske
e5dab0a740 allow adding of certain addresses
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@654 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-16 21:54:31 +00:00
cweiske
7f2e347217 do not return numbers < 0
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@653 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-16 21:52:45 +00:00
cweiske
0c930607f0 do not return numbers < 0
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@652 b3834d28-1941-0410-a4f8-b48e95affb8f
2010-02-16 21:50:49 +00:00
Christian Weiske
b25290cef4 add package task 2010-02-16 21:38:59 +01:00
346 changed files with 49691 additions and 14466 deletions

6
.gitignore vendored
View File

@ -1,2 +1,8 @@
doc/*.html
dist/ dist/
build.properties 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.

View File

@ -1 +1,2 @@
sfuser=FIXME sfuser=FIXME
websitedir=FIXME

425
build.xml
View File

@ -7,14 +7,57 @@
tagging a release, running unit tests etc. tagging a release, running unit tests etc.
--> -->
<property file="build.properties" /> <property file="build.properties" />
<property file="html.properties" />
<property name="version-m" value="0.96" /> <property name="version-m" value="0.98" />
<property name="version" value="0.96.1" /> <property name="version" value="0.98.5" />
<property name="zipfile" value="${phing.project.name}-${version}.zip" /> <property name="stability" value="beta" />
<property name="distfile" value="dist/${zipfile}" /> <property name="releasenotes" value="
<property name="sfproject" value="SemanticScuttle" /> - Fix bug #109: preserve privacy setting from Delicious export files
<property name="sffilepath" value="s/se/semanticscuttle/" /> (Thanks to David Glenck)
<property name="svnpath" value="https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/" /> - 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" />
<property name="distfile" value="dist/${zipfile}" />
<property name="distpkgfile" value="dist/pear/${pkgfile}" />
<property name="sfproject" value="SemanticScuttle" />
<property name="sffilepath" value="s/se/semanticscuttle/" />
<property name="svnpath" value="https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/" />
<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" <target name="zip" depends="check"
description="Create zip file for release" description="Create zip file for release"
@ -25,30 +68,265 @@
Test your zip with: unzip -l SemanticScuttle-0.95.0.zip Test your zip with: unzip -l SemanticScuttle-0.95.0.zip
--> -->
<mkdir dir="dist" />
<echo msg="Creating distribution zip for SemanticScuttle ${version}"/> <echo msg="Creating distribution zip for SemanticScuttle ${version}"/>
<delete file="${distfile}" failonerror="false"/> <delete file="${distfile}" failonerror="false"/>
<zip destfile="${distfile}" prefix="${phing.project.name}-${version}/"> <zip destfile="${distfile}" prefix="${phing.project.name}-${version}/">
<fileset dir="."> <fileset refid="fs.zip"/>
<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>
</zip> </zip>
</target> </target>
<target name="release" depends="check,zip,deploy-sf,svntag" <target name="package" depends="check"
description="Creates the pear package"
>
<d51pearpkg2 dir="." baseinstalldir="/">
<name>SemanticScuttle</name>
<summary>A social bookmarking tool</summary>
<description>
A social bookmarking tool experimenting with new features
like structured tags or collaborative descriptions of tags.
</description>
<channel>semanticscuttle.sourceforge.net</channel>
<lead user="cweiske" name="Christian Weiske" email="cweiske@cweiske.de" />
<license>GPL</license>
<version release="${version}" api="${version}" />
<stability release="${stability}" api="${stability}" />
<notes>${releasenotes}</notes>
<dependencies>
<php minimum_version="5.2.0" />
<pear minimum_version="1.8.1" />
<package name="HTML_QuickForm2"
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>
<!-- map directory (key) to role -->
<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>
<!-- do not add the following files to the package.
copied from excludes above -->
<ignore>**/.gitignore</ignore>
<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>src/php-gettext/examples/**</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="@www_dir@" to="www_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.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
- 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
</changelog>
<!-- <dirroles key="bin">script</dirroles> -->
<!-- <replacement path="bin/doctrine" type="pear-config" from="@php_bin@" to="php_bin" /> -->
<!-- <release>
<install as="doctrine" name="bin/doctrine" />
-->
</d51pearpkg2>
<!-- time to fix the package.xml file since the task does not
allow everything we need:
- strip the base directory names like src, data and www
- remove that dumb baseinstalldir from files
- md5sums are generated automatically when packaging
-->
<!-- yes, we need to generate a 2nd file and move it back -->
<copy file="package.xml" tofile="package2.xml" overwrite="true">
<filterchain>
<replaceregexp>
<!-- remove md5sums -->
<regexp
pattern="md5sum=&quot;[a-z0-9]{32}&quot; "
replace=""
/>
<!-- remove baseinstalldir for files -->
<regexp
pattern="&lt;file baseinstalldir=&quot;/&quot;"
replace="&lt;file"
/>
<!-- install-as for different directories -->
<regexp
pattern="(&lt;file name=&quot;data/(.+?)&quot;)"
replace="\1 install-as=&quot;\2&quot;"
/>
<regexp
pattern="(&lt;file name=&quot;doc/(.+?)&quot;)"
replace="\1 install-as=&quot;\2&quot;"
/>
<regexp
pattern="(&lt;file name=&quot;tests/(.+?)&quot;)"
replace="\1 install-as=&quot;\2&quot;"
/>
<regexp
pattern="(&lt;file name=&quot;www/(.+?)&quot;)"
replace="\1 install-as=&quot;SemanticScuttle/\2&quot;"
/>
<regexp
pattern="(&lt;file name=&quot;src/(.+?)&quot;)"
replace="\1 install-as=&quot;\2&quot;"
/>
</replaceregexp>
</filterchain>
</copy>
<move file="package2.xml" tofile="package.xml" overwrite="true" />
<!-- package up -->
<exec command="pear package" passthru="true" />
<move file="${pkgfile}" todir="dist/pear/" />
<delete file="package.xml" failonerror="true" />
</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" description="Release the version on sourceforge"
> >
<!-- meta-target --> <!-- meta-target -->
@ -80,16 +358,105 @@
</target> </target>
<target name="svntag"
description="create the svn tag for the current version" <target name="deploy-sf-pear" depends="check,package"
description="Update PEAR channel + website on sourceforge"
> >
<available file="${websitedir}"
type="dir" property="available.websitedir"
/>
<fail unless="available.websitedir"
message="Website directory not set"
/>
<!--
1. rsync channel data from sourceforge to local, deleting
superfluous channel files. Need to do that so pirum knows
all previous releases when adding the new package
2. update channel with pirum update
3. rsync to sourceforge
-->
<exec <exec
command="svn cp ${svnpath}trunk ${svnpath}/tags/${version} -m 'tag version ${version}'" command="rsync --include-from=.rsync-include-files --delete -avP -e ssh ${sfuser},${sfproject}@web.sourceforge.net:htdocs/ ."
escape="false" checkreturn="true" dir="${websitedir}"
escape="false" checkreturn="false"
passthru="true"
/>
<exec
command="pirum add ${websitedir} ${distpkgfile}"
passthru="true"
/>
<!-- fix the generated html -->
<!-- yes, we need to generate a 2nd file and move it back -->
<copy file="${websitedir}/index.html" tofile="${websitedir}/pirum.html" overwrite="true">
<filterchain>
<replaceregexp>
<!-- make meta links relative -->
<regexp
pattern="href=&quot;http://semanticscuttle.sourceforge.net/"
replace="href=&quot;"
/>
<!-- add sourceforge logo -->
<regexp
pattern="powered by "
replace="powered by ${html.sflogo} and "
/>
</replaceregexp>
</filterchain>
</copy>
<!-- overwrite pirum generated index with our own -->
<copy file="${websitedir}/our-index.html" tofile="${websitedir}/index.html" overwrite="true" />
<!-- add our custom css -->
<append
destFile="${websitedir}/pirum.css"
file="${websitedir}/pirum-custom.css"
/>
<!-- rsync always returns code 23 on sourceforge releases, so we
can't check return values -->
<exec
command="rsync --include-from=.rsync-include-files -avP -e ssh . ${sfuser},${sfproject}@web.sourceforge.net:htdocs/"
dir="${websitedir}"
escape="false" checkreturn="false"
passthru="true"
/> />
</target> </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" <target name="check"
description="Check variables" description="Check variables"
> >
@ -97,6 +464,8 @@
<fail unless="sfuser" message="Sourceforge username not defined!" /> <fail unless="sfuser" message="Sourceforge username not defined!" />
<fail unless="sfproject" message="Sourceforge project name not defined!" /> <fail unless="sfproject" message="Sourceforge project name not defined!" />
<fail unless="sffilepath" message="Sourceforge project file path not defined!" /> <fail unless="sffilepath" message="Sourceforge project file path not defined!" />
<mkdir dir="dist" />
</target> </target>
</project> </project>

1
data/.gitignore vendored
View File

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

View File

@ -14,6 +14,13 @@
* @link http://sourceforge.net/projects/semanticscuttle/ * @link http://sourceforge.net/projects/semanticscuttle/
*/ */
/**
* Array for defaults.
*
* @var array
*/
$defaults = array();
/*************************************************** /***************************************************
* HTML output configuration * HTML output configuration
@ -56,6 +63,15 @@ $sidebarTopMessage = '';
*/ */
$sidebarBottomMessage = ''; $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. * SemanticScuttle root directory.
*
* Set to NULL to autodetect the root url of the website. * Set to NULL to autodetect the root url of the website.
* *
* If your installation is in a subdirectory like * If your installation is in a subdirectory like
* "http://www.example.com/semanticscuttle/" then * "http://www.example.com/semanticscuttle/" then
* replace NULL by your address (between "" and with trailing '/') * 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 * @var string
*/ */
$root = null; $root = null;
@ -138,7 +156,7 @@ $dbtype = 'mysql4';
* *
* @var string * @var string
*/ */
$dbhost = 'localhost'; $dbhost = '127.0.0.1';
/** /**
* Database port. * Database port.
@ -180,6 +198,15 @@ $dbname = 'scuttle';
*/ */
$tableprefix = 'sc_'; $tableprefix = 'sc_';
/*
* If the database needs to be switched to UTF8
* manually or not. If true, a "SET NAMES UTF8" query
* will be sent at the beginning. If you need performance,
* save this query and set it in your mysql server options.
*
* @var boolean
*/
$dbneedssetnames = true;
/*************************************************** /***************************************************
@ -226,10 +253,13 @@ $adminsAreAdvisedTagsFromOtherAdmins = false;
* *
* @var array * @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 * Anti SPAM measures
@ -318,7 +348,7 @@ $index_sidebar_blocks = array(
* @var string * @var string
* @link http://php.net/date * @link http://php.net/date
*/ */
$shortdate = 'd-m-Y'; $shortdate = 'Y-m-d';
/** /**
* Format of long dates. * Format of long dates.
@ -453,6 +483,21 @@ $filetypes = array(
'video' => array('avi', 'mov', 'mp4', 'mpeg', 'mpg', 'wmv') 'video' => array('avi', 'mov', 'mp4', 'mpeg', 'mpg', 'wmv')
); );
/**
* Link protocols that are allowed for newly added bookmarks.
* This prevents i.e. adding javascript: links.
*
* @link http://en.wikipedia.org/wiki/URI_scheme
*
* @var array
*/
$allowedProtocols = array(
'ftp', 'ftps',
'http', 'https',
'mailto', 'nntp',
'xmpp'
);
/** /**
* Enable the "common bookmark description" functionality * Enable the "common bookmark description" functionality
* *
@ -484,41 +529,43 @@ $votingMode = 2;
*/ */
$hideBelowVoting = null; $hideBelowVoting = null;
/**
* Default privacy setting for bookmarks:
* 0 - Public
* 1 - Shared with Watchlist
* 2 - Private
*
* @var integer
*/
$defaults['privacy'] = 0;
/**************************** /****************************
* Website Thumbnails * Website Thumbnails
*/ */
/** /**
* Enable bookmark website thumbnails. * Which thumbnail service type to use.
* *
* According to artviper.net license, buy a license if you * Currently supported:
* gain profit with your pages. * - null (no screenshots)
* * - 'phancap', see http://cweiske.de/phancap.htm
* @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.
* *
* @var string * @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();
@ -568,6 +615,13 @@ $menu2Tags = array(
'menu2', 'tags', 'configurable', 'in', 'data/config.php' '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';
/**************************** /****************************
@ -714,4 +768,24 @@ $authDebug = false;
* @var string * @var string
*/ */
$authEmailSuffix = null; $authEmailSuffix = null;
/**
* URL unittests are being run against
* Has to have a trailing slash
*
* @var string
*/
$unittestUrl = null;
/**
* Allow "unittestMode=1" in URLs.
* Should only be enabled on development systems
*
* @var boolean
*/
$allowUnittestMode = false;
?> ?>

View File

@ -2,11 +2,12 @@
/** /**
* Configuration for SemanticScuttle. * 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. * The name of this site.
* *
@ -88,7 +89,7 @@ $dbname = 'scuttle';
* *
* @var string * @var string
*/ */
$dbhost = 'localhost'; $dbhost = '127.0.0.1';
/*************************************************** /***************************************************
@ -116,6 +117,21 @@ $adminemail = 'admin@example.org';
$admin_users = array(); $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! * You have completed the basic configuration!
* More options can be found in config.default.php. * 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

Binary file not shown.

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;

19
data/schema/6.sql Normal file
View File

@ -0,0 +1,19 @@
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 '', `email` varchar(50) NOT NULL default '',
`homepage` varchar(255) default NULL, `homepage` varchar(255) default NULL,
`uContent` text, `uContent` text,
PRIMARY KEY (`uId`) `privateKey` varchar(33) default NULL,
PRIMARY KEY (`uId`),
UNIQUE KEY `privateKey` (`privateKey`)
) CHARACTER SET utf8 COLLATE utf8_general_ci ; ) 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` -- Table structure for table `sc_watched`
-- --
@ -182,4 +194,10 @@ CREATE TABLE `sc_votes` (
UNIQUE KEY `bid_2` (`bId`,`uId`), UNIQUE KEY `bid_2` (`bId`,`uId`),
KEY `bid` (`bId`), KEY `bid` (`bId`),
KEY `uid` (`uId`) KEY `uid` (`uId`)
) CHARACTER SET utf8 COLLATE utf8_general_ci ; ) CHARACTER SET utf8 COLLATE utf8_general_ci ;
CREATE TABLE `sc_version` (
`schema_version` int(11) NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `sc_version` (`schema_version`) VALUES ('6');

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> <h3><?php echo T_('Geek Stuff'); ?></h3>
<ul> <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><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()): ?> <?php if(!is_null($currentUser) && $currentUser->isAdmin()): ?>
<li>SemanticScuttle v0.96.1</li> <li>SemanticScuttle v0.98.5</li>
<?php endif ?> <?php endif ?>
</ul> </ul>

View File

@ -11,7 +11,7 @@ foreach($users as $user) {
echo '<div class="link">'; echo '<div class="link">';
echo '<a href="'.createURL('profile', $user->getUsername()).'">'.$user->getUsername().'</a>'; echo '<a href="'.createURL('profile', $user->getUsername()).'">'.$user->getUsername().'</a>';
echo ' - <span title='. T_('Public/Shared/Private') .'>'. $user->getNbBookmarks('public') .' / '. $user->getNbBookmarks('shared') .' / '. $user->getNbBookmarks('private') .' '. T_('bookmark(s)') .'</span>'; echo ' - <span title="'. T_('Public/Shared/Private') .'">'. $user->getNbBookmarks('public') .' / '. $user->getNbBookmarks('shared') .' / '. $user->getNbBookmarks('private') .' '. T_('bookmark(s)') .'</span>';
echo '</div>'; echo '</div>';
if($user->getUsername() != $currentUser->getUsername()) { if($user->getUsername() != $currentUser->getUsername()) {

View File

@ -30,7 +30,8 @@ window.onload = function() {
if(strlen($description['cdDatetime'])>0) { if(strlen($description['cdDatetime'])>0) {
echo T_('Last modification:').' '.$description['cdDatetime'].', '; echo T_('Last modification:').' '.$description['cdDatetime'].', ';
$lastUser = $userservice->getUser($description['uId']); $lastUser = $userservice->getUser($description['uId']);
echo '<a href="'.createURL('profile', $lastUser['username']).'">'.$lastUser['username'].'</a>'; echo '<a href="'.createURL('profile', $lastUser['username']).'">'
. SemanticScuttle_Model_UserArray::getName($lastUser) . '</a>';
} }
?> ?>
</td> </td>

View File

@ -0,0 +1,152 @@
<h3><?php echo T_('Bookmarklet'); ?></h3>
<p id="bookmarklet"></p>
<script type="text/javascript">
//<![CDATA[
var browser = navigator.appName;
jQuery(function($) {
if (browser == "Opera") {
$('#bookmarklet').append(
<?php echo json_encode(
sprintf(
T_("Click one of the following bookmarklets to add a button you can click whenever you want to add the page you are on to %s") . ':',
$GLOBALS['sitename']
)
); ?>
);
} else {
$('#bookmarklet').append(
<?php echo json_encode(
sprintf(
T_("Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s") . ':',
$GLOBALS['sitename']
)
);
?>
);
}
});
//]]>
</script>
<script type="text/javascript">
//<![CDATA[
var selection = '';
if (window.getSelection) {
selection = 'window.getSelection()';
} else if (document.getSelection) {
selection = 'document.getSelection()';
} else if (document.selection) {
selection = 'document.selection.createRange().text';
}
if (browser == "Opera") {
$('#bookmarklet').append(
'<ul>'
+ '<li>'
+ '<a class="bookmarklet" href="'
+ '<?php
$popupLink = 'javascript:'
. "location.href='"
. addProtocolToUrl(createURL('bookmarks', $GLOBALS['user']))
. '?action=add'
. "&address='+encodeURIComponent(document.location.href)+'"
. "&title='+encodeURIComponent(document.title)+'"
. "&description='+encodeURIComponent(SELECTION)"
. ";";
$link = 'opera:/button/'
//Opera command
. 'Go to page'
//command parameter 1
. ',"' . rawurlencode($popupLink) . '"'
//command parameter 2
. ','
//button title
. ',"Post to ' . fixOperaButtonName($GLOBALS['sitename']) . '"'
//button icon name
. ',"Scuttle"';
echo jsEscTitle(htmlspecialchars($link));
?>'.replace('SELECTION', selection)
+ '"><?php echo jsEscTitle(sprintf(T_('Post to %s'), $GLOBALS['sitename'])); ?></a>'
+ '</li>'
+ '<li>'
+ '<a class="bookmarklet" href="'
+ '<?php
$popupLink = 'javascript:'
. 'open('
. "'" . addProtocolToUrl(createURL('bookmarks', $GLOBALS['user']))
. '?action=add'
. '&popup=1'
. "&address='+encodeURIComponent(document.location.href)+'"
. "&title='+encodeURIComponent(document.title)+'"
. "&description='+encodeURIComponent(SELECTION)"
. ","
. "'" . htmlspecialchars(jsEscTitle($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";
$link = 'opera:/button/'
. 'Go to page'
. ',"' . rawurlencode($popupLink) . '"'
. ','
. ',"Post to ' . fixOperaButtonName($GLOBALS['sitename']) . ' (Pop-up)"'
. ',"Scuttle"';
echo jsEscTitle(htmlspecialchars($link));
?>'.replace('SELECTION', selection)
+ '"><?php echo jsEscTitle(sprintf(T_('Post to %s (Pop-up)'), $GLOBALS['sitename'])); ?></a>'
+ '</li>'
+ '</ul>'
);
} 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 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;'
+ 'a=encodeURIComponent(x.location.href);'
+ 't=encodeURIComponent(x.title);'
+ 'd=encodeURIComponent('+selection+');'
+ 'open('
+ '\'<?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>'
+ '</li>'
+ '</ul>'
);
}
//]]>
</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

@ -1,14 +1,30 @@
<?php <?php
/**
* Show a list of bookmarks.
*
* SemanticScuttle - your social bookmark manager.
*
* PHP version 5.
*
* @category Bookmarking
* @package SemanticScuttle
* @subcategory Templates
* @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
* @author Christian Weiske <cweiske@cweiske.de>
* @author Eric Dane <ericdane@users.sourceforge.net>
* @license GPL http://www.gnu.org/licenses/gpl.html
* @link http://sourceforge.net/projects/semanticscuttle
*/
/* Service creation: only useful services are created */ /* Service creation: only useful services are created */
$bookmarkservice =SemanticScuttle_Service_Factory::get('Bookmark'); $bookmarkservice = SemanticScuttle_Service_Factory::get('Bookmark');
$tagservice =SemanticScuttle_Service_Factory::get('Tag'); $tagservice = SemanticScuttle_Service_Factory::get('Tag');
$cdservice =SemanticScuttle_Service_Factory::get('CommonDescription'); $cdservice = SemanticScuttle_Service_Factory::get('CommonDescription');
$pageName = isset($pageName)?$pageName:""; $pageName = isset($pageName) ? $pageName : '';
$user = isset($user)?$user:""; $user = isset($user) ? $user : '';
$currenttag = isset($currenttag)?$currenttag:""; $currenttag = isset($currenttag) ? $currenttag : '';
$this->includeTemplate($GLOBALS['top_include']); $this->includeTemplate($GLOBALS['top_include']);
@ -23,7 +39,9 @@ include('search.menu.php');
<?php if($GLOBALS['enableAdminColors']!=false && isset($userid) && $userservice->isAdmin($userid) && $pageName != PAGE_WATCHLIST) : ?> <?php if($GLOBALS['enableAdminColors']!=false && isset($userid) && $userservice->isAdmin($userid) && $pageName != PAGE_WATCHLIST) : ?>
<div style="width:70%;text-align:center;"> <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> </div>
<?php endif?> <?php endif?>
@ -46,12 +64,16 @@ if($currenttag!= '' && $cdservice->getLastTagDescription($currenttag)) {
} }
//common tag description edit //common tag description edit
if($userservice->isLoggedOn()) { if ($userservice->isLoggedOn()) {
if($currenttag!= '' && ($GLOBALS['enableCommonTagDescriptionEditedByAll'] || $currentUser->isAdmin())) { if ($currenttag != ''
&& ($GLOBALS['enableCommonTagDescriptionEditedByAll']
|| $currentUser->isAdmin()
)
) {
echo ' <a href="'. createURL('tagcommondescriptionedit', $currenttag).'" title="'.T_('Edit the common description of this tag').'">'; 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 !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>';
} elseif(isset($hash)) { } else if (isset($hash)) {
echo ' (<a href="'.createURL('bookmarkcommondescriptionedit', $hash).'" title="'.T_('Edit the common description of this bookmark').'">'; 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>)'; echo T_('Edit the common description of this bookmark').'</a>)';
} }
@ -75,7 +97,7 @@ if($userservice->isLoggedOn()) {
if($currenttag!= '') { if($currenttag!= '') {
echo ' <a href="'. createURL('tagedit', $currenttag).'" title="'.T_('Edit your personal description of this tag').'" >'; 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 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> ?></p>
@ -85,7 +107,7 @@ if($userservice->isLoggedOn()) {
} }
?> ?>
<?php if (count($bookmarks) > 0) { ?> <?php if (isset($bookmarks) && count($bookmarks) > 0) { ?>
<script type="text/javascript"> <script type="text/javascript">
window.onload = playerLoad; window.onload = playerLoad;
</script> </script>
@ -101,54 +123,62 @@ $votingSort = 'voting_desc';
switch(getSortOrder()) { switch(getSortOrder()) {
case 'date_asc': case 'date_asc':
$dateArrow = ' &uarr;'; $dateArrow = ' ';
$dateSort = 'date_desc'; $dateSort = 'date_desc';
break; break;
case 'title_asc': case 'title_asc':
$titleArrow = ' &uarr;'; $titleArrow = ' ';
$titleSort = 'title_desc'; $titleSort = 'title_desc';
break; break;
case 'title_desc': case 'title_desc':
$titleArrow = ' &darr;'; $titleArrow = ' ';
$titleSort = 'title_asc'; $titleSort = 'title_asc';
break; break;
case 'voting_asc': case 'voting_asc':
$votingArrow = ' &uarr;'; $votingArrow = ' ';
$votingSort = 'voting_desc'; $votingSort = 'voting_desc';
break; break;
case 'voting_desc': case 'voting_desc':
$votingArrow = ' &darr;'; $votingArrow = ' ';
$votingSort = 'voting_asc'; $votingSort = 'voting_asc';
break; break;
case 'date_desc': case 'date_desc':
default: default:
$dateArrow = ' &darr;'; $dateArrow = ' ';
$dateSort = 'date_asc'; $dateSort = 'date_asc';
break; break;
} }
?> ?>
<a href="?sort=<?php echo $dateSort ?>"><?php echo T_("Date").$dateArrow; ?></a> <a href="?sort=<?php echo $dateSort ?>"><?php echo T_("Date").$dateArrow; ?></a>
<span>/</span> <span>/</span>
<a href="?sort=<?php echo $titleSort ?>"><?php echo T_("Title").$titleArrow; ?></a> <a href="?sort=<?php echo $titleSort ?>"><?php echo T_("Title").$titleArrow; ?></a>
<span>/</span> <span>/</span>
<?php if ($GLOBALS['enableVoting']) { ?> <?php if ($GLOBALS['enableVoting']) { ?>
<a href="?sort=<?php echo $votingSort ?>"><?php echo T_("Voting").$votingArrow; ?></a> <a href="?sort=<?php echo $votingSort ?>"><?php echo T_("Voting").$votingArrow; ?></a>
<span>/</span> <span>/</span>
<?php } ?> <?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 <?php
if($currenttag!= '') { if ($currenttag!= '') {
if($user!= '') { if ($user!= '') {
echo ' - '; echo ' - ';
echo '<a href="'. createURL('tags', $currenttag) .'">'; echo '<a href="'. createURL('tags', $currenttag) .'">';
echo T_('Bookmarks from other users for this tag').'</a>'; echo T_('Bookmarks from other users for this tag').'</a>';
//echo T_(' for these tags'); //echo T_(' for these tags');
} else if($userservice->isLoggedOn()){ } else if ($userservice->isLoggedOn()){
echo ' - '; echo ' - ';
echo '<a href="'. createURL('bookmarks', $currentUser->getUsername().'/'.$currenttag) .'">'; echo '<a href="'. createURL('bookmarks', $currentUser->getUsername().'/'.$currenttag) .'">';
echo T_('Only your bookmarks for this tag').'</a>'; echo T_('Only your bookmarks for this tag').'</a>';
@ -156,7 +186,6 @@ if($currenttag!= '') {
} }
} }
?></p> ?></p>
<?php <?php
// PAGINATION // PAGINATION
@ -199,7 +228,13 @@ if($currenttag!= '') {
$brss = ''; $brss = '';
$size = count($rsschannels); $size = count($rsschannels);
for ($i = 0; $i < $size; $i++) { for ($i = 0; $i < $size; $i++) {
$brss = '<a style="background:#FFFFFF" href="'. $rsschannels[$i][1] .'" title="'. $rsschannels[$i][0] .'"><img src="'. ROOT .'images/rss.gif" width="16" height="16" alt="'. $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"; $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";
@ -213,12 +248,28 @@ if($currenttag!= '') {
<ol <?php echo ($start > 0 ? ' start="'. ++$start .'"' : ''); ?> <ol<?php echo ($start > 0 ? ' start="'. ++$start .'"' : ''); ?> id="bookmarks">
id="bookmarks"> <?php
$addresses = array();
foreach ($bookmarks as $key => &$row) {
$addresses[$row['bId']] = $row['bAddress'];
}
$otherCounts = $bookmarkservice->countOthers($addresses);
if ($userservice->isLoggedOn()) {
$existence = $bookmarkservice->bookmarksExist(
$addresses, $currentUser->getId()
);
}
<?php if ($userservice->isLoggedOn()) {
foreach(array_keys($bookmarks) as $key) { $watchedNames = $userservice->getWatchNames(
$row =& $bookmarks[$key]; $currentUser->getId(), true
);
} else {
$watchedNames = null;
}
foreach ($bookmarks as $key => &$row) {
switch ($row['bStatus']) { switch ($row['bStatus']) {
case 0: case 0:
$access = ''; $access = '';
@ -234,38 +285,53 @@ if($currenttag!= '') {
$cats = ''; $cats = '';
$tagsForCopy = ''; $tagsForCopy = '';
$tags = $row['tags']; $tags = $row['tags'];
foreach(array_keys($tags) as $key) { foreach ($tags as $tkey => &$tag) {
$tagcaturl = sprintf(
$tag =& $tags[$key]; $cat_url,
$cats .= '<a href="'. sprintf($cat_url, filter($row['username'], 'url'), filter($tag, 'url')) .'" rel="tag">'. filter($tag) .'</a>, '; filter($row['username'], 'url'),
$tagsForCopy.= $tag.','; filter($tag, 'url')
);
$cats .= sprintf(
'<a href="%s" rel="tag">%s</a>, ',
$tagcaturl, filter($tag)
);
$tagsForCopy .= $tag . ',';
} }
$cats = substr($cats, 0, -2); $cats = substr($cats, 0, -2);
if ($cats != '') { if ($cats != '') {
$cats = ' '.T_('Tags:').' '. $cats; $cats = T_('Tags:') . ' ' . $cats;
} }
// Edit and delete links // Edit and delete links
$edit = ''; $edit = '';
if ($bookmarkservice->editAllowed($row)) { if ($bookmarkservice->editAllowed($row)) {
$edit = ' - <a href="'. createURL('edit', $row['bId']) .'">'. T_('Edit') .'</a><script type="text/javascript">document.write(" - <a href=\"#\" onclick=\"deleteBookmark(this, '. $row['bId'] .'); return false;\">'. T_('Delete') .'<\/a>");</script>'; $edit = ' - <a href="' . createURL('edit', $row['bId']) . '">'
. T_('Edit')
. '</a>'
. ' <a href="#" onclick="deleteBookmark(this, '. $row['bId'] .'); return false;">'
. T_('Delete')
.'</a>';
} }
// Last update // Last update
$update = ' <small title="'. T_('Last update') .'">('. date($GLOBALS['shortdate'], strtotime($row['bModified'])). ') </small>'; $update = ' <small title="'. T_('Last update') .'">('. date($GLOBALS['shortdate'], strtotime($row['bModified'])). ') </small>';
// User attribution // User attribution
$copy = ' '. T_('by'). ' '; $copy = ' ' . T_('by') . ' ';
if($userservice->isLoggedOn() && $currentUser->getUsername() == $row['username']) { if ($userservice->isLoggedOn()
$copy.= T_('you'); && $currentUser->getUsername() == $row['username']
) {
$copy .= T_('you');
} else { } else {
$copy.= '<a href="'. createURL('bookmarks', $row['username']) .'">'. $row['username'] .'</a>'; $copy .= '<a href="' . createURL('bookmarks', $row['username']) . '">'
. SemanticScuttle_Model_UserArray::getName($row)
. '</a>';
} }
// Udders! // others
if (!isset($hash)) { if (!isset($hash)) {
$others = $bookmarkservice->countOthers($row['bAddress']); $others = $otherCounts[$row['bAddress']];
$ostart = '<a href="'. createURL('history', $row['bHash']) .'">'; $ostart = '<a href="' . createURL('history', $row['bHash']) . '">';
$oend = '</a>'; $oend = '</a>';
switch ($others) { switch ($others) {
case 0: case 0:
@ -281,10 +347,13 @@ if($currenttag!= '') {
// Copy link // Copy link
if ($userservice->isLoggedOn() if ($userservice->isLoggedOn()
&& ($currentUser->getId() != $row['uId']) && ($currentUser->getId() != $row['uId'])
&& !$bookmarkservice->bookmarkExists($row['bAddress'], $currentUser->getId()) && !$existence[$row['bAddress']]
) { ) {
$copy .= ' - <a href="' $copy .= ' - <a href="'
. createURL('bookmarks', $currentUser->getUsername() .'?action=add&amp;copyOf='. $row['bId']) . createURL(
'bookmarks',
$currentUser->getUsername()
. '?action=add&amp;copyOf=' . $row['bId'])
. '" title="'.T_('Copy this bookmark to YOUR bookmarks.').'">' . '" title="'.T_('Copy this bookmark to YOUR bookmarks.').'">'
. T_('Copy') . T_('Copy')
. '</a>'; . '</a>';
@ -296,7 +365,7 @@ if($currenttag!= '') {
$rel = ' rel="nofollow"'; $rel = ' rel="nofollow"';
} }
$address = filter($row['bAddress']); $address = $row['bAddress'];
$oaddress = $address; $oaddress = $address;
// Redirection option // Redirection option
if ($GLOBALS['useredir']) { if ($GLOBALS['useredir']) {
@ -304,16 +373,26 @@ if($currenttag!= '') {
} }
// Admin specific design // Admin specific design
if($userservice->isAdmin($row['uId'])) { if ($userservice->isAdmin($row['username'])
$adminBgClass = 'class="adminBackground"'; && $GLOBALS['enableAdminColors']
$adminStar = ' <img src="'. ROOT .'images/logo_24.gif" width="12px" title="'. T_('This bookmark is certified by an admin user.') .'" />'; ) {
$adminBgClass = ' class="adminBackground"';
$adminStar = ' <img'
. ' src="' . $theme->resource('images/logo_24.gif') . '"'
. ' width="12px"'
. ' title="' . T_('This bookmark is certified by an admin user.') . '"'
. '/>';
} else { } else {
$adminBgClass = ''; $adminBgClass = '';
$adminStar = ''; $adminStar = '';
} }
// Private Note (just visible by the owner and his/her contacts) // Private Note (just visible by the owner and his/her contacts)
if($userservice->isLoggedOn() && ($currentUser->getId() == $row['uId'] || in_array($row['username'], $userservice->getWatchNames($currentUser->getId(), true)))) { if ($watchedNames !== null
&& ($currentUser->getId() == $row['uId']
|| in_array($row['username'], $watchedNames)
)
) {
$privateNoteField = $row['bPrivateNote']; $privateNoteField = $row['bPrivateNote'];
} else { } else {
$privateNoteField = ''; $privateNoteField = '';
@ -326,13 +405,16 @@ if($currenttag!= '') {
} }
// Output // Output
echo '<li class="xfolkentry'. $access .'" >'."\n"; echo ' <li class="xfolkentry'. $access .'">'."\n";
include 'bookmarks-thumbnail.inc.tpl.php'; include 'bookmarks-thumbnail.inc.tpl.php';
include 'bookmarks-vote.inc.tpl.php'; include 'bookmarks-vote.inc.tpl.php';
echo '<div '.$adminBgClass.' >';; echo ' <div' . $adminBgClass . '>' . "\n";
echo '<div class="link"><a href="'. $address .'"'. $rel .' class="taggedlink" target="_blank">'. filter($row['bTitle']) ."</a>" . $adminStar . "</div>\n"; echo ' <div class="link">'
. '<a href="'. htmlspecialchars($address) .'"'. $rel .' class="taggedlink">'
. filter($row['bTitle'])
. '</a>' . $adminStar . "</div>\n";
if ($row['bDescription'] == '') { if ($row['bDescription'] == '') {
$bkDescription = $GLOBALS['blankDescription']; $bkDescription = $GLOBALS['blankDescription'];
} else { } else {
@ -342,17 +424,23 @@ if($currenttag!= '') {
$bkDescription = preg_replace('@((http|https|ftp)://.*?)( |\r|$)@', '<a href="$1" rel="nofollow">$1</a>$3', $bkDescription); // make url clickable $bkDescription = preg_replace('@((http|https|ftp)://.*?)( |\r|$)@', '<a href="$1" rel="nofollow">$1</a>$3', $bkDescription); // make url clickable
} }
echo '<div class="description">'. nl2br($bkDescription) ."</div>\n"; echo ' <div class="description">'. nl2br($bkDescription) ."</div>\n";
//if(!isset($hash)) { echo ' <div class="address">' . htmlspecialchars(shortenString($oaddress)) . "</div>\n";
echo '<div class="address">' . shortenString($oaddress) . '</div>';
//}
echo '<div class="meta">'. $cats . $copy . $edit . $update ."</div>\n"; echo ' <div class="meta">'
echo $privateNoteField!=''?'<div class="privateNote" title="'. T_('Private Note on this bookmark') .'">'.$privateNoteField."</div>\n":''; . $cats . "\n"
. $copy . "\n"
. $edit . "\n"
. $update . "\n"
. " </div>\n";
echo $privateNoteField != ''
? ' <div class="privateNote" title="'. T_('Private Note on this bookmark') .'">'.$privateNoteField."</div>\n"
: '';
echo ' ';
include 'bookmarks-vote-horizontal.inc.tpl.php'; include 'bookmarks-vote-horizontal.inc.tpl.php';
echo '</div>'; echo " </div>\n";
echo "</li>\n"; echo " </li>\n";
} }
?> ?>

View File

@ -6,11 +6,6 @@ echo '<a href="'.createURL('about').'">'.T_('About').'</a>';
echo ' - '; echo ' - ';
echo T_("Propulsed by "); echo T_("Propulsed by ");
echo " <a href=\"https://sourceforge.net/projects/semanticscuttle/\">SemanticScuttle</a>"; 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> </div>

View File

@ -25,39 +25,51 @@ $b2tservice = SemanticScuttle_Service_Factory :: get('Bookmark2Tag');
$logged_on_userid = $userservice->getCurrentUserId(); $logged_on_userid = $userservice->getCurrentUserId();
//tags from current user //tags from current user
$userPopularTags =& $b2tservice->getPopularTags($logged_on_userid, 25, $logged_on_userid); $userPopularTags = $b2tservice->getPopularTags($logged_on_userid, 25, $logged_on_userid);
$userPopularTagsCloud =& $b2tservice->tagCloud($userPopularTags, 5, 90, 175); $userPopularTagsCloud = $b2tservice->tagCloud($userPopularTags, 5, 90, 175);
$userPopularTagsCount = count($userPopularTags); $userPopularTagsCount = count($userPopularTags);
//tags from all users //tags from all users
$allPopularTags =& $b2tservice->getPopularTags(null, 5, $logged_on_userid); $allPopularTags = $b2tservice->getPopularTags(null, 5, $logged_on_userid);
$allPopularTagsCloud =& $b2tservice->tagCloud($allPopularTags, 5, 90, 175); $allPopularTagsCloud = $b2tservice->tagCloud($allPopularTags, 5, 90, 175);
$allPopularTagsCount = count($allPopularTags); $allPopularTagsCount = count($allPopularTags);
// function printing the cloud // function printing the cloud
function writeTagsProposition($tagsCloud, $title) { function writeTagsProposition($tagsCloud, $title)
echo 'document.write(\'<div class="collapsible">\');'; {
echo 'document.write(\'<h3>'. $title .'<\/h3>\');'; static $id = 0;
echo 'document.write(\'<p id="popularTags" class="tags">\');'; ++$id;
echo <<<JS
$('.edit-tagclouds')
.append(
'<div class="collapsible" id="edit-tagcloud-$id">'
+ ' <h3>$title</h3>'
+ ' <p class="popularTags tags"></p>'
+ '</div>');
JS;
$taglist = ''; $taglist = '';
foreach(array_keys($tagsCloud) as $key) { foreach (array_keys($tagsCloud) as $key) {
$row =& $tagsCloud[$key]; $row = $tagsCloud[$key];
$entries = T_ngettext('bookmark', 'bookmarks', $row['bCount']); $entries = T_ngettext('bookmark', 'bookmarks', $row['bCount']);
$taglist .= '<span title="'. $row['bCount'] .' '. $entries .'" style="font-size:'. $row['size'] .'" onclick="addTag(this)">'. filter($row['tag']) .'<\/span> '; $taglist .= '<span'
. ' title="'. $row['bCount'] . ' ' . $entries . '"'
. ' style="font-size:' . $row['size'] . '"'
. ' onclick="addTag(this)">'
. filter($row['tag'])
. '</span> ';
} }
echo '$(\'#edit-tagcloud-' . $id . ' p\').append('
echo 'document.write(\''. $taglist .'\');'; . json_encode($taglist)
echo 'document.write(\'<\/p>\');'; . ");\n";
echo 'document.write(\'<\/div>\');';
} }
if ($allPopularTagsCount > 0 || $userPopularTagsCount > 0 ) { ?> if ($allPopularTagsCount > 0 || $userPopularTagsCount > 0 ) { ?>
<script type="text/javascript"> <script type="text/javascript">
//<![CDATA[
Array.prototype.contains = function (ele) { Array.prototype.contains = function (ele) {
for (var i = 0; i < this.length; i++) { for (var i = 0; i < this.length; i++) {
if (this[i] == ele) { if (this[i] == ele) {
@ -87,20 +99,26 @@ function addonload(addition) {
} }
} }
addonload( jQuery(function($) {
function () { <?php
var taglist = document.getElementById('tags'); if ($userPopularTagsCount > 0) {
var tags = taglist.value.split(', '); writeTagsProposition($userPopularTagsCloud, T_('Popular Tags'));
}
if ($allPopularTagsCount > 0) {
writeTagsProposition($allPopularTagsCloud, T_('Popular Tags From All Users'));
}
?>
var taglist = $('#tags');
var tags = taglist.val().split(', ');
var populartags = document.getElementById('popularTags').getElementsByTagName('span'); var populartags = $('.edit-tagclouds span');
for (var i = 0; i < populartags.length; i++) { for (var i = 0; i < populartags.length; i++) {
if (tags.contains(populartags[i].innerHTML)) { if (tags.contains(populartags[i].innerHTML)) {
populartags[i].className = 'selected'; populartags[i].className = 'selected';
} }
} }
} });
);
function addTag(ele) { function addTag(ele) {
var thisTag = ele.innerHTML; var thisTag = ele.innerHTML;
@ -122,20 +140,9 @@ function addTag(ele) {
document.getElementById('tags').focus(); document.getElementById('tags').focus();
} }
//]]>
<?php
if( $userPopularTagsCount > 0) {
writeTagsProposition($userPopularTagsCloud, T_('Popular Tags'));
}
if( $allPopularTagsCount > 0) {
writeTagsProposition($allPopularTagsCloud, T_('Popular Tags From All Users'));
}
?>
</script> </script>
<div class="edit-tagclouds"></div>
<?php <?php
} }
?> ?>

View File

@ -0,0 +1,281 @@
<?php
$this->includeTemplate($GLOBALS['top_include']);
$accessPublic = '';
$accessShared = '';
$accessPrivate = '';
switch ($row['bStatus']) {
case 0 :
$accessPublic = ' selected="selected"';
break;
case 1 :
$accessShared = ' selected="selected"';
break;
case 2 :
$accessPrivate = ' selected="selected"';
break;
}
function jsEscTitle($title)
{
return addcslashes($title, "'");
}
function jsEscTitleDouble($title)
{
return addcslashes(addcslashes($title, "'"), "'\\");
}
function fixOperaButtonName($name) {
//yes, opera has problems with double quotes in button names
return str_replace('"', "''", $name);
}
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())
? 'getadmintags'
: 'getcontacttags'
) . '.php';
?>
<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_('Description'); ?>
<a onclick="var nz = document.getElementById('privateNoteZone'); nz.style.display='';this.style.display='none';"><?php echo T_("Add Note"); ?></a>
</th>
<td><textarea name="description" id="description" rows="5" cols="63" ><?php echo filter($row['bDescription'], 'xml'); ?></textarea></td>
<td> <?php echo T_('You can use anchors to delimite attributes. for example: [publisher]blah[/publisher] '); ?>
<?php if(count($GLOBALS['descriptionAnchors'])>0): ?>
<br /><br />
<?php echo T_('Suggested anchors: '); ?>
<?php foreach($GLOBALS['descriptionAnchors'] as $anchorName => $anchorValue): ?>
<?php if(is_numeric($anchorName)) {
$anchorName = $anchorValue;
$anchorValue = '['.$anchorValue.']'.'[/'.$anchorValue.']';
} ?>
<span class="anchor" title="<?php echo $anchorValue ?>" onclick="addAnchor('<?php echo $anchorValue ?>', 'description')"><?php echo $anchorName ?></span>
<?php endforeach; ?>
<?php endif; ?>
</td>
</tr>
<tr id="privateNoteZone" <?php if(strlen($row['bPrivateNote'])==0):?>style="display:none"<?php endif; ?>>
<th align="left"><?php echo T_('Private Note'); ?></th>
<td><textarea name="privateNote" id="privateNote" rows="1" cols="63" ><?php echo filter($row['bPrivateNote'], 'xml'); ?></textarea></td>
<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" 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>
</tr>
<tr>
<th></th>
<td align="right"><small><?php echo T_('Note: use "=" to make synonym two tags. e.g.: france=frenchcountry')?></small></td>
</tr>
<tr>
<th align="left"><?php echo T_('Privacy'); ?></th>
<td>
<select name="status">
<option value="0"<?php echo $accessPublic ?>><?php echo T_('Public'); ?></option>
<option value="1"<?php echo $accessShared ?>><?php echo T_('Shared with Watch List'); ?></option>
<option value="2"<?php echo $accessPrivate ?>><?php echo T_('Private'); ?></option>
</select>
</td>
<td></td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="submitted" value="<?php echo $btnsubmit; ?>" />
<input type="button" name="cancel" value="<?php echo T_('Cancel') ?>" onclick="<?php echo $popup?'window.close();':'javascript: history.go(-1)'; ?>" />
<?php
if (isset($showdelete) && $showdelete) {
?>
<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>)';
}
if ($popup) {
?>
<input type="hidden" name="popup" value="1" />
<?php
} elseif (isset($referrer)) {
?>
<input type="hidden" name="referrer" value="<?php echo filter($referrer, 'xml'); ?>" />
<?php
}
?>
</td>
<td></td>
</tr>
<?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"/>
<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.core.js"></script>
<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.widget.js"></script>
<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.position.js"></script>
<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.autocomplete.js"></script>
<script type="text/javascript">
//<![CDATA[
jQuery(document).ready(function() {
function split(val)
{
return val.split(/[,=><]\s*/);
}
function extractLast(term)
{
return split(term).pop();
}
//var availableTags = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"];
//jQuery("input#tags").autocomplete({
jQuery("input.tags").autocomplete({
autoFocus: true,
minLength: 1,
source: function(request, response) {
// delegate back to autocomplete, but extract the last term
var term = extractLast(request.term);
if (term.length < this.options.minLength) {
return;
}
response(
/*
$.ui.autocomplete.filter(
availableTags, extractLast(request.term)
)
*/
$.getJSON(
"<?php echo $ajaxUrl; ?>",
{ beginsWith: term },
response
)
);
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function(event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push("");
this.value = terms.join(", ");
return false;
}
});
});
//]]>
</script>
<?php
// Dynamic tag selection
$this->includeTemplate('dynamictags.inc');
// Bookmarklets and import links
if (empty($_REQUEST['popup']) && (!isset($showdelete) || !$showdelete)) {
$this->includeTemplate('bookmarklet.inc.php');
?>
<h3><?php echo T_('Import'); ?></h3>
<ul>
<li><a href="<?php echo createURL('importNetscape'); ?>"><?php echo T_('Import bookmarks from bookmark file'); ?></a> (<?php echo T_('Internet Explorer, Mozilla Firefox and Netscape'); ?>)</li>
<li><a href="<?php echo createURL('import'); ?>"><?php echo T_('Import bookmarks from del.icio.us'); ?></a></li>
</ul>
<?php
}
$this->includeTemplate($GLOBALS['bottom_include']);
?>

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

@ -3,9 +3,7 @@ $this->includeTemplate($GLOBALS['top_include']);
?> ?>
<form action="<?php echo $formaction; ?>" method="post"> <form action="<?php echo $formaction; ?>" method="post">
<input type="hidden" name="token" value="<?php echo $token; ?>"> <input type="hidden" name="token" value="<?php echo $token; ?>"/>
</table>
<h3><?php echo T_('Account Details'); ?></h3> <h3><?php echo T_('Account Details'); ?></h3>
@ -28,7 +26,15 @@ $this->includeTemplate($GLOBALS['top_include']);
<tr> <tr>
<th align="left"><?php echo T_('E-mail'); ?></th> <th align="left"><?php echo T_('E-mail'); ?></th>
<td><input type="text" name="pMail" size="75" value="<?php echo filter($objectUser->getEmail(), 'xml'); ?>" /></td> <td><input type="text" name="pMail" size="75" value="<?php echo filter($objectUser->getEmail(), 'xml'); ?>" /></td>
<td>&larr; <?php echo T_('Required'); ?></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> </tr>
</table> </table>
@ -52,13 +58,15 @@ $this->includeTemplate($GLOBALS['top_include']);
<td><input type="submit" name="submitted" value="<?php echo T_('Save Changes'); ?>" /></td> <td><input type="submit" name="submitted" value="<?php echo T_('Save Changes'); ?>" /></td>
</tr> </tr>
</table> </table>
<?php include 'editprofile-sslclientcerts.tpl.php'; ?>
<h3><?php echo T_('Actions'); ?></h3> <h3><?php echo T_('Actions'); ?></h3>
<table class="profile"> <table class="profile">
<tr> <tr>
<th align="left"><?php echo T_('Export bookmarks'); ?></th> <th align="left"><?php echo T_('Export bookmarks'); ?></th>
<td> <td>
<a href="../api/export_html.php"><?php echo T_('HTML file (for browsers)')?></a> / <a href="../api/export_html.php"><?php echo T_('HTML file (for browsers)')?></a> /
<a href="../api/posts/all"><?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> <a href="../api/export_csv.php"><?php echo T_('CSV file (for spreadsheet tools)')?></a>
</td> </td>
</tr> </tr>

View File

@ -30,7 +30,7 @@ $this->includeTemplate($GLOBALS['top_include']);
<h3><?php echo T_('Instructions'); ?></h3> <h3><?php echo T_('Instructions'); ?></h3>
<ol> <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_('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_('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> <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><input type="password" id="password" name="password" size="20" class="required" /></td>
<td></td> <td></td>
</tr> </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> <tr>
<th align="left"><label for="email"><?php echo T_('E-mail'); ?></label></th> <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> <td><?php echo '←'.T_(' to send you your password if you forget it')?></td>
</tr> </tr>

View File

@ -1,10 +1,13 @@
<?php <?php
echo '<' . '?xml version="1.0" encoding="utf-8" ?' . ">\n"; 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> <channel>
<title><?php echo htmlspecialchars($feedtitle); ?></title> <title><?php echo $feedtitle; ?></title>
<link><?php echo htmlspecialchars($feedlink); ?></link> <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> <description><?php echo htmlspecialchars($feeddescription); ?></description>
<pubDate><?php echo date('r'); ?></pubDate> <pubDate><?php echo date('r'); ?></pubDate>
<lastBuildDate><?php echo $feedlastupdate ?></lastBuildDate> <lastBuildDate><?php echo $feedlastupdate ?></lastBuildDate>
@ -14,6 +17,7 @@ echo '<' . '?xml version="1.0" encoding="utf-8" ?' . ">\n";
<item> <item>
<title><?php echo htmlspecialchars($bookmark['title']); ?></title> <title><?php echo htmlspecialchars($bookmark['title']); ?></title>
<link><?php echo htmlspecialchars($bookmark['link']); ?></link> <link><?php echo htmlspecialchars($bookmark['link']); ?></link>
<guid><?php echo $bookmark['guid']; ?></guid>
<description><?php echo htmlspecialchars($bookmark['description']); ?></description> <description><?php echo htmlspecialchars($bookmark['description']); ?></description>
<dc:creator><?php echo htmlspecialchars($bookmark['creator']); ?></dc:creator> <dc:creator><?php echo htmlspecialchars($bookmark['creator']); ?></dc:creator>
<pubDate><?php echo $bookmark['pubdate']; ?></pubDate> <pubDate><?php echo $bookmark['pubdate']; ?></pubDate>
@ -23,4 +27,4 @@ echo '<' . '?xml version="1.0" encoding="utf-8" ?' . ">\n";
</item> </item>
<?php endforeach; ?> <?php endforeach; ?>
</channel> </channel>
</rss> </rss>

View File

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

View File

@ -0,0 +1,66 @@
<?php
/*
* Used in:
* - populartags.php
* - bookmarks.php
* - alltags.php
* - tags.php
*/
/* Service creation: only useful services are created */
$tag2tagservice =SemanticScuttle_Service_Factory::get('Tag2Tag');
require_once('sidebar.linkedtags.inc.php');
/* Manage input */
$user = isset($user)?$user:'';
$userid = isset($userid)?$userid:0;
$currenttag = isset($currenttag) ? str_replace('+', ',', $currenttag) : '';
//$summarizeLinkedTags = isset($summarizeLinkedTags)?$summarizeLinkedTags:false;
$logged_on_userid = $userservice->getCurrentUserId();
$editingMode = $logged_on_userid !== false;
?>
<h2><?php echo T_('Linked Tags'); ?></h2>
<div id="related">
<?php
if ($editingMode) {
echo '<p style="margin-bottom: 13px;text-align:center;">';
echo ' (<a href="'. createURL('tag2tagadd','') .'" rel="tag">'.T_('Add new link').'</a>) ';
echo ' (<a href="'. createURL('tag2tagdelete','') .'" rel="tag">'.T_('Delete link').'</a>)';
echo '</p>';
}
?>
<div id="related-content"></div>
<script type="text/javascript">//<![CDATA[
jQuery("#related-content")
.jstree({
"themes" : {
"theme": "default",
"dots": false,
"icons": true,
"url": '<?php echo ROOT_JS ?>themes/default/style.css'
},
"json_data" : {
"ajax" : {
"url": function(node) {
//-1 is root
parentparam = "";
if (node == -1 ) {
node = <?php echo json_encode($currenttag); ?>;
parentparam = "&parent=true";
} else if (node.attr('rel')) {
node = node.attr('rel');
} else {
return;
}
return "<?php echo ROOT ?>ajax/getlinkedtags.php?tag=" + node
+ parentparam;
}
}
},
plugins : [ "themes", "json_data"]
});
//]]>
</script>
</div>

View File

@ -65,13 +65,13 @@ if (sizeof($menuTags) > 0 || ($userid != 0 && $userid === $logged_on_userid)) {
<?php $cUser = $userservice->getUser($userid); ?> <?php $cUser = $userservice->getUser($userid); ?>
<?php if($userid>0): ?> <?php if($userid>0): ?>
<?php if($userid==$logged_on_userid): ?> <?php if($userid==$logged_on_userid): ?>
<p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all your tags')?>"><?php echo T_('all your tags'); ?></a> &rarr;</p> <p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all your tags')?>"><?php echo T_('all your tags'); ?></a> </p>
<?php else: ?> <?php else: ?>
<p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all tags from this user')?>"><?php echo T_('all tags from this user'); ?></a> &rarr;</p> <p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all tags from this user')?>"><?php echo T_('all tags from this user'); ?></a> </p>
<?php endif; ?> <?php endif; ?>
<?php else : ?> <?php else : ?>
<p style="text-align:right"><a href="<?php echo createURL('populartags', $cUser['username']); ?>" title="<?php echo T_('See popular tags')?>"><?php echo T_('Popular Tags'); ?></a> &rarr;</p> <p style="text-align:right"><a href="<?php echo createURL('populartags', $cUser['username']); ?>" title="<?php echo T_('See popular tags')?>"><?php echo T_('Popular Tags'); ?></a> </p>
<?php endif; ?> <?php endif; ?>
</div> </div>

View File

@ -0,0 +1,71 @@
<?php
require_once('sidebar.linkedtags.inc.php');
/* Manage input */
$userid = isset($userid)?$userid:0;
$user = isset($user)?$user:null;
$logged_on_userid = $userservice->getCurrentUserId();
if ($logged_on_userid === false) {
$logged_on_userid = NULL;
}
$cat_url = createURL('tags', '%s');
$menu2Tags = $GLOBALS['menu2Tags'];
if (count($menu2Tags) > 0) {
?>
<h2><?php echo T_('Featured Menu Tags');?></h2>
<div id="maintagsmenu"
<?php echo 'title="'.T_('This menu is composed of keywords (tags) organized by admins.').'"'?>>
<ul>
<?php
//this is unneeded and replaced by the ajax tree anyway. we keep it for
// non-js browsers
foreach ($menu2Tags as $menu2Tag) {
echo ' <li>'
. sprintf(
'<a href="%s">%s</a>',
sprintf($cat_url, $menu2Tag),
$menu2Tag
)
. '</li>' . "\n";
}
?>
</ul>
</div>
<script type="text/javascript">
jQuery("#maintagsmenu")
.jstree({
"themes" : {
"theme": "default",
"dots": false,
"icons": true,
"url": '<?php echo ROOT_JS ?>themes/default/style.css'
},
"json_data" : {
"ajax" : {
"url": function(node) {
//-1 is root
if (node == -1 ) {
node = "";
} else if (node.attr('rel')) {
node = node.attr('rel');
} else {
return;
}
return "<?php echo ROOT ?>ajax/getadminlinkedtags.php?tag=" + node;
}
}
},
plugins : [ "themes", "json_data"]
});
</script>
<?php
}
?>

View File

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

View File

@ -10,7 +10,7 @@ if ($logged_on_userid === false) {
$logged_on_userid = NULL; $logged_on_userid = NULL;
} }
$recentTags = $b2tservice->getPopularTags($userid, $popCount, $logged_on_userid, $GLOBALS['defaultRecentDays']); $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) { if ($recentTags && count($recentTags) > 0) {
?> ?>
@ -31,7 +31,7 @@ if ($recentTags && count($recentTags) > 0) {
} }
echo $contents ."</p>\n"; echo $contents ."</p>\n";
?> ?>
<p style="text-align:right"><a href="<?php echo createURL('populartags'); ?>"><?php echo T_('Popular Tags'); ?></a> &rarr;</p> <p style="text-align:right"><a href="<?php echo createURL('populartags'); ?>"><?php echo T_('Popular Tags'); ?></a> </p>
</div> </div>
<?php <?php

View File

@ -0,0 +1,51 @@
<?php
/**
* Show a list of the last searches.
*
* SemanticScuttle - your social bookmark manager.
*
* PHP version 5.
*
* @category Bookmarking
* @package SemanticScuttle
* @subcategory Templates
* @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
* @author Christian Weiske <cweiske@cweiske.de>
* @author Eric Dane <ericdane@users.sourceforge.net>
* @license GPL http://www.gnu.org/licenses/gpl.html
* @link http://sourceforge.net/projects/semanticscuttle
*/
/* Service creation: only useful services are created */
$searchhistoryservice = SemanticScuttle_Service_Factory::get('SearchHistory');
$lastSearches = $searchhistoryservice->getAllSearches(
'all', NULL, 3, NULL, true, false
);
if ($lastSearches && count($lastSearches) > 0) {
?>
<h2><?php echo T_('Last Searches'); ?></h2>
<div id="searches">
<table>
<?php
foreach ($lastSearches as $row) {
echo ' <tr><td>';
echo '<a href="'
. htmlspecialchars(createURL('search', $range.'/'.$row['shTerms']))
. '">';
echo htmlspecialchars($row['shTerms']);
echo '</a>';
echo ' <span title="'
. T_('Number of bookmarks for this query')
. '">(' . $row['shNbResults'] . ')</span>';
echo '</td></tr>' . "\n";
}
//echo '<tr><td><a href="'.createURL('users').'">...</a></td></tr>';
?>
</table>
</div>
<?php
}
?>

View File

@ -18,7 +18,7 @@ if ($lastUsers && count($lastUsers) > 0) {
foreach ($lastUsers as $row) { foreach ($lastUsers as $row) {
echo '<tr><td>'; echo '<tr><td>';
echo '<a href="'.createURL('profile', $row['username']).'">'; echo '<a href="'.createURL('profile', $row['username']).'">';
echo $row['username']; echo SemanticScuttle_Model_UserArray::getName($row);
echo '</a>'; echo '</a>';
echo ' (<a href="'.createURL('bookmarks', $row['username']).'">'.T_('bookmarks').'</a>)'; echo ' (<a href="'.createURL('bookmarks', $row['username']).'">'.T_('bookmarks').'</a>)';
echo '</td></tr>'; echo '</td></tr>';
@ -27,7 +27,7 @@ foreach ($lastUsers as $row) {
?> ?>
</table> </table>
<p style="text-align:right"><a href="<?php echo createURL('users'); ?>" title="<?php echo T_('See all users')?>"><?php echo T_('All users'); ?></a> &rarr;</p> <p style="text-align:right"><a href="<?php echo createURL('users'); ?>" title="<?php echo T_('See all users')?>"><?php echo T_('All users'); ?></a> </p>
</div> </div>
<?php <?php
} }

View File

@ -16,7 +16,7 @@ foreach($watching as $watchuser) {
?> ?>
<?php if(count($closeContacts)>0):?> <?php if(count($closeContacts)>0):?>
<h2 title="<?php echo T_('Close contacts are mutual contacts');?>"><?php echo ' &harr; '. T_('Close contacts'); ?></h2> <h2 title="<?php echo T_('Close contacts are mutual contacts');?>"><?php echo ' '. T_('Close contacts'); ?></h2>
<div id="watching"> <div id="watching">
<ul> <ul>
<?php foreach($closeContacts as $watchuser): ?> <?php foreach($closeContacts as $watchuser): ?>
@ -27,7 +27,7 @@ foreach($watching as $watchuser) {
<?php endif; ?> <?php endif; ?>
<h2><?php echo ' &rarr; '. T_('Watching'); ?></h2> <h2><?php echo ' '. T_('Watching'); ?></h2>
<div id="watching"> <div id="watching">
<ul> <ul>
<?php if($userservice->isLoggedOn() && $currentUser->getUsername() == $user): ?> <?php if($userservice->isLoggedOn() && $currentUser->getUsername() == $user): ?>
@ -41,7 +41,7 @@ foreach($watching as $watchuser) {
<?php foreach($watching as $watchuser): ?> <?php foreach($watching as $watchuser): ?>
<li><a href="<?php echo createURL('bookmarks', $watchuser); ?>"><?php echo $watchuser; ?></a> <li><a href="<?php echo createURL('bookmarks', $watchuser); ?>"><?php echo $watchuser; ?></a>
<?php if($userservice->isLoggedOn() && $currentUser->getUsername() == $user): ?> <?php if($userservice->isLoggedOn() && $currentUser->getUsername() == $user): ?>
- <a href="<?php echo createUrl('watch','?contact='.$watchuser); ?>" title="<?php echo T_('Remove this contact'); ?>">x<a/> - <a href="<?php echo createUrl('watch','?contact='.$watchuser); ?>" title="<?php echo T_('Remove this contact'); ?>">x</a>
</li> </li>
<?php endif; ?> <?php endif; ?>
<?php endforeach; ?> <?php endforeach; ?>
@ -49,7 +49,7 @@ foreach($watching as $watchuser) {
</ul> </ul>
</div> </div>
<h2><?php echo ' &larr; '. T_('Watched By'); ?></h2> <h2><?php echo ' '. T_('Watched By'); ?></h2>
<div id="watching"> <div id="watching">
<ul> <ul>
<?php foreach($watchedBy as $watchuser): ?> <?php foreach($watchedBy as $watchuser): ?>

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

@ -4,7 +4,7 @@ $this->includeTemplate($GLOBALS['top_include']);
<form action="<?php echo $formaction; ?>" method="post"> <form action="<?php echo $formaction; ?>" method="post">
<p align=right" style="float:right"> <p align="right" style="float:right">
<small style="text-align:right"><?php echo T_('Note: use "=" to make synonym two tags. e.g.: france=frenchcountry')?></small><br/> <small style="text-align:right"><?php echo T_('Note: use "=" to make synonym two tags. e.g.: france=frenchcountry')?></small><br/>
<small style="text-align:right"><?php echo T_('Note: use ">" to include one tag in another. e.g.: europe>france>paris')?></small><br/> <small style="text-align:right"><?php echo T_('Note: use ">" to include one tag in another. e.g.: europe>france>paris')?></small><br/>
</p> </p>

View File

@ -20,7 +20,8 @@ window.onload = function() {
if(strlen($description['cdDatetime'])>0) { if(strlen($description['cdDatetime'])>0) {
echo T_('Last modification:').' '.$description['cdDatetime'].', '; echo T_('Last modification:').' '.$description['cdDatetime'].', ';
$lastUser = $userservice->getUser($description['uId']); $lastUser = $userservice->getUser($description['uId']);
echo '<a href="'.createURL('profile', $lastUser['username']).'">'.$lastUser['username'].'</a>'; echo '<a href="' . createURL('profile', $lastUser['username']) . '">'
. SemanticScuttle_Model_UserArray::getName($lastUser) . '</a>';
} }
?> ?>
</td> </td>
@ -35,7 +36,6 @@ window.onload = function() {
<td></td> <td></td>
</tr> </tr>
</table> </table>
</p>
<?php if (isset($referrer)): ?> <?php if (isset($referrer)): ?>
<div><input type="hidden" name="referrer" value="<?php echo $referrer; ?>" /></div> <div><input type="hidden" name="referrer" value="<?php echo $referrer; ?>" /></div>

View File

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

View File

@ -11,12 +11,12 @@ window.onload = function() {
<tr> <tr>
<th align="left"><?php echo T_('Old'); ?></th> <th align="left"><?php echo T_('Old'); ?></th>
<td><input type="text" name="old" id="old" value="<?php echo $old; ?>" /></td> <td><input type="text" name="old" id="old" value="<?php echo $old; ?>" /></td>
<td>&larr; <?php echo T_('Required'); ?></td> <td> <?php echo T_('Required'); ?></td>
</tr> </tr>
<tr> <tr>
<th align="left"><?php echo T_('New'); ?></th> <th align="left"><?php echo T_('New'); ?></th>
<td><input type="text" name="new" id="new" value="" /></td> <td><input type="text" name="new" id="new" value="" /></td>
<td>&larr; <?php echo T_('Required'); ?></td> <td> <?php echo T_('Required'); ?></td>
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
@ -28,7 +28,6 @@ window.onload = function() {
</tr> </tr>
</table> </table>
</p>
<?php if (isset($referrer)): ?> <?php if (isset($referrer)): ?>
<div><input type="hidden" name="referrer" value="<?php echo $referrer; ?>" /></div> <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