Compare commits

...

443 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
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
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
317 changed files with 43752 additions and 14163 deletions

5
.gitignore vendored
View File

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

15
.travis.yml Normal file
View File

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

12
README.md Normal file
View File

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

249
build.xml
View File

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

1
data/.gitignore vendored
View File

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

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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

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

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

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

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

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

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

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

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

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

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 '',
`homepage` varchar(255) default NULL,
`uContent` text,
PRIMARY KEY (`uId`)
`privateKey` varchar(33) default NULL,
PRIMARY KEY (`uId`),
UNIQUE KEY `privateKey` (`privateKey`)
) CHARACTER SET utf8 COLLATE utf8_general_ci ;
-- --------------------------------------------------------
CREATE TABLE `sc_users_sslclientcerts` (
`id` INT NOT NULL AUTO_INCREMENT ,
`uId` INT NOT NULL ,
`sslSerial` VARCHAR( 32 ) NOT NULL ,
`sslClientIssuerDn` VARCHAR( 1024 ) NOT NULL ,
`sslName` VARCHAR( 64 ) NOT NULL ,
`sslEmail` VARCHAR( 64 ) NOT NULL ,
PRIMARY KEY ( `id` )
) CHARACTER SET utf8 COLLATE utf8_general_ci;
--
-- Table structure for table `sc_watched`
--
@ -182,4 +194,10 @@ CREATE TABLE `sc_votes` (
UNIQUE KEY `bid_2` (`bId`,`uId`),
KEY `bid` (`bId`),
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>
<ul>
<li><a href="http://sourceforge.net/projects/semanticscuttle/">Semantic Scuttle</a> <?php echo T_('is licensed under the ');?> <a href="http://www.gnu.org/copyleft/gpl.html"><acronym title="GNU\'s Not Unix">GNU</acronym> General Public License</a> (<?php echo T_('you can freely host it on your own web server.'); ?>)</li>
<li><?php echo sprintf(T_('%1$s supports most of the <a href="http://del.icio.us/doc/api">del.icio.us <abbr title="Application Programming Interface">API</abbr></a>. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won\'t let you change the API address, ask the creator to add this setting. You never know, they might just do it.'), $GLOBALS['sitename']); ?></li>
<li><?php echo sprintf(T_('%1$s supports most of the <a href="http://www.delicious.com/help/api">del.icio.us <abbr title="Application Programming Interface">API</abbr></a>. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won\'t let you change the API address, ask the creator to add this setting. You never know, they might just do it.'), $GLOBALS['sitename']); ?></li>
<?php if(!is_null($currentUser) && $currentUser->isAdmin()): ?>
<li>SemanticScuttle v0.97.0</li>
<li>SemanticScuttle v0.98.5</li>
<?php endif ?>
</ul>

View File

@ -11,7 +11,7 @@ foreach($users as $user) {
echo '<div class="link">';
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>';
if($user->getUsername() != $currentUser->getUsername()) {

View File

@ -30,7 +30,8 @@ window.onload = function() {
if(strlen($description['cdDatetime'])>0) {
echo T_('Last modification:').' '.$description['cdDatetime'].', ';
$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>

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

@ -39,7 +39,9 @@ include('search.menu.php');
<?php if($GLOBALS['enableAdminColors']!=false && isset($userid) && $userservice->isAdmin($userid) && $pageName != PAGE_WATCHLIST) : ?>
<div style="width:70%;text-align:center;">
<img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/> <?php echo T_('Bookmarks on this page are managed by an admin user.'); ?><img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/>
<img src="<?php echo $theme->resource('images/logo_24.gif'); ?>" width="12px"/>
<?php echo T_('Bookmarks on this page are managed by an admin user.'); ?>
<img src="<?php echo $theme->resource('images/logo_24.gif'); ?>" width="12px"/>
</div>
<?php endif?>
@ -62,12 +64,16 @@ if($currenttag!= '' && $cdservice->getLastTagDescription($currenttag)) {
}
//common tag description edit
if($userservice->isLoggedOn()) {
if($currenttag!= '' && ($GLOBALS['enableCommonTagDescriptionEditedByAll'] || $currentUser->isAdmin())) {
if ($userservice->isLoggedOn()) {
if ($currenttag != ''
&& ($GLOBALS['enableCommonTagDescriptionEditedByAll']
|| $currentUser->isAdmin()
)
) {
echo ' <a href="'. createURL('tagcommondescriptionedit', $currenttag).'" title="'.T_('Edit the common description of this tag').'">';
echo !is_array($cDescription) || strlen($cDescription['cdDescription'])==0?T_('Edit the common description of this tag'):'';
echo ' <img src="'.ROOT.'images/b_edit.png" /></a>';
} elseif(isset($hash)) {
echo ' <img src="' . $theme->resource('images/b_edit.png') . '" /></a>';
} else if (isset($hash)) {
echo ' (<a href="'.createURL('bookmarkcommondescriptionedit', $hash).'" title="'.T_('Edit the common description of this bookmark').'">';
echo T_('Edit the common description of this bookmark').'</a>)';
}
@ -91,7 +97,7 @@ if($userservice->isLoggedOn()) {
if($currenttag!= '') {
echo ' <a href="'. createURL('tagedit', $currenttag).'" title="'.T_('Edit your personal description of this tag').'" >';
echo strlen($pDescription['tDescription'])==0?T_('Edit your personal description of this tag'):'';
echo ' <img src="'.ROOT.'images/b_edit.png" /></a>';
echo ' <img src="' . $theme->resource('images/b_edit.png') . '" /></a>';
}
}
?></p>
@ -101,7 +107,7 @@ if($userservice->isLoggedOn()) {
}
?>
<?php if (count($bookmarks) > 0) { ?>
<?php if (isset($bookmarks) && count($bookmarks) > 0) { ?>
<script type="text/javascript">
window.onload = playerLoad;
</script>
@ -117,33 +123,33 @@ $votingSort = 'voting_desc';
switch(getSortOrder()) {
case 'date_asc':
$dateArrow = ' &uarr;';
$dateArrow = ' ';
$dateSort = 'date_desc';
break;
case 'title_asc':
$titleArrow = ' &uarr;';
$titleArrow = ' ';
$titleSort = 'title_desc';
break;
case 'title_desc':
$titleArrow = ' &darr;';
$titleArrow = ' ';
$titleSort = 'title_asc';
break;
case 'voting_asc':
$votingArrow = ' &uarr;';
$votingArrow = ' ';
$votingSort = 'voting_desc';
break;
case 'voting_desc':
$votingArrow = ' &darr;';
$votingArrow = ' ';
$votingSort = 'voting_asc';
break;
case 'date_desc':
default:
$dateArrow = ' &darr;';
$dateArrow = ' ';
$dateSort = 'date_asc';
break;
}
@ -156,6 +162,14 @@ default:
<a href="?sort=<?php echo $votingSort ?>"><?php echo T_("Voting").$votingArrow; ?></a>
<span>/</span>
<?php } ?>
<?php
if ($userservice->isLoggedOn() && $_SERVER['PHP_SELF'] !== "/index.php") {
echo '<form method="get" action="'. $_SERVER['REQUEST_URI'] .'">';
echo '<input type="hidden" name="batch" value="1"/>';
echo '<input type="submit" value="Batch tagging"/>';
echo "</form>";
}
?>
<?php
if ($currenttag!= '') {
@ -172,7 +186,6 @@ if ($currenttag!= '') {
}
}
?></p>
<?php
// PAGINATION
@ -215,10 +228,13 @@ if ($currenttag!= '') {
$brss = '';
$size = count($rsschannels);
for ($i = 0; $i < $size; $i++) {
$brss = '<a style="background:#FFFFFF" href="'. htmlspecialchars($rsschannels[$i][1]) . '"'
. ' title="' . htmlspecialchars($rsschannels[$i][0]) . '">'
. '<img src="' . ROOT . 'images/rss.gif" width="16" height="16" alt="' . htmlspecialchars($rsschannels[$i][0]) .'"/>'
. '</a>';
$brss = '<a style="background:#FFFFFF"'
. ' href="'. htmlspecialchars($rsschannels[$i][1]) . '"'
. ' title="' . htmlspecialchars($rsschannels[$i][0]) . '">'
. '<img src="' . $theme->resource('images/rss.gif') . '"'
. ' width="16" height="16"'
. ' alt="' . htmlspecialchars($rsschannels[$i][0]) .'"/>'
. '</a>';
}
$pagesBanner = '<p class="paging">'. $bfirst .'<span> / </span>'. $bprev .'<span> / </span>'. $bnext .'<span> / </span>'. $blast .'<span> / </span>'. sprintf(T_('Page %d of %d'), $page, $totalpages) ." ". $brss ." </p>\n";
@ -292,10 +308,9 @@ if ($currenttag!= '') {
$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;\">'
. ' <a href="#" onclick="deleteBookmark(this, '. $row['bId'] .'); return false;">'
. T_('Delete')
.'<\/a>");</script>';
.'</a>';
}
// Last update
@ -309,10 +324,11 @@ if ($currenttag!= '') {
$copy .= T_('you');
} else {
$copy .= '<a href="' . createURL('bookmarks', $row['username']) . '">'
. $row['username'] . '</a>';
. SemanticScuttle_Model_UserArray::getName($row)
. '</a>';
}
// Udders!
// others
if (!isset($hash)) {
$others = $otherCounts[$row['bAddress']];
$ostart = '<a href="' . createURL('history', $row['bHash']) . '">';
@ -349,7 +365,7 @@ if ($currenttag!= '') {
$rel = ' rel="nofollow"';
}
$address = filter($row['bAddress']);
$address = $row['bAddress'];
$oaddress = $address;
// Redirection option
if ($GLOBALS['useredir']) {
@ -357,9 +373,15 @@ if ($currenttag!= '') {
}
// Admin specific design
if ($userservice->isAdmin($row['username']) && $GLOBALS['enableAdminColors']) {
if ($userservice->isAdmin($row['username'])
&& $GLOBALS['enableAdminColors']
) {
$adminBgClass = ' class="adminBackground"';
$adminStar = ' <img src="'. ROOT .'images/logo_24.gif" width="12px" title="'. T_('This bookmark is certified by an admin user.') .'" />';
$adminStar = ' <img'
. ' src="' . $theme->resource('images/logo_24.gif') . '"'
. ' width="12px"'
. ' title="' . T_('This bookmark is certified by an admin user.') . '"'
. '/>';
} else {
$adminBgClass = '';
$adminStar = '';
@ -390,7 +412,7 @@ if ($currenttag!= '') {
echo ' <div' . $adminBgClass . '>' . "\n";
echo ' <div class="link">'
. '<a href="'. $address .'"'. $rel .' class="taggedlink" target="_blank">'
. '<a href="'. htmlspecialchars($address) .'"'. $rel .' class="taggedlink">'
. filter($row['bTitle'])
. '</a>' . $adminStar . "</div>\n";
if ($row['bDescription'] == '') {
@ -403,7 +425,7 @@ if ($currenttag!= '') {
}
echo ' <div class="description">'. nl2br($bkDescription) ."</div>\n";
echo ' <div class="address">' . shortenString($oaddress) . "</div>\n";
echo ' <div class="address">' . htmlspecialchars(shortenString($oaddress)) . "</div>\n";
echo ' <div class="meta">'
. $cats . "\n"

View File

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

View File

@ -25,39 +25,51 @@ $b2tservice = SemanticScuttle_Service_Factory :: get('Bookmark2Tag');
$logged_on_userid = $userservice->getCurrentUserId();
//tags from current user
$userPopularTags =& $b2tservice->getPopularTags($logged_on_userid, 25, $logged_on_userid);
$userPopularTagsCloud =& $b2tservice->tagCloud($userPopularTags, 5, 90, 175);
$userPopularTags = $b2tservice->getPopularTags($logged_on_userid, 25, $logged_on_userid);
$userPopularTagsCloud = $b2tservice->tagCloud($userPopularTags, 5, 90, 175);
$userPopularTagsCount = count($userPopularTags);
//tags from all users
$allPopularTags =& $b2tservice->getPopularTags(null, 5, $logged_on_userid);
$allPopularTagsCloud =& $b2tservice->tagCloud($allPopularTags, 5, 90, 175);
$allPopularTags = $b2tservice->getPopularTags(null, 5, $logged_on_userid);
$allPopularTagsCloud = $b2tservice->tagCloud($allPopularTags, 5, 90, 175);
$allPopularTagsCount = count($allPopularTags);
// function printing the cloud
function writeTagsProposition($tagsCloud, $title) {
echo 'document.write(\'<div class="collapsible">\');';
echo 'document.write(\'<h3>'. $title .'<\/h3>\');';
echo 'document.write(\'<p id="popularTags" class="tags">\');';
function writeTagsProposition($tagsCloud, $title)
{
static $id = 0;
++$id;
echo <<<JS
$('.edit-tagclouds')
.append(
'<div class="collapsible" id="edit-tagcloud-$id">'
+ ' <h3>$title</h3>'
+ ' <p class="popularTags tags"></p>'
+ '</div>');
JS;
$taglist = '';
foreach(array_keys($tagsCloud) as $key) {
$row =& $tagsCloud[$key];
foreach (array_keys($tagsCloud) as $key) {
$row = $tagsCloud[$key];
$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 'document.write(\''. $taglist .'\');';
echo 'document.write(\'<\/p>\');';
echo 'document.write(\'<\/div>\');';
echo '$(\'#edit-tagcloud-' . $id . ' p\').append('
. json_encode($taglist)
. ");\n";
}
if ($allPopularTagsCount > 0 || $userPopularTagsCount > 0 ) { ?>
<script type="text/javascript">
//<![CDATA[
Array.prototype.contains = function (ele) {
for (var i = 0; i < this.length; i++) {
if (this[i] == ele) {
@ -87,20 +99,26 @@ function addonload(addition) {
}
}
addonload(
function () {
var taglist = document.getElementById('tags');
var tags = taglist.value.split(', ');
jQuery(function($) {
<?php
if ($userPopularTagsCount > 0) {
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++) {
if (tags.contains(populartags[i].innerHTML)) {
populartags[i].className = 'selected';
}
}
}
);
});
function addTag(ele) {
var thisTag = ele.innerHTML;
@ -122,20 +140,9 @@ function addTag(ele) {
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>
<div class="edit-tagclouds"></div>
<?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">
<input type="hidden" name="token" value="<?php echo $token; ?>">
</table>
<input type="hidden" name="token" value="<?php echo $token; ?>"/>
<h3><?php echo T_('Account Details'); ?></h3>
@ -28,7 +26,15 @@ $this->includeTemplate($GLOBALS['top_include']);
<tr>
<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>&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>
</table>
@ -52,13 +58,15 @@ $this->includeTemplate($GLOBALS['top_include']);
<td><input type="submit" name="submitted" value="<?php echo T_('Save Changes'); ?>" /></td>
</tr>
</table>
<?php include 'editprofile-sslclientcerts.tpl.php'; ?>
<h3><?php echo T_('Actions'); ?></h3>
<table class="profile">
<tr>
<th align="left"><?php echo T_('Export bookmarks'); ?></th>
<td>
<a href="../api/export_html.php"><?php echo T_('HTML file (for browsers)')?></a> /
<a href="../api/posts/all"><?php echo T_('XML file (like del.icio.us)')?></a> /
<a href="../api/posts_all.php"><?php echo T_('XML file (like del.icio.us)')?></a> /
<a href="../api/export_csv.php"><?php echo T_('CSV file (for spreadsheet tools)')?></a>
</td>
</tr>

View File

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

View File

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

View File

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

View File

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

View File

@ -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 if($userid>0): ?>
<?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: ?>
<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 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; ?>
</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) {
$logged_on_userid = NULL;
}
$popularTags =& $b2tservice->getPopularTags($userid, $popCount, $logged_on_userid);
$popularTags =& $b2tservice->tagCloud($popularTags, 5, 90, 225, 'alphabet_asc');
$popularTags = $b2tservice->getPopularTags($userid, $popCount, $logged_on_userid);
$popularTags = $b2tservice->tagCloud($popularTags, 5, 90, 225, 'alphabet_asc');
if ($popularTags && count($popularTags) > 0) {
?>

View File

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

View File

@ -34,7 +34,7 @@ foreach ($lastSearches as $row) {
echo '<a href="'
. htmlspecialchars(createURL('search', $range.'/'.$row['shTerms']))
. '">';
echo $row['shTerms'];
echo htmlspecialchars($row['shTerms']);
echo '</a>';
echo ' <span title="'
. T_('Number of bookmarks for this query')

View File

@ -18,7 +18,7 @@ if ($lastUsers && count($lastUsers) > 0) {
foreach ($lastUsers as $row) {
echo '<tr><td>';
echo '<a href="'.createURL('profile', $row['username']).'">';
echo $row['username'];
echo SemanticScuttle_Model_UserArray::getName($row);
echo '</a>';
echo ' (<a href="'.createURL('bookmarks', $row['username']).'">'.T_('bookmarks').'</a>)';
echo '</td></tr>';
@ -27,7 +27,7 @@ foreach ($lastUsers as $row) {
?>
</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>
<?php
}

View File

@ -16,7 +16,7 @@ foreach($watching as $watchuser) {
?>
<?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">
<ul>
<?php foreach($closeContacts as $watchuser): ?>
@ -27,7 +27,7 @@ foreach($watching as $watchuser) {
<?php endif; ?>
<h2><?php echo ' &rarr; '. T_('Watching'); ?></h2>
<h2><?php echo ' '. T_('Watching'); ?></h2>
<div id="watching">
<ul>
<?php if($userservice->isLoggedOn() && $currentUser->getUsername() == $user): ?>
@ -41,7 +41,7 @@ foreach($watching as $watchuser) {
<?php foreach($watching as $watchuser): ?>
<li><a href="<?php echo createURL('bookmarks', $watchuser); ?>"><?php echo $watchuser; ?></a>
<?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>
<?php endif; ?>
<?php endforeach; ?>
@ -49,7 +49,7 @@ foreach($watching as $watchuser) {
</ul>
</div>
<h2><?php echo ' &larr; '. T_('Watched By'); ?></h2>
<h2><?php echo ' '. T_('Watched By'); ?></h2>
<div id="watching">
<ul>
<?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">
<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 include one tag in another. e.g.: europe>france>paris')?></small><br/>
</p>

View File

@ -20,7 +20,8 @@ window.onload = function() {
if(strlen($description['cdDatetime'])>0) {
echo T_('Last modification:').' '.$description['cdDatetime'].', ';
$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>
@ -35,7 +36,6 @@ window.onload = function() {
<td></td>
</tr>
</table>
</p>
<?php if (isset($referrer)): ?>
<div><input type="hidden" name="referrer" value="<?php echo $referrer; ?>" /></div>

View File

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

View File

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

View File

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

View File

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

View File

@ -14,7 +14,14 @@ if ($users && count($users) > 0) {
<?php
$contents = '<';
foreach ($users as $row) {
echo '<li><strong>'.$row['username'].'</strong> (<a href="'.createURL('profile', $row['username']).'">'.T_('profile').'</a> '.T_('created in').' '.date('M Y',strtotime($row['uDatetime'])).') : <a href="'.createURL('bookmarks', $row['username']).'">'.T_('bookmarks').'</a></li>';
echo '<li><strong>'
. SemanticScuttle_Model_UserArray::getName($row) . '</strong>'
. ' (<a href="' . createURL('profile', $row['username']) . '">'
. T_('profile') . '</a> '
. T_('created in') . ' '
. date('M Y', strtotime($row['uDatetime'])) . ')'
. ' : <a href="' . createURL('bookmarks', $row['username']).'">'
. T_('bookmarks') . '</a></li>';
}
?>
</ul>

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