2188 Commits
2.0 ... 2.8

Author SHA1 Message Date
Andrew Manning
5cf06a679c Context help for cards 2017-10-25 13:35:24 +02:00
Mario
344aa13c64 Merge branch '2.8RC' 2017-10-25 13:29:19 +02:00
Mario
69b22e3f79 bump version and update changelog 2017-10-25 13:27:30 +02:00
Mario
bc890d3038 version RC1 2017-10-24 19:43:06 +02:00
Mario Vavti
e424ae0473 comment out statistics link in mod pubsites until we have something functional again 2017-10-24 18:35:22 +02:00
Klaus Weidenbach
780abe7dd4 Update composer autoload cache. 2017-10-24 18:35:03 +02:00
Haakon Meland Eriksen
a3fc9e3742 Portfolio widget - CSS update 2017-10-24 18:34:37 +02:00
Mario
a23f8b6231 add hcard to webfinger 2017-10-24 10:41:37 +02:00
zotlabs
ccc8ff107e acl encoding issues 2017-10-24 10:26:23 +02:00
zotlabs
2c07a92ad7 hubzilla issue #885 2017-10-23 22:10:33 +02:00
zotlabs
8c57ed64d0 wrong key 2017-10-22 21:49:34 +02:00
Mario Vavti
d0bc81f8d2 do not show seen notifys in notifications - show them in mod notifications instead. Update notifications count also on notifications updates 2017-10-22 21:17:20 +02:00
phellmes
0dc777bc45 Update DE translation strings 2017-10-22 21:17:02 +02:00
Manuel Jiménez Friaza
4f39119e37 Fixed the Spanish translation 2017-10-22 21:16:54 +02:00
Mario Vavti
9751d03a4d changelog 2017-10-20 10:16:28 +02:00
zotlabs
36678d1b90 register workflow was getting over-ridden in include/security 2017-10-20 10:14:56 +02:00
Andrew Manning
8f465e3097 Display different info message if using invite code 2017-10-20 10:13:17 +02:00
Mario Vavti
00dc7c916d Merge branch '2.8RC' of https://github.com/redmatrix/hubzilla into 2.8RC 2017-10-19 12:08:48 +02:00
Mario Vavti
5fd6e36be7 strings 2017-10-19 12:08:33 +02:00
Mario
e61b44ddbb version 2017-10-19 11:49:55 +02:00
Mario Vavti
f3c374b6ff redirect to be moderated items to /moderate and change the conv link to partent mid in /modrate 2017-10-19 11:20:09 +02:00
Mario Vavti
21b2c0afa3 fix issue #837 - w2w posts not removed in contact_remove() 2017-10-19 10:21:47 +02:00
Mario Vavti
ca4c725d57 remove redundant js 2017-10-18 12:28:56 +02:00
Mario Vavti
fe1aa90304 streamline the notifications js and change notification icon to exclamation-triangle if we have personal notifications 2017-10-18 11:38:45 +02:00
Mario Vavti
64a49eb54a update notifications if a notification area remains open 2017-10-18 00:25:00 +02:00
zotlabs
b106b53d05 don't translate 'guest:' since it is part of a url 2017-10-16 23:01:00 -07:00
zotlabs
a791809a84 ensure guests hve a unique (non-existent) url so that network discovery on remote servers doesn't come up mis-attributing the token. Future work should probably provide an actual page at this location describing it as a guest account of 'xyz'. 2017-10-16 22:31:38 -07:00
zotlabs
71c3a0a197 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-16 18:20:42 -07:00
zotlabs
18279234fd mod_register - don't re-use the password, force them to type it in twice each time unless their browser saves passwords. 2017-10-16 15:55:41 -07:00
zotlabs
cf7481da53 regression in zot site info after zot6 work 2017-10-16 15:20:45 -07:00
Felix Wolfsteller
b8a9390f49 fix typos in comment 2017-10-16 21:33:14 +02:00
git-marijus
61c86212b9 Merge pull request #874 from fwolfst/comment_typo_fix
fix typos in comment
2017-10-16 21:30:57 +02:00
zotlabs
a33562144b documentation updates. I've been sitting on these for quite some time waiting for the current documentation work to complete; but if I leave this any longer I may forget the changes that I need to make. The last time there was a major documentation update all my intervening changes were lost, so hopefully I won't lose these and have to do them over again. 2017-10-15 17:39:14 -07:00
zotlabs
9b94ad2ffe was unable to make the modal login dialog work on the channel page with a cover photo. So for mod_channel, send login to the login page instead of the modal popup. 2017-10-14 01:17:47 -07:00
zotlabs
70b39e829b template not hidden 2017-10-13 13:06:54 -07:00
zotlabs
29a29f277e create an actual logout module instead of relying on internal variables 2017-10-12 22:10:42 -07:00
zotlabs
e5f1bcacc8 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-12 12:00:55 -07:00
zotlabs
e6c166a182 sort out the notification ids 2017-10-12 11:36:25 -07:00
Mario Vavti
26bd532bc5 remove redundant classes 2017-10-12 15:57:16 +02:00
Mario Vavti
c89b2ac3b7 missing login and register links 2017-10-12 15:54:01 +02:00
zotlabs
6acd96fd33 typo 2017-10-11 17:52:03 -07:00
zotlabs
a652e546cc add local_channel as a comanche condition variable 2017-10-11 15:19:06 -07:00
zotlabs
ee307729fc Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-11 15:14:18 -07:00
zotlabs
491856fa79 the template is needed for the old-style notifications 2017-10-11 15:12:49 -07:00
Mario Vavti
56a675f713 z-index issue and some icons. rename notifications-btn-1 to notifications-btn 2017-10-11 21:32:23 +02:00
Mario Vavti
05c8d4819d only show pubs notifications if discovery_tab != disabled 2017-10-11 14:26:18 +02:00
Mario Vavti
c8d5390512 move affinity slider lower on screens < 767px to not collide with the page menu button 2017-10-11 13:18:18 +02:00
Mario Vavti
f3cf708c85 remove region nav entry in network.pdl - it is not needed 2017-10-11 12:42:16 +02:00
Mario Vavti
24d1d752fe nav_set_selected() for apps and apporder. restrict apporder to local_channel() and whitespace 2017-10-11 11:58:09 +02:00
Mario Vavti
ba55400f14 bring nav pinned apps to navbar_default 2017-10-11 11:49:03 +02:00
zotlabs
0c5918f290 bring back some nav stuff (notifications) for alternate navbars; still some things missing as the notification dropdowns aren't fully functional. 2017-10-11 01:29:25 -07:00
Felix Wolfsteller
0216dc733d fix typos in comment 2017-10-11 09:13:59 +02:00
zotlabs
ff8ee6fb22 for federated forums we need to keep track of what protocols are available to red/hubzilla channels to determine which posts need to be mangled for transport to individual networks - based on what networks the author can communicate with. We probably need this for all xchans and hublocs but at some point it becomes increasingly difficult to scrape this information and map out a compatibility matrix. It's also doubtful anybody will use this system because we basically have to forge comments between network sites involving different protocols and this is going to look like crap to anybody that isn't on red/Hubzilla. Eventually they have to fix their protocols for this to work correctly, but nobody seems to believe me that their networks are basically anti-federation, so we need something like this to highlight their walled garden specifications and the resulting federation problems in a form they can't really argue with. 2017-10-10 22:02:22 -07:00
zotlabs
1a7ccc462b on failed auth due to unverified email, tell the person why and remind them to check their email. 2017-10-10 19:45:11 -07:00
zotlabs
769da564e2 re-order the navbar preferences - 1. profile_uid, 2. local_channel, 3, site, 4 'default' 2017-10-10 19:22:24 -07:00
zotlabs
09b4660c7d rename view/tpl/nav.tpl to navbar_default.tpl so that all navbar selection code is consistent 2017-10-10 18:50:01 -07:00
zotlabs
69394c1680 re-implement single delivery 2017-10-10 18:40:02 -07:00
zotlabs
4203d43c58 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-10 16:06:09 -07:00
zotlabs
6a2c5e0731 pdledit usability improvements 2017-10-10 16:05:10 -07:00
Mario Vavti
07ae431950 css fixes 2017-10-10 20:02:42 +02:00
Mario Vavti
0c4a1fb9be version 2017-10-10 19:28:11 +02:00
Mario Vavti
e6f1fb3d95 remove notifications code from nav and go live with new notifications 2017-10-10 16:51:35 +02:00
Mario Vavti
030d703a05 remove left_align mode 2017-10-10 16:03:59 +02:00
Mario Vavti
edc262f5af Merge remote-tracking branch 'mike/master' into dev 2017-10-10 12:09:32 +02:00
Mario Vavti
41cf846ee3 new notification fixes 2017-10-10 12:08:51 +02:00
zotlabs
335536bbbf more custom navbar work 2017-10-09 20:19:03 -07:00
zotlabs
89aa9a80c4 typo 2017-10-09 15:51:30 -07:00
zotlabs
d636ff586d Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-09 15:15:02 -07:00
zotlabs
623dfa1384 purify user-supplied filenames in some cases. Probably not needed but it's the right thing to do. 2017-10-09 15:13:25 -07:00
Mario Vavti
cc1ffff7cd feed untranslated appnames to nav_set_selected() and query for the active app directly to get app details 2017-10-09 21:22:57 +02:00
Mario Vavti
5698462588 Merge remote-tracking branch 'mike/master' into dev 2017-10-09 17:49:55 +02:00
Mario Vavti
f99c007187 new notification changes - use sticky_kit instead of position fixed 2017-10-09 17:49:15 +02:00
Mario Vavti
54a0690323 more new notifications fixes 2017-10-09 13:35:58 +02:00
zotlabs
23812e5b48 ability to pin apps to the navbar when using named navbars 2017-10-08 19:43:03 -07:00
zotlabs
c37908f344 check write_storage permission in /display 2017-10-08 17:22:38 -07:00
zotlabs
4011dd18f0 alternate navbar layouts 2017-10-08 16:48:24 -07:00
zotlabs
52b1ea10a1 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-08 15:10:44 -07:00
Mario Vavti
ec173e7eb2 more fixes 2017-10-08 22:47:43 +02:00
Mario Vavti
bcf4cb519a new notification fixes 2017-10-08 22:21:19 +02:00
zotlabs
27bc8294ae Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-08 12:43:50 -07:00
Mario Vavti
991db280be experimental new notifications - needs pconfig experimental_notif set to 1 for your channel to work. 2017-10-08 17:19:29 +02:00
zotlabs
6f709a6f57 navbar controls now functionally hidden with too low z-index when cover_photo is showing and navbar doesn't have class fixed-top 2017-10-07 23:44:27 -07:00
Mario Vavti
71c206fdb9 pubstream single view fixes 2017-10-07 16:40:43 +02:00
Mario Vavti
4c0e8a61ae provide single post view for pubstream and rewrite llink to point to /pubstream/?f=&mid=some_mid instead of /display/some_mid for pubs notifications 2017-10-07 15:40:34 +02:00
Mario Vavti
dc2c6d00fe fix filestorage spinner 2017-10-07 12:34:43 +02:00
Mario Vavti
e7c8012794 no need to move $modrated check up 2017-10-06 22:25:53 +02:00
Mario Vavti
9bd30eb8bf to find out if a comment is to be moderated we need to look at the actual comment not at its parent 2017-10-06 21:32:06 +02:00
Mario Vavti
b883b9c983 enable anonymous comments also in /display 2017-10-06 21:30:44 +02:00
Mario Vavti
5468ebbb43 Revert "mod display: if we have a local channel we should still be allowed to see sys channel items"
This reverts commit 27f8320353.
2017-10-06 21:05:37 +02:00
Mario Vavti
27f8320353 mod display: if we have a local channel we should still be allowed to see sys channel items 2017-10-06 16:51:39 +02:00
Mario Vavti
e15307747f it is not your public stream -> just public stream 2017-10-06 16:48:25 +02:00
Mario Vavti
f427b4a325 introduce public stream notifications 2017-10-06 16:46:27 +02:00
zotlabs
a6835f4e71 changes to encryption encapsulation for zot6 (backward compatible) 2017-10-05 23:01:42 -07:00
zotlabs
052ed1f88b typo 2017-10-05 22:01:45 -07:00
zotlabs
34a0ec4089 Add JSalmon signing library for Zot6. See https://macgirvin.com/wiki/mike/Zot%2BVI/Encryption/Signatures 2017-10-05 20:09:21 -07:00
zotlabs
2ed77b5986 add admin app - the site admin link probably does not belong in the 'usermenu' and this is a first step to straigtening out that historical mistake. 2017-10-05 19:51:00 -07:00
zotlabs
d70e6f273b Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-05 19:24:16 -07:00
zotlabs
7c501ef60f update some old spinners which were causing js issues 2017-10-05 19:20:39 -07:00
zotlabs
a0eb628526 Experimental alternate channel_menu navigation. To use, "util/config system.channel_menu 1" 2017-10-05 16:59:33 -07:00
Mario Vavti
0ddc3e4af2 fix wrong logic for enable/disable pubstream notifications 2017-10-05 21:42:25 +02:00
Mario Vavti
5be9477f21 Merge remote-tracking branch 'mike/master' into dev 2017-10-05 11:25:39 +02:00
zotlabs
4ab21edba8 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-04 19:37:50 -07:00
zotlabs
15b9a67c01 redirect loop with rmagic and owa 2017-10-04 18:51:37 -07:00
zotlabs
80ca99fe5b wiki double encoding html entities 2017-10-04 16:37:14 -07:00
Mario Vavti
6f88d5e92b introduce shared files notifications 2017-10-04 22:11:18 +02:00
Mario Vavti
295ed07d40 bring back notifications for account approvals 2017-10-04 13:37:17 +02:00
zotlabs
d6b1eff70e ensure we have an observer hash 2017-10-03 17:05:32 -07:00
zotlabs
7fb02752de hubzilla issue #868 2017-10-03 17:03:24 -07:00
zotlabs
d88d4b3c3a wrong param 2017-10-03 15:43:51 -07:00
zotlabs
58155864cb urlencode hashes from mod_acl 2017-10-03 15:36:56 -07:00
zotlabs
9cf9217686 don't use chanlink_url() for feed mentions 2017-10-03 15:27:26 -07:00
Mario Vavti
fa93114804 some basic work on mod common 2017-10-03 11:37:45 +02:00
Mario Vavti
66511d8f07 move common connections widget to left aside 2017-10-03 10:53:08 +02:00
Mario Vavti
f52e5d90b0 Merge remote-tracking branch 'mike/master' into dev 2017-10-03 09:40:51 +02:00
zotlabs
f571b753b6 import: special handling required for channel photo in the xchan record when not seizing 'primary' 2017-10-02 20:27:04 -07:00
zotlabs
40e747ecde remove server role selection details from install documentation, no longer needed 2017-10-02 18:46:24 -07:00
zotlabs
9e24b28376 Hubzilla issue #866 allow navbar to be used when cover photo is displayed - also scroll cover photo on keyup event. 2017-10-02 17:57:46 -07:00
zotlabs
5abdee73ee Clone sync deletions to comments (which belong to you) on wall posts (which do not). 2017-10-02 16:26:33 -07:00
Mario Vavti
2feb6795b0 fix community tags not preserved on post edit. issue #865 2017-10-02 12:56:15 +02:00
Mario Vavti
c200808fbb fix community tags not preserved on post edit. issue #865 2017-10-02 12:54:25 +02:00
Mario Vavti
1f8b705a6a whitespace 2017-10-02 12:16:53 +02:00
Mario Vavti
a3c2ef4084 wiki: show save button and commit input field in all tabs if there is unsaved content. fix #853 2017-10-02 12:11:52 +02:00
zotlabs
9dcbef4cb1 profile photo propagation issue if the local xchan_photo_[l|m|s] fields were changed from the /photo/profile/l/n form to photo/[hash] form by a clone operation. 2017-10-01 18:22:55 -07:00
zotlabs
8bd4e004ff Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-10-01 17:05:20 -07:00
git-marijus
f70d27b793 Merge pull request #863 from mjfriaza/dev
Fixed some errors in the Spanish translation
2017-10-01 22:49:41 +02:00
Mario Vavti
7c845aafa2 card_edit: fix lockstate and current permissions not handed over to editor 2017-10-01 22:46:35 +02:00
Manuel Jiménez Friaza
16b57a2b28 Fixed the Spanish translation 2017-10-01 13:12:09 +02:00
Mario Vavti
89457c8390 fix profile edit dropdown for multiple profiles 2017-10-01 10:24:33 +02:00
zotlabs
ea4d1b5101 use imagick converter for large photos 2017-09-30 15:17:47 -07:00
Andrew Manning
dd38fad9ee Update administrator_guide.md 2017-09-30 09:44:40 -04:00
Mario Vavti
bdecb61bfa remove double remote login button and slightly change appearence 2017-09-28 11:31:36 +02:00
git-marijus
c9231785ab Merge pull request #860 from waitman/patch-2
add remote login to login form
2017-09-28 11:02:23 +02:00
git-marijus
f79d5ec18e Merge pull request #861 from waitman/patch-3
add remote login to login.tpl
2017-09-28 11:01:46 +02:00
git-marijus
98e0534984 Merge pull request #862 from waitman/patch-4
prevent 'my_address' being set with bogus info
2017-09-28 11:01:01 +02:00
zotlabs
617f2863c4 process activity deletes from OStatus which for whatever reason do not use the industry standard tombstone mechanism 2017-09-27 21:13:53 -07:00
Mario Vavti
1fd2b6f5b6 re-arrange some html 2017-09-27 16:06:15 +02:00
Mario Vavti
7d386c2777 make justifiedGallery even more happy 2017-09-27 16:04:21 +02:00
Mario Vavti
fb60eeaa9a make justifiedGallery happy again 2017-09-27 15:48:13 +02:00
Mario Vavti
9625d940a5 do not use our spinner css on the justifiedGallery spinner which has the same classname hardcoded 2017-09-27 13:21:27 +02:00
Mario Vavti
b8a0bc0b0b fix some missing spinners 2017-09-27 12:06:06 +02:00
Mario Vavti
cee41bb1e5 Merge remote-tracking branch 'mike/master' into dev 2017-09-26 19:55:18 +02:00
Mario Vavti
4a270d10d1 bump version 2017-09-26 13:50:29 +02:00
Mario Vavti
ea5262a0df get rid of spinner.js in use a lightweight css spinner instead 2017-09-26 13:02:11 +02:00
zotlabs
86e888e5eb whitespace 2017-09-25 23:39:48 -07:00
zotlabs
9d7a88b40d move the Link header initialisation from Router (where it does not really belong) to Webserver, where we do similar module specific initialisations prior to calling Router->Dispatch() 2017-09-25 23:14:02 -07:00
zotlabs
be8061b64b typo 2017-09-25 20:12:43 -07:00
zotlabs
d91a82430a more zot6 basic stuff 2017-09-25 20:11:21 -07:00
zotlabs
66334374af zot_site_info - always sign the site block with the site private key 2017-09-25 17:30:33 -07:00
zotlabs
741af8c164 extend activity_match to work with arrays 2017-09-24 22:41:14 -07:00
zotlabs
137f5b3dbc doc page for the new channel_links hook 2017-09-24 21:26:12 -07:00
zotlabs
e1cd51d8d9 update the trusted CA cert database 2017-09-24 21:24:52 -07:00
zotlabs
237aca32e3 missing Zlib file 2017-09-24 21:21:49 -07:00
zotlabs
906a810735 server/hub config storage for zot6 2017-09-24 21:20:50 -07:00
zotlabs
808605cd65 ostatus - support likes of comments 2017-09-24 21:09:21 -07:00
zotlabs
06a674775e handle jsonld parse errors and send them to the app log instead of the php log. 2017-09-24 20:18:36 -07:00
zotlabs
b195407028 Merge branch 'tagging' 2017-09-24 19:50:55 -07:00
zotlabs
1650d79862 tagging changes - provides ability to mention a forum by using !forumname as well as the traditional red style (@forumname+). This should probably not be advertised on a wide scale until after a critical mass of sites have updated to a version containing these changes. This adds yet another option type to the ACL module which probably needs refactoring soon since it is turning into option type spaghetti. 2017-09-24 19:45:19 -07:00
zotlabs
e8a888caab typo 2017-09-24 17:09:25 -07:00
zotlabs
3648f9952c typo 2017-09-24 17:08:38 -07:00
zotlabs
8b7ab90836 Merge branch 'master' into tagging 2017-09-24 16:59:56 -07:00
zotlabs
866dc9a9b3 For zot6, allow HTTP Signatures to be encrypted, as they may contain sensitive (envelope, metadata) information. 2017-09-24 16:46:52 -07:00
Mario Vavti
2988e33b57 fix missing content on channel page 2017-09-23 23:16:11 +02:00
zotlabs
aef239f421 delivery report decryption is not needed for local delivery 2017-09-21 23:51:04 -07:00
zotlabs
3456c192fe encrypt delivery reports. This will cause a bit of consternation because this is not backward compatible and older sites will see some incorrect delivery reports from newer sites until the next upgrade; as their systems will not know how to read the ecnrypted final reports. 2017-09-21 23:37:13 -07:00
zotlabs
ae5a1362a7 no visible feedback when moving the affinity slider and waiting for content to load, the appropriate spinner div seems to have gone missing at some time in the past 2017-09-21 22:19:21 -07:00
zotlabs
fefc2290a1 pubsites broken and directory server admin selection includes known dead sites 2017-09-21 21:32:59 -07:00
zotlabs
6bd35ef740 log the lack of http sig info 2017-09-21 18:29:41 -07:00
Mario Vavti
234e9476fb Merge remote-tracking branch 'mike/master' into dev 2017-09-21 23:13:43 +02:00
Mario Vavti
a7d339be5a nav_set_selected() and minor whitespace for mod pubstream 2017-09-21 23:11:15 +02:00
zotlabs
b745a143c3 go back to the un-versioned jsonld context 2017-09-21 13:29:48 -07:00
zotlabs
6e9e267b27 provide a space between link header params 2017-09-20 23:57:44 -07:00
zotlabs
2e9336beb5 change back to the ugly content-type 2017-09-20 23:42:57 -07:00
zotlabs
5951fa56ae Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-20 22:29:11 -07:00
zotlabs
24a9c3ba79 add more signature logging 2017-09-20 21:20:00 -07:00
zotlabs
c4261b9c4b we need this in the plugin, not in core 2017-09-20 19:34:43 -07:00
zotlabs
7b060dff68 add HTTP link header to channel page, making it pluggable 2017-09-20 19:12:23 -07:00
zotlabs
90f759412b fix namespace parsing issue 2017-09-20 16:26:33 -07:00
Mario Vavti
15691d3ced wiki css fixes 2017-09-20 15:03:57 +02:00
Mario Vavti
6f2dd5d325 wiki: translateable strings and move page mimetype selector to options submenu 2017-09-20 11:08:01 +02:00
zotlabs
9e46472ca2 provide default photo mimetype 2017-09-20 00:00:26 -07:00
zotlabs
61d9b34929 use mimetype text description rather than technical name in dropdown choices, found bug in mimetype selection option code 2017-09-19 23:30:52 -07:00
zotlabs
00fe4e747f use frozen jsonld contexts 2017-09-19 21:40:38 -07:00
zotlabs
b0cdec0c35 perform caching of jsonld schemas 2017-09-19 19:15:15 -07:00
zotlabs
373af6d4f4 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-19 17:41:13 -07:00
zotlabs
72a19a14af turn common friends into a widget 2017-09-19 17:35:57 -07:00
Mario Vavti
a7d0c45606 Revert "remove some redundant references to sticky_kit"
This reverts commit dbc0cc8c92.
2017-09-19 23:17:17 +02:00
Mario Vavti
dbc0cc8c92 remove some redundant references to sticky_kit 2017-09-19 23:13:18 +02:00
Mario
a1be6f11ed version 2017-09-19 22:43:52 +02:00
Mario
143e389695 jquery-3.2.1 2017-09-19 22:43:17 +02:00
Mario
962a3f7945 fix some issues with sticky-kit 2017-09-19 22:40:05 +02:00
zotlabs
bced63e823 call the follow_accept hook when desired 2017-09-19 13:25:34 -07:00
Mario
4500faf463 fix various wikipage widget issues (sort pages by name, respect locked mime type setting, move create tool back to the bottom) 2017-09-19 18:59:06 +02:00
Mario Vavti
66fb0fdcd7 fix permission_{accept, reject} hooks not being called 2017-09-19 11:12:52 +02:00
Mario Vavti
105e7626fc Merge remote-tracking branch 'mike/master' into dev 2017-09-19 10:26:06 +02:00
zotlabs
c6bcea0f82 pubcrawl: make a good faith effort to handle multi-media content 2017-09-18 21:55:45 -07:00
zotlabs
4fbebe7b2d create new hooks for permissions_accept and permissions_reject 2017-09-18 20:38:09 -07:00
zotlabs
e812836a60 provide rel=alternate link if no reshare content in post 2017-09-18 17:46:34 -07:00
Mario
d11d36040d version bump 2017-09-18 16:39:43 +02:00
Mario
c3b3f41a21 changelog 2017-09-18 16:38:56 +02:00
Mario
46daaa11fd changelog 2017-09-18 16:37:55 +02:00
Mario Vavti
cca2b1621f use the hubzilla icons 2017-09-18 16:33:22 +02:00
Mario Vavti
807776cb15 anonymous comments are not implemented for photos. 2017-09-18 16:21:01 +02:00
Mario Vavti
9914e171b1 anonymous comments are not implemented for photos. 2017-09-18 16:15:42 +02:00
Waitman Gobble
b3c805d7d0 prevent 'my_address' being set with bogus info
After a user has authenticated, it is possible to set my_address in $_SESSION to 'anything' using zid= parameter in URL - if user is authenticated then zid is never set. This change kills the authenticated switch if a person sends a new zid through for processing, which will trigger remote authentication.
2017-09-18 06:02:14 -05:00
Waitman Gobble
d31c91c9d3 add remote login to login.tpl
Add Remote login option to login.tpl, this exists in nav login.
2017-09-18 05:57:18 -05:00
Waitman Gobble
bf252d2388 add remote login to login form
This exists in nav login but not login.tpl
2017-09-18 05:54:38 -05:00
zotlabs
5c379b4d35 acl issue with some ActivityPub completions 2017-09-17 23:55:18 -07:00
zotlabs
4d3b0577c9 acl issue with some ActivityPub completions 2017-09-17 23:54:40 -07:00
zotlabs
d37e6b9271 more tag stuff 2017-09-17 23:54:29 -07:00
zotlabs
654139933f tagging changes 2017-09-17 23:28:58 -07:00
zotlabs
1d9e0f17a6 more mastodon testing 2017-09-17 18:40:32 -07:00
zotlabs
9120a82ab4 wiki: update acl on child pages when wiki perms change 2017-09-16 16:52:25 -07:00
zotlabs
ca24bfdc46 wiki sync - we weren't getting the child pages 2017-09-16 16:42:01 -07:00
zotlabs
aaa83ae5d2 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-16 16:32:26 -07:00
zotlabs
e84281b620 wiki download: only include the latest page revision 2017-09-16 15:48:48 -07:00
Andrew Manning
6239a27288 Moved add wiki page form to top of page list to address issue https://github.com/redmatrix/hubzilla/issues/719 2017-09-16 14:27:40 -04:00
Andrew Manning
0b272264ea Page title is what we need in order to delete pages, not the url 2017-09-16 14:00:55 -04:00
Mario Vavti
d5ffa5508d db update to add index to item.resource_id we query this in wikis a lot 2017-09-16 10:11:59 +02:00
Mario Vavti
cb3fb0049f do not show edit pencil if not allowed to edit 2017-09-16 09:55:29 +02:00
Mario
eef1fcbb07 set update_title to false 2017-09-15 22:28:27 +02:00
Mario
186dd9dee0 version 2017-09-15 22:21:40 +02:00
Mario
373651c3db implement wiki editing 2017-09-15 22:17:18 +02:00
git-marijus
663802e699 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-09-15 16:30:14 +02:00
git-marijus
4c5722c766 some work on wiki acl 2017-09-15 16:27:30 +02:00
zotlabs
6734854776 typocheck 2017-09-14 18:50:43 -07:00
zotlabs
1c0ece8411 provide a hook for importing a channel photo at channel creation time 2017-09-14 18:48:55 -07:00
zotlabs
cf120b2351 wiki: lock mimetype 2017-09-14 17:14:50 -07:00
zotlabs
6481722fd9 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-14 15:02:36 -07:00
zotlabs
d7ec6865b4 bring back wiki download 2017-09-14 04:06:09 -07:00
Mario Vavti
46b6415f5f wiki: do not suggest bbcode if mimetype is text/plain 2017-09-14 10:44:16 +02:00
Mario Vavti
5aa0fe2bf0 use the hubzilla icons 2017-09-14 10:33:16 +02:00
Sergey Lukin
f43f38c054 hubzilla issue #858: Fix: Shortcut icon is not dysplayed when Admin or Channel Manager panels are opened 2017-09-14 10:01:39 +02:00
git-marijus
235ba81f25 Merge pull request #859 from subrealist/short_icon_admin_fix
#858: Fix: Shortcut icon isn't dysplayed when 'Admin' or 'Channel Manager' panel are opened
2017-09-14 10:00:47 +02:00
zotlabs
55aaabc2f1 add text/plain type to wiki 2017-09-13 22:37:18 -07:00
zotlabs
5be132f877 make wiki page mimetype default to wiki mimetype (this was the original intent but the wrong variable was used) 2017-09-13 21:36:59 -07:00
zotlabs
b5966041be more zot6 2017-09-13 20:40:01 -07:00
zotlabs
62d6bada4c Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-13 19:26:33 -07:00
zotlabs
13788af908 Zot6: some things that need to be done ahead of time so we can turbocharge the delivery engine and split off site records from channel records. 2017-09-13 19:20:16 -07:00
Sergey Lukin
d5bd5cda97 hubzilla issue #858: Fix: Shortcut icon is not dysplayed when Admin or Channel Manager panels are opened 2017-09-14 07:19:56 +10:00
Mario Vavti
29b0ed87d6 Merge remote-tracking branch 'mike/master' into dev 2017-09-13 10:30:08 +02:00
zotlabs
0e6d84e207 add option to mimetype selector so you can change the element name in case you end up with two of these suckers on the same page 2017-09-12 23:25:19 -07:00
zotlabs
796228b7ad wiki mimetype selection. We can add text/plain as soon as we add code to purify and render it specifically. 2017-09-12 23:15:30 -07:00
zotlabs
7489a4442e wiki mimetype 2017-09-12 22:35:30 -07:00
zotlabs
5e99295bf6 wiki mimetype selection 2017-09-12 22:32:31 -07:00
zotlabs
4ff89a5862 drop salmon until we improve performance 2017-09-12 20:24:57 -07:00
Mario Vavti
87ca60b0b1 rename activity notifications links - one more 2017-09-12 21:38:36 +02:00
Mario Vavti
525d554a35 rename activity notifications links 2017-09-12 21:34:14 +02:00
Sergey Lukin
4c121aff30 hubzilla issue #855: fix for some problems with displaying selected theme after panel Settings->Display loading 2017-09-12 21:28:40 +02:00
git-marijus
d77872de50 Merge pull request #856 from subrealist/displaying_selected_theme
hubzilla issue #855: fix for some problems with displaying selected theme
2017-09-12 21:17:59 +02:00
Sergey Lukin
91ed3b357d hubzilla issue #855: fix for some problems with displaying selected theme after panel Settings->Display loading 2017-09-13 04:00:59 +10:00
zotlabs
d4e53bb86f typo in ldsigs 2017-09-11 18:56:17 -07:00
zotlabs
471449f539 regex was still broken 2017-09-10 22:59:26 -07:00
zotlabs
187fc9a51b fix regex 2017-09-10 17:40:40 -07:00
zotlabs
abbf245d14 remove item_thread_top from simple_update query - we're already fetching distinct(parent) and this prevented comments from displaying after submission when remote-authed. 2017-09-10 16:10:56 -07:00
Mario Vavti
67024c023a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-09-10 09:50:52 +02:00
Mario Vavti
2f76d63835 Merge remote-tracking branch 'mike/master' into dev 2017-09-10 09:30:59 +02:00
Andrew Manning
754329097f More content tab help removed in context help 2017-09-09 19:47:39 -04:00
Andrew Manning
c5950c0370 Update help.html 2017-09-09 19:45:42 -04:00
zotlabs
e2e7bee3cc owa cleanup 2017-09-09 13:34:57 -07:00
Mario Vavti
edada2b786 Merge remote-tracking branch 'mike/master' into dev 2017-09-09 20:22:45 +02:00
Andrew Manning
ccc9cc8202 Added context help for apps and appman in English 2017-09-09 08:23:30 -04:00
zotlabs
84c86f01c8 owa: missed the set-observer stuff 2017-09-08 16:00:27 -07:00
Mario Vavti
9b542c5bcf fix radius 2017-09-08 09:43:25 +02:00
Mario Vavti
108bb7649b Merge remote-tracking branch 'mike/master' into dev 2017-09-08 09:22:36 +02:00
zotlabs
1104e2652f improve the code block styling a wee bit 2017-09-07 21:29:32 -07:00
zotlabs
f2dc55244c provide root discovery for owa 2017-09-07 20:42:03 -07:00
zotlabs
048a8c5f44 provide owa discovery 2017-09-07 19:04:35 -07:00
zotlabs
1fbb1e6c2a initial testing success with owa 2017-09-07 18:52:18 -07:00
zotlabs
7e9162ef06 there's the problem 2017-09-07 18:19:49 -07:00
zotlabs
f09fe8da78 add logging 2017-09-07 18:14:04 -07:00
zotlabs
4d794103be testing owa 2017-09-07 18:09:31 -07:00
zotlabs
61f339a874 owa - first commit 2017-09-07 17:56:02 -07:00
Mario Vavti
7b3aa92b5a use $target_item[mid] to make item highlighting work with shortened mids 2017-09-07 23:35:36 +02:00
Mario Vavti
27e9b5618b use thread parent hash only for like and dislike activity. in all other cases use item hash. this will catch more situations. 2017-09-07 23:20:40 +02:00
Mario Vavti
4d1f5c1752 do not double encode already encoded mids 2017-09-07 23:12:58 +02:00
zotlabs
23e774db8e markdown code blocks not preserving line breaks, removed a bootstrap over-ride which fixes this, but also changed the style to pre-wrap to wrap the text rather than the default horizontal scroll 2017-09-07 13:19:13 -07:00
Mario Vavti
4190a40de8 typo 2017-09-07 11:35:24 +02:00
Mario Vavti
6143f49042 fix an issue where some encoded mids were not found in /display allthough they existed 2017-09-07 11:28:42 +02:00
Mario Vavti
607c414634 remove semicolon from update query - this is probably trivial 2017-09-07 10:14:34 +02:00
git-marijus
d65007b230 Merge pull request #852 from waitman/patch-1
fix bogus semicolon
2017-09-07 10:04:41 +02:00
zotlabs
41e0d5f664 use array_key_exists() instead of x() in this case as the latter fails on an array that's empty and we unconditionally need to encode the array even if empty 2017-09-06 20:07:53 -07:00
zotlabs
fa7a6203fb Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-06 19:59:33 -07:00
zotlabs
318643cf9a mastodon wraps oembed in an iframe - which we immediately purify our of existence and what we really want to purify is the content. So strip away the iframe, fetch the content and purify that instead. 2017-09-06 19:55:32 -07:00
zotlabs
ab9b82e778 ignore diaspora_meta column on item import. 2017-09-06 16:44:10 -07:00
Waitman Gobble
fee65f0c69 fix bogus semicolon
Line 655 should have comma instead of semicolon
2017-09-06 16:12:57 -05:00
Mario Vavti
643f515eaf cards: remove double generic-content-wrapper and section title 2017-09-06 15:55:34 +02:00
zotlabs
1305584d77 avoid a security patch and resultant compatibility issues; instead restrict the input characters we accept in token verification strings to hex digits. This will all be changing in the coming weeks/months anyway. 2017-09-06 13:38:33 +02:00
Mario Vavti
0a7364d494 make cards likeable 2017-09-06 11:42:16 +02:00
zotlabs
2cce599fd7 check code rights on cloud files 2017-09-05 21:38:07 -07:00
zotlabs
7dc99cb4a4 typo 2017-09-05 18:56:25 -07:00
zotlabs
45eb61bcf0 provide sharing of cards 2017-09-05 18:32:37 -07:00
zotlabs
80400d7191 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-05 17:35:56 -07:00
zotlabs
6147f819ce avoid a security patch and resultant compatibility issues; instead restrict the input characters we accept in token verification strings to hex digits. This will all be changing in the coming weeks/months anyway. 2017-09-05 17:12:31 -07:00
zotlabs
842a041a88 remove period from characters allowed in username, as this will mess up URL based content-type negotiation. It was previously disallowed but permitted a month or two ago after seeing Diaspora started allowing it. It's OK if they have it, but we can't; as many of our urls are based on username and theirs are primarily based on uid. 2017-09-05 16:38:55 -07:00
Mario Vavti
68a91ec3ea 32 characters are often not enough to distinguish gnu-social mids - use the entire mid. in /display if we are not dealing with posts (eg likes) provide the thr_parent mid as bParam_mid so we can still adress the right post in javascript 2017-09-05 23:18:02 +02:00
zotlabs
d58f965b9a some more prep work for Zot VI - some of this will need to be undone or at least re-arranged later but we need to bootstrap a test environment. 2017-09-04 22:35:54 -07:00
zotlabs
83d0e48ebe some preliminary work on Zot VI 2017-09-04 22:35:44 -07:00
zotlabs
ca58ef80ae Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-04 22:33:53 -07:00
zotlabs
05654e4980 card embed improved 2017-09-04 21:02:44 -07:00
Mario Vavti
c8000fca1f Default Access Control List (ACL) -> Default Privacy Group and minor template fix 2017-09-04 20:48:26 +02:00
Mario Vavti
48547f5f9e remove logging 2017-09-04 13:38:21 +02:00
Mario Vavti
b4f8136315 whitespace 2017-09-04 13:34:17 +02:00
Mario Vavti
06f1910ac0 fix the error reporting query in /display. we need item_deleted instead of item_flags and remove id = $item_hash from the query since we always provide the mid and never the id iirc 2017-09-04 13:28:49 +02:00
Mario Vavti
03b31932d1 remove hubzilla.nl from fallback directory servers 2017-09-04 10:15:00 +02:00
Mario Vavti
e4b0e31a28 remove hubzilla.nl from fallback directory servers 2017-09-04 10:14:27 +02:00
zotlabs
ba4f75ba19 also error if no security context 2017-09-03 23:58:52 -07:00
zotlabs
fc62f07a08 validate the security context 2017-09-03 23:50:18 -07:00
zotlabs
3d0a7f4fc5 paths in xchan_addr no longer means RSS specifically but could be activitypub 2017-09-03 22:09:16 -07:00
zotlabs
47ef41695a sign zot-info packets with httpsignatures 2017-09-03 19:56:13 -07:00
zotlabs
4adf2caaa6 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-09-03 17:17:20 -07:00
zotlabs
db82d303e2 only validate headers that aren't "spoofable", which will be somewhat implementation dependent. 2017-09-03 17:12:42 -07:00
Mario Vavti
0fac35686b Merge remote-tracking branch 'mike/master' into dev 2017-09-03 21:49:01 +02:00
Mario Vavti
5ae2d15dc0 this fixes an issue where in /channel/membername?mid=some_mid updates did not work when static updates were enabled. since in the current situation we always get a top-level-post mid, item_thread_top = 0 in the query will never return a result. change it to item_thread_top = 1 2017-09-03 21:41:47 +02:00
Mario Vavti
dc18440c18 introduce item_normal_update(). the differnce to item_normal() is that we do not query for item_deleted = 0 and therefor can find deleted likes which allows us to update our unlikes on the fly if static page update is enabled 2017-09-03 21:33:07 +02:00
zotlabs
499b7de0d2 Reviewed. This is OK.
Revert "may be exploitable in current form - awaiting review"

This reverts commit 7bff60edac.
2017-09-03 00:59:51 -07:00
Mario Vavti
1a0cf2666a Merge remote-tracking branch 'mike/master' into dev 2017-09-02 23:52:31 +02:00
zotlabs
7bff60edac may be exploitable in current form - awaiting review 2017-09-02 14:04:37 -07:00
Mario Vavti
e935473c5c add combined index for item.uid and item.item_unseen. this speeds up notifications by a magnitude. 2017-09-01 21:27:59 +02:00
Mario Vavti
3af3b36db3 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-09-01 10:41:07 +02:00
git-marijus
9333503600 Merge pull request #850 from anaqreon/doco
Fix the multiple table of content bug
2017-09-01 10:40:24 +02:00
Mario Vavti
7a42aed1f6 Merge remote-tracking branch 'mike/master' into dev 2017-09-01 10:37:59 +02:00
zotlabs
5bffae6219 cut down on a few extraneous gprobe processes 2017-08-31 23:21:06 -07:00
zotlabs
ae8cdc3b42 some changes after testing server-to-server magic auth 2017-08-31 21:38:03 -07:00
zotlabs
b413beeb36 add server-to-server magic auth to dav and cdav controllers 2017-08-31 20:45:13 -07:00
zotlabs
0cf5536e90 server to server magic auth 2017-08-31 20:08:58 -07:00
zotlabs
5e767144c9 simplify api_auth 2017-08-31 19:09:07 -07:00
zotlabs
6d87311394 now letsencrypt is creating a .htaccess file with re-write rules which kills most of our .well-known routes 2017-08-31 17:47:32 -07:00
git-marijus
0ee2378cec bump version 2017-08-31 10:23:09 +02:00
git-marijus
28d6b9ce16 changelog 2017-08-31 10:22:20 +02:00
git-marijus
f3c0db0f39 changelog 2017-08-31 10:22:05 +02:00
zotlabs
3a52af6327 hubzilla issue #851 2017-08-31 10:15:23 +02:00
zotlabs
aec92e0e17 whitespace 2017-08-30 23:16:57 -07:00
zotlabs
c364bff0c1 missing include 2017-08-30 21:57:56 -07:00
zotlabs
74f55d1504 check input is hex before sending it to hex2bin 2017-08-30 21:45:54 -07:00
zotlabs
f436ec6f21 some issues with mod_display on very first anonymous page visit (prior to any browser cookies being set) 2017-08-30 18:55:56 -07:00
zotlabs
be097bf415 issue with mentions and xchans with @ or / 2017-08-30 16:24:26 -07:00
zotlabs
f1b014b7eb hubzilla issue #851 2017-08-29 23:58:17 -07:00
zotlabs
ad637b5b50 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-29 23:38:23 -07:00
zotlabs
5abc9ef10b bring back nomadic locations 2017-08-29 22:08:37 -07:00
zotlabs
d47df8663f add a nonce 2017-08-29 20:57:30 -07:00
zotlabs
77267e049a use iso 8601 "Zulu" for log timestamps so it can be easily processed with fail2ban 2017-08-29 20:47:49 -07:00
zotlabs
e2b6464f83 escape 'http' inside code blocks so it doesn't trigger an oembed 2017-08-29 20:07:26 -07:00
zotlabs
973f15438a fix category links in card bodies 2017-08-29 19:38:07 -07:00
zotlabs
1f42d23332 add reliable signatures 2017-08-29 18:46:00 -07:00
zotlabs
b80f0b8960 add editor autocompleters on cards page 2017-08-28 20:11:08 -07:00
zotlabs
06be21af05 use top level for verification 2017-08-28 19:12:35 -07:00
zotlabs
ab5e7ad7a2 provide support for json-ld signatures (https://w3c-dvcg.github.io/ld-signatures/) 2017-08-28 19:06:01 -07:00
Mario Vavti
0d3c378e10 remove obsolete class 2017-08-28 23:56:18 +02:00
git-marijus
471031390c version 2017-08-28 23:45:41 +02:00
git-marijus
8517e7e798 Merge remote-tracking branch 'mike/master' into dev 2017-08-28 23:45:03 +02:00
git-marijus
e70bf97508 rewrite comment form handling 2017-08-28 23:42:17 +02:00
zotlabs
6385d11b54 AS2: recipient collection 2017-08-27 21:46:10 -07:00
zotlabs
d0d0a2df3a fix issue with comment box re-opening after submit; however I should note that bind and unbind are deprecated in jquery > 1.3 and these calls probably need to be upgraded. 2017-08-27 19:02:50 -07:00
zotlabs
99ca2a7cc6 fix card category widget links when a specific card is opened 2017-08-27 18:28:44 -07:00
Andrew Manning
acacea5efe Merge remote-tracking branch 'upstream/dev' into doco 2017-08-27 23:47:14 +00:00
zotlabs
187f19b170 fix titles on ajaxupdate issue, add jsonld-php library 2017-08-26 17:21:33 -07:00
Andrew Manning
49b38bd71b Merge remote-tracking branch 'upstream/dev' into doco 2017-08-25 11:32:28 +00:00
Andrew Manning
75f3e9202e Removed duplicated table of contents (TOC) in Help pages by breaking hierarchical TOC loading. 2017-08-25 11:32:18 +00:00
zotlabs
0098dce597 radically reduce code duplication in updateConvItems(); it's a bit easier to understand now although the different modes aren't as cleanly separated as they were. 2017-08-25 00:00:51 -07:00
zotlabs
cff5e360fd Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-24 18:50:04 -07:00
zotlabs
45c033b9aa fix title of edit card which showed up as 'edit block' due to copy/paste 2017-08-24 18:39:50 -07:00
zotlabs
5c92337821 cards - change placeholdertext, separate from button text 2017-08-24 18:34:12 -07:00
zotlabs
341386a95b make cards searchable 2017-08-24 18:15:19 -07:00
zotlabs
bd84a3ee08 fix permalinks for card comments (send to parent url) 2017-08-24 16:58:39 -07:00
git-marijus
383b7928cf minor adjustmen to the help language selector 2017-08-24 22:32:28 +02:00
git-marijus
9cb856d5fd Merge pull request #849 from anaqreon/doco
Added language selector menu for Help pages
2017-08-24 21:58:44 +02:00
git-marijus
2d5768b71c ditch discover tab in favour of the public stream app 2017-08-24 21:47:01 +02:00
Andrew Manning
90ec3340e4 Merge remote-tracking branch 'upstream/dev' into doco 2017-08-24 18:57:52 +00:00
Andrew Manning
cf2609530f Added language selector menu for Help pages 2017-08-24 18:57:41 +00:00
Mario Vavti
cdccf60132 Merge remote-tracking branch 'mike/master' into dev 2017-08-24 20:18:18 +02:00
git-marijus
df2725a360 Merge pull request #848 from anaqreon/doco
Repaired and extended support for help page translations including ta…
2017-08-24 20:13:11 +02:00
Andrew Manning
592cf893c0 Fixed incorrect language path when choosing the language from browser preference 2017-08-24 11:19:11 +00:00
zotlabs
85f24c292f last remaining task in tasklist was not removed from view when 'completed' 2017-08-23 23:59:05 -07:00
zotlabs
1c4629f5e1 add tasklist and notes to cards page 2017-08-23 23:37:45 -07:00
zotlabs
af8ed605f8 add a section to the admin guide about admin rights and how to grant them if the first account on the system used a different email address than the desired administrator email. 2017-08-23 22:40:52 -07:00
zotlabs
186f85483f cards: make likes reload page 2017-08-23 22:17:15 -07:00
zotlabs
e157e3bec8 cards: make page load after comment post 2017-08-23 22:06:42 -07:00
zotlabs
4450170790 partial support (unfinished) for ajax loading cards with liveupdate; page still functions even though this isn't finished 2017-08-23 21:26:09 -07:00
zotlabs
66b032823b oembed provider cleanup, add oembed to cards 2017-08-23 20:47:08 -07:00
zotlabs
c9745a4129 apply autotime to all autotime classed elements when static loading a page 2017-08-23 20:19:52 -07:00
zotlabs
bf7b0b11ef add autotime to cards 2017-08-23 20:16:08 -07:00
zotlabs
e778815605 use two keys for the updated sort 2017-08-23 20:12:40 -07:00
zotlabs
f2e802229a add new conv_sort option 2017-08-23 20:02:28 -07:00
zotlabs
64cf36a2b5 lognoise: don't log sync packet contents if there are no clones to receive them 2017-08-23 19:25:42 -07:00
zotlabs
8873fbfee9 fix permalink for cards 2017-08-23 19:18:44 -07:00
zotlabs
89df4551aa cards: acl support 2017-08-23 18:20:12 -07:00
zotlabs
ecfc7b8f4c add category support to main page 2017-08-23 18:15:31 -07:00
zotlabs
3b68df1be6 several card enhancements 2017-08-23 17:46:20 -07:00
zotlabs
9518dc0e4e typo 2017-08-23 02:03:39 -07:00
zotlabs
e084b776ee cards feature 2017-08-23 00:01:02 -07:00
Andrew Manning
6c38857502 Repaired and extended support for help page translations including table of contents files at the top level. Moved help module javascript to mod_help.js. 2017-08-23 03:33:03 +00:00
zotlabs
41ff8fdd37 test recursive dav copy 2017-08-22 20:32:02 -07:00
zotlabs
182f94a9ac allow cards to federate 2017-08-22 19:41:16 -07:00
zotlabs
92077725c3 add support for card doctype and activity_obj type 2017-08-22 19:13:25 -07:00
zotlabs
9f37dbc6dc util/dcp - support recursion and folders full of photos by importing files singly in separate processes - not yet tested 2017-08-22 18:29:51 -07:00
zotlabs
33528c616a remove debugging 2017-08-21 18:52:22 -07:00
zotlabs
894f0156af more work on oembed from /display 2017-08-21 15:00:45 -07:00
zotlabs
9d5b6858ea stream_perms_xchans wasn't working which has effects in mod_display and there are also issues with the oembed provider for mod_display. This is a first cut for the second but hasn't yet been tested 2017-08-21 02:01:41 -07:00
zotlabs
7a405da3b7 some issues with message-ids and urlencoding (again) 2017-08-20 23:22:52 -07:00
zotlabs
49cc952825 util/dcp will now accept a directory as a destination. The directory must exist. Recursion is not yet supported. 2017-08-20 22:45:13 -07:00
zotlabs
31e62bd19e a few file activities were not getting synced 2017-08-20 21:24:58 -07:00
zotlabs
52c6ea5115 add dmkdir 2017-08-20 21:02:09 -07:00
zotlabs
f15d96bebe add namespaces to activitystreams parser 2017-08-20 19:40:37 -07:00
zotlabs
18c57eeaa0 httpsig - return an array with all the different signing possibilities enumerated 2017-08-20 18:30:12 -07:00
zotlabs
2b898537d7 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-20 18:09:28 -07:00
zotlabs
081bff605a zot_protocol values are true and false; it is only php print_r() that turns them into '1' or '' 2017-08-20 18:07:25 -07:00
zotlabs
8a5c23fd50 issue with oembed of a shared item, which wraps in another share. 2017-08-20 17:45:08 -07:00
Andrew Manning
830f1bcd50 Update zot_protocol.bb 2017-08-20 14:12:09 -05:00
Mario Vavti
17e81095b3 Merge remote-tracking branch 'mike/master' into dev 2017-08-20 16:17:14 +02:00
zotlabs
ed71afa6c7 more work on mod_display 2017-08-19 15:11:12 -07:00
Mario Vavti
4cafa6280d Merge remote-tracking branch 'mike/master' into dev 2017-08-19 14:31:47 +02:00
zotlabs
b488034352 better error reporting on mod_display 2017-08-19 01:37:22 -07:00
zotlabs
944cd883bb script html tags in js file 2017-08-19 01:08:24 -07:00
zotlabs
f9dd4188b4 update installation requirements - php 5.6 and mysql 5.5.3 2017-08-18 13:04:30 +02:00
Mario Vavti
557aa18526 update changelog 2017-08-18 13:04:20 +02:00
Mario Vavti
b18f3f4f7a update changelog 2017-08-18 13:03:24 +02:00
zotlabs
4111ba8dee php warnings 2017-08-18 03:04:15 -07:00
zotlabs
035449e4a3 util/dcp "(DAV-copy) copy file from local system to Hubzilla/red DAV" 2017-08-17 23:43:54 -07:00
git-marijus
2a2abf14bb bugfix release 2.6.1 2017-08-18 08:28:37 +02:00
git-marijus
b553ecbb18 update changelog 2017-08-18 08:27:34 +02:00
git-marijus
d87a270e2c update changelog 2017-08-18 08:26:28 +02:00
zotlabs
3443416540 hubzilla issue #846 2017-08-18 08:20:04 +02:00
zotlabs
f2589cc820 mv HTTPSig to core - so we can use it as an auth method 2017-08-17 22:43:24 -07:00
zotlabs
691fadc93d hubzilla issue #846 2017-08-17 22:17:59 -07:00
zotlabs
65a320c509 move activitystreams parser back to core; we will eventually need it in core utilities 2017-08-17 16:53:14 -07:00
zotlabs
b0f2c22000 update installation requirements - php 5.6 and mysql 5.5.3 2017-08-17 16:26:14 -07:00
zotlabs
ef8a251115 move ap_probe to pubcrawl addon 2017-08-16 22:14:14 -07:00
Mario Vavti
4a7384bc0c Merge branch '2.6RC' 2017-08-16 10:32:35 +02:00
Mario Vavti
90bc21f2d5 Release Hubzilla 2.6 2017-08-16 10:21:49 +02:00
Mario Vavti
1c5629263b Merge remote-tracking branch 'mike/master' into dev 2017-08-16 10:16:33 +02:00
Mario Vavti
6adfbabbb7 update changelog 2017-08-16 10:06:49 +02:00
Mario Vavti
2a48222393 update changelog 2017-08-16 10:05:30 +02:00
zotlabs
4addde782e put unseen network count in page title; hubzilla issue #843 2017-08-15 21:39:01 -07:00
zotlabs
9b87940ed2 remove easter egg 2017-08-15 18:49:08 -07:00
zotlabs
8000d6b5d4 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-15 03:55:17 -07:00
zotlabs
e9679d251c more work on activitypub httpsignature verification 2017-08-14 22:40:29 -07:00
zotlabs
68f6043d44 new content type 2017-08-14 17:34:47 -07:00
Mario Vavti
f560a88ff3 typo 2017-08-14 22:06:04 +02:00
Mario Vavti
4b0d0df781 typo 2017-08-14 22:05:39 +02:00
Mario Vavti
05453ce493 changelog 2017-08-14 21:59:06 +02:00
Mario Vavti
af7ea07b43 changelog 2017-08-14 21:57:35 +02:00
zotlabs
289161aad1 contact_slider.tpl didn't get updated with one of the bootstrap changes where 'in' was renamed to 'show' 2017-08-14 21:34:20 +02:00
zotlabs
6a3919587f add parent item (if applicable) to notifier plugin info 2017-08-14 21:34:03 +02:00
Mario Vavti
80e7337984 Update composer autload cache 2017-08-14 21:30:24 +02:00
git-marijus
6cea5ddfad Merge pull request #842 from dawnbreak/dev
Update composer autload cache.
2017-08-14 21:22:53 +02:00
zotlabs
ba08555efc contact_slider.tpl didn't get updated with one of the bootstrap changes where 'in' was renamed to 'show' 2017-08-13 19:44:26 -07:00
zotlabs
f99b62b516 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-12 16:11:07 -07:00
zotlabs
2f45182b48 add parent item (if applicable) to notifier plugin info 2017-08-12 15:42:42 -07:00
Mario Vavti
9da1439a4d Merge remote-tracking branch 'mike/master' into dev 2017-08-12 22:45:32 +02:00
git-marijus
57602647ef minor js and css changes 2017-08-12 22:32:06 +02:00
git-marijus
4848dc5ec8 minor js and css changes 2017-08-12 22:29:57 +02:00
git-marijus
8b5a190d71 RC1 2017-08-12 10:45:45 +02:00
Mario Vavti
a4804ff977 update to bootstrap beta 2017-08-12 10:45:11 +02:00
zotlabs
998bd585bb add protocol selection to following feeds 2017-08-12 00:59:05 -07:00
Klaus Weidenbach
0123a28186 Update composer autload cache. 2017-08-11 22:26:23 +02:00
Mario Vavti
ff1d900ccb bump version 2017-08-11 20:46:25 +02:00
Mario Vavti
1808ffcdf2 update to bootstrap beta 2017-08-11 20:45:29 +02:00
zotlabs
86c4743ed9 deliverable_singleton - also check hubloc_hash in case we don't have an xchan_hash 2017-08-10 21:43:36 -07:00
zotlabs
1408e3da3b prevent uploads to comments if the channel has a default private ACL. 2017-08-10 21:08:07 -07:00
zotlabs
5f6eedcc1a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-10 20:34:20 -07:00
zotlabs
7cec3f4dbf include the mastodon summary in the post 2017-08-10 18:05:06 -07:00
Mario Vavti
80ff7fa353 create cdav principal also on client access and remove redundant pconfig check in authentication process 2017-08-10 22:01:45 +02:00
Mario Vavti
7892ed9e77 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-08-10 21:59:41 +02:00
Mario Vavti
0e3b5536e2 create cdav principal also on client access and remove redundant pconfig check in authentication process 2017-08-10 21:58:44 +02:00
zotlabs
6c55e44f4c when following, allow [network]follow_address syntax to connect with a specific network for multi-protocol services 2017-08-10 12:49:20 -07:00
git-marijus
5b88e9574f update changelog 2017-08-10 11:59:12 +02:00
git-marijus
ecfb608518 do not show channel manager and nav channel select if we are in a delegate session 2017-08-10 11:42:33 +02:00
git-marijus
9411732c1b do not show channel manager and nav channel select if we are in a delegate session 2017-08-10 11:41:00 +02:00
zotlabs
acb8eeb853 libxml errors 2017-08-10 09:47:09 +02:00
git-marijus
d1c7e78990 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-08-10 09:40:02 +02:00
Mario Vavti
0a96cdd950 merge red/master into dev 2017-08-10 08:09:02 +02:00
zotlabs
5686901869 some doco fixes and other real minor stuff to improve logreading ability 2017-08-09 22:45:52 -07:00
zotlabs
6531cbd1d2 libxml errors 2017-08-09 17:35:03 -07:00
git-marijus
09da109eba update changelog 2017-08-09 20:45:59 +02:00
git-marijus
fa2de77abe App::get_channel() does not return the right channel if we are not looking at our own channel. fix issue #841 2017-08-09 20:41:13 +02:00
git-marijus
8ab3a4ebd7 App::get_channel() does not return the right channel if we are not looking at our own channel. fix issue #841 2017-08-09 20:39:59 +02:00
zotlabs
8eb6dafe31 only show upload button to those with write_storage permission 2017-08-08 23:12:08 -07:00
zotlabs
ca11d7b9a7 support upload of files and attachments into comments. This has some repercussions when it comes to post permissions since the commenter will not know the distribution of the post. Basically the files will be uploaded with the commenter's default ACL. Most of the time this will do the right thing. 2017-08-08 22:55:47 -07:00
zotlabs
a7a73a5150 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-08 17:53:53 -07:00
git-marijus
83b5bbfeea changelog 2017-08-08 23:20:20 +02:00
zotlabs
59108b18ae remove some no longer used images/icons 2017-08-07 18:19:02 -07:00
zotlabs
037e1edb1f ostatus feed was missing comments 2017-08-07 13:32:04 +02:00
zotlabs
c00796d553 ostatus feed was missing comments 2017-08-06 19:33:51 -07:00
phellmes
23f9f8bc3b Update DE translation strings 2017-08-06 23:41:28 +02:00
git-marijus
88a4889780 Merge pull request #838 from phellmes/dev
Update DE translation strings (also for 2.6RC)
2017-08-06 23:40:14 +02:00
git-marijus
bac297cf31 Merge pull request #835 from anaqreon/2.6RC
Fix styling on help page content list in sidebar.
2017-08-06 23:39:20 +02:00
git-marijus
3c73228d80 Merge pull request #839 from anaqreon/doco
Fix CSS for help page content list in sidebar.
2017-08-06 23:39:03 +02:00
git-marijus
0085b64b2b consolidate disable_discover_tab config if it was not yet set to either 1 or 0 in DB 2017-08-06 23:34:05 +02:00
git-marijus
1c0c01ccfe make config requirements in apps more universal - provide key and value 2017-08-06 23:20:24 +02:00
git-marijus
b0d1fa09c1 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-08-06 21:41:01 +02:00
git-marijus
68b32cd8f4 consolidate disable_discover_tab config if it was not yet set to either 1 or 0 in DB 2017-08-06 21:40:39 +02:00
phellmes
d5dcaacf2c Update DE translation strings 2017-08-05 14:32:44 +02:00
Andrew Manning
03ca0bfa69 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into doco 2017-08-05 11:24:03 +00:00
zotlabs
3aa22c29fd allow channel address to be changed 2017-08-04 19:02:41 -07:00
zotlabs
06a211704f auto preview mail on media insertion also 2017-08-03 18:28:08 -07:00
zotlabs
913046aa28 some bb-to-markdown issues 2017-08-03 22:02:12 +02:00
zotlabs
b4707705f1 minor activitypub rendering stuff 2017-08-03 22:01:49 +02:00
git-marijus
a618f70f56 Merge remote-tracking branch 'mike/master' into dev 2017-08-03 21:59:46 +02:00
git-marijus
05444f92f9 missing observer hash 2017-08-03 21:37:05 +02:00
git-marijus
9566eab934 missing observer hash 2017-08-03 21:36:26 +02:00
git-marijus
d704832ff6 fix issue #836 - missing opening form tag 2017-08-03 20:36:19 +02:00
git-marijus
3c1dff3039 fix issue #836 - missing opening form tag 2017-08-03 20:35:42 +02:00
git-marijus
4edf580ebf fix attachment upload for private mail 2017-08-03 15:31:28 +02:00
git-marijus
7b177be271 fix attachment upload for private mail 2017-08-03 15:30:40 +02:00
git-marijus
d183e47dc9 return preview also if we have no attachment 2017-08-03 14:09:57 +02:00
git-marijus
dc7c3f70eb return preview also if we have no attachment 2017-08-03 14:08:34 +02:00
zotlabs
d06ce6294d some bb-to-markdown issues 2017-08-03 04:55:56 -07:00
zotlabs
21ee29e46d Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-02 22:12:38 -07:00
zotlabs
bee09a6d8b minor activitypub rendering stuff 2017-08-02 22:11:46 -07:00
Andrew Manning
a100c47f11 Fix styling on help page content list in sidebar. 2017-08-03 01:56:54 +00:00
www-data
ba62f14482 Fix CSS for help page content list in sidebar. 2017-08-03 01:54:14 +00:00
Manuel Jiménez Friaza
2a34a497d5 Updated the Spanish translation 2017-08-02 12:22:21 +02:00
git-marijus
4ea4a036ef Merge pull request #834 from mjfriaza/dev
Updated the Spanish translation
2017-08-02 12:17:07 +02:00
Manuel Jiménez Friaza
2dbf8a5e00 Updated the Spanish translation 2017-08-02 08:57:30 +02:00
zotlabs
9359f9fe4d plugin hook for update_unseen 2017-08-01 22:25:55 -07:00
zotlabs
01526a9a79 add auto post preview to 'select photo from albums' 2017-08-01 19:02:42 -07:00
zotlabs
01fc590938 auto preview comments also on media/link add 2017-08-01 18:58:06 -07:00
zotlabs
6e9fb9b9fd Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-08-01 18:20:34 -07:00
zotlabs
a97b09210e auto preview when inserting a media item or embed into a post. Since this unanticipated action could be alarming (some might think the post was actually submitted), also provide a visible preview indicator within the previewed content. Remove the css for the old striped background image which hasn't been available for previewed content for a year or two. 2017-08-01 18:05:04 -07:00
git-marijus
acddf5aa8d css fix 2017-08-02 00:29:14 +02:00
git-marijus
6614d465d6 css fix 2017-08-02 00:28:05 +02:00
git-marijus
2ba2187c2e do not show pubs notifications for items with ACTIVITY_OBJ_FILE obj_type 2017-08-01 23:45:41 +02:00
git-marijus
2ea482d163 finally fix recursive attachments permissions 2017-08-01 23:32:37 +02:00
git-marijus
599b395e24 finally fix recursive attachments permissions 2017-08-01 23:20:39 +02:00
git-marijus
1416b81877 use small line-height only for larger screens 2017-08-01 18:04:31 +02:00
git-marijus
aa766b53d6 use small line-height only for larger screens 2017-08-01 18:03:53 +02:00
Mario Vavti
4e2a050afb remove blugrid schema until somebody cares to fix it 2017-08-01 14:27:20 +02:00
Mario Vavti
cf437c6a33 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-08-01 14:26:17 +02:00
Mario Vavti
8b6a24c67d remove blugrid schema until somebody cares to fix it 2017-08-01 14:25:59 +02:00
Mario Vavti
a72b549aa7 less badge more icon 2017-08-01 12:46:12 +02:00
Mario Vavti
46d8cf3f94 strings 2017-08-01 12:32:50 +02:00
Mario Vavti
91d19a3326 strings 2017-08-01 12:01:04 +02:00
Mario Vavti
a510c91d48 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-08-01 11:41:25 +02:00
Mario Vavti
2f8c5cf7d0 Merge remote-tracking branch 'mike/master' into dev 2017-08-01 03:59:32 +02:00
git-marijus
1f2482f6ab correct the logic for configs in app requirement 2017-08-01 03:38:41 +02:00
zotlabs
9476c631b0 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-31 17:23:33 -07:00
Mario Vavti
10e459140b Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-08-01 02:12:52 +02:00
Mario Vavti
b66cd8363e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-08-01 00:57:15 +02:00
Mario Vavti
376b05bcc9 less badge more icon 2017-08-01 00:56:59 +02:00
zotlabs
a4a99d2d46 ensure we can work around the $is_http var in include/follow - this is left over from when the only non-webfinger connections we could make were RSS/Atom feeds. 2017-07-31 17:35:08 +02:00
Mario Vavti
2fcbbfe3d4 Merge remote-tracking branch 'mike/master' into dev 2017-07-31 17:34:26 +02:00
git-marijus
2095937c60 improve file_activity() a little 2017-07-31 17:30:16 +02:00
git-marijus
d33974cec4 db update to add index for item.obj_type 2017-07-31 17:30:06 +02:00
git-marijus
9ec995dbf0 improve file_activity() a little 2017-07-31 16:59:43 +02:00
git-marijus
79a806f328 db update to add index for item.obj_type 2017-07-31 16:49:56 +02:00
zotlabs
445fa6825a typo 2017-07-30 21:56:39 -07:00
zotlabs
e3c8e4f483 modify connection edit display for channels with no address/webbie 2017-07-30 21:55:28 -07:00
zotlabs
8f3a99ad1f ensure we can work around the $is_http var in include/follow - this is left over from when the only non-webfinger connections we could make were RSS/Atom feeds. 2017-07-30 19:04:17 -07:00
zotlabs
a3fef34a3f provide a better "is_commentable" default for OStatus conversations that were fetched on the fly 2017-07-31 02:55:13 +02:00
zotlabs
17618be14d add options flag to bb_to_markdown so we can distinguish between diaspora use and other use and
therefore filter and adjust content selectively
2017-07-31 02:54:58 +02:00
git-marijus
3faca10efc fix a bug where if multiple channels uploaded the same file to the same folder, the uploaded file would end up with an incremental number added to the filename for each upload even if the file did not exist yet in the channels folder 2017-07-31 02:54:27 +02:00
git-marijus
280f52f007 close the apps-menu if the notifications-menu is open and vice versa 2017-07-31 02:52:36 +02:00
git-marijus
126e06b32a Merge remote-tracking branch 'mike/master' into dev 2017-07-31 02:47:24 +02:00
git-marijus
988371be0b disable file notifications on initial upload for now - it can behave funky when uploading multiple small files at once 2017-07-31 02:35:46 +02:00
git-marijus
b4efe8ad8d implement system configs as app requirement and add the pubstream app 2017-07-31 02:24:49 +02:00
zotlabs
964a02d684 provide a better "is_commentable" default for OStatus conversations that were fetched on the fly 2017-07-30 16:15:34 -07:00
zotlabs
40effa4417 add options flag to bb_to_markdown so we can distinguish between diaspora use and other use and
therefore filter and adjust content selectively
2017-07-30 13:52:16 -07:00
git-marijus
35c05a3180 fix a bug where if multiple channels uploaded the same file to the same folder, the uploaded file would end up with an incremental number added to the filename for each upload even if the file did not exist yet in the channels folder 2017-07-30 19:46:52 +02:00
git-marijus
4a071b9a1c ltrim $display_path in attach_store() to be consistent with attach_mkdir() and go to created folder after successfully creating one 2017-07-30 19:21:02 +02:00
git-marijus
ead80481b9 another syntax error 2017-07-30 18:01:01 +02:00
git-marijus
297057d2bd do not include ACTIVITY_OBJ_FILE obj_type in the ping/something query 2017-07-30 17:49:35 +02:00
git-marijus
11cdd0033d no need for jquery here 2017-07-30 10:46:37 +02:00
git-marijus
06bd540cfa no need for jquery here 2017-07-30 10:45:59 +02:00
git-marijus
3451fe2d40 Merge remote-tracking branch 'mike/master' into dev 2017-07-30 07:41:46 +02:00
zotlabs
2ee0f769d9 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-29 15:42:33 -07:00
git-marijus
8161ec88e5 implement file notification on initial upload and rename get_parent_cloudpath() to get_cloud_url() which now includes the filename 2017-07-29 23:32:48 +02:00
git-marijus
7b992decd4 close the apps-menu if the notifications-menu is open and vice versa 2017-07-29 16:06:42 +02:00
zotlabs
9b9fe39839 missing quotes on string in network update_unseen 2017-07-29 04:47:55 -07:00
git-marijus
1f57a59618 make pubs notification available on small screens 2017-07-29 12:36:54 +02:00
git-marijus
5a1b850dd6 provide public stream notification also for not authenticated viewers 2017-07-29 12:24:03 +02:00
git-marijus
c4e0e20eb3 switch back to filter by ACTIVITY_OBJ_FILE for marking items read in /network since item_notshown is also used for likes 2017-07-29 11:37:35 +02:00
zotlabs
eedee6d0a1 fix notifications - item_notshown is set for likes, etc. 2017-07-29 01:58:34 -07:00
zotlabs
e316494e06 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-28 15:25:29 -07:00
git-marijus
4585e35b3e filter by item_notshown instead of obj_type 2017-07-28 23:07:16 +02:00
git-marijus
9717d4502f do not show obj_type ACTIVITY_OBJ_FILE under activity notifications and do not mark those read in /network 2017-07-28 23:01:39 +02:00
git-marijus
f9b342c87d initial notifications support for new shared files and new (since initial site load) pubstream activity 2017-07-28 22:42:02 +02:00
git-marijus
222113ee57 version 2.6RC 2017-07-28 10:21:08 +02:00
git-marijus
5f7b2e7c17 version 2.7 2017-07-28 10:19:09 +02:00
git-marijus
179478a940 default to static updates if not local channel 2017-07-27 21:51:59 +02:00
git-marijus
53570de5a3 remove borders from navbar toggler 2017-07-27 20:47:49 +02:00
git-marijus
41a6300d3c remove borders from navbar toggler 2017-07-27 20:47:07 +02:00
zotlabs
1376e59d00 improve the formatting of shares when converting from bbcode to markdown 2017-07-27 20:34:28 +02:00
zotlabs
d623228cf6 suppress fopen errors from dav 2017-07-27 20:31:27 +02:00
zotlabs
75d63684b8 remove activitypub components from core 2017-07-27 20:29:24 +02:00
zotlabs
d3d184192d issue with OStatus comments being propagated downstream 2017-07-27 11:31:22 +02:00
git-marijus
9be4c4d6d1 Merge remote-tracking branch 'mike/master' into dev 2017-07-27 11:17:08 +02:00
zotlabs
d3a5911932 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-26 22:09:01 -07:00
zotlabs
dbbae4bac8 issue with OStatus comments being propagated downstream 2017-07-26 17:38:34 -07:00
zotlabs
9132b9c026 remove activitypub components from core 2017-07-26 16:39:13 -07:00
zotlabs
769f697ae3 more work on signature algorithm choice 2017-07-26 16:36:09 -07:00
zotlabs
7d891a54e7 improve the formatting of shares when converting from bbcode to markdown 2017-07-26 16:22:20 -07:00
git-marijus
e71cdf02a8 move the active app code to include/nav.php - it is only relevant there 2017-07-26 21:42:07 +02:00
zotlabs
7d82b5f28d start to implement the code needed for verifying variable signature algorithms 2017-07-25 22:17:31 -07:00
zotlabs
eec2871680 consolidate duplicated code 2017-07-25 20:52:29 -07:00
zotlabs
029cf6395d sync key changes to clones 2017-07-25 17:58:46 -07:00
zotlabs
08f15a6fc6 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-25 16:02:41 -07:00
zotlabs
c24cfbc62a make signing methods variable and signable 2017-07-25 15:59:58 -07:00
git-marijus
caf077cbf8 version 2.5.10 2017-07-25 20:07:16 +02:00
git-marijus
5cc8837fb6 make local channel (not our own) nav menus appear similar to what we are used from remote channels 2017-07-25 20:06:01 +02:00
zotlabs
ddecbf052e new field names did not get saved 2017-07-24 22:45:50 -07:00
zotlabs
6a7fa6bf54 provide a keychange operation to rebase an identity on a new keypair 2017-07-24 20:23:00 -07:00
zotlabs
5ed4ed2246 suppress fopen errors from dav 2017-07-23 19:54:32 -07:00
git-marijus
72ed290ccd add text-dark class to cat tagsinput 2017-07-22 16:23:41 +02:00
git-marijus
16067db718 show the right conversation active and do not show any conversation active if we compose a new one 2017-07-22 12:46:02 +02:00
git-marijus
363d872326 Merge remote-tracking branch 'mike/master' into dev 2017-07-22 12:08:47 +02:00
git-marijus
f4a4d70149 indicate the selected channel in the dropdown menu and minor css fixes 2017-07-22 12:01:13 +02:00
git-marijus
4335e49381 more nav_set_selected 2017-07-22 11:04:18 +02:00
zotlabs
992f8272d3 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-21 16:20:50 -07:00
git-marijus
27678a523c more nav_set_selected apps 2017-07-21 22:36:47 +02:00
git-marijus
1bdcfe5219 provide a mechanism to mark apps active in the bin 2017-07-21 10:32:21 +02:00
zotlabs
89d21c0873 begin the tedious process of mapping activities between AS1, zot, and AS2 2017-07-20 22:55:04 -07:00
zotlabs
23e2b3be09 allow wildcard tag searches in search module also 2017-07-20 18:30:48 -07:00
zotlabs
a346399fe6 allow wildcard tag and category searches 2017-07-20 18:11:47 -07:00
git-marijus
8e5c56dcc2 more css fixes 2017-07-20 12:03:54 +02:00
git-marijus
77b58ec02f css fix 2017-07-20 11:56:46 +02:00
zotlabs
ceeb9836b9 implement update_feed_item 2017-07-19 20:31:11 -07:00
zotlabs
df7f0eb9a4 hubzilla issue #832 2017-07-19 18:32:16 -07:00
zotlabs
6103c30184 provide optional salmon signatures for AP entities 2017-07-18 21:16:18 -07:00
zotlabs
b52a968c74 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-18 19:16:47 -07:00
zotlabs
82aa87c190 ability to use a portion of the message-id to display a message wasn't honoured in all cases. 2017-07-18 17:02:50 -07:00
zotlabs
1af844e474 related to hubzilla issue #831 - system.last_expire_day was not being set correctly, causing cron_daily to run more frequently than desired. 2017-07-18 16:14:01 -07:00
git-marijus
c664a4bdcd some fixes for the bs-default schema 2017-07-18 15:46:34 +02:00
git-marijus
229f95d555 some fixes for the bs-default schema 2017-07-18 15:45:45 +02:00
git-marijus
ac6ebeee47 Merge remote-tracking branch 'mike/master' into dev 2017-07-18 14:26:08 +02:00
git-marijus
8896ebf7cb bugfix release 2.4.2 2017-07-18 14:03:22 +02:00
git-marijus
9bd11afc62 issue #827 provide backward compatibility for album links generated in earlier times before the ambiguity of photo album names was solved. This may provide incorrect results if two or more photo albums with the same basename exist in different directories of the file tree; but there is no easy way to solve that ambiguity - which is why the link format changed. 2017-07-18 13:56:56 +02:00
git-marijus
08c0d78296 issue #827 provide backward compatibility for album links generated in earlier times before the ambiguity of photo album names was solved. This may provide incorrect results if two or more photo albums with the same basename exist in different directories of the file tree; but there is no easy way to solve that ambiguity - which is why the link format changed. 2017-07-18 13:56:09 +02:00
zotlabs
9daa3b85c8 some corrections to AS encoding based on the current spec (some of this work was completed long before the spec settled). 2017-07-17 22:52:19 -07:00
zotlabs
d8c93c0d13 activitypub, cont. 2017-07-17 22:17:40 -07:00
zotlabs
42abc2201c Merge branch 'bug827' 2017-07-17 20:00:07 -07:00
zotlabs
27257de995 fix typo 2017-07-17 19:57:25 -07:00
zotlabs
15e836b7dd provide content-type matching ability for activitypub 2017-07-17 19:53:03 -07:00
zotlabs
0d062251b6 fix for bug 827 to provide partial backward compatibility with album names in photo items from < hubzilla 2.4
this will only work part of the time - which is why the behaviour was changed
2017-07-17 19:42:30 -07:00
zotlabs
ecb1515e5d activitystreams converters updated to recent spec 2017-07-17 19:28:27 -07:00
git-marijus
4728e72d18 some love for the installer 2017-07-17 16:19:19 +02:00
zotlabs
c352047228 mis-attributed profile photo when Mastodon comment author has no profile photo 2017-07-16 22:51:36 -07:00
zotlabs
1aedf22228 initial activitystreams2 parser 2017-07-16 22:28:28 -07:00
git-marijus
5408264559 Merge remote-tracking branch 'mike/master' into dev 2017-07-16 21:02:28 +02:00
git-marijus
b7d92d3a09 fix photo item comments 2017-07-16 16:26:22 +02:00
git-marijus
bd17dc52f2 fix photo item comments 2017-07-16 16:25:52 +02:00
git-marijus
e6315d252a fix album link 2017-07-16 15:59:58 +02:00
git-marijus
ce3be598bb fix album link 2017-07-16 15:59:19 +02:00
zotlabs
e891199a23 deal with mastodon privacy scopes - mark private and block commenting since we refuse to send private activities through the public OStatus connector. 2017-07-15 15:49:10 -07:00
zotlabs
b1d4e97699 incorrect follow url in webfinger 2017-07-14 14:03:56 -07:00
Mario Vavti
16dcaaa3a8 version 2017-07-14 16:37:39 +02:00
zotlabs
fd5c92822c minor optimisation 2017-07-13 22:29:15 -07:00
zotlabs
77f71303f2 update some addon docs and ensure we only generate statistics once a day 2017-07-13 21:46:21 -07:00
zotlabs
266dab1b59 turn url requests where argv[0] is something.xyz into module='something' and $_REQUEST['module_format'] = 'xyz'; But leave modules beginning with . (like .well_known) alone (convert the initial . to _ and then strip it). This really only affects Siteinfo_json at this time. 2017-07-13 20:53:05 -07:00
zotlabs
2d119c81a4 turn platform name and std_version into config variables 2017-07-13 20:18:19 -07:00
zotlabs
88bb61018d Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-13 19:59:30 -07:00
zotlabs
c940d8d7ca implement chunked uploads on the wall; making it work painlessly on /cloud was attempted but will not be implemented today. That presents some interesting dragons to slay. 2017-07-13 17:04:58 -07:00
zotlabs
aa70cbbf21 fix typos 2017-07-12 17:16:21 -07:00
zotlabs
6db717a1a0 make websub/PuSH and salmon both use consume_feed() for item storage as there is a lot of duplication of effort and patches applied to one that haven't been applied to the other. This will require an update of addons as well or follow activities may be duplicated 2017-07-12 17:07:31 -07:00
zotlabs
ad9990e100 even more logging of conversation parent discovery 2017-07-11 17:31:57 -07:00
Mario Vavti
403e90861c Merge red/master 2017-07-11 16:11:52 +02:00
zotlabs
2d63bbb91e prevent expiration of conversations you are involved with - allows you to find your own comments months from now 2017-07-10 20:18:33 -07:00
Mario Vavti
271ed82d0d update to match primary color 2017-07-10 22:43:32 +02:00
Mario Vavti
c47439fca4 update r1191: return update_success if table principals exists otherwise proceed with creating cdav tables. 2017-07-10 14:28:50 +02:00
zotlabs
e3734328eb find_parent for feeds needs more debug logging. Something is still falling through the cracks and it isn't obvious why 2017-07-09 17:08:25 -07:00
zotlabs
ddc454bd82 regression: allow position attributes in oembedable zcards by separating allow_position from the decision to allow zrls.
Should probably turn the entire zcard into a gd image as other consumers of zcards are also likely to purify the position attributes.
2017-07-09 16:04:45 -07:00
zotlabs
799d4ad549 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-09 13:15:50 -07:00
Mario Vavti
8dcdcd55e5 remove if not exist clause on index creation - it seems to be supported in mariadb only 2017-07-08 20:29:02 +02:00
Mario Vavti
1fca442828 update bs-dev and popper.js 2017-07-07 13:58:32 +02:00
git-marijus
d077f15270 Merge pull request #822 from dawnbreak/composer-light
Add optimize-autoloader to composer config.
2017-07-07 12:16:27 +02:00
Klaus Weidenbach
31d1a72854 ⬆️ Updating some PHP libraries.
htmlpurifier (v4.9.2 => v4.9.3) with bugfix for PHP7.1
sabre/http (4.2.2 => 4.2.3)
2017-07-06 21:35:10 +02:00
Klaus Weidenbach
f9a989fe1b Add optimize-autoloader to composer config. 2017-07-06 21:18:35 +02:00
Mario Vavti
46e079beea release 2.4.1 2017-07-06 10:48:00 +02:00
git-marijus
4048cb67d2 rewrite wiki pages widget - no need for ajax on pageload, show the pages to not authenticated people. 2017-07-06 10:43:40 +02:00
git-marijus
b16e4c558f Merge pull request #821 from zotlabs/hmessages
Hmessages.po corruption
2017-07-06 08:07:03 +02:00
zotlabs
2d6e87fb17 hmessages.po was corrupt from an old merge conflict - regenerated 2017-07-05 21:48:36 -07:00
zotlabs
024d2737d0 there was a merge conflict in hmessages.po 2017-07-05 20:52:33 -07:00
zotlabs
b2e5b6c977 affinitiy slider settings were being updated on any submit of of settings/featured, plus minor non-code changes 2017-07-05 20:16:40 -07:00
zotlabs
75f058e15e reset project name 2017-07-05 15:38:20 -07:00
zotlabs
7fb849ab87 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-05 15:35:53 -07:00
zotlabs
fca8e0aa6a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-07-05 15:35:05 -07:00
Mario Vavti
8dd9ab05a9 remove apps app 2017-07-05 14:54:23 +02:00
Mario Vavti
c3b93de099 typo 2017-07-05 12:32:46 +02:00
zotlabs
27c8c74988 some sites use the old style ostatus:conversation xml field, check for it. 2017-07-05 11:49:05 +02:00
Mario Vavti
80352dab5f use if not exists clause to not error if the index was already there 2017-07-05 11:36:32 +02:00
Mario Vavti
00a49b42e4 version 2.5.8 2017-07-05 11:19:05 +02:00
Mario Vavti
f5735fb67b missing abook_{my,their}_perms in pg schema and missing keys in mysql schema 2017-07-05 10:36:32 +02:00
Mario Vavti
fb5b588349 update_version bump 2017-07-05 10:03:52 +02:00
Mario Vavti
9e497cde40 missing semicolon 2017-07-05 09:52:41 +02:00
zotlabs
f3816836e5 some sites use the old style ostatus:conversation xml field, check for it. 2017-07-04 22:05:17 -07:00
Mario Vavti
038c928b9b db-update for cdav 2017-07-04 23:08:00 +02:00
Mario Vavti
c596248f40 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-07-04 12:41:47 +02:00
Mario Vavti
6ae3a92f53 version 2.5.7 2017-07-04 12:40:10 +02:00
Mario Vavti
fbf868e976 reimplement creation of default calendar and default addressbook using sabre classes 2017-07-04 12:07:11 +02:00
Mario Vavti
5e0bb6ecd5 add apd files for cdav 2017-07-04 10:36:24 +02:00
Mario Vavti
a34d8773f1 add the cdav pgsql schemas 2017-07-04 10:28:16 +02:00
Mario Vavti
4bc94c0ee9 keep hubzillas license and readme 2017-07-04 09:41:39 +02:00
Mario Vavti
bf1a21e46f Merge remote-tracking branch 'mike/master' into dev 2017-07-04 09:39:48 +02:00
zotlabs
d18427a522 revert using channel_hash for cdav until we figure out how to do so cleanly 2017-07-03 21:20:22 -07:00
Mario Vavti
76850a7340 minor css fix 2017-07-03 21:38:29 +02:00
Mario Vavti
d096106824 merge red into hubzilla 2017-07-03 21:33:24 +02:00
Mario Vavti
562124c29f bs-dev, minor css fix and min version 2017-07-03 21:22:13 +02:00
zotlabs
48063fa5ef Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-07-02 18:58:43 -07:00
zotlabs
41111bcdad Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-07-02 18:57:21 -07:00
Mario Vavti
133292e241 update bs-dev and min version bump 2017-07-02 11:24:17 +02:00
zotlabs
64cad0a041 duplicated posts after conversation fetch 2017-06-30 00:50:57 -07:00
zotlabs
b73c844d1a use "Full Name (username)" for ostatus commenter xchans 2017-06-29 22:38:43 -07:00
zotlabs
da1b10b741 forgot to return true from the conversation_fetch routine - which triggers the rescan for potential parent posts 2017-06-29 21:09:08 -07:00
zotlabs
c7b4a53af2 log the conversation so we can debug this easier 2017-06-28 20:11:03 -07:00
zotlabs
024809f970 conversation fetching is partially working - but it isn't always glueing the conversation pieces together. 2017-06-28 20:07:53 -07:00
zotlabs
126af3a24a pretend it's a real feed even though it isn't 2017-06-28 19:34:49 -07:00
zotlabs
b91d95d241 add logging 2017-06-28 19:20:11 -07:00
zotlabs
8ca5a65dcf minor weirdness in zot finger results after deleting a clone from a channel that was on a site which was previously migrated from http to https and still had the old hubloc 2017-06-28 18:28:02 -07:00
zotlabs
798a03c2ab diaspora hcard wasn't being rendered 2017-06-28 17:03:17 -07:00
zotlabs
34c4775916 missing space in nav tpl 2017-06-28 16:45:48 -07:00
zotlabs
c5cff7d637 more refetch testing 2017-06-28 16:02:44 -07:00
zotlabs
c2af370282 refetch testing 2017-06-28 15:58:14 -07:00
zotlabs
118fed29b5 remove logging statement 2017-06-27 22:05:06 -07:00
zotlabs
4c50bfebc2 provide a gender icon on the profile sidebar within reason 2017-06-27 21:55:34 -07:00
zotlabs
dab00a98e0 translate 'favorite' verb to 'like' if it's an ostatus feed 2017-06-27 20:07:48 -07:00
zotlabs
2b2ea40bce log conversation fetches (also a missed / char in the string replace) 2017-06-27 19:57:03 -07:00
zotlabs
1273ac67f4 (untested currently) fetch conversation for GNU-Social and Mastodon when provided a comment with no local copy of the parent. 2017-06-27 19:20:13 -07:00
zotlabs
676481de58 support linked media (audio/video) elements in feeds as well as images 2017-06-26 23:06:15 -07:00
zotlabs
54c5e03b4f provide more comprehensible information on the admin summary page 2017-06-26 22:42:01 -07:00
zotlabs
a8374b25f1 upgrade blueimp from 9.8 to 9.18 2017-06-26 17:32:38 -07:00
zotlabs
4d81c498e2 in gnu-social reshare objects are activities, not posts or comments 2017-06-26 17:07:59 -07:00
zotlabs
b0dd824dbc add ostatus attached photos (inline to the post body) even if there's a link to the photo in the post but it isn't wrapped in an img tag. 2017-06-26 16:54:28 -07:00
zotlabs
5dc638c5b3 better fix for dav headers already sent issue 2017-06-26 01:36:33 -07:00
zotlabs
7f982a0778 minor usability enhancements with the connections list - label the edit icon so it's more obvious; the intuitive action is to click the photo or name which isn't what we usually want. Also move the Delete button over just a bit more so it's harder to accidentally click on small screens with big thumbs. 2017-06-25 20:03:26 -07:00
zotlabs
28a1be4d36 typo in chanview, remove output buffering in mod_cloud which is preventing large files from being downloaded. IIRC this was put there to avoid a SAML warning in SabreDAV but I'm not seeing that currently. 2017-06-25 19:17:05 -07:00
zotlabs
c456e01219 chanview - if already connected, bypass the chanview intermediary page and go straight to the remote profile.
The chanview page is only there to present a connect link since the remote profile may not have one.
2017-06-25 18:49:50 -07:00
zotlabs
ef53db0b91 allow poke by xchan_hash 2017-06-25 18:30:22 -07:00
zotlabs
21542d1f9e guess_image_type - ignore scheme when checking for urls 2017-06-25 18:09:34 -07:00
zotlabs
07d6472eea mastodon reshares can be either posts or comments; silence warning from guess_image_type when handed a URL to a non-existent resource. 2017-06-25 18:07:07 -07:00
zotlabs
6c771f84ce remove unused page_widgets.php include and provide a general function for loading sql from file to use in the cdav migration 2017-06-22 22:43:08 -07:00
zotlabs
02b7bc0803 cdav migration to core 2017-06-22 20:16:54 -07:00
zotlabs
681d6ca1dd more mail issues 2017-06-22 17:43:50 -07:00
zotlabs
3b4f70ae83 Several things about mail storage weren't quite right. 2017-06-22 17:31:08 -07:00
git-marijus
0e100a864b add files and photos to featured apps by default 2017-06-22 20:47:21 +02:00
git-marijus
dc14f8bf2c fix post title radius 2017-06-22 20:28:47 +02:00
zotlabs
37b9a809a6 start porting cdav proper to core 2017-06-21 22:11:21 -07:00
zotlabs
5f1a1db30f oopsy 2017-06-21 17:46:28 -07:00
zotlabs
99ff808b8a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-06-20 18:39:27 -07:00
zotlabs
08c0729f5f Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-06-20 18:34:17 -07:00
zotlabs
7e4e2f28db explain what is happening here 2017-06-20 17:13:04 -07:00
zotlabs
08d9316d76 more import_author_zot fixes 2017-06-20 17:03:11 -07:00
zotlabs
0233e9ad2a still an issue with caching import_author_zot 2017-06-20 16:33:53 -07:00
zotlabs
31e0812711 remove deprecated app parameter from conversation() 2017-06-20 15:53:01 -07:00
zotlabs
76e9809169 more anon comment fixes 2017-06-20 23:12:31 +02:00
zotlabs
07a8151ae6 more anon comment fixes 2017-06-20 12:45:05 -07:00
git-marijus
075ced80a6 Remove important flag 2017-06-20 15:44:47 +02:00
zotlabs
4c96b9778e prevent likes/dislikes/etc. from anon commenters 2017-06-20 14:35:47 +02:00
zotlabs
1b31c9f8a8 prevent likes/dislikes/etc. from anon commenters 2017-06-20 05:11:07 -07:00
Mario Vavti
b858eec644 make bootstrap respect our radius setting 2017-06-20 12:57:23 +02:00
Mario Vavti
5af9923e29 version 2017-06-20 12:06:55 +02:00
Mario Vavti
e122901e49 strings 2017-06-20 12:06:12 +02:00
Mario Vavti
aed1373b70 update bs4-dev and use min version of popper 2017-06-20 11:52:09 +02:00
zotlabs
3b5e1c05b7 minor cleanup of moderated comment feature 2017-06-20 10:51:46 +02:00
zotlabs
1472f85b16 allow moderated comments like wordpress if permissions are compatible 2017-06-19 16:09:07 +02:00
zotlabs
3d6255ae24 brainstorming a comment moderation system 2017-06-19 16:02:28 +02:00
zotlabs
f25e0c3829 testing mastodon boosts/reshares 2017-06-19 15:59:46 +02:00
zotlabs
b0a6a5a91e minor cleanup of moderated comment feature 2017-06-18 22:51:52 -07:00
zotlabs
b917cf1ecc allow moderated comments like wordpress if permissions are compatible 2017-06-18 22:25:41 -07:00
zotlabs
4d5469f27e brainstorming a comment moderation system 2017-06-17 17:59:31 -07:00
zotlabs
1848a22118 testing mastodon boosts/reshares 2017-06-16 19:30:02 -07:00
zotlabs
b429576349 some logic cleanup in feed_get_reshare 2017-06-16 15:28:29 -07:00
zotlabs
bb9557a9ae remove some duplicated code 2017-06-15 08:57:03 +02:00
zotlabs
0d7e7ac657 always transmit a valid uri 2017-06-15 08:56:22 +02:00
zotlabs
b8c77bbcfc use parent_mid 2017-06-15 08:56:06 +02:00
zotlabs
327b22d24e remove some duplicated code 2017-06-14 20:20:18 -07:00
zotlabs
8b3d2c02e1 always transmit a valid uri 2017-06-14 19:59:25 -07:00
zotlabs
1ac799f629 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-06-14 16:11:57 -07:00
zotlabs
234c64574b Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-06-14 16:07:21 -07:00
zotlabs
7b948bdd29 use parent_mid 2017-06-14 16:06:25 -07:00
Mario Vavti
1f075d92bc sigh... x-zot prefix slipped in again 2017-06-15 00:19:50 +02:00
Mario Vavti
fe02665f54 typo 2017-06-15 00:17:26 +02:00
Mario Vavti
ec74b57000 re-add type since the actual culprit was the X-ZOT prefix 2017-06-14 23:21:47 +02:00
Mario Vavti
3f488e9842 fix illegal offset type warning 2017-06-14 22:53:09 +02:00
Mario Vavti
54e07389fa thr:in-reply-to seems to must not have a type set. there is no mention of this in the spec and replies will be shown as replies in mastodon this way. 2017-06-14 22:14:52 +02:00
Mario Vavti
28906bf50a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-06-14 20:45:15 +02:00
zotlabs
70e912736f support mastodon content warnings by converting into n-s-f-w tag 2017-06-14 16:57:39 +02:00
zotlabs
ec1156d37a more doco improvements 2017-06-14 16:56:36 +02:00
zotlabs
dcbc65a796 add rel=noopener to all external target _blank links 2017-06-14 16:56:13 +02:00
zotlabs
8eccd7d47d attempt to group gnu-social and mastodon conversations by ostatus:conversation in addition to falling back on thr:in_reply_to 2017-06-14 16:55:57 +02:00
zotlabs
5530833bf8 preserve the ostatus:conversation pointer also 2017-06-14 16:55:28 +02:00
zotlabs
2f8fb2b663 ostatus is almost unrecognisable these days from its former self. In this case thr:in-reply-to has almost no meaning since it almost never refers to a top level post; which makes it quite difficult to preserve conversations 2017-06-14 16:55:00 +02:00
zotlabs
5d2035b729 implement feed_get_reshare to extract shared post info from atom feed and convert to bbcode 2017-06-14 16:54:08 +02:00
zotlabs
7c36331042 add 'can_comment_on_post' hook so we can better deal with the complications of Diaspora policy 2017-06-14 16:44:16 +02:00
zotlabs
36cfdd529b doco for the channel basic export api call 2017-06-14 16:43:35 +02:00
zotlabs
3e13568f91 add numbers to the techlevel descriptions because that's what we will use to indicate a minimum level in documentation 2017-06-14 16:43:21 +02:00
zotlabs
e84ed1cb9a more obsolete references in member guide 2017-06-14 16:42:55 +02:00
zotlabs
f1fd672d7b another typo 2017-06-14 16:42:34 +02:00
zotlabs
02b0472058 remove some obsolete information from the member guide and expand on what a connection is at a basic level. 2017-06-14 16:42:04 +02:00
zotlabs
5854a226d7 typo 2017-06-14 16:41:47 +02:00
zotlabs
bdf8940040 more stuff about connecting for the member guide 2017-06-14 16:41:12 +02:00
zotlabs
2b9a8fa1ac Add a section on connecting to other networks and activating additional protocols in the member guide - where it is needed the most. 2017-06-14 16:40:47 +02:00
zotlabs
45137a55a4 missed this hook page when the hook was added 2017-06-14 16:39:47 +02:00
zotlabs
d6dd2c5bd6 api docs 'categories' -> 'category' 2017-06-14 16:39:07 +02:00
git-marijus
d4330ceacc Merge pull request #815 from HaakonME/dev
New portfolio widget (requires foundation library)
2017-06-14 16:22:10 +02:00
zotlabs
364da7a57e support mastodon content warnings by converting into n-s-f-w tag 2017-06-13 19:52:16 -07:00
zotlabs
05eeb8432e more doco improvements 2017-06-13 19:24:42 -07:00
zotlabs
fce68f1a39 add rel=noopener to all external target _blank links 2017-06-13 18:29:08 -07:00
zotlabs
7f374fe69f attempt to group gnu-social and mastodon conversations by ostatus:conversation in addition to falling back on thr:in_reply_to 2017-06-13 18:06:45 -07:00
Haakon Meland Eriksen
836cb16455 Added Portfolio widget 2017-06-13 21:08:21 +02:00
zotlabs
dd8feac540 preserve the ostatus:conversation pointer also 2017-06-12 21:58:40 -07:00
zotlabs
f526b9fcfb ostatus is almost unrecognisable these days from its former self. In this case thr:in-reply-to has almost no meaning since it almost never refers to a top level post; which makes it quite difficult to preserve conversations 2017-06-12 21:12:14 -07:00
zotlabs
8bf9b1311d implement feed_get_reshare to extract shared post info from atom feed and convert to bbcode 2017-06-12 19:17:50 -07:00
zotlabs
5b3e863323 add 'can_comment_on_post' hook so we can better deal with the complications of Diaspora policy 2017-06-12 16:17:23 -07:00
zotlabs
6ce9eedb5f doco for the channel basic export api call 2017-06-11 23:28:55 -07:00
zotlabs
6f78183b74 add numbers to the techlevel descriptions because that's what we will use to indicate a minimum level in documentation 2017-06-11 18:52:00 -07:00
zotlabs
1d96544c9d more obsolete references in member guide 2017-06-11 18:48:21 -07:00
zotlabs
69f6a5c08c another typo 2017-06-11 18:44:55 -07:00
zotlabs
38b4f6a391 remove some obsolete information from the member guide and expand on what a connection is at a basic level. 2017-06-11 18:40:29 -07:00
zotlabs
425e13843e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-06-11 16:28:40 -07:00
zotlabs
f28fa0ab5a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-06-11 16:25:14 -07:00
zotlabs
f162993001 typo 2017-06-11 15:41:00 -07:00
zotlabs
af774a7269 more stuff about connecting for the member guide 2017-06-11 15:39:02 -07:00
zotlabs
d82cfdf581 Add a section on connecting to other networks and activating additional protocols in the member guide - where it is needed the most. 2017-06-11 15:30:56 -07:00
zotlabs
b84818a334 api docs 'categories' -> 'category' 2017-06-11 00:01:23 -07:00
zotlabs
9c26ee122e missed this hook page when the hook was added 2017-06-10 16:00:21 -07:00
zotlabs
f27047dd2e Documentation - add a section of addons and especially federation addons, and remove the section on server_roles. 2017-06-10 15:59:03 -07:00
Mario Vavti
643a62038e css fixes 2017-06-10 20:01:23 +02:00
Mario Vavti
fbb83d831b some more innodb mysql scheme adjustments 2017-06-10 10:00:37 +02:00
zotlabs
2a4032d71a clean up the warnings about connections on unclonable networks 2017-06-09 16:26:30 -07:00
zotlabs
42c9f853a7 auto inline embed ostatus image attachments 2017-06-09 15:24:37 -07:00
zotlabs
3389df77cc give the item_obscured flag a new lease on life by using it to designate third party client-side e2ee or binary content which can only be downloaded and not viewed directly on the web (as a side effect this also allows binary files to be submitted as activities/content). The content display is suppressed and replaced with a download button. This is unfinished but harmless to backport while work is in progress unless told otherwise. Future development will take care of the remaining loose ends. 2017-06-10 00:00:31 +02:00
zotlabs
97732f7006 more client-side mail privacy work 2017-06-09 23:54:35 +02:00
git-marijus
8f2457855c Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-06-09 12:57:05 +02:00
git-marijus
7e4c880e1e convert schema_mysql engine to InnoDB and charset utf8mb4 2017-06-09 12:56:36 +02:00
zotlabs
2a21285037 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-06-08 19:45:56 -07:00
zotlabs
61bf77f668 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-06-08 19:44:55 -07:00
zotlabs
cf583168dd put unreachable federated connections in the archived tab of the connections list page 2017-06-08 19:15:55 -07:00
zotlabs
236b528552 indicate on connections page if a federated connection from another network is unavailable from the current location 2017-06-08 16:38:07 -07:00
Mario Vavti
f730e476f0 bump std version 2017-06-08 15:34:19 +02:00
zotlabs
3563568f6f fall back on feed logo if an author avatar cannot be found 2017-06-08 10:26:43 +02:00
zotlabs
912be5a792 it appears to also work a bit better if you don't use imaginary function names 2017-06-08 10:26:07 +02:00
zotlabs
30358100ab partial fix for failure to sync photos - appears to be memory exhaustion and dependent on filesize although an unrelated issue was found with directory creation during file sync (we didn't check ownership when looking for duplicates).
This checkin provides the means for a sync process to fetch the contents for various photo scales from the original server just as is done for the attach data now. It is still missing the bit for the sync process to spawn a mob of children to fetch these suckers and update the photo table with the results.
2017-06-08 10:25:42 +02:00
zotlabs
492665a8a1 provide hook when deleting a connection - we need this to clean up dangling PuSH subscriptions 2017-06-08 10:24:40 +02:00
zotlabs
005baea319 fall back on feed logo if an author avatar cannot be found 2017-06-07 21:49:50 -07:00
zotlabs
4f3b1edf9d it appears to also work a bit better if you don't use imaginary function names 2017-06-07 20:44:44 -07:00
zotlabs
2e692fca93 partial fix for failure to sync photos - appears to be memory exhaustion and dependent on filesize although an unrelated issue was found with directory creation during file sync (we didn't check ownership when looking for duplicates).
This checkin provides the means for a sync process to fetch the contents for various photo scales from the original server just as is done for the attach data now. It is still missing the bit for the sync process to spawn a mob of children to fetch these suckers and update the photo table with the results.
2017-06-07 20:28:59 -07:00
zotlabs
9dbd997141 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-06-07 17:11:35 -07:00
zotlabs
416a82bf12 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-06-07 17:07:44 -07:00
zotlabs
2e35dc648f provide hook when deleting a connection - we need this to clean up dangling PuSH subscriptions 2017-06-07 16:26:24 -07:00
Mario Vavti
55836e8ca6 update bs-dev 2017-06-07 22:40:44 +02:00
Manuel Tancoigne
a17acfb04f Fixed TEXT fields with default values (fixes #803) in mysql creation script. 2017-06-07 10:20:02 +02:00
git-marijus
e9fe258b5e Merge pull request #811 from mtancoigne/master
Fixed TEXT fields with default values (fixes #803)
2017-06-07 10:15:24 +02:00
git-marijus
79e618415a Merge pull request #809 from dawnbreak/QA_testing
👷 Add MySQL 5.7 in TravisCI.
2017-06-07 10:14:54 +02:00
zotlabs
bea0a491cf Looks like we need the mastodon feed check in core - grrr. Will do that for now until it can be put back into plugins. 2017-06-07 09:37:47 +02:00
zotlabs
108b052e4e hubzilla issue #810 2017-06-07 09:37:33 +02:00
zotlabs
f5b593ff42 whitespace 2017-06-07 09:36:53 +02:00
zotlabs
cdfd42053d always add a length to ostatus compat enclosures - even if unknown (0) 2017-06-07 09:36:13 +02:00
zotlabs
36d4086673 ostatus feeds: extract photo information from posts and convert to enclosures as otherwise OStatus servers will strip them from the HTML in the feed and refuse to render them 2017-06-07 09:35:04 +02:00
zotlabs
01b541d8b0 oembed: ensure that width and height are returned as type int and not float 2017-06-07 09:34:45 +02:00
zotlabs
928fce875e make authenticated oembeds optional, default to false. 2017-06-07 09:33:55 +02:00
zotlabs
1d3c6e7420 include/socgraph - remove a few obsolete and long-deprecated functions 2017-06-07 09:33:28 +02:00
zotlabs
c96fe2931a cleanup only 2017-06-07 09:33:00 +02:00
zotlabs
8a11dc0c90 don't allow negative age in directory listings 2017-06-07 09:31:22 +02:00
zotlabs
324d427ac7 a slight tweak to author_is_pmable hook to make it useful 2017-06-07 09:30:45 +02:00
zotlabs
84c04cfe1c remove text_highlight css load from core 2017-06-07 09:28:54 +02:00
zotlabs
1925f2dec2 add the hl tag to the bbcode ref 2017-06-07 09:28:34 +02:00
zotlabs
5235a72bca correct the bbcode documentation for syntax highlighted code blocks now that this is provided by a plugin. 2017-06-07 09:28:13 +02:00
zotlabs
80c65ea8f3 move code syntax highlighting to plugin 2017-06-07 09:27:42 +02:00
zotlabs
3a2a7d0508 re-arrange a few functions 2017-06-07 09:26:45 +02:00
zotlabs
59002cb873 Looks like we need the mastodon feed check in core - grrr. Will do that for now until it can be put back into plugins. 2017-06-06 22:49:45 -07:00
zotlabs
f49ce500a1 fix a merge mixup on install/schema_msyql.php 2017-06-06 18:12:44 -07:00
zotlabs
40b9130c63 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-06-06 17:39:43 -07:00
zotlabs
e917b94929 hubzilla issue #810 2017-06-06 17:38:34 -07:00
Manuel Tancoigne
abce12ccd9 Fixed TEXT fields with default values (fixes #803) in mysql creation script. 2017-06-06 19:42:10 +02:00
zotlabs
83f8f8ebb8 whitespace 2017-06-05 15:57:43 -07:00
Klaus Weidenbach
4bd825e778 👷 Add MySQL 5.7 in TravisCI.
Use a Docker container to add MySQL 5.7 in TravisCI.
A lot of sql_mode settings have changed with 5.7, so finnaly provide it
to test against it.
2017-06-05 23:42:13 +02:00
zotlabs
2fea5ff889 always add a length to ostatus compat enclosures - even if unknown (0) 2017-06-04 20:07:08 -07:00
zotlabs
a94a42d609 ostatus feeds: extract photo information from posts and convert to enclosures as otherwise OStatus servers will strip them from the HTML in the feed and refuse to render them 2017-06-04 19:09:05 -07:00
git-marijus
4784f847c9 fix nav-tabs for dark scheme 2017-06-04 17:16:18 +02:00
git-marijus
867d8510ca fix nav-tabs for dark scheme 2017-06-04 17:15:33 +02:00
git-marijus
d53fb9d1b5 remove duplicate code 2017-06-04 17:01:45 +02:00
git-marijus
58b5c4cc16 fix allow setting a default schema for the hub (issue #797) and allow selecting of focus (hubzilla default) schema if a default is set. 2017-06-04 17:01:18 +02:00
git-marijus
10ecb6d368 remove duplicate code 2017-06-04 16:58:59 +02:00
git-marijus
e7c3ca9bd8 fix allow setting a default schema for the hub (issue #797) and allow selecting of focus (hubzilla default) schema if a default is set. 2017-06-04 16:39:52 +02:00
git-marijus
e8a4e9a31f class mixup 2017-06-04 12:52:52 +02:00
zotlabs
43914852e5 oembed: ensure that width and height are returned as type int and not float 2017-06-03 16:08:08 -07:00
zotlabs
c7f097ec84 make authenticated oembeds optional, default to false. 2017-06-03 16:00:14 -07:00
git-marijus
7562f77bdf rewrite wiki pages widget - no need for ajax on pageload, show the pages to not authenticated people. 2017-06-03 17:23:53 +02:00
git-marijus
c4ed04fc82 convert randprof to use chanlink_hash() instead of chanlink_url() and filter sys channels by xchan.xchan_system instead of xchan_addr != sys@% 2017-06-03 10:13:42 +02:00
zotlabs
f3061651d4 Revert "include/socgraph - remove a few obsolete and long-deprecated functions"
This reverts commit e2d028fb97.
2017-06-01 21:22:56 -07:00
zotlabs
0b740826c5 include/socgraph - remove a few obsolete and long-deprecated functions 2017-06-01 21:22:31 -07:00
zotlabs
e2d028fb97 include/socgraph - remove a few obsolete and long-deprecated functions 2017-06-01 21:21:38 -07:00
zotlabs
e0913dc8e6 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-06-01 16:31:21 -07:00
git-marijus
56f3b12171 Merge pull request #802 from zotlabs/searchwebpages
provide ability to search webpages (either public or which contain th…
2017-06-01 08:19:52 +02:00
git-marijus
927313968a Merge pull request #805 from zotlabs/mailexport
minor export issue with mail
2017-06-01 08:17:58 +02:00
git-marijus
2e54024b92 Merge pull request #804 from dawnbreak/dev
⬆️Update Sabre libraries.
2017-06-01 08:16:55 +02:00
zotlabs
cdfcb1ed24 cleanup only 2017-05-31 22:59:07 -07:00
zotlabs
e6581aa09c active nav-link was white on white 2017-05-31 21:57:01 -07:00
zotlabs
8ebb000650 minor export issue with mail 2017-05-31 21:01:51 -07:00
zotlabs
fc98bd1563 minor export issue with mail 2017-05-31 20:59:36 -07:00
zotlabs
7ccf47f4c6 don't allow negative age in directory listings 2017-05-31 20:08:35 -07:00
zotlabs
35debe46bc a slight tweak to author_is_pmable hook to make it useful 2017-05-31 18:14:12 -07:00
zotlabs
98c18f416a remove default for text/mediumtext sql fields 2017-05-31 16:00:33 -07:00
Klaus Weidenbach
ea19971285 ⬆️Update Sabre libraries. 2017-06-01 00:08:40 +02:00
Mario Vavti
47d55694a4 Merge branch '2.4RC' 2017-05-31 09:56:35 +02:00
Mario Vavti
f0e615dee5 bump version 2017-05-31 09:53:55 +02:00
zotlabs
5376b478b8 only provide 'connected apps' on the settings menu if techlevel > 0. 2017-05-30 22:22:31 -07:00
zotlabs
909e618f6c remove text_highlight css load from core 2017-05-30 21:28:59 -07:00
zotlabs
c492573429 add the hl tag to the bbcode ref 2017-05-30 20:26:57 -07:00
zotlabs
8ae97b556e correct the bbcode documentation for syntax highlighted code blocks now that this is provided by a plugin. 2017-05-30 20:13:01 -07:00
zotlabs
dfc0d4cf59 move code syntax highlighting to plugin 2017-05-30 19:50:41 -07:00
zotlabs
bfad624528 re-arrange a few functions 2017-05-30 18:36:19 -07:00
zotlabs
062b9ecbf3 bring back html2markdown which went away in the merge 2017-05-30 18:22:48 -07:00
zotlabs
d3cad5a651 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-30 18:18:28 -07:00
zotlabs
a7ecf51915 provide ability to search webpages (either public or which contain the observer in the acl) in addition to conversations 2017-05-30 17:53:58 -07:00
zotlabs
893ae17b99 provide ability to search webpages (either public or which contain the observer in the acl) in addition to conversations 2017-05-30 17:06:50 -07:00
zotlabs
e48d5383ce move disapora xrd stuff to plugin 2017-05-30 16:50:57 -07:00
Mario Vavti
9675acdf87 update changelog 2017-05-30 16:48:05 +02:00
Mario Vavti
14229d0dd3 update changelog 2017-05-30 16:47:33 +02:00
Mario Vavti
2b5d19924b fix issue #790 - zip->open returned error 19 (not a valid zip archive). in case there are further issues we should probably also put a ob_end_clean() right before readfile() 2017-05-30 15:15:31 +02:00
Mario Vavti
3f658cc2ea fix issue #790 - zip->open returned error 19 (not a valid zip archive). in case there are further issues we should probably also put a ob_end_clean() right before readfile() 2017-05-30 15:15:00 +02:00
zotlabs
6962bc5147 create account_store_lowlevel() 2017-05-29 21:46:38 -07:00
zotlabs
321957781e remove server role from language configs 2017-05-29 20:59:05 -07:00
zotlabs
fd91513832 more deprecate server_role 2017-05-29 16:25:27 -07:00
zotlabs
4fcfcc8117 start deprecation of server_role 2017-05-29 13:50:02 -07:00
Mario Vavti
11cecea597 fix update_r1189() for mysql and postgres 2017-05-29 13:19:08 +02:00
git-marijus
e549833077 Merge pull request #800 from git-marijus/dev
fix update_r1189() for mysql and postgres
2017-05-29 13:18:09 +02:00
zotlabs
b15a5f03e6 work through the diaspora_v2 outgoing status posts 2017-05-28 19:17:46 -07:00
zotlabs
7738083f3e replace really old example widgets with pointer to current widget list 2017-05-28 16:02:10 -07:00
git-marijus
98fe474276 Merge pull request #796 from dawnbreak/QA_testing
Testing HTML 2 Markdown conversion.
2017-05-28 18:00:58 +02:00
Mario Vavti
03b8ecd0de fix update_r1189() for mysql and postgres 2017-05-28 17:54:05 +02:00
Mario Vavti
bb669ccd2c update changelog for 2.4 2017-05-28 13:02:00 +02:00
Mario Vavti
e9d924b5d7 update changelog for 2.4 2017-05-28 13:01:20 +02:00
zotlabs
143601374c Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-27 16:22:51 -07:00
Klaus Weidenbach
586c72fbe5 Don't drop PHP5 support yet.
Scalar Type Hints and Return Type Declarations were introduced in PHP7.
2017-05-27 22:44:54 +02:00
git-marijus
8bb832e23f Merge pull request #798 from zotlabs/pagetitlefix
hubzilla issue #795
2017-05-27 19:24:15 +02:00
zotlabs
184f522d5f hubzilla issue #795 2017-05-27 02:22:36 -07:00
Klaus Weidenbach
0f0e23445a 🔨 Add html2markdown unit tests.
A tiny refactoring to make HTML 2 markdown conversion testable.
Add some unit tests to check the behavior of the now used HTML2Markdown library.
There are some differences compared to the old pixel418/markdownify library.
2017-05-27 00:19:01 +02:00
zotlabs
1b75e4de0d hubzilla issue #795 2017-05-26 14:52:45 -07:00
zotlabs
2deafa0dea update link to account roles help on new_channel page 2017-05-25 23:03:55 -07:00
zotlabs
938a621810 update the link to account roles help on register page 2017-05-25 23:02:48 -07:00
zotlabs
583a047e83 looks like a commit was lost someplace, but I'll re-do it later (convert sql schema files to default integers to int values); in any event change all the mysql strings that were 255 maxlength to 191 maxlength in case they get used as indexes down the line 2017-05-25 22:50:16 -07:00
zotlabs
57edfa7ae8 put back obsolete permission fields in abook and channel schema files so we can restore the old data without choking when upgrading the table type 2017-05-25 22:10:01 -07:00
zotlabs
b4da2d35bf start using the abook_not_here flag (requires changes in addons, not easily portable to hubzilla) 2017-05-25 13:37:13 -07:00
zotlabs
fd357f87be only store search info for text filetypes when updating the documentation indexes 2017-05-24 22:34:52 -07:00
zotlabs
df8c69f73b some minor help cleanup - add '-/foo' override of language detection 2017-05-24 22:24:45 -07:00
Klaus Weidenbach
8ce98e38dc ⬆️ Update dev libraries.
phpunit 6.1, behat, etc.
2017-05-24 20:40:47 +02:00
zotlabs
3a00140797 remove php version checks for older ( < 5.4) code incompatibilities 2017-05-23 21:20:40 -07:00
zotlabs
bf580fcc06 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-23 16:14:41 -07:00
Mario Vavti
31d9208172 bump version 2017-05-23 21:53:34 +02:00
zotlabs
508ea9153c this looks like a slightly cleaner solution to the unicode dl issue 2017-05-23 21:52:35 +02:00
zotlabs
6ff16e2651 hubzilla issue #777 2017-05-23 21:52:21 +02:00
zotlabs
da682717ab wiki auto language select to match webpages implementation 2017-05-23 21:51:17 +02:00
zotlabs
647b5d098f apporder style improvement and add to nav menu, also add language awareness to webpages 2017-05-23 21:50:38 +02:00
zotlabs
3a9e5f0f98 schema fixes 2017-05-23 21:48:58 +02:00
zotlabs
50c9aec436 some issues with the app order template logic 2017-05-23 21:44:57 +02:00
zotlabs
ec7ecc285e apporder module and all the associated backend stuff to make it work; probably needs a bit of UI cleanup and a link to it from somewhere 2017-05-23 21:44:25 +02:00
git-marijus
dea0d07b9a Merge pull request #794 from dawnbreak/dev
Replace Mardownify library with html-to-markdown library.
2017-05-23 21:39:47 +02:00
zotlabs
357e7af6ad add 'apps' app 2017-05-23 01:18:34 -07:00
zotlabs
53057830e0 wiki auto language select to match webpages implementation 2017-05-22 20:18:47 -07:00
zotlabs
7ae0317b6a apporder style improvement and add to nav menu, also add language awareness to webpages 2017-05-22 17:07:34 -07:00
Klaus Weidenbach
547df2219a Replace Mardownify library with html-to-markdown library. 2017-05-23 00:32:11 +02:00
zotlabs
1c8c7479b8 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-22 03:51:58 -07:00
zotlabs
36a960adec schema fixes 2017-05-22 00:57:56 -07:00
zotlabs
07ee4984cb some issues with the app order template logic 2017-05-21 22:42:22 -07:00
zotlabs
e4448423fb apporder module and all the associated backend stuff to make it work; probably needs a bit of UI cleanup and a link to it from somewhere 2017-05-21 22:23:36 -07:00
Mario Vavti
50e9d02458 bump version 2017-05-20 23:04:18 +02:00
Mario Vavti
45233dd53c 2.4RC1.1 2017-05-20 23:03:06 +02:00
zotlabs
1a9fdc565c resolve merge conflict 2017-05-20 22:59:12 +02:00
zotlabs
e32e616031 resolve merge conflict 2017-05-20 22:57:38 +02:00
Mario Vavti
b14fb1759d 2.4RC1 2017-05-20 22:24:54 +02:00
zotlabs
abd757d356 always wonder about people who say "do as I say, not as I do..." 2017-05-20 22:22:17 +02:00
zotlabs
28645b492e one file hadn't yet been saved when doing pull request 2017-05-20 22:21:34 +02:00
zotlabs
3919c8f79f abook_not_here flag created to indicate singleton connections which are connected to this channel but not on this hub. abook_instance enumerates which hubs the connections is valid, but we ultimately need something more efficiently searchable to decide what operations are supported w/r/t this connection in the context of this hub. This flag is ignored during sync to clones although the code to set it correctly during channel creation, import, and sync has not yet been implemented. 2017-05-20 22:21:22 +02:00
zotlabs
803be11bbc Do not yet understand why on postgres, app['plugin'] gets set to 3 linefeeds but this prevents it from rendering 2017-05-20 22:07:11 +02:00
Mario Vavti
335de94343 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-05-19 10:48:23 +02:00
Mario Vavti
b62463107c smileybutton fixes 2017-05-19 10:48:04 +02:00
Mario Vavti
93ce1661af smileybutton fixes 2017-05-19 10:47:33 +02:00
Mario Vavti
f59ed38a38 some styling for system notifications 2017-05-19 09:30:30 +02:00
Mario Vavti
3fad69e5ca some styling for system notifications 2017-05-18 14:57:10 +02:00
Mario Vavti
005db13c45 silence php warning during install 2017-05-17 11:27:32 +02:00
Mario Vavti
d7ddafb39f css first aid for mod setup 2017-05-17 11:27:14 +02:00
Mario Vavti
3fe7bf27de Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-05-17 11:25:33 +02:00
Mario Vavti
4b718929df css first aid for mod setup 2017-05-17 11:25:14 +02:00
Mario Vavti
a44c908147 silence php warning during install 2017-05-17 11:24:27 +02:00
root
1bf37305a8 Implemented switch statement logic in Comanche layout parser. 2017-05-17 10:08:34 +02:00
git-marijus
ed4d589077 Merge pull request #783 from zotlabs/app_order
provide mechanism to arbitrarily sort the nav tray apps, currently th…
2017-05-17 10:06:14 +02:00
git-marijus
47a080d79c Merge pull request #782 from dawnbreak/QA_testing
👷 Documentation Permissions.php.
2017-05-17 10:04:52 +02:00
git-marijus
66a8e5ddbb Merge pull request #780 from zotlabs/docbug
no bug reporting info in docs
2017-05-17 10:03:07 +02:00
git-marijus
8c39ed61a9 Merge pull request #778 from beardyunixer/dev
Update nginx
2017-05-17 10:02:35 +02:00
git-marijus
a12d403981 Merge pull request #774 from zotlabs/pgapps
Do not yet understand why on postgres, app['plugin'] gets set to 3 li…
2017-05-17 09:57:50 +02:00
git-marijus
ccf0274d13 Merge pull request #775 from zotlabs/pgstuff
always wonder about people who say "do as I say, not as I do..."
2017-05-17 09:57:32 +02:00
zotlabs
21103f8bc4 provide mechanism to arbitrarily sort the nav tray apps, currently the preferred order list needs to be manually created 2017-05-16 23:00:28 -07:00
zotlabs
a1ba44db72 provide mechanism to arbitrarily sort the nav tray apps, currently the preferred order list needs to be manually created 2017-05-16 22:57:34 -07:00
zotlabs
3c22a7b482 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-16 17:51:00 -07:00
Klaus Weidenbach
d056b13e14 👷 Documentation Permissions.php.
Also add some phpunit tests for this class, but there are some problems
yet with mocking static functions.
2017-05-17 01:46:31 +02:00
Mario Vavti
7a39ccf7bb regenerate optimized autoload files 2017-05-16 19:03:37 +02:00
zotlabs
3be90c2e45 include attach.php here (boot.php) instead of each file that uses it. Eventually this needs to move to an autoloader. 2017-05-16 18:45:48 +02:00
zotlabs
60caecffdd include attach.php here (boot.php) instead of each file that uses it. Eventually this needs to move to an autoloader. 2017-05-16 18:45:33 +02:00
zotlabs
df3eb562f0 danger - do not use 'char(n)' with postgres it creates a thing called a bpchar which is different than a normal text field in subtle ways. 2017-05-15 22:58:13 -07:00
zotlabs
c4b247e75e no bug reporting info in docs 2017-05-15 20:38:27 -07:00
zotlabs
d9fdd0ce36 no bug reporting info in docs 2017-05-15 20:37:29 -07:00
Thomas Willingham
226fcac72e Update nginx 2017-05-15 10:55:33 +01:00
zotlabs
5c8a911c93 this looks like a slightly cleaner solution to the unicode dl issue 2017-05-14 21:04:34 -07:00
zotlabs
2cc1844d97 hubzilla issue #777 2017-05-14 20:51:15 -07:00
zotlabs
3916d5c567 always wonder about people who say "do as I say, not as I do..." 2017-05-14 18:37:36 -07:00
zotlabs
ef51c1c2b2 Do not yet understand why on postgres, app['plugin'] gets set to 3 linefeeds but this prevents it from rendering 2017-05-14 18:17:54 -07:00
zotlabs
f637faf0d2 Do not yet understand why on postgres, app['plugin'] gets set to 3 linefeeds but this prevents it from rendering 2017-05-14 18:02:22 -07:00
zotlabs
d010f4fcae issue #769 2017-05-12 10:16:58 +02:00
Mario Vavti
d5e436d15b Empty ACL should not result in no ACL when uploading a file 2017-05-12 10:16:12 +02:00
Mario Vavti
18ee1ba589 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-05-12 10:04:00 +02:00
git-marijus
795b39250f Merge pull request #770 from zotlabs/mast496
consolidate and simplify the generation of activitystreams persons, a…
2017-05-12 10:02:33 +02:00
git-marijus
ae89f1b3b3 Merge pull request #771 from zotlabs/filesync
issue #769
2017-05-12 10:02:12 +02:00
zotlabs
cbe600369c Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-11 20:59:50 -07:00
zotlabs
1de1b58a08 consolidate email validation checks 2017-05-11 19:01:04 -07:00
zotlabs
4f577cbdeb issue #769 2017-05-11 18:34:28 -07:00
zotlabs
c2bd7d1e56 issue #769 2017-05-11 18:32:34 -07:00
zotlabs
e501289a55 consolidate and simplify the generation of activitystreams persons, add a couple more fields hoping eventually Mastodon will accept legal follow activities without choking on them. Requires an update of plugins also. 2017-05-11 17:39:26 -07:00
Mario Vavti
1ebc9de1e6 Empty ACL should not result in no ACL when uploading a file 2017-05-11 13:31:36 +02:00
git-marijus
f34b060e23 Merge pull request #767 from zotlabs/realm_ac
send directory realm_token for navbar autocomplete searches - if conf…
2017-05-11 10:41:57 +02:00
zotlabs
84064b90a6 disable oauth2 until I can get back to it - it's throwing typos 2017-05-10 22:15:01 -07:00
zotlabs
08e21fd0b8 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-10 17:11:17 -07:00
zotlabs
1077686bda send directory realm_token for navbar autocomplete searches - if configured 2017-05-10 17:02:56 -07:00
Mario Vavti
582d075c45 missing clearfix 2017-05-10 17:39:49 +02:00
Mario Vavti
b60f1085db missing clearfix 2017-05-10 17:39:15 +02:00
phellmes
a3bdfc1580 Update DE translation strings 2017-05-10 14:54:01 +02:00
git-marijus
76a8711570 Merge pull request #766 from phellmes/dev
Update DE translation strings (also for 2.4RC)
2017-05-10 14:52:41 +02:00
zotlabs
87b424123b don't allow html in plugin comment blocks 2017-05-10 14:50:22 +02:00
zotlabs
9a66d47d54 use correct data type 2017-05-10 14:50:16 +02:00
zotlabs
5a0712f766 zot protocol doco updates 2017-05-10 14:50:11 +02:00
zotlabs
660ea89521 handle mastodon urls in markdown/bbcode conversion 2017-05-10 14:50:06 +02:00
zotlabs
60204becf4 don't allow html in plugin comment blocks 2017-05-10 14:49:32 +02:00
zotlabs
032216153f use correct data type 2017-05-10 14:49:07 +02:00
zotlabs
dac4447e33 zot protocol doco updates 2017-05-10 14:48:49 +02:00
zotlabs
fa94c0a65b handle mastodon urls in markdown/bbcode conversion 2017-05-10 14:48:04 +02:00
zotlabs
76d78571d6 don't allow html in plugin comment blocks 2017-05-09 20:33:25 -07:00
zotlabs
556407408f Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-09 19:12:23 -07:00
zotlabs
a862bf488c use correct data type 2017-05-09 19:03:16 -07:00
zotlabs
f629dc51aa zot protocol doco updates 2017-05-09 19:02:02 -07:00
phellmes
96cc6a916d Update DE translation strings 2017-05-09 16:00:02 +02:00
Mario Vavti
6c0e0b3eae make all label bold 2017-05-09 10:25:12 +02:00
Mario Vavti
8a129610da make all label bold 2017-05-09 10:23:51 +02:00
Manuel Jiménez Friaza
8688753522 Updated the Spanish translation 2017-05-09 10:23:12 +02:00
git-marijus
9a0400c93a Merge pull request #763 from anaqreon/dev
Implemented switch statement logic in Comanche layout parser.
2017-05-09 10:16:11 +02:00
git-marijus
13b5eb0ad8 Merge pull request #762 from mjfriaza/dev
Updated the Spanish translation
2017-05-09 10:07:51 +02:00
zotlabs
e059efb4c4 handle mastodon urls in markdown/bbcode conversion 2017-05-08 19:10:08 -07:00
root
0be74c6551 Implemented switch statement logic in Comanche layout parser. 2017-05-08 20:55:31 -04:00
Manuel Jiménez Friaza
6fe6e1596f Updated the Spanish translation 2017-05-08 13:12:26 +02:00
zotlabs
0e7c3951a6 get rid of edit activities 2017-05-08 11:12:27 +02:00
zotlabs
40c8549cf5 get rid of edit activities 2017-05-08 11:12:09 +02:00
zotlabs
a7ea370ec3 cover photo was unintentionally disabled when block_public in effect 2017-05-08 11:11:50 +02:00
zotlabs
b6c6f06537 cover photo was unintentionally disabled when block_public in effect 2017-05-08 11:11:35 +02:00
zotlabs
2e531c103f error 2017-05-08 02:00:00 -07:00
zotlabs
1a05939e0b cleanup of last checkin 2017-05-07 18:05:29 -07:00
zotlabs
acb8e85b61 cover photo was unintentionally disabled when block_public in effect 2017-05-07 17:25:38 -07:00
zotlabs
8c38841a4d Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-07 14:43:38 -07:00
zotlabs
2c2ee706ac get rid of edit activities 2017-05-07 14:40:11 -07:00
Klaus Weidenbach
b7df4de4b7 👷🐛 Import table structure in TravisCI.
Fix a syntax error in schema_postres.sql which was discovered while
working on this.
2017-05-07 15:09:53 +02:00
git-marijus
b237425c94 Merge pull request #760 from anaqreon/2.4RC
Mail message mimetype was getting set as the subject due to wrong var…
2017-05-07 15:07:26 +02:00
git-marijus
bd3708870d Merge pull request #756 from dawnbreak/QA_testing
👷🐛 Import table structure in TravisCI.
2017-05-07 15:06:45 +02:00
git-marijus
2aa699d03e Merge pull request #761 from anaqreon/dev
Mail subject bug fix
2017-05-07 15:05:50 +02:00
Andrew Manning
1d20b2603a Mail subject bug fix 2017-05-07 08:52:26 -04:00
Andrew Manning
6576f9c0c3 Mail message mimetype was getting set as the subject due to wrong variable set order. 2017-05-07 07:29:45 -04:00
zotlabs
f840082aae Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-05 16:58:46 -07:00
Klaus Weidenbach
f162508ad1 👷🐛 Import table structure in TravisCI.
Fix a syntax error in schema_postres.sql which was discovered while
working on this.
2017-05-06 01:07:15 +02:00
Mario Vavti
3ccefa20e8 collapse sysapps if viewing a remote channel 2017-05-05 16:33:28 +02:00
Mario Vavti
00b19ccee0 collapse sysapps if viewing a remote channel 2017-05-05 16:32:20 +02:00
Mario Vavti
54d55fb62f css hack to make remote channel menu header look in line with the rest if in collapsed state 2017-05-05 14:41:55 +02:00
Mario Vavti
dcc8a94d07 css hack to make remote channel menu header look in line with the rest if in collapsed state 2017-05-05 14:40:35 +02:00
Mario Vavti
5dd501e0ea css fix 2017-05-05 12:58:27 +02:00
Mario Vavti
af7a3fc2ea css fix 2017-05-05 12:57:41 +02:00
zotlabs
4b4b06bec5 markdown autolinks - hubzilla bug #752 2017-05-05 12:46:12 +02:00
Klaus Weidenbach
54259593ea 💡 Add Doxygen fix for @var member variable documentation.
Add an input filter to Doxygen to parse @var class member variable
documentation, so it is bit more compatible how anybody else interpretes
it.
2017-05-05 12:45:34 +02:00
Klaus Weidenbach
73cb270b14 💡 correct some Doxygen syntax mistakes. 2017-05-05 12:44:23 +02:00
git-marijus
3d1df8337e Merge pull request #751 from dawnbreak/docu
💡 Add Doxygen fix for @var member variable documentation.
2017-05-05 12:33:58 +02:00
git-marijus
f08001a5a6 Merge pull request #753 from zotlabs/mdauto
markdown autolinks - hubzilla bug #752
2017-05-05 12:33:39 +02:00
zotlabs
ecbba93784 markdown autolinks - hubzilla bug #752 2017-05-05 02:28:38 -07:00
zotlabs
47ebddf99f markdown autolinks - hubzilla bug #752 2017-05-05 02:27:24 -07:00
zotlabs
c70ac572fa do away with single delivery (delivery from clones to singleton networks attached to other clones) 2017-05-04 22:08:12 -07:00
zotlabs
f0a2747d80 make service_plink pluggable 2017-05-04 21:55:56 -07:00
zotlabs
67918033f9 oauth2 dynamic client registration 2017-05-04 20:58:19 -07:00
zotlabs
93335cdb0e typo 2017-05-04 19:30:49 -07:00
zotlabs
e308c3d34a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-05-04 19:20:29 -07:00
zotlabs
977677d005 typo 2017-05-04 19:19:24 -07:00
zotlabs
faf9814788 typo 2017-05-04 19:18:54 -07:00
Klaus Weidenbach
eeb9103e26 💡 correct some Doxygen syntax mistakes. 2017-05-05 00:23:57 +02:00
Klaus Weidenbach
1f6386bd60 💡 Add Doxygen fix for @var member variable documentation.
Add an input filter to Doxygen to parse @var class member variable
documentation, so it is bit more compatible how anybody else interpretes
it.
2017-05-04 21:58:25 +02:00
Mario Vavti
5c7acf4807 update sabredav to version 3.2.2 2017-05-04 10:51:39 +02:00
Mario Vavti
a92b9b7adb Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-05-04 10:12:05 +02:00
Klaus Weidenbach
b4529229d2 ⬆️ Update SimplePie library to 1.5.
There is a new stable release, so upgrade from the dev branch to the new
1.5 release.
2017-05-04 10:07:29 +02:00
git-marijus
bc776a9534 Merge pull request #750 from zotlabs/abnothere
abook_not_here flag created to indicate singleton connections which a…
2017-05-04 09:59:35 +02:00
git-marijus
45c64c2d2e Merge pull request #749 from anaqreon/dev
German translations for demohub
2017-05-04 09:56:45 +02:00
git-marijus
73f41023f3 Merge pull request #748 from anaqreon/2.4RC
German translations for demohub
2017-05-04 09:56:15 +02:00
git-marijus
139c1a956f Merge pull request #747 from dawnbreak/simplepie
⬆️ Update SimplePie library to 1.5.
2017-05-04 09:54:32 +02:00
zotlabs
b08af13872 oauth2/oidc testing (please do not port - this requires several extra DB tables to work) 2017-05-03 22:37:06 -07:00
zotlabs
1e59d9ade5 one file hadn't yet been saved when doing pull request 2017-05-03 19:02:20 -07:00
zotlabs
519aef7ff5 abook_not_here flag created to indicate singleton connections which are connected to this channel but not on this hub. abook_instance enumerates which hubs the connections is valid, but we ultimately need something more efficiently searchable to decide what operations are supported w/r/t this connection in the context of this hub. This flag is ignored during sync to clones although the code to set it correctly during channel creation, import, and sync has not yet been implemented. 2017-05-03 18:50:32 -07:00
zotlabs
05cbdc6915 cleanup fallback directory list 2017-05-03 18:30:11 -07:00
Andrew Manning
8d5e028b5b Add contributor to credits 2017-05-03 20:56:55 -04:00
Andrew Manning
153ffbe558 Add contributor to credits 2017-05-03 20:56:14 -04:00
Andrew Manning
394352d882 German translations for demohub 2017-05-03 20:52:00 -04:00
zotlabs
c0edfee224 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-03 17:46:51 -07:00
Andrew Manning
06d2d31777 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-05-03 20:44:54 -04:00
Andrew Manning
535691a05c German translations for demohub 2017-05-03 20:44:23 -04:00
Klaus Weidenbach
d2058ee151 ⬆️ Update SimplePie library to 1.5.
There is a new stable release, so upgrade from the dev branch to the new
1.5 release.
2017-05-04 00:58:02 +02:00
Mario Vavti
263cfe2538 bump version 2017-05-03 14:46:45 +02:00
Mario Vavti
717190975f bump version 2017-05-03 14:37:50 +02:00
Mario Vavti
d6a3f7765a add check for php zip extension 2017-05-03 12:29:26 +02:00
Andrew Manning
f9d40adb18 Update INSTALL.txt
The webpage element portation tools need the zip extension, such as the `php7.0-zip` package on Debian.
2017-05-03 11:56:33 +02:00
git-marijus
087f9784e3 Merge pull request #741 from redmatrix/anaqreon-patch-2
Update INSTALL.txt
2017-05-03 11:53:25 +02:00
git-marijus
3bd74aabaa Merge pull request #742 from dawnbreak/QA_testing
💡 Add Unit Tests for AccessList class.
2017-05-03 11:49:43 +02:00
zotlabs
4933aef543 more cleanup 2017-05-02 22:40:31 -07:00
zotlabs
0e5d824bff finish the red conversion of the markdown utilities considering their relation to protocol plugins. 2017-05-02 22:10:53 -07:00
zotlabs
b2d2dcc7fe more code refactoring to put external protocol dependencies in plugins. 2017-05-02 20:17:47 -07:00
zotlabs
7acb068590 profile_sidebar hook ignored the updated html content 2017-05-02 18:24:18 -07:00
zotlabs
80ec92ce8d Revert "move theme specific files to theme dir"
This reverts commit e332d1074f.
2017-05-02 12:46:50 -07:00
zotlabs
83c4dd6bda typo 2017-05-01 22:56:11 -07:00
zotlabs
e332d1074f move theme specific files to theme dir 2017-05-01 21:10:04 -07:00
zotlabs
42ed73ed4a add cdav files 2017-05-01 21:07:11 -07:00
zotlabs
5ed5c76d3f new function Hook::register_array() to bulk register several hooks from the same file with default settings 2017-05-01 18:02:00 -07:00
zotlabs
fe2288a88f Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-05-01 16:42:16 -07:00
Klaus Weidenbach
8f0a0add1e 💡 Add Unit Tests for AccessList class.
Also some Doxygen docu for this class.
2017-05-01 22:23:32 +02:00
Mario Vavti
3645eb18f8 version and strings 2017-05-01 15:43:03 +02:00
Mario Vavti
610e80a19b update bs4-dev 2017-05-01 15:21:02 +02:00
zotlabs
d8460f147b use hostname, not url 2017-05-01 15:14:25 +02:00
zotlabs
71e508c7cd authenticate onepoll so we can receive private posts/comments in zotfeed; if local server bypass the network access and invoke zotfeed directly. 2017-05-01 15:14:10 +02:00
zotlabs
d3fcef43f8 ugly postgres fixes 2017-05-01 15:13:53 +02:00
zotlabs
cbc906c438 more work on client side e2ee 2017-05-01 15:12:43 +02:00
zotlabs
d57169fcf6 profile_tabs is now channel_apps (except the original was left behind as the gitwiki addon still uses it). A couple of things were modernised but basic functionality is the same as the latest revisions to the original. 2017-05-01 15:11:51 +02:00
zotlabs
fdf639e1fb more work client mail crypto 2017-05-01 15:10:42 +02:00
zotlabs
25760e30f9 make mail_store() safe for postgres or mysql5.7 - although this interface needs to be refactored in the future 2017-05-01 15:10:08 +02:00
zotlabs
3cdcb121c5 use hostname, not url 2017-04-30 19:40:17 -07:00
zotlabs
968209471e authenticate onepoll so we can receive private posts/comments in zotfeed; if local server bypass the network access and invoke zotfeed directly. 2017-04-30 18:24:48 -07:00
zotlabs
d71a53f24e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-30 16:50:10 -07:00
zotlabs
c845d20352 ugly postgres fixes 2017-04-30 16:03:01 -07:00
Andrew Manning
11e888fb7c Update INSTALL.txt
The webpage element portation tools need the zip extension, such as the `php7.0-zip` package on Debian.
2017-04-30 13:49:53 -04:00
zotlabs
230617208b more work on client side e2ee 2017-04-29 16:30:11 -07:00
Andrew Manning
e99be61d49 Reformatted Webpages.php to clean up whitespace, where there was a mixture of spaces and tabs for indentation. No other changes made. 2017-04-29 12:56:25 -04:00
Andrew Manning
635b8ff73a Update api_zot.bb
Fix incorrect parameter name
2017-04-29 12:42:46 -04:00
git-marijus
c9daafc887 Merge pull request #739 from zotlabs/mast35
update feedutils with as:author changes, also update tests
2017-04-28 09:28:22 +02:00
zotlabs
033cf61380 profile_tabs is now channel_apps (except the original was left behind as the gitwiki addon still uses it). A couple of things were modernised but basic functionality is the same as the latest revisions to the original. 2017-04-27 22:37:51 -07:00
zotlabs
70e17f9194 more work client mail crypto 2017-04-27 20:22:28 -07:00
zotlabs
89e7e5e4fb make mail_store() safe for postgres or mysql5.7 - although this interface needs to be refactored in the future 2017-04-27 20:08:38 -07:00
zotlabs
ab32372f8f update feedutils with as:author changes, also update tests 2017-04-27 16:50:37 -07:00
zotlabs
2778e63d6c issues from hubzilla:#737 2017-04-27 14:33:01 +02:00
git-marijus
d16fbda0f8 Merge pull request #736 from zotlabs/feedfck
provide a broken feed as a separate module
2017-04-27 09:49:13 +02:00
zotlabs
e8ea8d203d more client-side mail privacy work 2017-04-26 23:05:30 -07:00
zotlabs
ac670856f6 provide a broken feed as a separate module 2017-04-26 20:14:45 -07:00
zotlabs
88149f56bb Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-26 20:11:12 -07:00
zotlabs
6fcfab3488 issues from hubzilla:#737 2017-04-26 19:47:05 -07:00
zotlabs
dab3e90353 provide a broken feed as a separate module 2017-04-26 13:26:50 -07:00
Mario Vavti
1c304eb8ba make mastodon happy args 2017-04-26 22:16:23 +02:00
Mario Vavti
d1c84ad9f0 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-04-26 14:20:16 +02:00
git-marijus
c39a680096 Merge pull request #733 from zotlabs/etwoeemail
Etwoeemail
2017-04-26 14:19:54 +02:00
git-marijus
e8ddee284c Merge pull request #731 from anaqreon/dev
When template "none" is used in a webpage layout, then the contents o…
2017-04-26 14:18:42 +02:00
git-marijus
abd7cfdc97 Merge pull request #734 from zotlabs/emojionelicense
Emojionelicense
2017-04-26 14:17:32 +02:00
zotlabs
c904bd3a62 The rest of the library and backend changes to support client-side e2ee and deprecate previous uses of item_obscured. 2017-04-26 14:16:07 +02:00
zotlabs
d48bda88e6 In the rare case where a default channel is not selected but channels actually exist, you should be able to visit /manage and set a default channel. Originally I believe this may have been possible but the ability was lost when delegation was added to the interface - which requires an active channel. Remove the active channel restriction so that the rest of the interface works (channel selections can be made and the ability to set a default is provided) however delegation info isn't presented unless there is an active channel. 2017-04-26 14:13:45 +02:00
zotlabs
4ca24f114b support reverse magic-auth in oembed requests. 2017-04-26 14:12:52 +02:00
zotlabs
7667c630a4 provide a broken feed for services which require a broken feed 2017-04-26 14:12:11 +02:00
zotlabs
97458b2885 make it easier to hook into feed headers in the future 2017-04-26 14:11:55 +02:00
zotlabs
803bff4043 smilies - add param to only list default emoticons 2017-04-26 14:09:45 +02:00
zotlabs
17aa8da9f0 Attribution is required 2017-04-26 01:08:03 -07:00
zotlabs
7d5ee81628 database support for client side e2ee for private mail 2017-04-25 21:52:24 -07:00
zotlabs
b88be137ca provide a broken feed for services which require a broken feed 2017-04-25 20:48:38 -07:00
zotlabs
195eb71200 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-25 19:43:01 -07:00
zotlabs
f36e384ed7 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-04-25 19:42:42 -07:00
zotlabs
3a3bd582b1 mostly text formatting changes 2017-04-25 19:42:06 -07:00
zotlabs
a342a5f8e0 smilies - add param to only list default emoticons 2017-04-25 16:36:37 -07:00
Mario Vavti
42d139ee82 Revert "fix the query of last pullrequest"
This reverts commit bda9a833ba.
2017-04-24 09:05:33 +02:00
zotlabs
f1c6fd08c4 database upgrade 2017-04-23 20:28:04 -07:00
Andrew Manning
8ad2b3e7a1 When template "none" is used in a webpage layout, then the contents of the page should be the sole output, with no other code before or after the page element content. 2017-04-23 21:22:40 -04:00
zotlabs
a84695bb86 if there is no site record, site_dead won't be 0, in a left join it will in fact be null. As long as it isn't 1, we should attempt delivery. 2017-04-23 17:13:38 -07:00
zotlabs
c2ec3b0bf4 if there is no site record, site_dead won't be 0, in a left join it will in fact be null. As long as it isn't 1, we should attempt delivery. 2017-04-23 16:38:44 -07:00
Mario Vavti
bda9a833ba fix the query of last pullrequest 2017-04-23 17:22:28 +02:00
Mario Vavti
ac12f923ea Revert "Revert "if there is no site record, site_dead won't be 0, in a left join it will in fact be null. As long as it isn't 1, we should attempt delivery.""
This reverts commit b6be0e1b99.
2017-04-23 16:05:14 +02:00
Mario Vavti
b6be0e1b99 Revert "if there is no site record, site_dead won't be 0, in a left join it will in fact be null. As long as it isn't 1, we should attempt delivery."
This reverts commit 42f5291f69.
2017-04-23 12:58:36 +02:00
git-marijus
01809b08c9 Merge pull request #730 from zotlabs/nullsite
if there is no site record, site_dead won't be 0, in a left join it w…
2017-04-23 12:21:19 +02:00
zotlabs
42f5291f69 if there is no site record, site_dead won't be 0, in a left join it will in fact be null. As long as it isn't 1, we should attempt delivery. 2017-04-22 23:15:00 -07:00
git-marijus
1d271ee771 Merge pull request #728 from zotlabs/typo1
Typo1
2017-04-21 09:24:58 +02:00
zotlabs
1d19ea4a33 typo - this time the correct repo 2017-04-20 21:31:44 -07:00
zotlabs
0d9b6ebc36 Revert "typo" - wrong repo
This reverts commit d9a48092e6.
2017-04-20 21:30:29 -07:00
zotlabs
d9a48092e6 typo 2017-04-20 21:26:36 -07:00
zotlabs
02ea713d6a make it easier to hook into feed headers in the future 2017-04-20 21:25:37 -07:00
zotlabs
94f15e3551 The rest of the library and backend changes to support client-side e2ee and deprecate previous uses of item_obscured. 2017-04-20 20:19:15 -07:00
zotlabs
2d90b831f0 In the rare case where a default channel is not selected but channels actually exist, you should be able to visit /manage and set a default channel. Originally I believe this may have been possible but the ability was lost when delegation was added to the interface - which requires an active channel. Remove the active channel restriction so that the rest of the interface works (channel selections can be made and the ability to set a default is provided) however delegation info isn't presented unless there is an active channel. 2017-04-20 19:52:50 -07:00
git-marijus
35110b6327 Merge pull request #723 from zotlabs/followfeed
follow_from_feed issue when called from push
2017-04-20 10:08:10 +02:00
zotlabs
f52c670c05 support reverse magic-auth in oembed requests. 2017-04-19 20:48:10 -07:00
zotlabs
f3adc8d738 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-19 17:55:07 -07:00
zotlabs
40f6280c48 follow_from_feed issue when called from push 2017-04-19 17:53:50 -07:00
zotlabs
1c6d2857cb follow_from_feed issue when called from push 2017-04-19 17:52:15 -07:00
Mario Vavti
09967598e1 order wiki pages by creation date 2017-04-19 10:51:50 +02:00
zotlabs
d3feb93619 typo 2017-04-19 10:25:57 +02:00
Mario Vavti
0bba5cdc30 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-04-19 10:23:52 +02:00
zotlabs
a3b1eec548 backend infrastructure for 'channel protection password'; which will be used to optionally encrypt export files and resolve channel/identity ownership/hijacking disputes 2017-04-19 09:59:50 +02:00
zotlabs
f174c4fccb don't allow any null fields in notify creation 2017-04-19 09:58:31 +02:00
zotlabs
32eead1542 webfinger cleanup 2017-04-19 09:58:13 +02:00
git-marijus
1701e100cf Merge pull request #722 from zotlabs/env_prv
envelope privacy
2017-04-19 09:51:08 +02:00
zotlabs
397fef519c give the item_obscured flag a new lease on life by using it to designate third party client-side e2ee or binary content which can only be downloaded and not viewed directly on the web (as a side effect this also allows binary files to be submitted as activities/content). The content display is suppressed and replaced with a download button. This is unfinished but harmless to backport while work is in progress unless told otherwise. Future development will take care of the remaining loose ends. 2017-04-18 21:18:49 -07:00
zotlabs
53bd0146bb oembed cache: don't store the url (which may need to be truncated), store a hash instead. This will allow us to convert the table to utf8mb4 without running into mysql key length restrictions as well as dealing with the potential ambiguity of truncated urls. 2017-04-18 18:31:10 -07:00
zotlabs
a037758245 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-18 18:18:53 -07:00
zotlabs
ffce1fc177 envelope privacy 2017-04-18 17:29:11 -07:00
zotlabs
368f88740a envelope privacy 2017-04-18 17:26:50 -07:00
Mario Vavti
ab369ab91d more lock carets 2017-04-18 14:29:56 +02:00
Mario Vavti
ddddf29f82 update to bs-git 2017-04-18 14:20:35 +02:00
Mario Vavti
fdc36fb140 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-04-18 14:15:52 +02:00
Mario Vavti
9ce5e25507 the caret beside the lock seems a little overkill 2017-04-18 14:15:38 +02:00
git-marijus
0bc4de2f34 Merge pull request #721 from zotlabs/client_e2ee
allow downloading via viewsrc to support client side e2ee
2017-04-18 13:57:01 +02:00
zotlabs
e3dc242a3c allow downloading via viewsrc to support client side e2ee 2017-04-17 20:48:57 -07:00
zotlabs
bff2ed3837 allow downloading via viewsrc to support client side e2ee 2017-04-17 20:45:53 -07:00
zotlabs
9c31e26cf1 include attach.php here (boot.php) instead of each file that uses it. Eventually this needs to move to an autoloader. 2017-04-17 17:54:50 -07:00
zotlabs
7a31c039fb Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-17 16:04:17 -07:00
Mario Vavti
7cca2b7fb0 missing clearfix 2017-04-16 12:09:09 +02:00
Mario Vavti
10e5cf01cc css fixes 2017-04-16 10:59:26 +02:00
git-marijus
384c19e54e Merge pull request #717 from dawnbreak/simplepie
⬆️ Update SimplePie library.
2017-04-15 17:40:45 +02:00
Klaus Weidenbach
7d5e7bf6c8 We do not parse the body in discover_by_url(), so no need to preserve iframes in SimplePie. 2017-04-15 15:20:14 +02:00
Klaus Weidenbach
b6459e6172 ⬆️ Update SimplePie library.
As a follow up to issue #699 update SimplePie from 1.2.1-dev (around
6years old) to current git master (1.4.4-dev). We use the master branch
until the next release because it contains our patch for enclosure
titles already. The other patches in the library from us can be done by
configuring the SimplePie object in our code instead.
Used composer to manage this library and use class autoloading.
Add some unit tests for include/feedutils.php, but the interesting parts
are unfortunately not testable with the current code.
2017-04-15 00:41:42 +02:00
git-marijus
b4f65840d1 Merge pull request #716 from dawnbreak/docu
Some documentation for include/network.php and some fixes.
2017-04-14 11:54:20 +02:00
Klaus Weidenbach
b266ade4fe Some documentation for include/network.php and some fixes.
Some variables had wrong names and have never been used.
2017-04-14 00:21:54 +02:00
Mario Vavti
0f0fba0e9e missing includes 2017-04-13 23:20:09 +02:00
Mario Vavti
54f25609c9 bs font set might work better for win and mac 2017-04-13 12:28:38 +02:00
Mario Vavti
c48e90a556 bump version 2017-04-13 12:15:20 +02:00
Mario Vavti
e0409386c2 update bs-dev 2017-04-13 12:13:11 +02:00
git-marijus
2aa69257a4 Merge pull request #715 from zotlabs/cpp
backend infrastructure for 'channel protection password'; which will …
2017-04-13 12:08:17 +02:00
zotlabs
60d4b4c4f6 remove fulltext indexes for innodb 2017-04-12 20:21:56 -07:00
zotlabs
4a6a06fdc0 change default database settings 2017-04-12 20:20:46 -07:00
zotlabs
c631da7b0d whitespace 2017-04-12 19:25:46 -07:00
zotlabs
9d425b4727 typo 2017-04-12 18:48:30 -07:00
zotlabs
07d62bc111 typo 2017-04-12 18:48:06 -07:00
zotlabs
91d0f87181 make sure the new fields don't leak through sync packets and break older versions 2017-04-12 18:46:41 -07:00
zotlabs
1c32564536 backend infrastructure for 'channel protection password'; which will be used to optionally encrypt export files and resolve channel/identity ownership/hijacking disputes 2017-04-12 18:46:15 -07:00
zotlabs
da07108be9 make sure the new fields don't leak through sync packets and break older versions 2017-04-12 17:43:27 -07:00
zotlabs
d7f4526a00 backend infrastructure for 'channel protection password'; which will be used to optionally encrypt export files and resolve channel/identity ownership/hijacking disputes 2017-04-12 17:32:28 -07:00
zotlabs
63dd6ad01a don't allow any null fields in notify creation 2017-04-11 23:05:56 -07:00
zotlabs
7b173a75e4 correct the mastodon "boost" (aka 'share') author attribution by checking for share activities and pulling the original author info from the activity:object 2017-04-12 07:04:22 +02:00
zotlabs
cb5a047e5d ugly hack to webfinger to allow connections to be made to mastodon servers. 2017-04-12 07:04:10 +02:00
zotlabs
ed5abe5981 some signatures showing as invalid because of recent import_author_zot() changes. 2017-04-12 07:03:20 +02:00
zotlabs
940534e303 webfinger cleanup 2017-04-11 22:02:29 -07:00
zotlabs
1609473e5d correct the mastodon "boost" (aka 'share') author attribution by checking for share activities and pulling the original author info from the activity:object 2017-04-11 20:17:22 -07:00
git-marijus
1f951e2bd3 Merge pull request #714 from mjfriaza/dev
Updated the Spanish translation
2017-04-11 06:55:12 +02:00
zotlabs
ed8e4962b9 ugly hack to webfinger to allow connections to be made to mastodon servers. 2017-04-10 20:31:45 -07:00
Manuel Jiménez Friaza
10f9f9cc80 Updated the Spanish translation 2017-04-10 12:50:42 +02:00
zotlabs
56c8e00b84 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-09 20:27:54 -07:00
zotlabs
063577c19e some signatures showing as invalid because of recent import_author_zot() changes. 2017-04-09 20:25:41 -07:00
git-marijus
57f20c0c22 Merge pull request #713 from zotlabs/photo-zero
Photo zero
2017-04-08 10:15:40 +02:00
zotlabs
e682b93883 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-07 15:00:31 -07:00
zotlabs
a32b097e3c photo size-0 issue 2017-04-07 14:57:29 -07:00
zotlabs
2ebf76cd50 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-04-07 14:56:53 -07:00
zotlabs
65e5894363 photo size-0 issue 2017-04-07 14:56:12 -07:00
zotlabs
dbef80f7bd fix from downstream 2017-04-07 13:37:18 -07:00
git-marijus
06b0c89aee Merge pull request #712 from zotlabs/fr_update
Fr update (Monret)
2017-04-07 21:00:37 +02:00
Mario Vavti
113bfe8fa2 remove redundant string 2017-04-07 18:41:13 +02:00
Mario Vavti
df4e193990 the string was there but the template var was wrong 2017-04-07 13:35:17 +02:00
Mario Vavti
28207c3313 css fixes and missing string 2017-04-07 11:31:10 +02:00
zotlabs
e685c580f2 only log zot_refresh content if json decode was successful. 2017-04-07 11:08:55 +02:00
zotlabs
e6139c9f49 revisit the import_author_zot algorithm yet again. There was one bug that we weren't returning necessary information in the first SQL query - and performance/loading problem if one tries to refresh a dead site. 2017-04-07 11:08:26 +02:00
zotlabs
fac654ec5d remove redundant and non-functional/broken check for successfully cloned channel record which was left over from an earlier method of creating the table; which was deprecated a few months back. 2017-04-07 10:23:02 +02:00
zotlabs
1352e334b1 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-06 20:07:15 -07:00
zotlabs
69ab6639b2 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-04-06 20:05:53 -07:00
zotlabs
d52ee7ae27 only log zot_refresh content if json decode was successful. 2017-04-06 19:55:43 -07:00
zotlabs
ebcfc7f2b2 revisit the import_author_zot algorithm yet again. There was one bug that we weren't returning necessary information in the first SQL query - and performance/loading problem if one tries to refresh a dead site. 2017-04-06 16:24:19 -07:00
zotlabs
b347e1d861 import_author_xchan - since we rarely refresh zot-info for non-connections, force a cache reload once a week to catch things like profile photo updates and location changes 2017-04-06 20:19:27 +02:00
zotlabs
8cb4a29a51 revert grid and bars icon size change 2017-04-05 19:21:27 -07:00
zotlabs
9fb08fb502 make legal_webbie() pluggable - * this should not be merged with federated projects unless the federation drivers make use of the hooks. 2017-04-05 19:08:43 -07:00
zotlabs
6710a77c26 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-05 17:14:11 -07:00
zotlabs
e442fe753e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-04-05 17:11:35 -07:00
zotlabs
a4685e6df3 import_author_xchan - since we rarely refresh zot-info for non-connections, force a cache reload once a week to catch things like profile photo updates and location changes 2017-04-05 17:08:13 -07:00
Mario Vavti
a4f6c24273 we should probably stick to 0.875rem font-size (this is equal to 14px with a default browser setting of 16px) to give 90% of the members a nice desktop experience. The font-awesome icons are only rendered clean with 14px (and multiples) fontsize. They look somewhat unfocused with 16px font-size. The font-size setting has moved to display setting -> custom theme settings. Set it to 1rem there to use the slightly taller default browser size. 2017-04-05 21:34:36 +02:00
Mario Vavti
53853814ff adjust font-size 2017-04-05 21:13:48 +02:00
Mario Vavti
fb31f629c6 update bd-dev and remove hotfix 2017-04-05 14:12:18 +02:00
zotlabs
50612565e9 create site_store_lowlevel() to initialise data structures for the site table 2017-04-04 10:02:33 +02:00
zotlabs
a92256e1cb legal_webbie() now provides different character rules depending on whether you federate or not. Added some comments in a few places that needed them. 2017-04-03 22:13:12 -07:00
zotlabs
d6c23486d5 create site_store_lowlevel() to initialise data structures for the site table 2017-04-03 16:43:30 -07:00
zotlabs
d2bafdb2bf fr strings update (Monret) 2017-04-03 15:56:47 -07:00
zotlabs
f2f2b534e6 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-04-03 15:55:22 -07:00
zotlabs
2d9ae8ff2c Revert "fr strings update (Monret)"
This reverts commit 4e4d406d23.
2017-04-03 15:55:03 -07:00
zotlabs
4e4d406d23 fr strings update (Monret) 2017-04-03 15:53:48 -07:00
zotlabs
a9bda2b12e sql error photos_albums_list with non-logged-in viewer 2017-04-03 10:55:42 +02:00
zotlabs
5fb7ea8dbd fix connectDefaultShare generated js function, though it isn't obvious if we still use it. 2017-04-03 10:53:07 +02:00
zotlabs
d35678b891 change hook for perm_is_allowed while retaining backwards compatibility 2017-04-03 10:52:52 +02:00
zotlabs
405e3fc214 import_author_zot() - check for both hubloc and xchan entries. This should catch and repair entries which were subject to transient storage failures. 2017-04-03 10:51:31 +02:00
zotlabs
fbba78411d app sorting issue 2017-04-03 10:50:43 +02:00
zotlabs
75cd816e02 logic error 2017-04-03 10:49:20 +02:00
zotlabs
c8a886e399 import authors from any unrecognised network as network 'unknown'. 2017-04-03 10:48:41 +02:00
zotlabs
19b2568133 whitespace 2017-04-03 10:45:39 +02:00
git-marijus
ccc8a05eb0 Merge pull request #711 from zotlabs/crypto-upgrade
crypto updates
2017-04-03 10:38:09 +02:00
zotlabs
26125bcf0b sql error photos_albums_list with non-logged-in viewer 2017-04-02 22:20:37 -07:00
zotlabs
263efbfe39 reference to deprecated function import_author_diaspora in socgraph.php 2017-04-02 21:49:50 -07:00
zotlabs
9a5ce2354d remove some obsolete permissions stuff 2017-04-02 20:51:40 -07:00
zotlabs
f25f5aeaaa fix connectDefaultShare generated js function, though it isn't obvious if we still use it. 2017-04-02 20:35:45 -07:00
zotlabs
af14020e42 change hook for perm_is_allowed while retaining backwards compatibility 2017-04-02 20:03:27 -07:00
zotlabs
4a49643bcd import_author_zot() - check for both hubloc and xchan entries. This should catch and repair entries which were subject to transient storage failures. 2017-04-02 19:46:20 -07:00
zotlabs
29596d12e3 app sorting issue 2017-04-02 17:34:16 -07:00
zotlabs
1a28fb2a0c logic error 2017-04-02 17:12:42 -07:00
zotlabs
d985db60cc import authors from any unrecognised network as network 'unknown'. 2017-04-02 17:09:51 -07:00
zotlabs
a76ad1478f crypto updates 2017-04-02 16:44:44 -07:00
zotlabs
044067f055 harden security 2017-04-02 16:40:36 -07:00
zotlabs
810d9e21bc use aes-ctr which is slightly/arguably better than a poke in the eye and don't restrict the crypto algorithm by server role. 2017-04-01 15:30:59 -07:00
zotlabs
7256579c16 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-31 17:27:18 -07:00
zotlabs
ecf30b2c71 strings 2017-03-31 17:25:04 -07:00
Mario Vavti
95f4f14dca triple a is more sane 2017-03-31 19:14:24 +02:00
Mario Vavti
391854058e minor css adjustments 2017-03-31 18:13:36 +02:00
Mario Vavti
1bcee2f11c various form css fixes 2017-03-31 16:13:58 +02:00
Mario Vavti
572a04b40a make btn-outline-secondary color slightly darker 2017-03-31 14:20:13 +02:00
Mario Vavti
d9ee8b2c32 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-03-31 13:59:43 +02:00
Mario Vavti
614366e499 css fixes 2017-03-31 13:59:28 +02:00
git-marijus
89e3f3210f Merge pull request #710 from dawnbreak/importcsrf
🔒 Add CSRF protection for import and import_items.
2017-03-31 13:40:02 +02:00
Mario Vavti
dc55c710da add max height to #navbar-collapse-2 2017-03-31 13:38:55 +02:00
Mario Vavti
47817b8ae1 version bump 2017-03-31 11:11:07 +02:00
Mario Vavti
3e66549ea4 regenerate hmessages.po 2017-03-31 11:10:31 +02:00
zotlabs
8b7d0f33c3 fix a couple more instances where we were still calling mail() directly for site critical messages 2017-03-31 10:33:17 +02:00
zotlabs
a20fd4d463 get rid of some more deprecated uses of $a 2017-03-31 10:31:29 +02:00
zotlabs
bfd506f184 remove obsolete app argument from load_pdl 2017-03-31 10:30:41 +02:00
zotlabs
c20aa6062c get rid of get_app() 2017-03-31 10:30:17 +02:00
zotlabs
b2a51db14e add 'author_is_pmable()' function with plugin hooks to control whether or not to display a 'send mail' link in the thread author menu. 2017-03-31 10:28:54 +02:00
zotlabs
33ff7bf968 provide platform specific install script 2017-03-31 10:27:28 +02:00
zotlabs
57a8b3f857 provide compatibility with old-style update system 2017-03-31 10:26:44 +02:00
zotlabs
6e5a06421f get rid of 'davguest' and allow for project specific DB updates (currently db updates are common between all possible projects/subprojects/forks). 2017-03-31 10:26:06 +02:00
zotlabs
5f0004b416 move db_upgrade to zlib 2017-03-31 10:25:27 +02:00
zotlabs
e79f450af9 aes256gcm is not ready for prime time. Stay tuned. Until it is, we're pretty much stuffed unless we go to 3rd party crypto libs. 2017-03-30 21:45:29 -07:00
zotlabs
c4f5d17db6 Merge branch 'importcsrf' of https://github.com/dawnbreak/hubzilla into csrf 2017-03-30 21:05:31 -07:00
zotlabs
d1a018f2e8 whitespace 2017-03-30 21:04:55 -07:00
zotlabs
6118570118 make aes256gcm the primary crypto mode 2017-03-30 20:43:49 -07:00
zotlabs
a9cceea850 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-30 16:10:59 -07:00
Klaus Weidenbach
81736a0129 🔒 Add CSRF protection for import and import_items. 2017-03-30 23:17:32 +02:00
Klaus
dea4879938 Merge pull request #709 from dawnbreak/docu
Add some documentation for import functions.
2017-03-30 23:10:53 +02:00
Klaus Weidenbach
2e2f984c45 Add some documentation for import functions. 2017-03-30 23:06:00 +02:00
Mario Vavti
bb639b08f7 do not allow creating two wikis with the same name 2017-03-30 15:07:48 +02:00
Mario Vavti
5167f70015 add some missing files 2017-03-30 12:26:46 +02:00
Mario Vavti
cca5349110 update to textcomplete v 1.8.0 2017-03-30 12:21:15 +02:00
Mario Vavti
5abe7d2dfb more css fixes 2017-03-30 12:08:10 +02:00
zotlabs
181d9a0777 circular logic - we need the mailbox to find the last message so move the code block back where it was, and only set a direct mid if one was specified. 2017-03-30 11:54:21 +02:00
zotlabs
5219c4a09a when clicking a notification to view a private mail message, actually view that message instead of the most recent. 2017-03-30 11:54:07 +02:00
Mario Vavti
4da65183e0 css fixes 2017-03-30 11:45:16 +02:00
zotlabs
b51ca4c8d3 circular logic - we need the mailbox to find the last message so move the code block back where it was, and only set a direct mid if one was specified. 2017-03-29 17:42:31 -07:00
zotlabs
198d2ab607 when clicking a notification to view a private mail message, actually view that message instead of the most recent. 2017-03-29 16:41:27 -07:00
zotlabs
f43428aacf channel_store_lowlevel declared twice 2017-03-29 16:16:29 -07:00
zotlabs
2d4f84563b Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-29 16:11:50 -07:00
Mario Vavti
418d102663 remove hubzilla.site from directory fallback servers until further notice 2017-03-29 15:56:01 +02:00
Mario Vavti
3b6a0d8e5c remove hubzilla.site from directory fallback servers until further notice 2017-03-29 15:55:21 +02:00
Mario Vavti
29c9972b86 missing closing bracket and semicolon 2017-03-29 15:19:54 +02:00
Mario Vavti
7033966bb8 create channel_store_lowlevel() 2017-03-29 15:16:41 +02:00
Mario Vavti
e90e4e4a59 css fixes 2017-03-29 14:45:50 +02:00
Mario Vavti
954176cfc3 bump version 2017-03-29 14:22:37 +02:00
zotlabs
a8a6d807ff allow setting the system email name/address/reply 2017-03-29 14:14:40 +02:00
zotlabs
fe5f109af5 more cloud updates - upgrade the DAV structures as well. 2017-03-29 14:14:05 +02:00
zotlabs
f1da003020 some more photo issues 2017-03-29 14:13:10 +02:00
zotlabs
ea5a7180c7 fix photo prvnxt after all the changes yesterday 2017-03-29 14:12:24 +02:00
zotlabs
9d0e2cbd89 more work on the photo album mess 2017-03-29 14:11:56 +02:00
zotlabs
032b6f193d photos_album_exists() requires an observer to work correctly; provide it. 2017-03-29 14:11:22 +02:00
zotlabs
e49c59959b use the same host macro for sender address as for reply_to address 2017-03-29 14:09:58 +02:00
zotlabs
b03cd330e5 begin the process of using the relevant attach directory/path for photo albums instead of an album basename which may not be unique. Created an 'ellipsify()' function to shorten long names and keep the beginning and end intact 2017-03-29 14:09:19 +02:00
zotlabs
542fa4a08c more markdown purification 2017-03-29 14:05:12 +02:00
zotlabs
515f1e76b0 perform attach_upgrade() 2017-03-29 14:04:44 +02:00
zotlabs
d95f7efea7 after all of this, I would be very hesitant to use any multi-user system which uses markdown and which doesn't have a large security budget. 2017-03-29 14:04:04 +02:00
zotlabs
e97dd48b4c even more fine tuning of the markdown purifier - especially when used with the wiki 2017-03-29 14:03:24 +02:00
zotlabs
5915f31950 add function attach_syspaths to calculate the contents of os_path and display_path; add this to the rename function. We will also need it to populate existing file/photo structures as an upgrade task. 2017-03-29 13:57:15 +02:00
zotlabs
8caa4d9e37 attach_folder_rpaths() providing incorrect results 2017-03-29 13:56:43 +02:00
zotlabs
d5525a38f1 various input filter fixes 2017-03-29 13:56:31 +02:00
zotlabs
e9a5af6109 simplify the message signing spaghetti 2017-03-29 13:50:27 +02:00
zotlabs
fd6b32758e namespace error 2017-03-29 13:47:24 +02:00
zotlabs
4387fb715b ensure z_input_filter is called exactly once, since we now depend on the number of htmlspecialchars operations for
markdown content. Also ensure that the content is escaped the correct number of times on imported items.
2017-03-29 13:45:42 +02:00
zotlabs
d7aaca6947 more work related to attach/photo and os_path, display_path and general code cleanup 2017-03-29 13:44:55 +02:00
zotlabs
fa5115b3ed add os_path and display_path to photos, fix some issues with multiple path separators after cloud/nickname in the content field of attach and photos 2017-03-29 13:44:17 +02:00
zotlabs
ec5e1067bc store os_path and display_path with files 2017-03-29 13:43:13 +02:00
zotlabs
ee46faff1a dim class was un-themed 2017-03-29 13:42:17 +02:00
zotlabs
fa629841bd input filter updates 2017-03-29 13:39:36 +02:00
zotlabs
155b57c2de fix group by item query 2017-03-29 13:38:29 +02:00
zotlabs
6ea32a8ba3 class MarkdownSoap to safely store markdown by purifying and preserving (escaped) what may be unsafe code in codeblocks. The stored item needs to be unescaped just prior to calling the markdown-to-html processor 2017-03-29 13:37:36 +02:00
zotlabs
8d72cea2d1 get rid of some cruft in boot.php 2017-03-29 13:35:26 +02:00
zotlabs
3ee4dd0d52 remove the unimplemented upload limit site settings 2017-03-29 13:33:15 +02:00
zotlabs
0f7832dc30 code_allowed is a real mess. Start the cleanup by remving the account level code allow and limiting to specific channels only. This reduces the possibility of cross channel security issues coming into play. Then provide a single function for checking the code permission. This is only partially done as we often need to check against the observer or logged in channel as well as the resource owner to ensure that this only returns true for local channels which also own the requested resource. 2017-03-29 13:32:23 +02:00
Mario Vavti
107083e3e4 fix widgets for bs4 again 2017-03-29 12:43:27 +02:00
Mario Vavti
d7a9d22a15 namespace error 2017-03-29 12:09:45 +02:00
zotlabs
ecfbb10326 widget file update 2017-03-29 12:07:13 +02:00
zotlabs
6c92a240cc remove include/widgets.php 2017-03-29 12:04:44 +02:00
zotlabs
0bad26e116 the rest of the standard widgets converted 2017-03-29 12:02:09 +02:00
Mario Vavti
cd57483ed9 namespace error 2017-03-29 11:59:20 +02:00
zotlabs
0908da9529 widgets cont. 2017-03-29 11:57:00 +02:00
zotlabs
6e101e4582 widgets cont. 2017-03-29 11:50:52 +02:00
zotlabs
f60309efa1 more widget migrations 2017-03-29 11:50:03 +02:00
zotlabs
47f4007951 more widgets 2017-03-29 11:49:32 +02:00
zotlabs
74f58818d6 filename issue 2017-03-29 11:49:03 +02:00
zotlabs
17977effe7 more widgets 2017-03-29 11:48:35 +02:00
zotlabs
477ed97c2f convert more widgets to classes 2017-03-29 11:47:58 +02:00
zotlabs
242ef70a77 use absolute namespace 2017-03-29 11:47:07 +02:00
zotlabs
755b751614 Comanche: allow widgets to be class based and stored appropriately in Zotlabs 2017-03-29 11:45:54 +02:00
zotlabs
ad3a327366 scaling issue with fa-th and fa-bars icons when using boostrap-red.css:37 #navbar-collapse-1 i { font-size 1.0rem; }; FF 52.0.1 on Win7; 0.9rem and 1.1rem both render much better. 1.1 is a bit large so going with 0.9 2017-03-28 18:16:40 -07:00
zotlabs
a54bb07753 fix a couple more instances where we were still calling mail() directly for site critical messages 2017-03-28 17:49:48 -07:00
zotlabs
323ab3dba4 get rid of some more deprecated uses of $a 2017-03-28 17:00:44 -07:00
zotlabs
6947194824 license update 2017-03-28 16:30:02 -07:00
zotlabs
879350b658 update readme 2017-03-28 16:21:20 -07:00
zotlabs
046e5e239f remove obsolete app argument from load_pdl 2017-03-28 16:07:22 -07:00
zotlabs
c5828fecc1 get rid of get_app() 2017-03-28 16:02:47 -07:00
zotlabs
d12b360e92 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-28 14:58:48 -07:00
Mario Vavti
5564b47dbc minor bs4 fixes 2017-03-28 23:44:50 +02:00
Mario Vavti
28ad60f892 some fixes for latest bs-dev 2017-03-28 19:29:42 +02:00
Mario Vavti
171b6a222d fixes for latest bootstrap 2017-03-28 15:41:12 +02:00
Mario Vavti
f05181322c update to latest bs-dev 2017-03-28 13:29:59 +02:00
Mario Vavti
33d23a4a61 links in wall-item-title must have white colour if the background is bg-primary 2017-03-28 11:11:01 +02:00
zotlabs
3e6088c614 add 'author_is_pmable()' function with plugin hooks to control whether or not to display a 'send mail' link in the thread author menu. 2017-03-27 15:49:48 -07:00
zotlabs
8292553a20 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-27 14:11:25 -07:00
Klaus
6375401e0a Merge pull request #701 from dawnbreak/HTMLpurifier
HTMLPurifier library update
2017-03-27 21:39:02 +02:00
Mario Vavti
b6b62506c5 adjust comment box 2017-03-27 13:22:15 +02:00
Mario Vavti
f66aa336ac fix app rendering 2017-03-27 12:55:11 +02:00
Mario Vavti
779cab047a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-03-27 12:08:55 +02:00
Mario Vavti
cd575e80dd remove apps which we have access to from the leftside menu in nav 2017-03-27 12:08:26 +02:00
git-marijus
060cc15f81 Merge pull request #704 from zotlabs/doppleclone
remove redundant and non-functional/broken check for successfully clo…
2017-03-27 11:30:49 +02:00
git-marijus
6ed5784491 Merge pull request #707 from dawnbreak/docu
Import Module documentation and @-sign replacement.
2017-03-27 11:30:16 +02:00
Mario Vavti
eab9040ee7 unify css classes 2017-03-27 11:20:59 +02:00
Mario Vavti
099b30afbf css fixes 2017-03-27 10:29:26 +02:00
zotlabs
5cbf603203 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-26 14:40:20 -07:00
Mario Vavti
c327b00efa fix app-icon color and use bs class for w100 2017-03-26 13:45:27 +02:00
Mario Vavti
7634d4ce69 fix nav menu caret 2017-03-26 13:27:46 +02:00
Mario Vavti
98c6548d64 fix and cleanup custom theme settings 2017-03-26 13:15:15 +02:00
Mario Vavti
d169ee658e minor css cleanup 2017-03-26 11:16:16 +02:00
Klaus Weidenbach
f718e2b0db ⬆️ Update HTML Purifier library.
Updated HTML Purifier from 4.6.0 to 4.9.2 with better PHP7 compatibility.
Used composer to manage this library.
2017-03-26 00:41:27 +01:00
zotlabs
dc59817a9d use the long form legal text. 2017-03-25 14:50:47 -07:00
zotlabs
66fcea0ad8 update license 2017-03-25 14:49:18 -07:00
zotlabs
a572609dbd widget file update 2017-03-25 14:42:40 -07:00
zotlabs
94e458018b rm widgets again 2017-03-25 14:41:43 -07:00
zotlabs
e5e0a6b31f Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-25 14:40:31 -07:00
zotlabs
5c63f7dd58 provide platform specific install script 2017-03-25 14:19:32 -07:00
zotlabs
b0b5db770d provide compatibility with old-style update system 2017-03-25 13:22:14 -07:00
zotlabs
878614f97a get rid of 'davguest' and allow for project specific DB updates (currently db updates are common between all possible projects/subprojects/forks). 2017-03-25 13:07:46 -07:00
Klaus Weidenbach
49e77e0f71 Import Module documentation and @-sign replacement.
If you copy the identity from your profile page the @-sign is invalid
for the import and fails. Replace it for convenience.
2017-03-25 20:30:26 +01:00
Mario Vavti
2115eb26a7 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-03-25 09:41:51 +01:00
Mario Vavti
4f4c9bf5d6 fix full template nav 2017-03-25 09:41:35 +01:00
Mario Vavti
90ab050493 fix active state 2017-03-24 19:41:58 +01:00
Mario Vavti
28e0911f29 remove obsolete todo 2017-03-24 17:07:22 +01:00
Mario Vavti
fd23844c8d remove redundant css 2017-03-24 16:50:59 +01:00
Mario Vavti
5dc457b16c fix some active and hover colors 2017-03-24 16:10:37 +01:00
Mario Vavti
aadfb97d5a missing badge-default class 2017-03-24 15:50:54 +01:00
Mario Vavti
83abceb8be must be 1.35rem 2017-03-24 10:29:44 +01:00
Mario Vavti
727a2fe4ea restrict height of images in #banner to 1.5 rem 2017-03-24 10:23:23 +01:00
Mario Vavti
cb6c21ce90 do not return false here. it can lead to unresponsive links under certain situations. 2017-03-24 10:09:02 +01:00
zotlabs
a2e1019978 move db_upgrade to zlib 2017-03-23 21:49:20 -07:00
Mario Vavti
1171e1dd9c fix viewconnections 2017-03-23 14:15:08 +01:00
Mario Vavti
fff7be2c0f fix spinner position 2017-03-23 13:33:33 +01:00
Mario Vavti
a1ef698cf2 update fullcalendar library to version 3.2.0 2017-03-23 13:24:39 +01:00
Mario Vavti
43a794a905 bs4 fixes for events 2017-03-23 13:11:27 +01:00
Mario Vavti
4d50fe0928 bump versions 2017-03-23 09:35:59 +01:00
zotlabs
e98938d03d rev update 2017-03-23 00:20:12 -07:00
zotlabs
c3c1572683 allow setting the system email name/address/reply 2017-03-22 21:40:43 -07:00
zotlabs
708f738952 add mascot 2017-03-22 20:39:07 -07:00
zotlabs
5f1da17406 red koala 2017-03-22 20:35:20 -07:00
zotlabs
0499deea69 more cloud updates - upgrade the DAV structures as well. 2017-03-22 19:31:43 -07:00
zotlabs
0fb0241901 some more photo issues 2017-03-22 16:11:38 -07:00
zotlabs
24b55bbc9b fix photo prvnxt after all the changes yesterday 2017-03-22 12:41:16 -07:00
Mario Vavti
3a7db8ec60 fix embed image modals 2017-03-22 13:15:53 +01:00
Mario Vavti
bc3e1e99fe Merge branch 'dev' into bs4 2017-03-22 12:12:44 +01:00
Mario Vavti
efdd95fe7f css fixes 2017-03-22 11:52:22 +01:00
zotlabs
65ecc5ae15 more work on the photo album mess 2017-03-21 22:05:36 -07:00
zotlabs
83a78a949d photos_album_exists() requires an observer to work correctly; provide it. 2017-03-21 21:13:14 -07:00
zotlabs
a7bf4366ce use the same host macro for sender address as for reply_to address 2017-03-21 21:00:48 -07:00
zotlabs
066ab8c1fc Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-21 20:59:26 -07:00
zotlabs
bedc393425 begin the process of using the relevant attach directory/path for photo albums instead of an album basename which may not be unique. Created an 'ellipsify()' function to shorten long names and keep the beginning and end intact 2017-03-21 20:11:48 -07:00
zotlabs
c1cc7bfc94 update license 2017-03-21 17:14:58 -07:00
Klaus
caae956f6e Merge pull request #705 from dawnbreak/dev
 Some more tests for purify_html().
2017-03-22 00:59:09 +01:00
Klaus Weidenbach
30a3339653 Some more tests for purify_html().
Add some generic HTML, JS, CSS expectations for purify_html().
Also cover our own configuration for HTMLPurifier.
2017-03-22 00:50:49 +01:00
Klaus
ef73607288 Merge pull request #706 from dawnbreak/master
issue #699
2017-03-21 21:50:40 +01:00
zotlabs
e7c3ecd192 issue #699
(cherry picked from commit a45dd09fc0)
2017-03-21 21:47:30 +01:00
Mario Vavti
a7d184ba54 add generic-icons-nav class 2017-03-21 13:59:44 +01:00
Mario Vavti
546867c102 add icon, name and thumb to profile tabs. remove login app - we have login in the panel now. 2017-03-21 13:38:44 +01:00
Mario Vavti
42fbc28b11 missing template 2017-03-21 12:00:19 +01:00
zotlabs
82631c3413 more markdown purification 2017-03-21 00:40:19 -07:00
zotlabs
b153c651b4 perform attach_upgrade() 2017-03-20 21:53:39 -07:00
zotlabs
8821986d87 after all of this, I would be very hesitant to use any multi-user system which uses markdown and which doesn't have a large security budget. 2017-03-20 19:50:09 -07:00
zotlabs
35fc7328de even more fine tuning of the markdown purifier - especially when used with the wiki 2017-03-20 19:41:03 -07:00
zotlabs
7a611c6d47 create channel_store_lowlevel() and remove more diaspora stuff from core. 2017-03-20 18:14:50 -07:00
zotlabs
f252f3efc5 remove redundant and non-functional/broken check for successfully cloned channel record which was left over from an earlier method of creating the table; which was deprecated a few months back. 2017-03-20 15:40:48 -07:00
zotlabs
da823125b9 remove redundant and non-functional/broken check for successfully cloned channel record which was left over from an earlier method of creating the table; which was deprecated a few months back. 2017-03-20 15:24:47 -07:00
Mario Vavti
7de5717418 superfluos ; 2017-03-20 23:21:02 +01:00
Mario Vavti
a6f232f2b0 really fix fullscreen and fix some issues in chat 2017-03-20 23:20:14 +01:00
Mario Vavti
cbcd195461 fix webpages widgets 2017-03-20 22:39:29 +01:00
Mario Vavti
837efcf5e7 fix fullscreen and bbco_autocomplete popup rendering 2017-03-20 20:59:46 +01:00
Mario Vavti
8b0bcdb2a5 minor fixes 2017-03-20 20:13:10 +01:00
Mario Vavti
ca14ab3d55 move profile tabs to app-tray 2017-03-20 17:24:48 +01:00
Mario Vavti
cfdf1def2a since we have the app bin we do not actually need the profile tabs for ourself 2017-03-20 14:09:27 +01:00
Mario Vavti
37d350c3f5 update to latest bs4 from git and change hidden-* classes to d-* 2017-03-20 11:18:23 +01:00
Mario Vavti
b10c519cc1 Merge branch 'dev' into bs4 2017-03-20 08:53:08 +01:00
zotlabs
78aeb50ce5 add function attach_syspaths to calculate the contents of os_path and display_path; add this to the rename function. We will also need it to populate existing file/photo structures as an upgrade task. 2017-03-19 21:39:28 -07:00
zotlabs
a12a614e7e attach_folder_rpaths() providing incorrect results 2017-03-19 19:43:00 -07:00
zotlabs
f746418fda Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-19 17:13:26 -07:00
zotlabs
1bdab6e633 Merge pull request #703 from dawnbreak/oauth2
⬆️ Update bshaffer/oauth2-server-php library.
2017-03-20 11:05:46 +11:00
zotlabs
1bf2a9d47b Merge pull request #702 from dawnbreak/dev
 Add unit test for purify_html().
2017-03-20 11:05:20 +11:00
Klaus Weidenbach
8b4b135036 ⬆️ Update bshaffer/oauth2-server-php library.
Manage oauth2-server-php library with composer.
Folder ./library/oauth2/ can be removed and includes removed with autoloading.
2017-03-20 00:43:09 +01:00
zotlabs
be10bf2ceb Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-19 15:44:59 -07:00
Klaus Weidenbach
d4bd4ca000 Add unit test for purify_html().
In preparation to update HTMLPurifier library add a unit test.
Please add more HTML that you need to have working and we can check
against regressions.
2017-03-19 23:07:16 +01:00
Mario Vavti
2f3f95d3a9 change the btn-outline-secondary:hover color to soething sane 2017-03-19 19:59:45 +01:00
Mario Vavti
d958f1099b Revert "update to bs-git"
This reverts commit 7b0f3d9e26.
2017-03-19 19:51:02 +01:00
Mario Vavti
7b0f3d9e26 update to bs-git 2017-03-19 19:40:08 +01:00
Mario Vavti
92d581a342 do not show the scrollbar before the animation has finished 2017-03-19 19:36:29 +01:00
Mario Vavti
8e11b2d6f0 fix some wrapping issues 2017-03-19 19:32:54 +01:00
Mario Vavti
79bd2ddd9c reflect count in modal 2017-03-19 17:53:33 +01:00
Mario Vavti
949ca844c5 open like-modal directly if more than 10 likes 2017-03-19 17:49:07 +01:00
Mario Vavti
f31af3c7c0 typo 2017-03-19 17:09:21 +01:00
Mario Vavti
a0245f3e93 css fixes 2017-03-19 17:06:55 +01:00
Mario Vavti
99811c90b6 fix php warning and remove logging 2017-03-19 14:30:26 +01:00
Mario Vavti
c85f1a208d a % example for font size 2017-03-19 14:29:09 +01:00
Mario Vavti
774923be1c fix jgrowl position and remove some redundant css 2017-03-19 14:20:21 +01:00
Mario Vavti
d78b64d5b3 fix narrow navbar setting and contextual-help position 2017-03-19 14:00:59 +01:00
Mario Vavti
0938db8f7b Merge branch 'dev' into bs4 2017-03-19 13:33:45 +01:00
Mario Vavti
d2c971eda9 fix php warning and remove logging 2017-03-19 13:33:02 +01:00
Mario Vavti
57584ea429 remove redundant css 2017-03-19 13:28:06 +01:00
Mario Vavti
49d84a364d css fixes 2017-03-19 13:21:30 +01:00
Mario Vavti
89b5507354 fix custom fontsize for app 2017-03-19 12:10:16 +01:00
Mario Vavti
2a25ddff36 bs4 fixes 2017-03-19 10:51:58 +01:00
zotlabs
b0b96daec0 Merge branch 'dev' into merge 2017-03-18 17:00:09 -07:00
zotlabs
8764cdf16a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-18 16:56:37 -07:00
zotlabs
a45dd09fc0 issue #699 2017-03-18 16:56:18 -07:00
zotlabs
320c32fd0f issue #699 2017-03-18 16:55:10 -07:00
zotlabs
4afeefb5ce various input filter fixes 2017-03-18 16:41:43 -07:00
Mario Vavti
b2ad4e8c2a bs4 fixes 2017-03-18 23:45:55 +01:00
Mario Vavti
2bdf63d069 more abook_edit and some css 2017-03-18 22:01:46 +01:00
Mario Vavti
b897fd8315 more abook_edit 2017-03-18 20:02:13 +01:00
Mario Vavti
82b35e2762 fix abook_edit and private mail 2017-03-18 20:00:32 +01:00
Mario Vavti
56f32104d5 Merge branch 'dev' into bs4 2017-03-18 17:29:38 +01:00
Mario Vavti
2556d05602 bs4 fixes 2017-03-18 17:28:46 +01:00
Klaus
7b06cb6682 Merge pull request #698 from dawnbreak/dev
Missed one old Markdown()
2017-03-18 14:19:47 +01:00
Klaus
cbd401c3e8 Missed one old Markdown() 2017-03-18 14:15:02 +01:00
Mario Vavti
9277806664 fix usermenu radius 2017-03-17 21:42:27 +01:00
Mario Vavti
828028259c css fixes 2017-03-17 20:48:06 +01:00
Mario Vavti
d10525a375 fix item_list and item_search templates. make item filer use a bootdtrap modal and some css and class fixes 2017-03-17 14:22:10 +01:00
zotlabs
d903758940 remove include/widgets.php 2017-03-16 18:36:58 -07:00
zotlabs
cf11ba1147 simplify the message signing spaghetti 2017-03-16 18:19:03 -07:00
zotlabs
446b5550a2 the rest of the standard widgets converted 2017-03-16 17:11:48 -07:00
Mario Vavti
4c2bdc9dc0 Merge branch 'dev' into bs4 2017-03-16 09:46:09 +01:00
zotlabs
051759580d namespace error 2017-03-16 01:16:29 -07:00
zotlabs
fb3f63bf59 input filter issue 2017-03-15 21:49:27 -07:00
zotlabs
f6b643e84e widgets cont. 2017-03-15 21:26:28 -07:00
zotlabs
16d750d1f6 widgets cont. 2017-03-15 20:56:12 -07:00
zotlabs
dfd626548f more widget migrations 2017-03-15 20:11:28 -07:00
zotlabs
92d7c32f61 more widgets 2017-03-15 19:30:57 -07:00
zotlabs
0ee48f6a58 filename issue 2017-03-15 19:13:16 -07:00
zotlabs
664c762b35 more widgets 2017-03-15 18:48:27 -07:00
zotlabs
9cb9608209 convert more widgets to classes 2017-03-15 18:31:34 -07:00
zotlabs
b20062efa6 Merge branch 'red' of https://github.com/zotlabs/hubzilla into red 2017-03-15 17:44:21 -07:00
zotlabs
8d4744d115 new composer.lock for red 2017-03-16 11:42:06 +11:00
zotlabs
14f16a7ef0 use absolute namespace 2017-03-15 17:05:16 -07:00
zotlabs
df6c07aaad Comanche: allow widgets to be class based and stored appropriately in Zotlabs 2017-03-15 16:55:47 -07:00
zotlabs
c95e9b9ba5 could not fix the merge conflicts in composer.lock so it will need to be regenerated in the red tree.
also the autoload_classmap is a disgrace. We provide autoload functions so that we can dynamically
change the file tree without needing to regenerate a bunch of runtime stuff every time we add a file.
Merge branch 'dev' into red
2017-03-15 16:09:08 -07:00
zotlabs
472a824a1e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-15 16:02:45 -07:00
zotlabs
16df1c1ad4 Merge pull request #569 from dawnbreak/QA_testing
[FEATURE] Extend Travis CI integration.
2017-03-16 10:02:17 +11:00
zotlabs
e1fe637dcd Merge branch 'dev' into red 2017-03-15 15:57:37 -07:00
zotlabs
2dce86d38e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-15 15:55:33 -07:00
zotlabs
bcd02edd80 ensure z_input_filter is called exactly once, since we now depend on the number of htmlspecialchars operations for
markdown content. Also ensure that the content is escaped the correct number of times on imported items.
2017-03-15 15:53:03 -07:00
Mario Vavti
a73ea134cd re-add spaces between tags 2017-03-15 21:22:16 +01:00
Mario Vavti
e7a5aa7b9c js fixes 2017-03-15 17:28:00 +01:00
Mario Vavti
aa33cacb62 style hashtags, mentions and categories. hide expand-aside button if not needed. css and class fixes 2017-03-15 16:42:55 +01:00
Mario Vavti
0c74c79b18 Merge branch 'dev' into bs4 2017-03-15 12:42:18 +01:00
Mario Vavti
0c973cc9fa various fixes 2017-03-15 12:41:37 +01:00
Mario Vavti
62c921815f better handling of mimetype security 2017-03-15 12:39:34 +01:00
Mario Vavti
211cda540d better handling of mimetype security 2017-03-15 12:38:33 +01:00
zotlabs
6078d02c3a more work related to attach/photo and os_path, display_path and general code cleanup 2017-03-15 01:20:21 -07:00
zotlabs
fa89b8f66d add os_path and display_path to photos, fix some issues with multiple path separators after cloud/nickname in the content field of attach and photos 2017-03-14 22:02:28 -07:00
zotlabs
e399de8ad4 store os_path and display_path with files 2017-03-14 21:40:11 -07:00
zotlabs
32a9487ff9 use dim for the button border also 2017-03-14 18:46:50 -07:00
zotlabs
e891380ed5 dim class was un-themed 2017-03-14 18:42:51 -07:00
zotlabs
2c73b457ef input filter updates 2017-03-14 17:07:29 -07:00
zotlabs
2f5f1a4d64 fix group by item query 2017-03-14 16:14:05 -07:00
Klaus Weidenbach
5c080ca4e8 👷 Add Travis' GitHub deployment steps.
Changed API documentation deployment to gh_pages to Travis's GitHub Pages
deployment.
Also add Travis GitHub Release Deployment step to offer API
documentation.
Both steps are optional and need to be activated in Travis by setting
GH_TOKEN.
2017-03-14 20:41:32 +01:00
Klaus Weidenbach
4a85726e55 👷 ⬆️ Update PHPUnit to current stable 6.
Update requirements to PHP7 for dev.
Add php-mock-phpunit to mock and stub global functions in a better way.
2017-03-14 20:41:29 +01:00
Klaus Weidenbach
cb2eee1d2e 👷 Add old MySQL 5.5 to Travis CI again.
The trusty distro contains MySQL 5.6. Add a precise distro with MySQL 5.5.
Unfortunately 5.7 is not yet provided, which would be interesting
because of the enabled strict SQL mode.
2017-03-14 20:40:53 +01:00
Klaus Weidenbach
8e80500ee6 👷 use PHP7.1 and add PostgreSQL9.6
Use newer distro for Travis CI runs.
New environment provides PostgreSQL9.6.
Also no need to install custom Doxygen, made it optional.
Changed default PHP environment from PHP7.0 to current PHP7.1.
Changed codecoverage reporting.
2017-03-14 20:39:57 +01:00
Klaus Weidenbach
03db9833e8 💚 Update Travis CI's Doxygen.
Travis CI has Doxygen 1.7. We need 1.8 to generate our API
documentation. Get a static version and use it.
Always build API Documentation, but changed Doxygen configuration to
only print out errors in the documentation generation, so these can be
reviewed.
2017-03-14 20:36:38 +01:00
Klaus Weidenbach
33153b8f3a [FEATURE] 👷 Extend Travis CI integration.
Testing several Travis CI features.
Add DBs to travis execution matrix.
Doxygen API docu generation and deployment to gh-pages.
Update phpunit to 5.7.
2017-03-14 20:31:13 +01:00
Mario Vavti
3b2398ed01 css fixes 2017-03-14 18:59:27 +01:00
Mario Vavti
a0a376e95e hide nav search behind a button, css fixes and cleanup 2017-03-14 18:31:19 +01:00
Mario Vavti
7b9df1d401 css fixes 2017-03-14 14:12:44 +01:00
zotlabs
1244b0e36a class MarkdownSoap to safely store markdown by purifying and preserving (escaped) what may be unsafe code in codeblocks. The stored item needs to be unescaped just prior to calling the markdown-to-html processor 2017-03-14 00:23:44 -07:00
zotlabs
ab58c95d27 get rid of some cruft in boot.php 2017-03-14 00:22:57 -07:00
zotlabs
a153368814 make redbasic compatible with red 5.x 2017-03-13 18:58:23 -07:00
zotlabs
41fd729209 remove the unimplemented upload limit site settings 2017-03-13 18:40:07 -07:00
zotlabs
58aa0f3e1a code_allowed is a real mess. Start the cleanup by remving the account level code allow and limiting to specific channels only. This reduces the possibility of cross channel security issues coming into play. Then provide a single function for checking the code permission. This is only partially done as we often need to check against the observer or logged in channel as well as the resource owner to ensure that this only returns true for local channels which also own the requested resource. 2017-03-13 16:19:47 -07:00
zotlabs
02b390d7b8 Merge branch 'dev' into red 2017-03-13 15:13:59 -07:00
zotlabs
41c2f74772 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-13 15:13:31 -07:00
zotlabs
6c641b1834 move oauth2 to vendor 2017-03-14 09:09:05 +11:00
Mario Vavti
700c05a55b many class fixes and revive shiny class for item titles in a new way 2017-03-13 16:34:23 +01:00
Mario Vavti
188782c461 merge dev into bs4 2017-03-13 11:11:20 +01:00
git-marijus
bdfdd23b36 Merge pull request #697 from anaqreon/dev
Add id to app-menu for JS access
2017-03-13 11:00:19 +01:00
Mario Vavti
9f0c3b496b we need to have this even if we are not the owner. otherwise we loose the acl if e.g. not-owner edits a webpage. should probably find a better solution for this though. 2017-03-13 10:30:41 +01:00
Mario Vavti
1ae715da21 Merge branch 'master' of https://github.com/redmatrix/hubzilla 2017-03-13 10:29:48 +01:00
Mario Vavti
d5feb5135d we need to have this even if we are not the owner. otherwise we loose the acl if e.g. not-owner edits a webpage. should probably find a better solution for this though. 2017-03-13 10:29:26 +01:00
zotlabs
fc533107ed better handling of mimetype security 2017-03-12 21:55:24 -07:00
zotlabs
1ee76cb506 remove more hardwired branding 2017-03-12 20:54:48 -07:00
zotlabs
4bb90dffc1 update license 2017-03-12 17:45:51 -07:00
zotlabs
f4cd4184f8 update readme 2017-03-12 17:45:18 -07:00
zotlabs
c39c925d8d grrr. stop making branding assumptions. 2017-03-12 17:32:45 -07:00
zotlabs
b1fc29be11 more cleanup 2017-03-12 16:30:05 -07:00
zotlabs
2a1f6e3df2 update std_version 2017-03-12 15:57:56 -07:00
zotlabs
6f3493bb3c db issues 2017-03-12 15:50:47 -07:00
Mario Vavti
61257094b7 fix help menu 2017-03-12 22:21:49 +01:00
Mario Vavti
8aabc6bc3d many dropdown and class fixes. still a long way to go... 2017-03-12 21:11:28 +01:00
Andrew Manning
f68148b7e0 Add id to app-menu for JS access 2017-03-12 13:57:45 -04:00
zotlabs
4c526c7d3d Merge branch 'dev' into red 2017-03-11 18:02:59 -08:00
zotlabs
4a24a8de43 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-11 18:02:38 -08:00
jeroenpraat
b8ad22f525 Login-box css-fix for Bluegrid scheme 2017-03-11 21:09:42 +01:00
Mario Vavti
d9ecca8591 Merge branch 'dev' into bs4 2017-03-11 15:08:54 +01:00
Mario Vavti
83d07b9551 font size and post title adjust 2017-03-11 15:07:30 +01:00
git-marijus
ee03391293 Merge pull request #693 from anaqreon/dev
Take me home instead of get me home
2017-03-11 10:58:03 +01:00
zotlabs
30503d6533 strings 2017-03-10 12:45:40 -08:00
zotlabs
bbb83bea38 strings 2017-03-10 12:44:57 -08:00
Mario Vavti
0f9ddbf3b2 fixing classes 2017-03-10 17:02:55 +01:00
jeroenpraat
8c4b8e623f Login-box css-fix for Bluegrid scheme 2017-03-10 16:58:32 +01:00
Mario Vavti
b1c97dfcfd some sed magic on button class names 2017-03-10 10:47:30 +01:00
zotlabs
1a49f0d164 one role. 2017-03-09 18:54:10 -08:00
Andrew Manning
a2371d56fd Take me home instead of get me home 2017-03-09 20:43:16 -05:00
zotlabs
c93db2cd21 more cleanup 2017-03-09 14:31:54 -08:00
zotlabs
15d422db80 Merge branch 'dspr' into red 2017-03-09 14:17:14 -08:00
Mario Vavti
14d1912115 upgrade bs to latest git and some more progress 2017-03-09 22:04:17 +01:00
zotlabs
b6477cd38b go back to where the problem started 2017-03-09 11:51:21 -08:00
Mario Vavti
c42cbda904 remove navbar-toggler-left class 2017-03-09 10:45:55 +01:00
Mario Vavti
39d56fd08f initial commit for the bootstrap version 4 branch - upgrade lib and make nav.tpl kind of working again 2017-03-09 10:17:57 +01:00
zotlabs
403f4c1a6b Monday is a proper name and should be capitalised (except in private conversation amongst unix geeks). 2017-03-08 19:23:11 -08:00
zotlabs
15ab331b6b move all the diaspora content hacks to the diaspora plugin 2017-03-08 17:35:19 -08:00
jeroenpraat
495da14e38 Update latest Spanish strings (were commited to dev instead of the RC) 2017-03-08 17:22:53 +01:00
Mario Vavti
bc2b948f1f Merge branch 2.2RC 2017-03-08 09:39:46 +01:00
Mario Vavti
ff9442474d version 2.2 and changelog 2017-03-08 09:28:58 +01:00
zotlabs
9ca53fdc5d DCV stuff 2017-03-07 17:44:19 -08:00
Mario Vavti
8e3a026276 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-03-07 12:08:43 +01:00
jeroenpraat
b5ddd08630 Big 2.2 string update Dutch 2017-03-07 12:08:16 +01:00
zotlabs
92996e550c allow post_activity_item to be passed an empty ACL without resetting to channel default 2017-03-06 21:02:50 -08:00
zotlabs
a037590ce3 allow post_activity_item to be passed an empty ACL without resetting to channel default 2017-03-06 21:01:17 -08:00
zotlabs
c3c4254882 add public_policy to the nwiki container also. This should not affect the recent bug as presented, but is being added for consistency. 2017-03-06 18:01:18 -08:00
zotlabs
a18e8e1ede add public_policy to the nwiki container also. This should not affect the recent bug as presented, but is being added for consistency. 2017-03-06 17:59:34 -08:00
zotlabs
751c4c3169 correct fix for wiki anonymous read issue (items_permissions_sql checks item.public_policy which was set for posts, not wikis) 2017-03-06 15:35:17 -08:00
zotlabs
595cb13d8f correct fix for wiki anonymous read issue (items_permissions_sql checks item.public_policy which was set for posts, not wikis) 2017-03-06 15:33:10 -08:00
jeroenpraat
f783d594cc Big 2.2 string update Dutch 2017-03-06 22:50:52 +01:00
Mario Vavti
6e32be7e43 allow unauthenticated access to public wiki pages 2017-03-06 22:32:44 +01:00
Mario Vavti
9e44b07275 allow unauthenticated access to public wiki pages 2017-03-06 22:32:05 +01:00
Mario Vavti
4471c45fb7 do not collapse long nsfw content 2017-03-06 11:53:06 +01:00
Mario Vavti
99e681c09f do not collapse long nsfw content 2017-03-06 11:52:07 +01:00
zotlabs
4f5e9d77b2 remove include/probe.php which has never completed development and has never been used 2017-03-05 20:45:21 -08:00
zotlabs
98ccdf65fb Merge branch 'dev' into red 2017-03-05 16:32:53 -08:00
zotlabs
4c0c153b8f move emoji emoticons (not reactions) to plugin 2017-03-05 16:18:09 -08:00
zotlabs
c533c62c64 some event work 2017-03-05 14:47:20 -08:00
zotlabs
384db9d10d Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-05 11:02:19 -08:00
zotlabs
5d8b0acc16 Merge pull request #689 from mjfriaza/dev
Translated the last strings into Spanish version
2017-03-05 19:25:41 +11:00
Manuel Jiménez Friaza
3d23f4ec77 Translated the last strings into Spanish version 2017-03-05 08:50:53 +01:00
zotlabs
215bd07f0b Merge pull request #688 from dawnbreak/markdown
⬆️ 🔨 Upgrade Markdownify library.
2017-03-05 18:22:37 +11:00
Klaus Weidenbach
6c79e0c077 ⬆️ 🔨 Upgrade Markdownify library.
The current version 2.0.0 (alpha) throws deprecated warning with
PHP7.1 and PHPUnit.
Upgrade the HTML to Markdown converter for PHP to the current
Markdownify 2.2.1.
Used composer to manage this library.
2017-03-05 01:14:15 +01:00
zotlabs
b2ea61ea3e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-04 11:57:20 -08:00
zotlabs
47d2467e24 minor feed issue 2017-03-04 11:56:59 -08:00
Mario Vavti
a165303602 update changelog 2017-03-04 17:04:30 +01:00
Mario Vavti
8e1716065e update changelog 2017-03-04 17:04:04 +01:00
Mario Vavti
7251ce6e17 we need item edited for wiki page history, not item created 2017-03-04 16:57:26 +01:00
Mario Vavti
eaefb36212 we need item edited for wiki page history, not item created 2017-03-04 16:56:52 +01:00
zotlabs
a2f6f48daf string update 2017-03-03 14:01:50 -08:00
Mario Vavti
a894456550 fix badge position for narrow navbar 2017-03-03 10:04:57 +01:00
Mario Vavti
608e679d33 fix badge position for narrow navbar 2017-03-03 10:04:11 +01:00
zotlabs
155844f142 reverse sort order 2017-03-02 23:02:44 -08:00
zotlabs
cee9a20e85 activity widget - turns out the owner is not relevant. 2017-03-02 18:10:23 -08:00
zotlabs
70ca4a7fea document the activity widget 2017-03-02 17:39:57 -08:00
zotlabs
7445f1881e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-02 17:36:14 -08:00
zotlabs
e58dc726c5 activity widget - like the forum widget but represents unseen activity by author. Still experimental until it can be tested with diaspora xchans, which may require additional urlencoding. 2017-03-02 17:32:43 -08:00
Mario Vavti
1eba847e99 provide info if there are no sche,es available 2017-03-02 12:52:09 +01:00
Mario Vavti
6bf6462a37 provide info if there are no sche,es available 2017-03-02 12:51:31 +01:00
Mario Vavti
729d52f10a reset schema value after we empty and repopulate it. second half of fix for #624 2017-03-02 11:39:14 +01:00
Mario Vavti
79e8e4599e reset schema value after we empty and repopulate it. first half of fix for #624 2017-03-02 11:39:01 +01:00
Mario Vavti
ba5cfd8b25 setting top position of contextual-help in schemes does not work with narrow navbar setting. schema css is always called last. 2017-03-02 11:38:47 +01:00
Mario Vavti
dd8a3d845e reset schema value after we empty and repopulate it. second half of fix for #624 2017-03-02 11:36:35 +01:00
Mario Vavti
66fc1dcf33 reset schema value after we empty and repopulate it. first half of fix for #624 2017-03-02 11:03:33 +01:00
Mario Vavti
816f4907e3 setting top position of contextual-help in schemes does not work with narrow navbar setting. schema css is always called last. 2017-03-02 10:12:00 +01:00
zotlabs
d7e24b2494 make system.expire_delivery_reports default setting consistent (10 days) 2017-03-01 20:05:52 -08:00
Mario Vavti
288905c361 add title to connect button 2017-03-01 11:39:51 +01:00
Mario Vavti
d4a957ca16 add title to connect button 2017-03-01 11:39:26 +01:00
Mario Vavti
3071f3b71c minor template fixes 2017-03-01 11:37:40 +01:00
Mario Vavti
e08e6c182c minor template fixes 2017-03-01 11:37:02 +01:00
zotlabs
1ca0b85196 cleaner integration between the headers and session options of z_fetch_url() 2017-02-28 16:32:24 -08:00
zotlabs
df57e7ab93 expire unread system notifications after a year. It would provide a better experience for infrequent visitors if we didn't expire them at all, but at some point we need to draw a line so as not to degrade system performance searching through old notifications that it's highly unlikely will ever be viewed again. 2017-02-28 14:56:26 -08:00
zotlabs
fa02f3a108 Merge pull request #686 from dawnbreak/markdown
Upgrade PHP Markdown library.
2017-03-01 09:54:01 +11:00
Mario Vavti
07d443a159 missing css class 2017-02-28 13:24:09 +01:00
Mario Vavti
360397b2ed missing css class 2017-02-28 13:23:42 +01:00
zotlabs
fa944fc526 provide 'session' option to z_fetch_url to assist with remote fetches requiring magic auth 2017-02-27 23:48:54 -08:00
zotlabs
df6e75e1d6 make magic-auth work with profile vcard fetch 2017-02-27 23:37:42 -08:00
zotlabs
c49935d91c remove logging 2017-02-27 22:48:52 -08:00
zotlabs
85082ea509 fetch profile vcard for connection 2017-02-27 21:14:09 -08:00
zotlabs
47731c75fc string update 2017-02-27 16:09:02 -08:00
zotlabs
b5481edfd7 a bit more DAV doco improvement 2017-02-27 15:19:50 -08:00
zotlabs
1325a81e9a add file size notes to /cloud actions panel 2017-02-27 15:13:49 -08:00
zotlabs
1acfe53f74 Merge branch '2.2RC' of https://github.com/redmatrix/hubzilla into 2.2RC_merge 2017-02-27 14:55:34 -08:00
zotlabs
265eb2b440 document the filesize limitations on uploading via /cloud, fix non-functional anchor 2017-02-27 14:55:17 -08:00
zotlabs
18b22f5f8a prep work 2017-02-27 14:54:41 -08:00
zotlabs
d609d2d2ad document the filesize limitations on uploading via /cloud, fix non-functional anchor 2017-02-27 14:53:00 -08:00
Klaus Weidenbach
503c368f9e ⬆️ 🔨 Upgrade PHP Markdown library.
The current version throws deprecated warning with PHP7.1 and PHPUnit.
Upgrade the Markdown library to the current PHP Markdown Lib 1.7.0.
Used composer to manage this library.
2017-02-27 23:40:29 +01:00
Klaus Weidenbach
2848d1caaf Move library/markdown.php to keep history. 2017-02-27 23:36:07 +01:00
Mario Vavti
69e145a630 fix js issue in markdown mimetype wikis if content contains quotes 2017-02-27 13:52:51 +01:00
Mario Vavti
a6d13f290b fix js issue in markdown mimetype wikis if content contains quotes 2017-02-27 13:52:08 +01:00
Mario Vavti
1a28720c56 update changelog 2017-02-27 11:42:25 +01:00
Mario Vavti
b6cad08273 update changelog 2017-02-27 11:41:58 +01:00
Mario Vavti
805cae7b31 whitespace 2017-02-27 11:12:35 +01:00
Mario Vavti
7f423016f0 whitespace 2017-02-27 11:11:53 +01:00
Mario Vavti
1070f3ed6b missing clear 2017-02-27 10:55:25 +01:00
Mario Vavti
a41603ed85 missing clear 2017-02-27 10:54:43 +01:00
Mario Vavti
2467698045 do not mess up schemas 2017-02-27 10:45:31 +01:00
Mario Vavti
f93431b43e do not mess up schemas 2017-02-27 10:44:50 +01:00
Mario Vavti
f5a03102d8 lower version requirement to 2.2RC 2017-02-27 10:19:01 +01:00
Mario Vavti
b6c4e6a6d0 lower version requirement to 2.2RC 2017-02-27 10:18:05 +01:00
Mario Vavti
8e3e90ddd2 set minversion and maxversion for themes in view/theme/themename/php/theme.php instead of separate file. 2017-02-27 10:16:04 +01:00
Mario Vavti
e0e30ead58 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-02-27 10:13:29 +01:00
Mario Vavti
0f208fb36b set minversion and maxversion for themes in view/theme/themename/php/theme.php instead of separate file. 2017-02-27 10:13:08 +01:00
zotlabs
94fdcabac9 Merge pull request #687 from mjfriaza/dev
Updated the Spanish translation
2017-02-27 13:36:09 +11:00
Mario Vavti
8a69a5c3c7 add a minversion to the theme and fallback to default if requirement is not met. mark incompatible themes in the theme selector 2017-02-26 21:22:19 +01:00
Mario Vavti
4f07abe655 add a minversion to the theme and fallback to default if requirement is not met. mark incompatible themes in the theme selector 2017-02-26 21:01:20 +01:00
Manuel Jiménez Friaza
bc01b6b4ad Updated the Spanish translation 2017-02-26 08:02:17 +01:00
zotlabs
8783ccfd72 move admin permission decision out of the router - it is already provided in the module and the higher level check is causing some oembed redirect issues. 2017-02-25 16:22:09 -08:00
zotlabs
e819727b09 send sync packet on profile photo permissions change 2017-02-25 15:04:59 -08:00
zotlabs
92615247ac send sync packet on profile photo permissions change 2017-02-25 15:04:17 -08:00
zotlabs
78ed01f3ef Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-25 13:58:07 -08:00
zotlabs
4b1f87050f Merge branch '2.2RC' of https://github.com/redmatrix/hubzilla into 2.2RC_merge 2017-02-25 13:57:08 -08:00
zotlabs
919de44a71 escape tags on viewsrc output in case it is not text/bbcode. 2017-02-25 13:56:52 -08:00
zotlabs
232862ae08 escape tags on viewsrc output in case it is not text/bbcode. 2017-02-25 13:54:39 -08:00
Mario Vavti
d59095c2e6 bump version 2017-02-25 21:34:19 +01:00
Mario Vavti
285e04c77e bump version 2017-02-25 21:33:32 +01:00
zotlabs
70f8840fbd Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-24 13:55:57 -08:00
zotlabs
8d0d2015d7 We've passed the deadline for allowing unsigned zot finger tokens. It is now a protocol requirement. 2017-02-24 13:53:49 -08:00
Mario Vavti
cf11a89457 use chanlink_url() in directory since the xchan might not yet be available on our server 2017-02-24 10:08:09 +01:00
Mario Vavti
65e18f5b8f use chanlink_url() in directory since the xchan might not yet be available on our server 2017-02-24 10:07:14 +01:00
zotlabs
732dfa63c7 deleting profile vcard entries was pretty well borked 2017-02-23 20:27:12 -08:00
zotlabs
b1ff5367e7 more work on profile vcards - still a lot of work to go 2017-02-23 19:07:01 -08:00
zotlabs
96fdb88690 nativewiki: only apply markdown filter to markdown input 2017-02-23 15:15:19 -08:00
zotlabs
3e992604c7 move some functions to more appropriate places 2017-02-23 14:52:36 -08:00
zotlabs
e9243e9660 minor edits 2017-02-23 11:33:13 -08:00
zotlabs
59645f51a9 Merge branch '2.2RC' of https://github.com/redmatrix/hubzilla into 2.2RC_merge 2017-02-23 11:31:52 -08:00
zotlabs
c866c48252 minor edits 2017-02-23 11:26:22 -08:00
zotlabs
7b4d0168c0 parse bbcode events which use the "new" vcalendar format. work in progress. 2017-02-23 11:09:02 -08:00
Mario Vavti
dd3e530a63 update changelog 2017-02-23 14:53:09 +01:00
Mario Vavti
3e2e60fb86 update changelog 2017-02-23 14:51:09 +01:00
Mario Vavti
9bab858fd1 move collapsed login and register buttons to the left 2017-02-23 12:32:27 +01:00
Mario Vavti
0ef8c5bda8 move collapsed login and register buttons to the left 2017-02-23 12:31:41 +01:00
Mario Vavti
d4be96cd03 yet one more place to use chanlink_hash() instead of chanlink_url() 2017-02-23 12:25:16 +01:00
Mario Vavti
3d0c6700db yet one more place to use chanlink_hash() instead of chanlink_url() 2017-02-23 12:24:42 +01:00
Mario Vavti
5012baba15 one more place to use chanlink_hash() instead of chanlink_url() 2017-02-23 11:41:03 +01:00
Mario Vavti
41c67fa345 more places to use chanlink_hash() instead of chanlink_url() for profile_link 2017-02-23 10:36:00 +01:00
Mario Vavti
c75852455b use chanlink_hash() instead of chanlink_url() for $profile_link 2017-02-23 09:53:24 +01:00
zotlabs
27fa15e95d Merge pull request #685 from phellmes/dev
Update DE translation strings
2017-02-23 12:11:09 +11:00
phellmes
175e222927 Update DE translation strings 2017-02-22 14:50:28 +01:00
Mario Vavti
55924f5c5b apps improvements 2017-02-22 11:22:43 +01:00
zotlabs
956f0043fc change text back to 'add apps' 2017-02-21 23:16:05 -08:00
zotlabs
70cdbe4816 Merge pull request #684 from anaqreon/dev
Change Add Apps to Manage Apps and support translation.
2017-02-22 18:14:30 +11:00
zotlabs
6644dc4861 use head_add_link() for feed discovery 2017-02-21 18:58:51 -08:00
Andrew Manning
3e144baacd Change Add Apps to Manage Apps and support translation. 2017-02-21 20:32:13 -05:00
zotlabs
bbacfbdd6a display page not updating after comment 2017-02-21 15:24:39 -08:00
Mario Vavti
cbc0e5b934 do not lock out channels with only read perms from all post actions. we check read/write permissions for each command later in the process 2017-02-21 14:52:42 +01:00
Mario Vavti
81d556d32e wrong permission 2017-02-21 10:34:40 +01:00
zotlabs
5ad5a0fa07 detect no acl 2017-02-20 23:13:27 -08:00
zotlabs
e54ba7ecbc fix find_folder_hash_by_path() which was not safe against multiple attach structures with the same filename but in different directories 2017-02-20 23:03:48 -08:00
zotlabs
1c1d1f1185 update fr translation 2017-02-20 18:46:51 -08:00
zotlabs
bc1812840a don't search on empty filename - we shouldn't find it. The reason why this change is being made is because we actually did find it due to a development glitch 2017-02-20 15:06:17 -08:00
zotlabs
74def75ca3 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-20 14:14:26 -08:00
Mario Vavti
924b353e5a width must be 100% here 2017-02-20 23:09:21 +01:00
zotlabs
31618a4310 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-20 14:07:42 -08:00
zotlabs
21e3481810 wiki page permissions issue 2017-02-20 14:07:22 -08:00
Mario Vavti
d7ba2c7168 if we slide to left aside make the overlay darker and leave aside as is 2017-02-20 14:02:39 +01:00
zotlabs
6f811fd7f9 bug in adding main.js as a js source 2017-02-19 17:04:37 -08:00
zotlabs
573846707c fix several places where head_add_(css|js) functions have been used incorrectly. It appears that mistakes were made going back a long time and propagated. Here's the way it should work:
- if there is no preceding / character, we look for the file within all the appropriate theme directories.
- otherwise the file should have a preceding /, which means use this path relative to the hubzilla basedir
- files beginning with // are considered to be schemeless URLs.

Therefore 'foo.css' means find the best theme-able representation of foo.css.
'/library/foo.css' means only use the version of foo.css that is in /library.
2017-02-19 16:50:41 -08:00
zotlabs
02e487f306 this icon also appears to require the fixed-width attribute 2017-02-19 14:14:58 -08:00
zotlabs
73b28b5d94 change primary directory per request 2017-02-18 12:40:43 -08:00
zotlabs
2a7ec29cd1 string update 2017-02-17 12:32:02 -08:00
Mario Vavti
d4f8a8dedd add the generic-icons-nav class 2017-02-17 18:32:18 +01:00
Mario Vavti
f23c380cae add register button for collapsed state 2017-02-17 16:31:36 +01:00
Mario Vavti
7151467db7 fixed width icons for item dropdown 2017-02-17 16:08:18 +01:00
Mario Vavti
16a8416495 css fixes and rename link to full docs to help since its app is also called help 2017-02-17 15:07:20 +01:00
zotlabs
5db3b71c6a strip possible quotes from attribute_contains() haystacks 2017-02-15 11:35:36 -08:00
zotlabs
8897c5763a typo 2017-02-15 10:55:53 -08:00
zotlabs
07d92796d2 provide HTTP header parser which honours continuation lines and despite the fact that continuation lines have been deprecated - as they still exist in the wild. 2017-02-14 20:57:14 -08:00
zotlabs
1f39c16d99 util/pconfig - don't enumerate empty arrays, mod_acl - add more comments 2017-02-13 17:51:39 -08:00
zotlabs
c8aeb5b160 Merge pull request #676 from anaqreon/doco
Doco
2017-02-14 12:51:01 +11:00
Andrew Manning
69b08a2062 Merge remote-tracking branch 'upstream/dev' into doco 2017-02-13 20:38:11 -05:00
Andrew Manning
05fd5eb8be Integrated more content and deleted the original locations where applicable. 2017-02-13 20:37:58 -05:00
zotlabs
8ed0913df6 Merge pull request #675 from mjfriaza/dev
Updated the Spanish translation
2017-02-14 06:44:16 +11:00
Manuel Jiménez Friaza
d85bcb2e37 Fix 'settings/channel' page in Spanish contextual help 2017-02-13 15:48:06 +01:00
Manuel Jiménez Friaza
09e5732f8a Updated the Spanish contextual help 2017-02-13 15:24:54 +01:00
Manuel Jiménez Friaza
d7fcf31be5 Updated the Spanish translation 2017-02-13 13:56:17 +01:00
zotlabs
f63aaa5429 be consistent with the name 2017-02-12 18:42:43 -08:00
zotlabs
321241da02 add default permcat to channel settings form 2017-02-12 18:40:26 -08:00
zotlabs
7c72886b1b Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-12 17:40:45 -08:00
zotlabs
2a52592292 testing and bug fixes virtual profile groups 2017-02-12 17:40:18 -08:00
zotlabs
ccdfbc721f Create virtual privacy groups for private profile member lists 2017-02-12 15:56:33 -08:00
Andrew Manning
a3436aea02 Some more work converting api_zot to bbcode. This page needs some serious formatting work. 2017-02-12 14:27:09 -05:00
Mario Vavti
f62b2fc114 css fix 2017-02-12 20:06:09 +01:00
Andrew Manning
baf612bd59 Reformat code of conduct for developers and integrate. 2017-02-12 13:59:17 -05:00
Andrew Manning
f3490440b4 Deleting original help content pages that have been integrated into the new doco 2017-02-12 07:38:43 -05:00
zotlabs
5cc1c30d7f Merge pull request #671 from anaqreon/webimport
Fix webpage element import tool
2017-02-12 18:10:09 +11:00
Andrew Manning
0017de46e4 remove logger lines 2017-02-11 20:54:09 -05:00
Andrew Manning
1cd1328b0c Merge remote-tracking branch 'upstream/dev' into webimport 2017-02-11 20:52:17 -05:00
Andrew Manning
8ff9ad7636 Webpage import tool works again after setting iconfig properly and following the Impel class function example. More testing is needed. 2017-02-11 20:52:06 -05:00
zotlabs
1ba1c5b44e Merge pull request #670 from anaqreon/doco
Scroll to doco links with anchor references when there is a ?zid parameter
2017-02-12 07:47:06 +11:00
Andrew Manning
7db55d8db2 Update Zot protocol link 2017-02-11 14:46:24 -05:00
Andrew Manning
e058b19f53 Scroll to doco links with anchor references when there is a ?zid parameter. 2017-02-11 14:40:04 -05:00
Mario Vavti
bc3605a502 whitespace 2017-02-10 10:50:16 +01:00
Mario Vavti
ce4daad431 do not use modal-sm class 2017-02-10 10:02:48 +01:00
Mario Vavti
0360d42d30 add a login button for collapsed state and refine login modal 2017-02-10 10:01:43 +01:00
zotlabs
1fb37f93cc more permissions optimisations 2017-02-09 19:52:13 -08:00
zotlabs
fce33402e7 use profile_store_lowlevel() when creating additional profiles 2017-02-09 17:40:56 -08:00
zotlabs
abadd0bd34 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-09 17:31:31 -08:00
zotlabs
16f27d0004 more work on permcats and consolidating calls that try to discover connect permissions, also create lowlevel store functions for abook and profile - since these currently may have issues with sql strict mode. 2017-02-09 17:29:24 -08:00
Mario Vavti
242eede258 wrap resizing in document ready function 2017-02-09 12:01:55 +01:00
zotlabs
8dc349caac minor theming and whitespace 2017-02-08 19:47:34 -08:00
zotlabs
91819bfc2d bringer - all basic functionality is implemented 2017-02-08 17:21:32 -08:00
zotlabs
6ee691e019 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-08 11:29:45 -08:00
zotlabs
28f0833237 fix immediate issue with multiple login forms until I can figure out an elegant way to "popup" the modal login form already on the page. We still may need this fix for the actual login module which should always be callable and present a login form even if the nav is completely borked. 2017-02-08 11:24:21 -08:00
Mario Vavti
eb415fd869 better detection of when to show the feature button and document nav mode for app_render() 2017-02-08 11:17:09 +01:00
Mario Vavti
ace0a1cb75 do not show feature button if the app is shared. css fixes 2017-02-08 10:56:03 +01:00
zotlabs
6ceaea8478 open permission tab by default - when you're creating permission categories 2017-02-07 21:03:14 -08:00
zotlabs
30659aef50 initial permcat creation ability, in /settings/permcats; functional permcat creation for testing but still needs a lot of UX work before promoting the ability 2017-02-07 20:29:03 -08:00
zotlabs
46d0e23e7b atokens - we only need one permission column 2017-02-07 19:49:15 -08:00
zotlabs
2d3e20d96e move permcat initialisation to zlib 2017-02-07 17:51:56 -08:00
zotlabs
723b51c931 provide a few system defined permcats; will require a permission editor page to define new (personal) ones. 2017-02-07 17:17:38 -08:00
zotlabs
a6160e3026 move permcat library functions to Zlib 2017-02-07 16:43:00 -08:00
zotlabs
ecca69442d Merge branch 'abroles' into dev 2017-02-07 16:15:15 -08:00
zotlabs
b2bae867d0 more background work for permcat support 2017-02-07 16:08:27 -08:00
zotlabs
cfe843b870 nits 2017-02-07 14:02:13 -08:00
Mario Vavti
1cef3f15d5 sort the apps 2017-02-07 22:32:25 +01:00
Mario Vavti
1bb56309a6 default to manual conversation updates 2017-02-07 20:45:13 +01:00
zotlabs
6468b7a914 update readme; probably not finished with this yet so feel free to make suggestions 2017-02-06 15:28:50 -08:00
zotlabs
6a083e8452 bring back view links for all notification types (esp: network, channel) for easy access 2017-02-06 14:32:50 -08:00
zotlabs
27cac334e1 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-06 14:12:43 -08:00
zotlabs
947478ca76 don't add zid to app links if they're on this system and we're logged in already. This messes up the null arg detection in mod_network. 2017-02-06 14:10:54 -08:00
Mario Vavti
c75357faa3 also take care of the collapsed state apps 2017-02-06 20:36:26 +01:00
Mario Vavti
e9a27393b8 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-02-06 20:30:24 +01:00
Mario Vavti
5d12c56510 only check for mode 2017-02-06 20:30:02 +01:00
zotlabs
00cfc4be44 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-02-06 11:14:59 -08:00
Mario Vavti
70edcabca1 move icon stuff back to app_render() and send navapps through app_render() 2017-02-06 20:10:10 +01:00
Mario Vavti
dce5e8d0cc fix wiki and chat .apd 2017-02-06 14:50:23 +01:00
Mario Vavti
59baf34170 make sure we do not remove other categories on app un-feature 2017-02-06 14:37:33 +01:00
Mario Vavti
5aa1146fe9 minor fixes 2017-02-06 13:58:49 +01:00
Mario Vavti
8059260c18 import system apps on initial load 2017-02-06 13:45:46 +01:00
Mario Vavti
91bc8d473f update templates 2017-02-06 13:30:56 +01:00
Mario Vavti
3d4f2d146e add profile app 2017-02-06 13:19:14 +01:00
Mario Vavti
ce61a64bd2 remove profile app 2017-02-06 13:17:58 +01:00
Mario Vavti
e2a498c8ca update apps 2017-02-06 13:17:02 +01:00
Mario Vavti
758e7b92eb update apps 2017-02-06 13:16:33 +01:00
Mario Vavti
cf4cdffcc1 parse icons in get_system_apps() 2017-02-06 10:49:42 +01:00
Mario Vavti
e70c87ed41 merge dev 2017-02-06 10:08:05 +01:00
zotlabs
d8472cc9f5 import - get rid of 'step system', we should be able to process any import file at any time. 2017-02-05 20:46:11 -08:00
zotlabs
56a08f0d17 make channel move an option (in addition to cloning) 2017-02-05 20:26:06 -08:00
zotlabs
eb3685f537 remove per-page login css (home, login); add support for alternative markdown mention format 2017-02-05 18:47:35 -08:00
zotlabs
201a6b8742 nav_login element width was page dependent. Put this in theme css 2017-02-05 14:55:46 -08:00
zotlabs
e2ee4ae024 better theming of rmagic page 2017-02-05 14:45:28 -08:00
zotlabs
23e3e2c504 Merge pull request #665 from einervonvielen/introduced_dehydrated
The script letsencrypt.sh was replaced by dehydrated.
2017-02-06 06:50:26 +11:00
zotlabs
ab698305bf Merge pull request #666 from einervonvielen/dehydrated_for_dev
The script letsencrypt.sh was replaced by dehydrated.
2017-02-06 06:50:02 +11:00
Einer von Vielen
143ae2b788 The script letsencrypt.sh was replaced by dehydrated. 2017-02-05 19:36:23 +01:00
Einer von Vielen
baf50ea84a The script letsencrypt.sh was replaced by dehydrated. 2017-02-05 19:14:37 +01:00
zotlabs
73845e01ed cleanup 2017-02-04 14:58:13 -08:00
Mario Vavti
178e3d5bc8 allow featuring of apps in /apps and update some more apd files 2017-02-04 18:36:50 +01:00
Mario Vavti
a94254a375 merge dev 2017-02-04 16:17:52 +01:00
zotlabs
fc4083346e more work on nav-modal 2017-02-03 15:31:01 -08:00
zotlabs
f79a11cbf7 trying nav-login as modal 2017-02-03 13:47:29 -08:00
Mario Vavti
edc0a7ef91 update some apps and refine navapps.tpl 2017-02-03 15:24:21 +01:00
Mario Vavti
dce9a70ff5 check for app-icons in app_list() instead of app_render() 2017-02-03 12:12:05 +01:00
Mario Vavti
631a8278d3 do not hide button - just gray it out 2017-02-03 11:21:06 +01:00
zotlabs
bae37c8e6f string update 2017-02-03 02:12:30 -08:00
Mario Vavti
a5c1685ea0 hide notifications button if there are none 2017-02-03 11:00:35 +01:00
Mario Vavti
d0a0051d85 use openClose() for nav-login 2017-02-03 09:35:35 +01:00
Mario Vavti
8e4960f31d use openClose() for nav-login 2017-02-03 09:33:09 +01:00
Mario Vavti
dd2a5e6b28 Merge branch 'dev' into wip-app-bin 2017-02-03 09:24:09 +01:00
zotlabs
7e1e9ac94a rename bb2diaspora.php to markdown.php 2017-02-02 19:12:48 -08:00
zotlabs
29daf1ecee unused since 2012 2017-02-02 18:16:44 -08:00
zotlabs
c62df39ce3 move firefox social api configuration to plugin 2017-02-02 17:23:58 -08:00
zotlabs
a91e7cbe8d move rsd service to twitter_api plugin 2017-02-02 15:25:35 -08:00
zotlabs
159f02ba07 build_pagehead hook added 2017-02-02 14:52:14 -08:00
zotlabs
2daafe80a5 move opensearch to plugins 2017-02-02 14:49:51 -08:00
Mario Vavti
028b2a655d whitespace cleanup 2017-02-02 20:39:06 +01:00
Mario Vavti
fd52cefe09 provide separate collased menus for apps and notifications 2017-02-02 20:10:35 +01:00
Mario Vavti
0e0dee43ab Merge branch 'dev' into wip-app-bin 2017-02-02 14:27:13 +01:00
Mario Vavti
e2ee565f05 cherry-pick nav-login changes 2017-02-02 14:24:19 +01:00
Mario Vavti
63e06578c4 use bootstrap dropdown for login 2017-02-02 14:19:23 +01:00
Mario Vavti
a1f03015ec move channel manager up in the menu 2017-02-02 11:35:42 +01:00
Mario Vavti
8220a6584c remove apps from usermenu 2017-02-02 11:19:06 +01:00
Mario Vavti
d4b51c491f do not use style in template 2017-02-02 10:59:20 +01:00
Mario Vavti
3f66d9f8cd do not use data-toggle on the badge and use fixed with for icons 2017-02-02 10:54:44 +01:00
Mario Vavti
852073fc68 dropdown menus should be restricted in height in normal view but not in collapsed view 2017-02-02 10:33:23 +01:00
Mario Vavti
17082cda3c remove badge hover effect 2017-02-02 10:15:05 +01:00
Mario Vavti
7ffa98118f really fix badge positions 2017-02-02 10:12:56 +01:00
Mario Vavti
c3bada3c32 resolve merge conflict 2017-02-02 09:38:07 +01:00
zotlabs
23303391e0 move dreamhost hack to plugin 2017-02-01 22:45:03 -08:00
zotlabs
8ac8acc49c drug dealers have users 2017-02-01 18:18:41 -08:00
zotlabs
94290102b6 tested extensible permissions by adding wiki permissions. Discovered a couple of issues that needed attention in the process. 2017-02-01 18:05:02 -08:00
zotlabs
f94c244b9f Merge pull request #664 from anaqreon/doco
Doco updates
2017-02-02 12:52:09 +11:00
Andrew Manning
ec823196e0 Remove old tags and mentions doco pages 2017-02-01 20:47:03 -05:00
Andrew Manning
957647bf06 Remove dead links 2017-02-01 20:43:47 -05:00
Andrew Manning
df5524979d Integrate tags and mentions page doco into member guide. Fix bug when loading page with section link. Change URL when scrolling to stay current with viewed section to facilitate easy help page link sharing. 2017-02-01 20:39:27 -05:00
Andrew Manning
0ae3e50bd4 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-02-01 20:07:38 -05:00
zotlabs
db710cd2df fix a few style issues with nav login panel 2017-02-01 14:45:52 -08:00
Andrew Manning
61407ad6c8 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-02-01 17:08:46 -05:00
Mario Vavti
2e0180ba55 Merge branch 'dev' into wip-app-bin 2017-02-01 22:36:25 +01:00
Mario Vavti
d476b7477b fix notifications badge positioning and rendering of submenus in collapsed mode 2017-02-01 22:24:37 +01:00
zotlabs
ec037abf92 bookmarks missing from tags and mentions doc 2017-02-01 11:29:18 -08:00
Mario Vavti
1a56045b42 nav dropdown-menu overrides 2017-02-01 13:08:41 +01:00
Mario Vavti
bf820beb79 remove experimental_app_bin config conditional 2017-02-01 12:59:56 +01:00
Mario Vavti
cde7a3f66c more work on app-bin 2017-02-01 12:52:19 +01:00
zotlabs
4f99d641c5 superfluous whitespace cleanup 2017-01-31 17:32:52 -08:00
zotlabs
f4aca35a88 move diaspora account import to the diaspora plugin 2017-01-31 16:01:47 -08:00
zotlabs
732065bf13 channel export - use a selected list of functional data categories to export; this allows one to export single data sets instead of always exporting everything we know about 2017-01-31 15:28:25 -08:00
Andrew Manning
d3d540a28b Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-01-31 17:36:42 -05:00
Mario Vavti
a6cbebe03c hide featured app category in the app category widget 2017-01-31 12:53:33 +01:00
Mario Vavti
e1b54b6843 fix typos 2017-01-31 09:43:58 +01:00
zotlabs
aadbd5a92d Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-30 15:05:10 -08:00
zotlabs
7b065365e0 consolidate hubloc storage 2017-01-30 15:01:22 -08:00
Mario Vavti
d0827dbb3c provide a feature/unfeature app button 2017-01-30 15:17:46 +01:00
Andrew Manning
fab103524a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-01-30 06:03:53 -05:00
zotlabs
15be542e56 Merge pull request #662 from anaqreon/affinity-settings
Affinity settings
2017-01-30 18:04:53 +11:00
zotlabs
eebea70019 queue optimisations for sites that have lingered in the queue for more than a couple of days. 2017-01-29 17:16:06 -08:00
Andrew Manning
b58d56826b Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-01-29 20:02:34 -05:00
Andrew Manning
e770768b79 Link to Guest Access Tokens doco in context help. 2017-01-29 20:02:31 -05:00
Andrew Manning
17011a7637 Remove unrelated chatroom panel stuff that was included accidentally 2017-01-29 19:56:19 -05:00
Andrew Manning
f891860408 Merge remote-tracking branch 'upstream/dev' into affinity-settings 2017-01-29 19:53:41 -05:00
Andrew Manning
3424c7dc87 Add affinity slider tool settings for min and max defaults in settings/featured 2017-01-29 19:53:29 -05:00
zotlabs
dbf7ff9791 no quotes on dbutcnow() output 2017-01-29 16:33:30 -08:00
zotlabs
9addcfe827 finish remaining places where xchan_store_lowlevel needs to be used 2017-01-29 15:25:24 -08:00
zotlabs
d5d67708ac Alter the queue so that each queue item stores the scheduled time of the next delivery. This keeps the query for
queued items simple. We no longer group by posturl; as the queue update function will only keep one item per destination
scheduled for shorter term processing. Others (multiple queued items for a single destination) will be scheduled for
delivery far into the future and only delivered if the hub responds to the "active" or short term queue item.
2017-01-29 14:45:25 -08:00
zotlabs
5aa0017e91 provide lowlevel xchan storage function to ensure that all non-null rows are initialised 2017-01-28 15:01:19 -08:00
zotlabs
f90d5f3dc8 string update 2017-01-27 12:13:30 -08:00
Mario Vavti
8b5793e629 more work on app-bin 2017-01-27 17:51:49 +01:00
Mario Vavti
de668f5999 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-01-27 14:00:43 +01:00
Mario Vavti
606463114b add icons and links to appman and apps edit to app-bin 2017-01-27 14:00:27 +01:00
Andrew Manning
40242ff7dc Merge remote-tracking branch 'upstream/dev' into addon-repo-gui 2017-01-27 07:21:52 -05:00
Andrew Manning
e411c7e8b3 Improve context help with screenshot and replace "addon" with "plugin". 2017-01-27 07:21:23 -05:00
zotlabs
80e1130bb5 Merge pull request #655 from anaqreon/addon-repo-gui
Addon repo management GUI
2017-01-27 13:27:36 +11:00
Andrew Manning
d9a5b11c9a Fixed numerous bugs with the addon repo management GUI. Only show Manage Repos button if webserver has write permission on extend/addon/. 2017-01-26 21:20:15 -05:00
zotlabs
22839e48d0 better handling of html special chars in wiki and wikipage names 2017-01-26 15:16:41 -08:00
Mario Vavti
f7f39cf6c0 missing single quote in query 2017-01-26 14:50:52 +01:00
Mario Vavti
54826808cf minor cleanup 2017-01-26 12:23:59 +01:00
Mario Vavti
b30e799847 query for item_hidden is not needed anymore 2017-01-26 11:43:21 +01:00
Mario Vavti
b4aaa1953c fix wiki list template 2017-01-26 11:24:15 +01:00
Mario Vavti
d64dcd298e haystack/needle mixup 2017-01-26 11:03:41 +01:00
Mario Vavti
02e8058c50 fix renaming of wiki pages 2017-01-26 10:46:44 +01:00
zotlabs
93057fae8c missing quote in nav template 2017-01-25 21:43:55 -08:00
zotlabs
5bc6941b57 resolve the linked item delete issue by declaring what types of linked items cannot be deleted 2017-01-25 14:40:04 -08:00
zotlabs
45dbd31d28 only allow wiki owner to delete pages 2017-01-25 12:21:52 -08:00
zotlabs
45a9eca792 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-25 11:47:51 -08:00
zotlabs
b43064ce6e roll minor version 2017-01-25 11:46:59 -08:00
zotlabs
660c658c85 initialise item['postopts'] for mysql >= 5.7 2017-01-25 11:46:33 -08:00
zotlabs
7804ae6a78 initialise item['postopts'] for mysql >= 5.7 2017-01-25 11:43:54 -08:00
zotlabs
c916906716 Merge pull request #653 from git-marijus/dev
fixes for wiki create/delete page
2017-01-26 06:37:35 +11:00
Mario Vavti
1db57c498d fixes for wiki create/delete page 2017-01-25 19:41:47 +01:00
zotlabs
54f7cd5302 typo 2017-01-24 20:17:05 -08:00
zotlabs
9e70d54300 always sync parent wiki when syncing pages, just in case the original wiki creation wasn't synced. 2017-01-24 20:14:58 -08:00
zotlabs
7465ca269b Merge branch 'master' of https://github.com/redmatrix/hubzilla into master_merge 2017-01-24 19:44:55 -08:00
zotlabs
508157f07f block well-known from oembed 2017-01-24 19:44:45 -08:00
zotlabs
33aa373b3f minor 2017-01-24 19:44:24 -08:00
zotlabs
d96a7bc1fa block well-known from oembed 2017-01-24 18:33:41 -08:00
zotlabs
dad8397763 initial selections for extensible permission categories ("permcats") 2017-01-24 16:00:58 -08:00
Mario Vavti
e26295b6fa do not show location row on small viewports. 2017-01-24 10:26:50 +01:00
Mario Vavti
c8239c739d do not show location row on small viewports. 2017-01-24 10:25:31 +01:00
zotlabs
6c4f7caba1 nav-login - basic, crude theming 2017-01-23 16:51:23 -08:00
zotlabs
cb47354a4f put login form into the nav bar. Proof of concept - needs a bit of UI tweaks. 2017-01-23 16:31:40 -08:00
zotlabs
61588a4b77 add observer.language to the doco 2017-01-23 15:42:41 -08:00
zotlabs
142dd0053a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-23 11:37:18 -08:00
zotlabs
0d9e12737a remnant code that checked for version to see if an app was installed. We do that differently now. 2017-01-23 11:36:28 -08:00
Mario Vavti
dfafa81bfe give apps a bit more horizontal space 2017-01-23 17:10:52 +01:00
Hubzilla
cda284424f synced wikis should be relocated 2017-01-22 18:56:14 -08:00
Hubzilla
610699d3c4 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-22 18:53:13 -08:00
Hubzilla
17f1d39fcf basic support for clone syncing of wikis and wiki pages 2017-01-22 18:48:45 -08:00
zotlabs
85766126e3 Merge pull request #650 from mjfriaza/dev
Translation of the new strings into the Spanish version
2017-01-23 12:07:16 +11:00
Hubzilla
3bafa05ad1 force app icons to fixed width 2017-01-22 16:09:55 -08:00
Hubzilla
1627297143 use icons for app photos. 2017-01-22 15:17:37 -08:00
Mario Vavti
951376852c some work on app_bin - just to get it going 2017-01-22 13:45:34 +01:00
Manuel Jiménez Friaza
4d3647066f Translation of the new strings into the Spanish version 2017-01-22 12:13:28 +01:00
Mario Vavti
9e509aa25b $a is deprecated 2017-01-22 10:21:01 +01:00
Mario Vavti
d2226c0e9b whitespace cleanup 2017-01-22 10:20:39 +01:00
Hubzilla
1d65bc6382 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-21 15:24:09 -08:00
Hubzilla
b513662b52 remove the channel introduction on the system notifications page. "Hubzilla, George commented on your status 20 minutes ago". We need the channel introduction (in this case "Hubzilla," in emails for situations where one person controls a lot of channels. We don't need it on the web notification summary; where you're only viewing notifications for a single given channel. 2017-01-21 15:20:59 -08:00
Mario Vavti
8794106e85 add observer.language to autocomplete and return a default value for observer 2017-01-21 23:28:57 +01:00
Mario Vavti
88caa14030 fix text highlighter for PHP version 7.1 2017-01-21 21:04:36 +01:00
Hubzilla
bb233a9872 add bbcode language conditionals to wiki 2017-01-20 15:42:15 -08:00
Hubzilla
9acd3ebd42 observer.language!={something} for completeness 2017-01-20 15:30:08 -08:00
Hubzilla
0368b6730f language aware content 2017-01-20 13:36:37 -08:00
Hubzilla
ece1dd1d7e js errors with raw message-id, string update 2017-01-20 12:03:46 -08:00
Hubzilla
f57926d9ec Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-19 15:40:28 -08:00
Hubzilla
96f196febd add gen_link_id() function to selectively encode/decode the message-id component of /display/ links for message-ids that contain troublesome characters 2017-01-19 15:37:30 -08:00
Mario Vavti
4295b1945e we need channel_id here not the whole channel 2017-01-19 10:02:26 +01:00
Hubzilla
5ce96b9b95 more urlencoding of message-ids which are used in links 2017-01-18 19:36:06 -08:00
Hubzilla
7dfadfea4a urlencode the message-id component of generated /display/ links; in most cases this will be a no-op, unless the message-id is a url of some kind from a different provider. 2017-01-18 18:45:17 -08:00
Hubzilla
d4e58e94f6 native wiki updates 2017-01-18 18:18:37 -08:00
Hubzilla
6e504b7bc9 nwiki updates 2017-01-18 17:45:27 -08:00
zotlabs
7f944515de more work on native wiki - revert now works; still remaining: diff, delete-page, rename-page and export wiki. 2017-01-17 23:39:28 -08:00
zotlabs
b6595a44d1 native wiki stuff 2017-01-17 17:41:19 -08:00
zotlabs
335d9af8dc daemon_addon hook - lets plugins create custom background processes. 2017-01-17 00:14:47 -08:00
zotlabs
8478ecc675 Merge pull request #645 from git-marijus/dev
do not choke if photo_factory() returns null
2017-01-16 18:31:09 +11:00
zotlabs
e5662dc893 vcard export from profile 2017-01-15 21:23:43 -08:00
zotlabs
0ef2cd8719 array pointer in wrong place 2017-01-15 19:55:59 -08:00
zotlabs
c32bc9dda4 more integration of vcard and profiles 2017-01-15 19:51:14 -08:00
zotlabs
d7080defd3 Still trying to make the documentation link just a wee bit more obvious. 2017-01-15 16:08:51 -08:00
zotlabs
b20cce1408 attach_delete() - remove photo resources even if the attach table row wasn't found. 2017-01-15 15:24:51 -08:00
Mario Vavti
9682c48b5b min version bump 2017-01-15 13:53:56 +01:00
git-marijus
6a242f0d08 Merge pull request #646 from anaqreon/doco
Make master doco current with dev doco
2017-01-15 13:50:18 +01:00
Andrew Manning
b1f3ccc6ee pull in some CSS 2017-01-15 07:27:48 -05:00
Mario Vavti
a36d74dad5 do not choke if photo_factory() returns null 2017-01-15 13:23:28 +01:00
Andrew Manning
128d47430d pull latest doco from dev branch 2017-01-15 07:22:19 -05:00
zotlabs
e843d27f8c Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-13 13:23:21 -08:00
zotlabs
4f1e4ffa70 several minor app nits 2017-01-13 13:22:36 -08:00
zotlabs
7249eebc75 string update 2017-01-13 04:12:21 -08:00
Mario Vavti
8ea0b2051a another try on preventing double scrollbars when a modal is larger than the viewport 2017-01-13 13:04:30 +01:00
Mario Vavti
c8678ba5a9 evert "prevent double scrollbar when we have a modal larger than the viewport"
This reverts commit 2ace4c57d0.
2017-01-13 12:53:45 +01:00
Mario Vavti
2ace4c57d0 prevent double scrollbar when we have a modal larger than the viewport 2017-01-13 11:24:34 +01:00
Mario Vavti
8ef84e2aa7 possibly improve the album list query and save the result in App::$data 2017-01-13 11:22:50 +01:00
zotlabs
bb0f3afb71 default cover photo support. 2017-01-12 18:52:29 -08:00
zotlabs
9fb8661eef missing protect_sprintf which is the source of issue #642 - if a mention search contains % it will result in an SQL vsprintf error 2017-01-12 13:05:36 -08:00
Mario Vavti
91b81d6a2c fullscreen in album-view is disfunctional atm 2017-01-12 15:29:49 +01:00
Mario Vavti
88ac326caf we should actually check for existance of a given album at this place. this query can probably be more simple though 2017-01-12 12:32:31 +01:00
Mario Vavti
bdd420a08e Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2017-01-11 22:16:19 +01:00
Mario Vavti
76daa03df0 comment out redundant querys 2017-01-11 22:16:02 +01:00
zotlabs
62ad4dd109 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-11 12:32:19 -08:00
zotlabs
41dc40dd84 expires lost during edit 2017-01-11 12:31:55 -08:00
Mario Vavti
2fc47cc52b fix embedimage if an albumname contains quotes 2017-01-11 10:59:46 +01:00
zotlabs
9ad44a2060 btlogger trace file logging not working as desired. 2017-01-10 17:37:41 -08:00
zotlabs
5092cb75f4 normalise feed id 2017-01-10 14:25:11 -08:00
zotlabs
f2f6a05342 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-10 11:22:32 -08:00
zotlabs
52441dd754 add gravizot.de to directory server fallbacks 2017-01-10 11:21:51 -08:00
Mario Vavti
38dd1c342a font awesome 4.7.0 2017-01-10 10:19:22 +01:00
Mario Vavti
0f89db3b46 /connedit do not show vcard and section selector if not yet approved. whitespace cleanup 2017-01-10 10:15:48 +01:00
zotlabs
120afb30c1 obj_type on edit activity was wrong 2017-01-09 22:12:44 -08:00
zotlabs
47bc573de5 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-09 14:38:49 -08:00
zotlabs
a6272fcf76 channel move stuff (disabled currently because not yet complete) 2017-01-09 14:37:56 -08:00
Mario Vavti
b8f0e565f5 implement a menu to select a section to be open by default 2017-01-09 12:03:32 +01:00
zotlabs
83c9753507 Merge pull request #640 from mjfriaza/dev
Updated the Spanish translation
2017-01-09 08:37:20 +11:00
zotlabs
91e0733e8e Comanche: add greater/less than (plus greater/less than or equal) conditionals 2017-01-07 16:14:04 -08:00
zotlabs
dd97d84c19 Comanche conditionals - provide a conditional "~=" form for testing 'contains' (case independent substring match). Also add $request the request uri) to the supported variables. 2017-01-07 15:58:01 -08:00
zotlabs
b2a4075e12 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-07 13:58:29 -08:00
zotlabs
96e668a5b9 add enclosures and categories to atom feed 2017-01-07 13:29:32 -08:00
zotlabs
c9f4184126 allow the atom_entry hook to change the results 2017-01-07 12:47:19 -08:00
zotlabs
6f1209ea49 typo 2017-01-07 04:51:44 -08:00
zotlabs
89f0ecf25d update the atom_entry hook 2017-01-07 04:04:11 -08:00
Manuel Jiménez Friaza
eca70d81c8 Updated the Spanish translation 2017-01-07 12:26:54 +01:00
Mario Vavti
639966622f min version bump 2017-01-07 10:09:45 +01:00
Mario Vavti
be7e249630 fix main width if right aside is hidden 2017-01-07 10:07:50 +01:00
Mario Vavti
d1493e6b70 fix main width if right aside is hidden 2017-01-07 10:07:05 +01:00
zotlabs
fb059bfdc3 more feedutils cleanup 2017-01-06 20:20:49 -08:00
zotlabs
a3c45d47e6 add the ostatus:conversation element which is now more or less required by GNU-Social to work around some short-comings of the OStatus delivery model when it comes to conversational message grouping. If this element isn't there, message replies will not get grouped with the parent specified in thr:in-reply-to, which exists to group conversations together. The reasoning being that due to the point-to-point delivery model, a reply could arrive on one site which does not have a copy of the parent specified by thr:in-reply-to. Hence further replies arriving on this site are grouped with the first arrived comment as the parent. Since this project doesn't allow comments which don't have top-level parents, we can just set it to the parent-mid and save being forced to create a new database structure for orphan children acting as parents. 2017-01-06 13:42:45 -08:00
zotlabs
6db2561eda preserve the original message-id coming from feeds - we will have to escape them properly before calling mod_display. 2017-01-06 13:25:57 -08:00
zotlabs
ba2d0fae0e Merge branch 'dev' into gnusoc 2017-01-06 12:24:26 -08:00
zotlabs
7f9e91f1c7 strings 2017-01-06 12:19:41 -08:00
zotlabs
2312302dea setup: check disabled functions more precisely than using a string match 2017-01-05 14:17:56 -08:00
zotlabs
dfede52048 ical import/export - provide mechanism to preserve original source formatting across zot based systems. 2017-01-05 13:55:04 -08:00
zotlabs
a87d12f167 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-05 12:19:14 -08:00
zotlabs
ec18c3770b issue #639, voting setting is lost after post is edited (also the disabling of comments) 2017-01-05 12:17:36 -08:00
Mario Vavti
3e0ea9727f same fix for mobile view 2017-01-05 17:55:25 +01:00
Mario Vavti
e64378f94f same fix for mobile view 2017-01-05 17:54:44 +01:00
Mario Vavti
888a7aa6b2 another min version bump 2017-01-05 17:43:24 +01:00
Mario Vavti
9cf2f424ad fix an issue with sticky_kit where input fields and textareas would blur on recalc. auto resize the notes textarea since if it sticks to the bottom it can not be properly resized 2017-01-05 17:42:30 +01:00
Mario Vavti
a1b35fb7d1 fix an issue with sticky_kit where input fields and textareas would blur on recalc. auto resize the notes textarea since if it sticks to the bottom it can not be properly resized 2017-01-05 17:40:45 +01:00
zotlabs
982b596fa4 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-01-04 15:29:14 -08:00
zotlabs
1ce8168d72 some gnusoc fixes 2017-01-04 11:47:08 -08:00
Mario Vavti
93ce2728b7 css fix 2017-01-04 16:40:11 +01:00
Mario Vavti
0364bf4913 css fix 2017-01-04 16:39:14 +01:00
Mario Vavti
48813c55d5 bump min version 2017-01-04 15:52:59 +01:00
Mario Vavti
a9a35ccb6b trigger sticky_kit:recalc if the size of left_aside_wrapper changes 2017-01-04 15:50:17 +01:00
Mario Vavti
4d5c20ce17 fix expand-aside button hiding if aside is empty 2017-01-04 15:50:13 +01:00
zotlabs
ced84a2b01 zot protocol doco updates 2017-01-03 12:59:05 -08:00
jeroenpraat
6a0055f69f Fixing some schemas 2017-01-03 21:07:49 +01:00
Mario Vavti
07b299abd2 trigger sticky_kit:recalc if the size of left_aside_wrapper changes 2017-01-03 17:56:40 +01:00
zotlabs
ae563e2b1c fix chat member list when one or members are connected via access tokens 2017-01-02 23:35:40 -08:00
zotlabs
1ceca4ae19 set 'adjust for viewer timezone' as the default for new events. 2017-01-02 14:13:02 -08:00
git-marijus
fa611b3616 Merge pull request #637 from anaqreon/dev
Guest access tokens
2017-01-02 20:08:51 +01:00
Andrew Manning
bc0d4f28ef Merge remote-tracking branch 'upstream/dev' into dev 2017-01-02 07:56:23 -05:00
zotlabs
369a29ac90 new roadmap 2017-01-01 22:33:18 -08:00
zotlabs
b88a735e54 feature: allow event creation in other timezones than your own. 2017-01-01 19:51:44 -08:00
zotlabs
dca4de80fd Merge branch 'pcard' into dev 2017-01-01 14:16:15 -08:00
zotlabs
bead3e6095 profile vcard - generate vcard on profile update 2017-01-01 14:15:07 -08:00
zotlabs
1436b075bf issue #636 - some localised (e.g. Italian) strings have single quotes which throw JS errors when used in single quoted template constructs. 2017-01-01 13:46:20 -08:00
zotlabs
9831b358f8 profile vcard - preliminary work 2017-01-01 13:29:27 -08:00
Andrew Manning
7b11e634aa Merge remote-tracking branch 'upstream/dev' into dev 2017-01-01 14:28:21 -05:00
Andrew Manning
dce5c7e249 Add guest access token section to member guide with screenshot of settings 2017-01-01 14:28:13 -05:00
Andrew Manning
7f60ab49b2 Merge pull request #634 from anaqreon/dev
I'm going to go ahead and merge this. It should be easy to revert undesired changes.
2017-01-01 08:06:30 -05:00
Andrew Manning
d1d3dcf1a0 Deleted old versions that have been integrated. Integrated and slightly revised Comanche doco. 2017-01-01 08:00:43 -05:00
Andrew Manning
ce87a0c1d3 Merge remote-tracking branch 'upstream/dev' into dev 2017-01-01 07:41:36 -05:00
zotlabs
75067524ae Merge branch 'master' of https://github.com/redmatrix/hubzilla into master_merge 2016-12-31 16:03:52 -08:00
zotlabs
1cd779459b better fix for #629 #635 based on ownership/authorship rather than message flags which could be forged 2016-12-31 16:03:41 -08:00
zotlabs
e2eb0b2eac better fix for #629 #635 based on ownership/authorship rather than message flags which could be forged 2016-12-31 15:56:45 -08:00
zotlabs
709bcedbed Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-31 13:39:40 -08:00
zotlabs
444e938e2d issues #629, #635 - edited post arriving from downstream source was not being rejected 2016-12-31 13:38:19 -08:00
Mario Vavti
9820baf82e fix expand-aside button hiding if aside is empty 2016-12-31 12:55:10 +01:00
Mario Vavti
7f2c7cacd3 bump min version 2016-12-31 09:44:27 +01:00
Mario Vavti
62a911a57e prevent eventual double scrollbar 2016-12-31 09:44:16 +01:00
Mario Vavti
fcd34e41ca css fixes and get rid of a javascript workaround 2016-12-31 09:44:09 +01:00
zotlabs
ba8a5ac82b peoplefind widget should honour directory option settings (such as this site only). 2016-12-30 13:31:59 -08:00
zotlabs
e5a6c0a94d Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-30 13:12:56 -08:00
zotlabs
a9c8d4a216 peoplefind widget should honour directory option settings (such as this site only). 2016-12-30 13:09:35 -08:00
Mario Vavti
6c7da13cd3 prevent eventual double scrollbar 2016-12-30 20:50:12 +01:00
Andrew Manning
2ba23ebb13 Reorganized and revised Zot Protocol content. Deleted some of the old pages that have been refactored. 2016-12-30 09:10:26 -05:00
Mario Vavti
74d69bdedc Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2016-12-30 13:35:59 +01:00
Mario Vavti
8a074dedb6 css fixes and get rid of a javascript workaround 2016-12-30 13:35:43 +01:00
zotlabs
3dd4bf9955 move api version call back to core 2016-12-30 02:48:42 -08:00
zotlabs
2e2254371a move api version call back to core 2016-12-30 02:45:16 -08:00
zotlabs
693f7366a2 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-30 02:36:24 -08:00
zotlabs
b673c804be profile clone issue with dev 2016-12-30 02:34:26 -08:00
zotlabs
03a1086ba3 logger typos 2016-12-30 02:32:53 -08:00
zotlabs
e8a2ad4315 logger typos 2016-12-30 02:31:53 -08:00
Mario Vavti
c9cbd2f4f6 update fullcalendar to version 3.1 2016-12-30 10:18:05 +01:00
zotlabs
90a99fc221 Merge pull request #633 from anaqreon/dev
Doco
2016-12-29 14:52:01 +11:00
Andrew Manning
a649c3b72e Merge remote-tracking branch 'upstream/dev' into dev 2016-12-28 19:41:09 -05:00
Andrew Manning
caec5d81eb Split Zot protocol and API into two pages. Revise text to add detail and improve presentation. 2016-12-28 19:40:53 -05:00
zotlabs
e4ec976a1f Merge pull request #632 from anaqreon/dev
Zot structures doco integrated into the Zot page.
2016-12-29 07:13:53 +11:00
Andrew Manning
13768fdb9b Zot structures doco integrated into the Zot page. Added nowrap option to [code] BBcode tag. 2016-12-28 14:58:25 -05:00
zotlabs
46e4bd5fe0 Merge pull request #631 from anaqreon/dev
Add webpage doco to Member guide. Add nav menu highlighting when scro…
2016-12-28 12:03:59 +11:00
Andrew Manning
95683c6239 Add webpage doco to Member guide. Add nav menu highlighting when scrolling past content 2016-12-27 19:57:53 -05:00
zotlabs
db9ea66069 Merge branch 'master' of https://github.com/redmatrix/hubzilla into master_merge 2016-12-27 15:28:52 -08:00
zotlabs
ef02464e3c issue with HTML in code blocks in markdown in wiki 2016-12-27 15:28:42 -08:00
zotlabs
d29bd4b054 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-27 15:27:38 -08:00
zotlabs
17b7042a25 issue with HTML in code blocks in markdown in wiki 2016-12-27 15:26:47 -08:00
Andrew Manning
75afb37987 Merge pull request #630 from anaqreon/dev
BBcode reference page is essentially complete.
2016-12-27 07:37:13 -05:00
Andrew Manning
528a66fc97 Revert parseIdentityAwareHTML() 2016-12-27 07:35:33 -05:00
Andrew Manning
b245311a7e Revert parseIdentityAwareHTML() 2016-12-27 07:34:47 -05:00
Andrew Manning
4b2ef39648 BBcode reference page is essentially complete. There is still room for improvement. 2016-12-27 07:32:39 -05:00
zotlabs
286c3eafe3 minor cleanup 2016-12-26 14:17:40 -08:00
zotlabs
3bb6c667db Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-26 13:11:54 -08:00
zotlabs
b530d1d449 perform input validation on xchan_store and re-enable the post method of the xchan api endpoint. 2016-12-26 13:10:24 -08:00
zotlabs
fdbb5b67a8 Merge pull request #628 from anaqreon/dev
Doco revisions
2016-12-27 07:29:57 +11:00
Andrew Manning
67f09fb1d6 Almost completed reconstruction of bbcode reference page 2016-12-26 14:59:18 -05:00
Andrew Manning
1a5dd5c87c Updated markup language support doco. Modified parseIdentityAwareHTML BBcode parsing to support the BBcode reference which is now in /help/member/bbcode.html. Add Bootstrap classes to tables for BBcode tables that have the border=0 or border=1 options set. 2016-12-26 08:58:40 -05:00
Andrew Manning
c2a189ab18 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2016-12-26 06:52:56 -05:00
zotlabs
56219f9f61 create first webpage as 'home' if none exist. 2016-12-25 14:40:50 -08:00
zotlabs
c38e7ee3e3 show webpages link to visitors if a 'home' page exists. This means the nav menu must be used to edit pages. 2016-12-25 14:26:27 -08:00
Andrew Manning
5e490ed8b7 Fix broken link 2016-12-25 12:59:34 -05:00
zotlabs
9f9b1d3ce6 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-24 15:02:03 -08:00
zotlabs
35ed9b9b72 issue with post signatures if posted from api and logged in locally with a different identity. 2016-12-24 15:00:37 -08:00
Mario Vavti
4ab2d46113 update changelog 2016-12-23 10:07:12 +01:00
zotlabs
1e53528363 Merge pull request #627 from anaqreon/dev
Merging proposed changes to 2.0RC for doco revisions
2016-12-23 15:35:12 +11:00
Andrew Manning
5d8334d7f4 Merging proposed changes to 2.0RC for doco revisions 2016-12-22 21:49:16 -05:00
Mario Vavti
3629468d47 move style info into css file 2016-12-22 15:20:02 +01:00
Mario Vavti
c5d6f58988 another check 2016-12-22 15:01:29 +01:00
Mario Vavti
6cb527a937 a cleaner way to work around browser bugs 2016-12-22 14:55:05 +01:00
Mario Vavti
2ce6d47519 more robust crossbrowser support 2016-12-22 11:54:04 +01:00
zotlabs
f2bfdfdedd provide separate logging (if configured) for btlogger which is used to catch really subtle issues which don't always leave an audit trail. Similar to dbfail.out, the file btlogger.out (if it exists and is write-able) will only log these unusual situations with backtraces so we can find the culprits. 2016-12-21 23:35:54 -08:00
zotlabs
9d49faca61 update util/hz to use zot api instead of the (now optional) twitter api 2016-12-21 16:44:33 -08:00
zotlabs
bb85e139f1 more vcard work 2016-12-21 15:03:33 -08:00
Mario Vavti
fcc92299eb css fixes 2016-12-21 12:55:49 +01:00
Mario Vavti
04472bd730 fix a glitch in sticky-kit and comment out alt_pager() in widget_conversations since it will not work there 2016-12-21 11:51:24 +01:00
Mario Vavti
e91a4bebed update changelog 2016-12-21 10:15:14 +01:00
zotlabs
3d811a17fe provide call button on connections list if mobile|tablet and a phone number exists 2016-12-20 23:26:31 -08:00
zotlabs
f3ec818a66 abook_vcard cleanup 2016-12-20 20:37:06 -08:00
zotlabs
a270ca5101 allow update of fn and initial setting from channel name 2016-12-20 19:31:50 -08:00
zotlabs
493aa9f20d progress on abook_vcard 2016-12-20 18:43:20 -08:00
zotlabs
6ff462abf3 more abook_vcard 2016-12-20 17:19:53 -08:00
zotlabs
4103344e48 abook_vcard first commit 2016-12-20 16:45:12 -08:00
Mario Vavti
7b7fa5f77b turns out we do need this in certain situations 2016-12-20 14:53:58 +01:00
Mario Vavti
4d478a3306 some changes to heading sizes to make some sense in the doco (this will undergo some refinement in the next release cycle when we possibly upgrade to bootstrap 4) and get rid of the accordion for now. 2016-12-20 11:37:57 +01:00
Andrew Manning
90dfa2ccaf More heading work and some content rearrangement. 2016-12-19 19:35:36 -08:00
Andrew Manning
c968d11943 Move headings down to start at H3 at Mario's direction 2016-12-19 19:35:19 -08:00
zotlabs
e0918816fb Merge pull request #622 from mjfriaza/dev
Translated new strings into Spanish version
2016-12-20 14:32:01 +11:00
zotlabs
d2cc7df7db allow tel: links on mobile devices 2016-12-19 18:59:40 -08:00
zotlabs
231b70b987 call zidify_links() when formatting bbcode for internal consumption 2016-12-19 16:06:49 -08:00
zotlabs
1798ebd395 improve oembed cache security 2016-12-19 15:38:42 -08:00
zotlabs
b1f4ea6206 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-19 14:35:44 -08:00
zotlabs
350627988e zidify private mail 2016-12-19 14:35:13 -08:00
Mario Vavti
3fe616b8fe Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2016-12-19 20:36:56 +01:00
Mario Vavti
a12b2c8d33 fix contextualHelpFocus() to work wit sticky aside 2016-12-19 20:36:40 +01:00
jeroenpraat
468fb3c77a Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev 2016-12-19 16:52:17 +01:00
jeroenpraat
3a4bd27333 Update NL strings 2016-12-19 16:51:30 +01:00
Mario Vavti
3ad3d3037f make sticky aside available for small screens. we had to get rid of the transition effect for this to work reliably 2016-12-19 12:46:36 +01:00
Mario Vavti
9c5f2de4ec this is not needed 2016-12-19 09:48:01 +01:00
zotlabs
ca2e2f5f45 deprecate bb_iframe 2016-12-18 22:33:23 -08:00
zotlabs
92f3d863fa re-factor item_photo_menu - there is some room for future development, currently it was made compatible with minimal template changes 2016-12-18 16:26:00 -08:00
Manuel Jiménez Friaza
5970df0606 Translated new strings into Spanish version 2016-12-17 13:20:04 +01:00
zotlabs
e1819a874f use darkorange. 2016-12-16 22:47:25 -08:00
zotlabs
0c665e11f1 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-16 19:57:49 -08:00
zotlabs
827d4c5fb0 use lock colour to indicate that permissions have been set by the software to something you might not expect rather than an exclamation mark. This may not be the best colour in this page context, but it serves the intended purpose. Perhaps orange might be less intrusive and still convey the desired information. 2016-12-16 19:54:07 -08:00
zotlabs
e46fcc2893 string update 2016-12-16 19:52:19 -08:00
Mario Vavti
6eed7eb540 display inline instead of floating 2016-12-16 22:50:19 +01:00
Mario Vavti
dc34bf18bb retrigger after fullscreen 2016-12-16 16:24:17 +01:00
Mario Vavti
6bde70d60a move the sticky-kit^Cquery plugin to /lib and see if we want this for the whole app 2016-12-16 16:14:56 +01:00
Mario Vavti
5252211c92 some fixes for doco nav 2016-12-16 11:49:27 +01:00
zotlabs
1d63654662 there are occasional sites which use different capitalisation of Content-Type; which is rare, but completely legal. 2016-12-15 18:08:23 -08:00
zotlabs
6cf17c7bcc use array_shift - it's cleaner 2016-12-15 16:41:01 -08:00
zotlabs
95485a0da2 z_fetch_url incorrect variable 2016-12-15 16:02:52 -08:00
zotlabs
f67acc82cf html2plain warnings 2016-12-15 13:45:27 -08:00
Mario Vavti
e2f1ce7758 note widget: whitespace and resize the textarea to reveal full content 2016-12-15 14:50:26 +01:00
Mario Vavti
273ab304b9 reworked doco navigation 2016-12-15 12:25:59 +01:00
Mario Vavti
2a2a4b96c7 more wiki cleanup 2016-12-15 10:56:16 +01:00
zotlabs
b630a01131 Merge pull request #600 from toppoint/dev
Configuring email notifications per channel
2016-12-15 15:56:52 +11:00
ilu33
f25189fc74 Drop on switch for notifications 2016-12-15 05:55:23 +01:00
zotlabs
00fc66d8e8 postgres is picky about this stuff 2016-12-14 20:51:10 -08:00
ilu33
97f17374f2 Missing single quotes 2016-12-15 05:47:02 +01:00
xxx
f16b19faf3 Merge branch 'dev' of https://github.com/toppoint/hubzilla into dev 2016-12-15 04:59:54 +01:00
ilu33
4ce16e9e91 Configuring email notifications per channel 2016-12-15 04:56:34 +01:00
zotlabs
bae28965ab issue #446 apps usability - disable app if attached to a plugin that is uninstalled, allow system apps to be soft deleted and undeleted from the edit pane. 2016-12-14 19:11:01 -08:00
zotlabs
63efbdffe6 markdown regex 2016-12-14 14:27:00 -08:00
Mario Vavti
a7af6d8a3c fix regex 2016-12-14 13:18:02 +01:00
Mario Vavti
028935a318 wiki: do not show revert buttons if we do not have write perms and minor cleanup 2016-12-14 11:55:52 +01:00
Mario Vavti
62353191e8 fix btn-group rendering 2016-12-14 09:57:22 +01:00
zotlabs
cbffd32d8e use absolute namespace in case this gets moved 2016-12-13 20:05:36 -08:00
zotlabs
0394a3e939 tag and mention handling in private mail (which required refactoring the bbcode cleanup stuff in mod_item) 2016-12-13 20:01:38 -08:00
zotlabs
8e400e9e40 update hook doco 2016-12-13 18:47:07 -08:00
zotlabs
66a53c6d3c add plugin hook to zot_best_algorithm() 2016-12-13 18:43:47 -08:00
zotlabs
f111c5c325 mail preview (basic functionality) 2016-12-13 17:30:02 -08:00
zotlabs
c4a9b61da6 restructuring include/message for mail preview 2016-12-13 16:34:08 -08:00
zotlabs
23823811e9 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2016-12-13 15:15:37 -08:00
jeroenpraat
dce03a36d0 update dutch strings 2016-12-13 23:37:03 +01:00
Mario Vavti
b24b3d21e1 dropdown position fixes 2016-12-13 11:24:29 +01:00
Mario Vavti
0927af40c3 bring lockview to wikilist 2016-12-13 11:14:22 +01:00
Mario Vavti
0979f11cc3 do not increase opacity to more than 1 2016-12-13 10:23:56 +01:00
Mario Vavti
68bdd26426 simplify wikilist widget 2016-12-13 10:09:56 +01:00
git-marijus
e00062ea8f Merge pull request #619 from anaqreon/dev
Make region_1 table of contents "unsticky" when width is less than
2016-12-13 09:27:15 +01:00
zotlabs
ca44ce5f8c document the stream_item hook before I forget 2016-12-12 20:28:13 -08:00
Andrew Manning
812ac259e2 Make region_1 table of contents "unsticky" when width is less than 768px for better mobile support. 2016-12-12 20:10:50 -05:00
ilu33
ae4cf98458 Configuring email notifications per channel 2016-11-24 04:32:23 +01:00
4273 changed files with 281076 additions and 145460 deletions

8
.gitignore vendored
View File

@@ -14,7 +14,7 @@
*.rej
# OSX .DS_Store files
.DS_Store
# version scripts (repo master only)
# version scripts (repo master only)
.version*
Thumbs.db
@@ -27,6 +27,7 @@ custom/
/store/
# site apps
apps/
!doc/context/*/apps
# default startpage
home.html
# page header plugin
@@ -44,7 +45,8 @@ doc/html/
.zotshrc
# external repositories for themes/addons
extend/
# files generated by phpunit
tests/results/
## exclude IDE files
# config files and folders from Eclipse
@@ -63,6 +65,8 @@ nbproject/
## composer
# locally installed composer binary
composer.phar
# allow composer.lock, as it is required to have a common state
!composer.lock
# vendor/ is managed by composer, no need to include in our repository
# requires new deployment and needs discussion first
#vendor/

View File

@@ -491,7 +491,7 @@ END
print_info "letsenrypt exists already (nothing downloaded > no certificate created and registered)"
return 0
fi
git clone https://github.com/lukas2511/letsencrypt.sh $le_dir
git clone https://github.com/lukas2511/dehydrated $le_dir
cd $le_dir
# create config file for letsencrypt.sh
echo "WELLKNOWN=$le_dir" > $le_dir/config.sh
@@ -511,9 +511,9 @@ END
then
die "Failed to load $url_http"
fi
# run letsencrypt.sh
# run script dehydrated
#
./letsencrypt.sh --cron --config $le_dir/config.sh
./dehydrated --cron --config $le_dir/config.sh
}
function configure_apache_for_https {
@@ -730,8 +730,8 @@ echo "#" >> /var/www/$hubzilladaily
echo "echo \" \"" >> /var/www/$hubzilladaily
echo "echo \"+++ \$(date) +++\"" >> /var/www/$hubzilladaily
echo "echo \" \"" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - renew certificat...\"" >> /var/www/$hubzilladaily
echo "bash $le_dir/letsencrypt.sh --cron --config $le_dir/config.sh" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - renew certificate...\"" >> /var/www/$hubzilladaily
echo "bash $le_dir/dehydrated --cron --config $le_dir/config.sh" >> /var/www/$hubzilladaily
echo "#" >> /var/www/$hubzilladaily
echo "# stop hubzilla" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - stoping apache and mysql...\"" >> /var/www/$hubzilladaily
@@ -798,7 +798,7 @@ echo "echo \"\$(date) - db size...\"" >> /var/www/$hubzilladaily
echo "du -h /var/cache/rsnapshot/ | grep mysql/hubzilla" >> /var/www/$hubzilladaily
echo "#" >> /var/www/$hubzilladaily
echo "# update" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - updating letsencrypt.sh...\"" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - updating dehydrated...\"" >> /var/www/$hubzilladaily
echo "git -C /var/www/letsencrypt/ pull" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - updating hubhilla core...\"" >> /var/www/$hubzilladaily
echo "git -C /var/www/html/ pull" >> /var/www/$hubzilladaily

View File

@@ -1,44 +1,164 @@
#
# Travis-CI configuration file for Hubzilla
#
## configure things
#
# see http://about.travis-ci.org/docs/user/languages/php/ for more hints
language: php
# list any PHP version you want to test against
# use newer 'trusty' based distro, old one is 'precise'
dist: trusty
# use docker based containers
sudo: false
# Git branches whitelist to build on Travis CI
branches:
only:
- master
- dev
# whitelist our tags for release deployments e.g. 2.2
- /^\d+\.\d+(\.\d+)?(-\S*)?$/
# Install additional software
addons:
# Install dependencies for generating API documentation with doxygen
apt:
packages:
- doxygen
- doxygen-latex
- graphviz
- ttf-liberation
# enable and start databases on a per job basis
#services:
# - mariadb
# - postgresql
# any PHP version we want to test against, current stable phpunit requires PHP >= 7.0
php:
# using major version aliases
- '7.0'
- '7.1'
# HHVM does not fulfil PHPUnit platform requirements as being compatible with PHP7 yet
#- 'hhvm'
# aliased to a recent 5.6.x version
- 5.6
# aliased to a recent 7.x version
- 7.0
# aliased to a recent hhvm version
- hhvm
# list of environments to test
env:
global:
# used for doxygen deployment script
- DOXYFILE: $TRAVIS_BUILD_DIR/util/Doxyfile
# Uncomment if a newer/specific version of Doxygen should be used
#- DOXY_VER: 1.8.12
# Code Coverage is slow, no need to have it in every build
- PHPUCOV: "--no-coverage"
# use matrix only for PHP and MySQL, all other combinations added through includes
matrix:
# trusty default MySQL 5.6
- DB=mysql MYSQL_VERSION=5.6
# optionally specify a list of environments, for example to test different RDBMS
#env:
# - DB=mysql
# - DB=pgsql
# optionally set up exclutions and allowed failures in the matrix
# Matrix configuration details
matrix:
fast_finish: true
# Additional check combinations
include:
# PHP7.1, mariadb 10.1
- php: '7.1'
env: DB=mariadb MARIADB_VERSION=10.1 CODECOV=1
# use mariadb instead of MySQL
addons:
mariadb: '10.1'
# PHP7.1, PostgreSQL 9.6
- php: '7.1'
env: DB=pgsql POSTGRESQL_VERSION=9.6
# Use newer postgres than 9.2 default
addons:
postgresql: '9.6'
services:
- postgresql
# PHP7.1, old precise distribution with MySQL 5.5
- php: '7.1'
env: DB=mysql MYSQL_VERSION=5.5
dist: precise
services:
- mysql
# MySQL 5.7 with Docker container
- php: '7.1'
env: DB=mysql MYSQL_VERSION=5.7
sudo: required
services:
- docker
# Excludes from default matrix combinations
# exclude:
# - php: hhvm
# env: DB=pgsql # PDO driver for pgsql is unsupported by HHVM (3rd party install for support)
allow_failures:
- php: hhvm
# cache composer downloads between runs
cache:
directories:
- $HOME/.composer/cache
#- $HOME/doxygen/doxygen-$DOXY_VER/bin
#
## execute things
#
before_install:
- travis_retry composer self-update
# Start MySQL 5.7 Docker container, needs some time to come up
- if [[ "$MYSQL_VERSION" == "5.7" ]]; then sudo service mysql stop; docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7 && sleep 25 && docker ps; fi
# Install composer dev libs
install:
- travis_retry composer install --optimize-autoloader --no-progress
# execute any number of scripts before the test run, custom env's are available as variables
#before_script:
# - if [[ "$DB" == "pgsql" ]]; then psql -c "DROP DATABASE IF EXISTS hello_world_test;" -U postgres; fi
# - if [[ "$DB" == "pgsql" ]]; then psql -c "create database hello_world_test;" -U postgres; fi
# - if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS hello_world_test;" -uroot; fi
install:
- composer require phpunit/phpunit
before_script:
# Use code coverage config for phpunit
- if [[ ! -z $CODECOV ]]; then export PHPUCOV=""; fi
# Some preparation tasks of environment
- ./tests/travis/prepare.sh
# DB specific prepare scripts
- if [[ "$DB" == "mysql" ]]; then ./tests/travis/prepare_mysql.sh; fi
- if [[ "$DB" == "mariadb" ]]; then ./tests/travis/prepare_mysql.sh; fi
- if [[ "$DB" == "pgsql" ]]; then ./tests/travis/prepare_pgsql.sh; fi
# omitting "script:" will default to phpunit
# use the $DB env variable to determine the phpunit.xml to use
script: vendor/bin/phpunit tests/unit/
script: ./vendor/bin/phpunit $PHPUCOV -c tests/phpunit-$DB.xml
after_success:
# Generate API documentation and deploy it to gh-pages
- ./tests/travis/gen_apidocs.sh
#after_failure:
# Deploying release and API documentation to GitHub
#before_deploy:
deploy:
- provider: pages
skip_cleanup: true
local_dir: $TRAVIS_BUILD_DIR/doc/html
github_token: $GH_TOKEN
on:
repo: redmatrix/hubzilla
branch: master
condition: '(-n "$GH_TOKEN") && ("$TRAVIS_JOB_NUMBER" == "${TRAVIS_BUILD_NUMBER}.1")'
# add API documentation to release, could also be used to provide full packages if we want to drop vendor from our repo
- provider: releases
skip_cleanup: true
api_key: $GH_TOKEN
file: 'doc/hubzilla-api-documentation.zip'
on:
repo: redmatrix/hubzilla
tags: true
condition: '(-n "$GH_TOKEN") && ("$TRAVIS_JOB_NUMBER" == "${TRAVIS_BUILD_NUMBER}.1")'
#after_deploy:
#after_script:
# configure notifications (email, IRC, campfire etc)
notifications:
#notifications:
# irc: "irc.freenode.org#yourfavouriteroomfortravis"
# a plugin/script to post to a hubzilla channel would be neat here

397
CHANGELOG
View File

@@ -1,3 +1,400 @@
Hubzilla 2.8 (2017-10-25)
- Redirect to be moderated items to /moderate
- Update notifications if notifications area remains open
- Create an actual logout module instead of relying on internal variables
- Add local_channel as a comanche condition variable
- Implement possibility to pin app-tray apps in the navbar via app category navbar_default
- Introduce custom navbars
- Re-implement single delivery
- Pdledit usability improvements
- Implement next generation notifications in right aside
- Implement single post view for /pubstream
- Make anonymous comments work in mod display
- Introduce notifications for unseen public stream posts (off by default)
- Preperatory work on Zot VI
- Add app for site admin
- Introduce experimental alternate channel_menu navigation (off by default)
- Introduce notifications for shared files
- Bring back notifications for account approvals
- Urlencode hashes from mod_acl
- Don't use chanlink_url() for feed mentions
- Design common friends widget to fit better in the app and move it to left aside
- Allow navbar to be used when cover photo is displayed in mod channel
- Implement admin setting to use imagick converter for large photos
- Process activity deletes from OStatus which for whatever reason do not use the industry standard tombstone mechanism
- Implement new css based spinner
- Move the link header initialisation from Router to Webserver
⁻ Extend activity_match() to work with arrays
- Updated the trusted CA cert database
- Ostatus - support likes of comments
- Provide ability to mention a forum by using !forumname as well as the traditional red style (@forumname+)
- Encrypt delivery reports (not backward compatible)
- Provide a space between link header params (draft-cavage-http-signatures-08)
- Turn common_friends into a widget
- Update to jquery-3.2.1
- Wiki pages sorted by name
- Create new hooks for permissions_accept and permissions_reject
- Provide rel=alternate link if no reshare content in post
- Add remote login button to login page
- DB update to add index to item.resource_id
- Implement wiki editing (name and acl)
- Provide a hook for importing a channel photo at channel creation time
- Implement wiki mimetype lock
- Bring back wiki downloads
- Add text/plain mimetype to wiki
- Implement per page mimetype selection for wikis
- Added english context help for apps and appman
- Implement owa (open web auth)
- Ignore diaspora_meta column on item import
- Check code permissions on cloud files
- Remove period from characters allowed in username
- Make comment highlighting more reliable
- Sign zot-info packets with httpsignatures
- Implement server to server magic auth
- Provide support for json-ld signatures
- Rewrite comment form open/close handling to be more reliable
- Radically reduce code duplication in updateConvItems()
- Remove discover tab in favour of the public stream app
- Apply autotime to all autotime classed elements when static loading a page
- Implement cards feature
- Extended support for help page translations including table of contents files at the top level
- Introduce util/dmkdir - a mkdir tool for DAV
- Various doco improvements
- Introduce util/dcp (DAV-copy) - copy file or directory from local system to Hubzilla
- Provide support for HTTPsig
- Implement mechanism for selective network following in protocol connectors (diaspora, ostatus, activitypub, zot, rss)
Bugfixes
- Fix w2w posts not removed in contact_remove() - github issue #837
- Fix guests not having a unique (non-existent) url
- Fix mod register re-using the password
- Fix write_storage permission not checked in /display
- Fix discovery of moderated items in enotify
- Fix profile thing image not deleted when thing deleted - github issue #868
- Fix deletions to comments not synced on wall posts
- Fix community tags not preserved on post edit - github issue #865
- Fix profile photo propagation issue if the local xchan_photo_[l|m|s] fields were changed from the /photo/profile/l/n form to photo/[hash] form by a clone operation
- Fix lockstate and current permissions not handed over to editor in mod card_edit
- Fix profile edit dropdown for multiple profiles
- Fix affinity slider spinner
- Fix mod pubsites broken
- Fix directory server admin selection includes known dead sites
- Fix sticky-kit issue where the bottom of left aside was not visible when section content was short
- Fix possibility to set bogus my_address
- Fix deleting of wiki pages
- Fix selected theme not appearing selected after change - github issue #855
- Fix an issue where some encoded mids were not found in /display
- Fix issue with mentions and xchans with @ or /
- Fix webfinger returns invalid XML - github issue #851
- Fix last remaining task in tasklist was not removed from view when completed
Plugins/Addon
Hubwall: Remove errant $1 string in sender name
Map federation protocols for zotinfo
Gnusoc: force ostatus profile photos to get refreshed monthly
Gnusoc: fix ostatus mention notifications
Gnusoc: unsubscribe to gnusoc feeds if connector is disabled
Phpmailer: not using load/unload
Gnusoc: don't provide some information if gnusoc is disabled by the channel
Diaspora: add a predelivery interval
Diaspora: support for likes on comments
Introduce the pubcrawl plugin - an unapologetically non-compliant ActivityPub Protocol implemention
Introduce gravatar plugin
Pubsubhubbub: produce much more compact PuSH feeds
Diaspora: support text comments on reshare posts
Diaspora: changes to delivery scenarios for the special handling of profile messages
Diaspora: put diaspora seed_location in json webfinger
Gnusoc: fix mis-attributed comments from mastodon
Gnusoc: allow discovery by url (not just reddress) and permit upgrade from 'unknown' network to gnusoc
Implement mechanism for selective network following in protocol connectors
Hubzilla 2.6.3 (2017-09-18)
- Fix anonymous comments/likes on photos - this is not yet implemented
- Fix favicon not displayed on certain pages
- Fix hubzilla logo icon for favicon and email notifications
- Fix an issue with displaying selected theme in settings/display
- [SECURITY] Restrict the input characters we accept in token verification strings to hex digits
- Remove hubzilla.nl from fallback directory servers
Hubzilla 2.6.2 (2017-08-31)
- Fix webfinger returns invalid XML (github issue #851)
Hubzilla 2.6.1 (2017-08-18)
- Fix a regression with dav clients
- Raise install requirements
Plugins/Addon
- Diaspora: fix PHP warning
- GNU-Social: fix PHP warning
Hubzilla 2.6 (2017-08-16)
- Upgrade to bootstrap-4 beta
- Consolidate disable_discover_tab config
- Fix some bbcode to markdown conversion issues
- Improved finding of recursive attachment permissions
- Smaller line-height for notification badges
- Bluegrid schema removed - will be added again if someone is willing to maintain it
- Improved file_activity()
- DB - add index for item.obj_type
- Add options flag to bb_to_markdown() so we can distinguish between diaspora use and other use and therefore filter and adjust content selectively
- Close the apps-menu if the notifications-menu is open and vice versa
- Remove redundant call to jquery ready function in photo albums view
- Remove borders from navbar toggler in mobile view
- Improve the formatting of shares when converting from bbcode to markdown
- Suppress fopen errors from dav
- Make local channel (not our own) nav menus appear similar to what we are used from remote channels
- Indicate the selected channel in the dropdown menu if the feature is enabled
- Provide a mechanism to mark apps active in the app tray
- Allow wildcard tag and category searches
- Improved installer
- Update some addon docs and ensure we only generate statistics once a day
- Turn url requests where argv[0] is something.xyz into module='something' and $_REQUEST['module_format'] = 'xyz'; But leave modules beginning with . (like .well_known) alone (convert the initial . to _ and then strip it)
- Turn platform name and std_version into config variables
- Implement chunked uploads on the wall
- Prevent expiration of conversations you are involved with
- Update htmlpurifier to version 4.9.3
- Update sabre/http to version 4.2.3
- Add optimize-autoloader to composer config
- Missing abook_{my,their}_perms in pg schema and missing keys in mysql schema
- Provide a gender icon on the profile sidebar within reason
- Provide more comprehensible information on the admin summary page
- Upgrade blueimp from 9.8 to 9.18
- Chanview - if already connected, bypass the chanview intermediary page and go straight to the remote profile.
- Allow poke by xchan_hash
- guess_image_type() - ignore scheme when checking for urls
- Remove unused page_widgets.php include and provide a general function for loading sql from file
- Migrate cdav from addons to core
- Address several mail issues
- Add files and photos to featured apps by default
- import_author_zot() fixes
- Remove deprecated app parameter from conversation()
- Implement anonymous comments (like wordpress)
- Add rel=noopener to all external target _blank links
- Add 'can_comment_on_post' hook so we can better deal with the complications of Diaspora policy
- Added Portfolio widget (requires foundation)
- Convert schema_mysql engine to InnoDB and charset utf8mb4
- Put unreachable federated connections in the archived tab of the connections list page
- Indicate on connections page if a federated connection from another network is unavailable from the current location
- Make authenticated oembeds optional, default to false.
- Remove text_highlight css load from core
- Numerous ostatus feed improvements (mastodon, gnu-social)
- Provide hook when deleting a connection - we need this to clean up dangling PuSH subscriptions
- Move code syntax highlighting to plugin
- Oembed: ensure that width and height are returned as type int and not float
- Rewrite wiki pages widget - no need for ajax on pageload, show the pages to not authenticated people.
- Convert randprof to use chanlink_hash() instead of chanlink_url() and filter sys channels by xchan.xchan_system instead of xchan_addr != sys@%
- Update Sabre libraries
- Only provide "connected apps" on the settings menu if techlevel > 0.
- Provide ability to search webpage
- Move disapora xrd stuff to plugin
- Deprecate server_role
- Introduce automatic language selection for help, webpages, and wiki content
- Provide ability to order apps in app-tray
- Replace Markdownify library with html-to-markdown library
Bugfixes
- Fix channel manager and nav channel select visible if in a delegate session
- Fix wrong wiki pages in the sidebar github issue #841
- Fix a bug where if multiple channels uploaded the same file to the same folder, the uploaded file would end up with an incremental number added to the filename for each upload even if the file did not exist yet in the channels folder
- Fix privacy groups not syncing across clones properly (github issue #832)
- Fix an issue where the ability to use a portion of the message-id to display a message wasn't honoured in all cases
- Fix minor issues in the bs-default schema
- Fix backward compatibility for album links generated in earlier times before the ambiguity of photo album names was solved (github issue #827)
- Fix photo item comments not ported to bs4
- Fix incorrect album link
- Fix incorrect follow url in webfinger
- Fix regression - allow position attributes in oembedable zcards
- Fix affinitiy slider settings were being updated on any submit of of settings/featured
- Fix minor weirdness in zot finger results after deleting a clone from a channel that was on a site which was previously migrated from http to https and still had the old hubloc
- Fix cloud headers already sent issue
- Partial fix for failure to sync photos - appears to be memory exhaustion and dependent on filesize although an unrelated issue was found with directory creation during file sync (we didn't check ownership when looking for duplicates)
- Fix github issue #810
- Don't allow negative age in directory listings
- Fix allow setting a default schema for the hub (github issue #797) and allow selecting of focus (hubzilla default) schema if a default is set
- Fix update_r1189() for mysql and postgres
Plugins/Addon
Diaspora: Rewrite the addon to implemented Diaspora Version 2 federation protocol
GNU-Social: GNU-Social and Mastodon compatibility was greatly increased and a "fetch conversations" feature added to try and locate missing contextual references and maintain conversations in posts from those networks
Rename statistics_json to statistics and implement nodeinfo v2
New authchoose addon to restrict what sites you authenticate to by default
Cdav addon moved to core
head_add_css() needs a preceding '/' to find files in the addons dir
New addon code syntax highlighting (moved from core to addon)
Pubsubhubbub: specify a minimum number of records - otherwise it defaults to zero
Hubzilla 2.4 (2017-05-31)
- Silence php warning during install
- Implemented switch statement logic in Comanche layout parser
- Don't allow html in plugin comment blocks
- Handle Mastodon urls in markdown/bbcode conversion
- Get rid of edit activities
- Collapse sysapps if viewing a remote channel
- Various Doxygen fixes
- Update SimplePie library to version 1.5
- Add check for PHP zip extension during install
- Add unit tests for AccessList class
- Authenticate onepoll so we can receive private posts/comments in zotfeed
- Various postgres fixes
- Some work on preparing clientside e2ee
- Allow to set a default channel for the rare case where a default channel is not selected but channels actually exist
- Support reverse magic-auth in oembed requests
- Improved handling of Mastodon feeds
- When template "none" is used in a webpage layout, then the contents of the page should be the sole output, with no other code before or after the page element content
- If there is no site record, site_dead won't be 0, in a left join it will in fact be null. As long as it isn't 1, we should attempt delivery
- Order wiki pages by creation date
- Backend infrastructure for channel protection password; which will be used to optionally encrypt export files and resolve channel/identity ownership/hijacking disputes
- Don't allow any null fields in notify creation
- Webfinger cleanup
- Envelope privacy
- We do not parse the body in discover_by_url(), so no need to preserve iframes in SimplePie
- Correct the mastodon "boost" (aka 'share') author attribution by checking for share activities and pulling the original author info from the activity:object
- Only log zot_refresh content if json decode was successful
- Revisit the import_author_zot algorithm yet again. There was one bug that we weren't returning necessary information in the first SQL query - and performance/loading problem if one tries to refresh a dead site
- Import_author_xchan - since we rarely refresh zot-info for non-connections, force a cache reload once a week to catch things like profile photo updates and location changes
- Create site_store_lowlevel() to initialise data structures for the site table
- Change hook for perm_is_allowed while retaining backwards compatibility
- import_author_zot() - check for both hubloc and xchan entries. This should catch and repair entries which were subject to transient storage failures
- Import authors from any unrecognised network as network 'unknown'
- Crypto update - default is now aes-256-ctr
- Get rid of get_app()
- Add 'author_is_pmable()' function with plugin hooks to control whether or not to display a 'send mail' link in the thread author menu
- Provide platform specific install script
- Allow for project specific DB updates
- Get rid of davguest
- Move db_upgrade to zlib
- Add CSRF protection for import and import_items
- Add some documentation for import functions
- Do not allow creating two wikis with the same name
- Update textcomplete library to version 1.8.0
- Create channel_store_lowlevel()
- Allow setting the system email name/address/reply
- Use the same host macro for sender address as for reply_to address
- Use the relevant attach directory/path for photo albums instead of an album basename which may not be unique. Created an 'ellipsify()' function to shorten long names and keep the beginning and end intact
- Simplify the message signing spaghetti
- Class MarkdownSoap to safely store markdown by purifying and preserving (escaped) what may be unsafe code in codeblocks. The stored item needs to be unescaped just prior to calling the markdown-to-html processor
- Remove the unimplemented upload limit site settings from UI
- Cleanup code_allowed
- Move widgets to standalone classes
- Upgrade redbasic to bootstrap 4
- Updated HTML Purifier from 4.6.0 to 4.9.2 with better PHP7 compatibility
- Remove redundant and non-functional/broken check for successfully cloned channel record which was left over from an earlier method of creating the table; which was deprecated a few months back
- Update bshaffer/oauth2-server-php library
- Add unit test for purify_html()
Bugfixes
- Fix website export tool creating invalid zip file - issue #790
- Fix files not synced correctly - issue #769
- Fix empty ACL should not result in no ACL when uploading a file
- Fix cover photo was unintentionally disabled when block_public in effect
- Fix markdown autolinks - issue 752
- Fix connectDefaultShare generated js function, though it isn't obvious if we still use it
- Fix a couple more instances where we were still calling mail() directly for site critical messages
- Fix when clicking a notification to view a private mail message, actually view that message instead of the most recent
- Fix group by item query
Plugins/Addon
- smileybutton: do not load emojis
- pubsubhubbub: fixes associated with recent compatibility feed mods
- gnusoc: mastodon follow_activity compatibility issues
- gnusoc: add profile photo to feed meta
- gnusoc: add salmon link information to the public feed when GNU-Social is enabled
- chess: fix bugs when deleting games
Hubzilla 2.2 (2017-03-08)
- Provide version compatibility check for themes (minversion, maxversion)
- Use chanlink_hash() instead of chanlink_url() where appropriate
- Use head_add_link() for feed discovery
- Provide HTTP header parser which honours continuation lines
- Numerous doco improvements
- Implement virtual privacy groups from restricted profile access list
- Implement permission roles
- Implement app-tray
- Default to manual conversation updates
- Implement channel move for all server roles
- Implement nav login modal
- Rename bb2diaspora.php to markdown.php
- Remove obsolete module 'match'
- Move firefox social api configuration to plugin
- Move rsd service to twitter_api plugin
- Add build_pagehead hook
- Move opensearch to plugins
- Move dreamhost hack to plugin
- Add wiki permissions
- Introduce hubloc_store_lowlevel() and xchan_store_lowlevel()
- Move diaspora account import to the diaspora plugin
- Allow export of single data sets instead of always exporting everything we know about in channel export
- Queue optimisations for sites that have lingered in the queue for more than a couple of days
- Add affinity slider tool settings for min and max defaults in settings/featured
- Provide lowlevel xchan storage function to ensure that all non-null rows are initialised
- Implement native wiki
- Block well-known from oembed
- Implement observer.language bbcode and observer.language comanche conditional
- Implement daemon_addon hook to let plugins create custom background processes
- Implement profile vcards
- Implement connection vcards
- Implement 'click to call' in address book
- Default cover photo
- Remove fullscreen functionality in photo album view
- Update fontawesome lib to version 4.7.0
- Implement a menu to select a section to be open by default in connedit
- Improve comanche conditionals
- Add enclosures and categories to atom feed parsing
- Allow the atom_entry hook to change the results
- Set 'adjust for viewer timezone' as the default for new events
- Allow event creation in other timezones than your own
- Update fullcalendar lib to version 3.1
- Move api version call back to core
- Create first webpage as 'home' if none exist
- Show webpages link to visitors if a 'home' page exists
Bugfixes
- Fix schema not saved if session theme != selected theme and schema select display issue
- Fix no acl not detected in post_activity_item()
- Fix find_folder_hash_by_path() was not safe against multiple attach structures with the same filename but in different directories
- Fix don't search on empty filename - we shouldn't find it. The reason why this change is being made is because we actually did find it due to a development glitch
- Fix several places where head_add_(css|js) functions have been used incorrectly.
- Fix webpage import tool
- Fix numerous bugs with the addon repo management GUI
- Fix attach_delete() to remove photo resources even if the attach table row wasn't found
- Fix choking if photo_factory() returns null
- Fix embedimage if an albumname contains quotes
- Fix chat member list when one or more members are connected via access tokens
- Fix issue #636 - some localised (e.g. Italian) strings have single quotes which throw JS errors when used in single quoted template constructs
- Fix issues #629 and #635 - edited post arriving from downstream source was not being rejected
- Fix peoplefind widget not honouring directory option settings
- Fix issue with HTML in code blocks in markdown in wiki
- Fix issue with post signatures if posted from api and logged in locally with a different identity
Plugins/Addon
- Add experimental webmention plugin
- NSFW: Use button instead of text link
- Diaspora: gracefully handle multiple photos per post
- Diaspora: change profile photo permission call
- Logrotate: don't throw an error if another server process renamed the logfile before we got to it
- Chess: the channel owner must be one of the players, so only require selecting one connection for an opponent
- Move firefox social api configuration to plugin from core
- Move rsd service to twitter_api plugin from core
- Move opensearch to plugins from core
- Move dreamhost hack to plugin from
- Move diaspora account import to addon from core
- Reflect hubloc store changes in plugins
- Reflect xchan store changes in plugins
- Rendezvous: Fixed marker creation bug
- Rendezvous: Center on marker if specified in URL, and update browser address bar with shareable link when selecting markers on the map
- Rendezvous: Set default value of 0 for priximity alert when making new markers
- Move gitwiki to plugins from core which has been replaced by native wiki
- Openclipatar: reflect changes to files and photos which were unified in core some time ago
- Reintroduce gnusocial plugin after security/functionality review
- Twitter_api: hubzilla core issue 638 - unsupported message-id field not available in all twitter api functions
- Superblock: update to reflect core changes
- Rendezvous: implement static marker proximity alert
- Phpmailer: security update
Hubzilla 2.0 (2016-12-23)
- Deprecate bb_iframe
- Note widget: resize the textarea to reveal full content

View File

@@ -1,4 +1,4 @@
Copyright (c) 2010-2016 the Hubzilla Community
Copyright (c) 2010-2017 the Hubzilla Community
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy

View File

@@ -3,60 +3,27 @@
Hubzilla - Community Server
===========================
Groupware re-imagined and re-invented.
--------------------------------------
Connect and link decentralised web communities.
-----------------------------------------------
<p align="center" markdown="1">
<em><a href="https://github.com/redmatrix/hubzilla/blob/master/install/INSTALL.txt">Installing Hubzilla</a></em>
</p>
**What are Hubz?**
Hubz are independent general-purpose websites that not only connect with their associated members and viewers, but also connect together to exchange personal communications and other information with each other.
This allows hub members on any hub to securely and privately share anything; with anybody, on any hub - anywhere; or share stuff publicly with anybody on the internet if desired.
**What is Hubzilla?**
**Hubzilla** is the server software which makes this possible. It is a sophisticated and unique combination of an open source content management system and a decentralised identity, communications, and permissions framework and protocol suite, built using common webserver technology (PHP/MySQL/Apache and popular variants). The end result is a level of systems integration, privacy control, and communications features that you wouldn't think are possible in either a content management system or a decentralised communications network. It also brings a new level of cooperation and privacy to the web and introduces the concept of personally owned "single sign-on" to web services across the entire internet.
Hubzilla is a general purpose communication server integrated with a web publishing system and a decentralised permission system. If this sounds like a bunch of technical mumbo-jumbo to you, just think of it as an independent platform for sharing stuff online.
Hubzilla hubz are
Hubzilla contains some social network bits, some cloud storage bits, some blog and forum bits, and some content management bits. These are all integrated within a common privacy framework - and it is all decentralised.
* decentralised
* inherently social
* optionally inter-networked with other hubz
* privacy-enabled (privacy exclusions work across the entire internet to any registered identity on any compatible hubz)
Everything you publish or share can be restricted to those channels and people you wish to share them with; and these permissions work completely invisibly - even with channels on different servers or other communications services.
Possible website applications include
Migration and live backups of your connections, settings, and everything you publish are built-in, so you never need worry about server failure.
* decentralised social networking nodes
* personal cloud storage
* file dropboxes
* managing organisational communications and activities
* collaboration and community decision-making
* small business websites
* public and private media/file libraries
* blogs
* event promotion
* feed aggregation and republishing
* forums
* dating websites
* pretty much anything you can do on a traditional blog or community website, but that you could do better if you could easily connect it with other websites or privately share things across website boundaries.
Hubzilla is completely decentralised and open source, for you modify or adapt to your needs and desires. Plugins, themes, and numerous configuration options extend the overall capabilities to do anything you can imagine.
<p align="center" markdown="1">
<em><a href="https://github.com/redmatrix/hubzilla/blob/master/install/INSTALL.txt">Installing Hubzilla</a></em>
</p>
**Who Are We and What Are Our Principles?**
The Hubzilla community is powered by passionate volunteers creating an open source **commons** of decentralised services which are highly integrated and can rival the feature set of centralised providers. We are open to sponsorship and donations to cover expenses and compensate for our time and energy, however the project core is basically non-profit and is not designed for the purpose of commercial gain or exploitation.
Some sites may include monetisation strategies such as subscriptions and *freemium* models where members pay for resources they consume beyond a basic level. The project community supports such monetisation initiatives (nobody should be forced to pay "out of pocket" to provide a service to others), but we maintain the **commons** to provide open and free access of the software to all.
The software is not designed for data collection of its members or providing advertising. We don't have a need or desire for these things and feel that software built around these goals is poorly designed and represents compromised principles and ethics.
As a project, we are inclusive of all beliefs and cultures and do what we are able to provide an environment that is free from hostility and harrassment. Whether or not we succeed in this endaevour requires constant vigilance and help from all members of the community, working together to build an inter-networking tool with amazing potential.
**Who Are We?**
The Hubzilla community consists of passionate volunteers creating an open source commons of decentralised services which are highly integrated and can rival the feature set of large centralised providers. We do our best to provide ethical software which places you in control of your online communications and privacy expectations.
[![Build Status](https://travis-ci.org/redmatrix/hubzilla.svg)](https://travis-ci.org/redmatrix/hubzilla)

View File

@@ -2,21 +2,55 @@
namespace Zotlabs\Access;
/**
* @brief AccessList class.
*
* A class to hold an AccessList object with allowed and denied contacts and
* groups.
*/
class AccessList {
/**
* @brief Allow contacts
* @var string
*/
private $allow_cid;
/**
* @brief Allow groups
* @var string
*/
private $allow_gid;
/**
* @brief Deny contacts
* @var string
*/
private $deny_cid;
/**
* @brief Deny groups
* @var string
*/
private $deny_gid;
/**
* @brief Indicates if we are using the default constructor values or
* values that have been set explicitly.
* @var boolean
*/
private $explicit;
/* indicates if we are using the default constructor values or values that have been set explicitly. */
private $explicit;
/**
* @brief Constructor for AccessList class.
*
* @note The array to pass to the constructor is different from the array
* that you provide to the set() or set_from_array() functions.
*
* @param array $channel A channel array, where these entries are evaluated:
* * \e string \b channel_allow_cid => string of allowed cids
* * \e string \b channel_allow_gid => string of allowed gids
* * \e string \b channel_deny_cid => string of denied cids
* * \e string \b channel_deny_gid => string of denied gids
*/
function __construct($channel) {
if($channel) {
if($channel) {
$this->allow_cid = $channel['channel_allow_cid'];
$this->allow_gid = $channel['channel_allow_gid'];
$this->deny_cid = $channel['channel_deny_cid'];
@@ -32,61 +66,95 @@ class AccessList {
$this->explicit = false;
}
/**
* @brief Get if we are using the default constructor values
* or values that have been set explicitly.
*
* @return boolean
*/
function get_explicit() {
return $this->explicit;
}
/**
* Set AccessList from strings such as those in already
* existing stored data items
* @brief Set access list from strings such as those in already
* existing stored data items.
*
* @note The array to pass to this set function is different from the array
* that you provide to the constructor or set_from_array().
*
* @param array $arr
* * \e string \b allow_cid => string of allowed cids
* * \e string \b allow_gid => string of allowed gids
* * \e string \b deny_cid => string of denied cids
* * \e string \b deny_gid => string of denied gids
* @param boolean $explicit (optional) default true
*/
function set($arr,$explicit = true) {
function set($arr, $explicit = true) {
$this->allow_cid = $arr['allow_cid'];
$this->allow_gid = $arr['allow_gid'];
$this->deny_cid = $arr['deny_cid'];
$this->deny_gid = $arr['deny_gid'];
$this->explicit = $explicit;
$this->explicit = $explicit;
}
/**
* return an array consisting of the current
* access list components where the elements
* are directly storable.
* @brief Return an array consisting of the current access list components
* where the elements are directly storable.
*
* @return Associative array with:
* * \e string \b allow_cid => string of allowed cids
* * \e string \b allow_gid => string of allowed gids
* * \e string \b deny_cid => string of denied cids
* * \e string \b deny_gid => string of denied gids
*/
function get() {
return array(
return [
'allow_cid' => $this->allow_cid,
'allow_gid' => $this->allow_gid,
'deny_cid' => $this->deny_cid,
'deny_gid' => $this->deny_gid,
);
];
}
/**
* Set AccessList from arrays, such as those provided by
* acl_selector(). For convenience, a string (or non-array) input is
* assumed to be a comma-separated list and auto-converted into an array.
*/
function set_from_array($arr,$explicit = true) {
$this->allow_cid = perms2str((is_array($arr['contact_allow']))
? $arr['contact_allow'] : explode(',',$arr['contact_allow']));
* @brief Set access list components from arrays, such as those provided by
* acl_selector().
*
* For convenience, a string (or non-array) input is assumed to be a
* comma-separated list and auto-converted into an array.
*
* @note The array to pass to this set function is different from the array
* that you provide to the constructor or set().
*
* @param array $arr An associative array with:
* * \e array|string \b contact_allow => array with cids or comma-seperated string
* * \e array|string \b group_allow => array with gids or comma-seperated string
* * \e array|string \b contact_deny => array with cids or comma-seperated string
* * \e array|string \b group_deny => array with gids or comma-seperated string
* @param boolean $explicit (optional) default true
*/
function set_from_array($arr, $explicit = true) {
$this->allow_cid = perms2str((is_array($arr['contact_allow']))
? $arr['contact_allow'] : explode(',', $arr['contact_allow']));
$this->allow_gid = perms2str((is_array($arr['group_allow']))
? $arr['group_allow'] : explode(',',$arr['group_allow']));
? $arr['group_allow'] : explode(',', $arr['group_allow']));
$this->deny_cid = perms2str((is_array($arr['contact_deny']))
? $arr['contact_deny'] : explode(',',$arr['contact_deny']));
? $arr['contact_deny'] : explode(',', $arr['contact_deny']));
$this->deny_gid = perms2str((is_array($arr['group_deny']))
? $arr['group_deny'] : explode(',',$arr['group_deny']));
? $arr['group_deny'] : explode(',', $arr['group_deny']));
$this->explicit = $explicit;
}
/**
* @brief Returns true if any access lists component is set.
*
* @return boolean Return true if any of allow_* deny_* values is set.
*/
function is_private() {
return (($this->allow_cid || $this->allow_gid || $this->deny_cid || $this->deny_gid) ? true : false);
}
}

View File

@@ -10,7 +10,7 @@ class PermissionLimits {
$perms = Permissions::Perms();
$limits = array();
foreach($perms as $k => $v) {
if(strstr($k,'view'))
if(strstr($k,'view') || $k === 'post_comments')
$limits[$k] = PERMS_PUBLIC;
else
$limits[$k] = PERMS_SPECIFIC;

View File

@@ -8,7 +8,7 @@ use Zotlabs\Lib as Zlib;
class PermissionRoles {
static public function version() {
return 1;
return 2;
}
static function role_perms($role) {
@@ -25,7 +25,7 @@ class PermissionRoles {
$ret['online'] = true;
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'send_stream', 'post_wall', 'post_comments',
'view_pages', 'view_wiki', 'send_stream', 'post_wall', 'post_comments',
'post_mail', 'chat', 'post_like', 'republish' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -38,7 +38,7 @@ class PermissionRoles {
$ret['online'] = true;
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'send_stream', 'post_wall', 'post_comments',
'view_pages', 'view_wiki', 'send_stream', 'post_wall', 'post_comments',
'post_mail', 'chat', 'post_like' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -52,7 +52,7 @@ class PermissionRoles {
$ret['online'] = false;
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'send_stream', 'post_wall', 'post_comments',
'view_pages', 'view_wiki', 'send_stream', 'post_wall', 'post_comments',
'post_mail', 'post_like' ];
$ret['limits'] = PermissionLimits::Std_Limits();
$ret['limits']['view_contacts'] = PERMS_SPECIFIC;
@@ -67,7 +67,7 @@ class PermissionRoles {
$ret['online'] = false;
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'post_wall', 'post_comments', 'tag_deliver',
'view_pages', 'view_wiki', 'post_wall', 'post_comments', 'tag_deliver',
'post_mail', 'post_like' , 'republish', 'chat' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -80,7 +80,7 @@ class PermissionRoles {
$ret['online'] = false;
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'post_wall', 'post_comments', 'tag_deliver',
'view_pages', 'view_wiki', 'post_wall', 'post_comments', 'tag_deliver',
'post_mail', 'post_like' , 'chat' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -95,7 +95,7 @@ class PermissionRoles {
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'post_wall', 'post_comments',
'view_pages', 'view_wiki', 'post_wall', 'post_comments',
'post_mail', 'post_like' , 'chat' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -103,6 +103,7 @@ class PermissionRoles {
$ret['limits']['view_contacts'] = PERMS_SPECIFIC;
$ret['limits']['view_storage'] = PERMS_SPECIFIC;
$ret['limits']['view_pages'] = PERMS_SPECIFIC;
$ret['limits']['view_wiki'] = PERMS_SPECIFIC;
break;
@@ -114,7 +115,7 @@ class PermissionRoles {
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'send_stream', 'post_wall', 'post_comments',
'view_pages', 'view_wiki', 'send_stream', 'post_wall', 'post_comments',
'post_mail', 'post_like' , 'republish' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -128,7 +129,7 @@ class PermissionRoles {
$ret['online'] = false;
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'send_stream', 'post_wall', 'post_comments',
'view_pages', 'view_wiki', 'send_stream', 'post_wall', 'post_comments',
'post_mail', 'post_like' , 'republish' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -143,7 +144,7 @@ class PermissionRoles {
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'post_like' , 'republish' ];
'view_pages', 'view_wiki', 'post_like' , 'republish' ];
$ret['limits'] = PermissionLimits::Std_Limits();
@@ -157,8 +158,8 @@ class PermissionRoles {
$ret['perms_connect'] = [
'view_stream', 'view_profile', 'view_contacts', 'view_storage',
'view_pages', 'write_storage', 'write_pages', 'post_wall', 'post_comments', 'tag_deliver',
'post_mail', 'post_like' , 'republish', 'chat' ];
'view_pages', 'view_wiki', 'write_storage', 'write_pages', 'post_wall', 'post_comments', 'tag_deliver',
'post_mail', 'post_like' , 'republish', 'chat', 'write_wiki' ];
$ret['limits'] = PermissionLimits::Std_Limits();
break;
@@ -185,6 +186,12 @@ class PermissionRoles {
// if($perm === 'mynewperm')
// \Zotlabs\Access\PermissionLimits::Set($uid,$perm,1);
if($perm === 'view_wiki')
\Zotlabs\Access\PermissionLimits::Set($uid,$perm,PERMS_PUBLIC);
if($perm === 'write_wiki')
\Zotlabs\Access\PermissionLimits::Set($uid,$perm,PERMS_SPECIFIC);
// set autoperms here if applicable
// choices are to set to 0, 1, or the value of an existing perm
@@ -195,7 +202,13 @@ class PermissionRoles {
$value = 0;
// if($perm === 'mynewperm')
// $value = get_abconfig($uid,$c['channel_hash'],'autoperms','someexistingperm'));
// $value = get_abconfig($uid,$c['channel_hash'],'autoperms','someexistingperm');
if($perm === 'view_wiki')
$value = get_abconfig($uid,$c['channel_hash'],'autoperms','view_pages');
if($perm === 'write_wiki')
$value = get_abconfig($uid,$c['channel_hash'],'autoperms','write_pages');
if($c) {
set_abconfig($uid,$c['channel_hash'],'autoperms',$perm,$value);
@@ -212,8 +225,16 @@ class PermissionRoles {
// case 'mynewperm':
// choices are to set to 1, set to 0, or clone an existing perm
// set_abconfig($uid,$ab['abook_xchan'],'my_perms',$perm,
// get_abconfig($uid,$ab['abook_xchan'],'my_perms','someexistingperm'));
// intval(get_abconfig($uid,$ab['abook_xchan'],'my_perms','someexistingperm')));
case 'view_wiki':
set_abconfig($uid,$ab['abook_xchan'],'my_perms',$perm,
intval(get_abconfig($uid,$ab['abook_xchan'],'my_perms','view_pages')));
case 'write_wiki':
set_abconfig($uid,$ab['abook_xchan'],'my_perms',$perm,
intval(get_abconfig($uid,$ab['abook_xchan'],'my_perms','write_pages')));
default:
break;
}
@@ -255,6 +276,4 @@ class PermissionRoles {
return $roles;
}
}

View File

@@ -1,45 +1,52 @@
<?php
namespace Zotlabs\Access;
use Zotlabs\Lib as Zlib;
/**
* @brief Extensible permissions.
*
* To add new permissions, add to the list of $perms below, with a simple description.
*
* Also visit PermissionRoles.php and add to the $ret['perms_connect'] property for any role
* if this permission should be granted to new connections.
*
* Next look at PermissionRoles::new_custom_perms() and provide a handler for updating custom
* permission roles. You will want to set a default PermissionLimit for each channel and also
* provide a sane default for any existing connections. You may or may not wish to provide a
* default auto permission. If in doubt, leave this alone as custom permissions by definition
* are the responsibility of the channel owner to manage. You just don't want to create any
* suprises or break things so you have an opportunity to provide sane settings.
*
* Update the version here and in PermissionRoles.
*
*
* Permissions with 'view' in the name are considered read permissions. Anything
* else requires authentication. Read permission limits are PERMS_PUBLIC and anything else
* is given PERMS_SPECIFIC.
*
* PermissionLimits::Std_limits() retrieves the standard limits. A permission role
* MAY alter an individual setting after retrieving the Std_limits if you require
* something different for a specific permission within the given role.
*
*/
class Permissions {
/**
* Extensible permissions.
* To add new permissions, add to the list of $perms below, with a simple description.
*
* Also visit PermissionRoles.php and add to the $ret['perms_connect'] property for any role
* if this permission should be granted to new connections.
*
* Next look at PermissionRoles::new_custom_perms() and provide a handler for updating custom
* permission roles. You will want to set a default PermissionLimit for each channel and also
* provide a sane default for any existing connections. You may or may not wish to provide a
* default auto permission. If in doubt, leave this alone as custom permissions by definition
* are the responsbility of the channel owner to manage. You just don't want to create any
* suprises or break things so you have an opportunity to provide sane settings.
*
* Update the version here and in PermissionRoles
*
*
* Permissions with 'view' in the name are considered read permissions. Anything
* else requires authentication. Read permission limits are PERMS_PUBLIC and anything else
* is given PERMS_SPECIFIC.
*
* PermissionLimits::Std_limits() retrieves the standard limits. A permission role
* MAY alter an individual setting after retrieving the Std_limits if you require
* something different for a specific permission within the given role.
*
*/
static public function version() {
// This must match the version in PermissionRoles.php before permission updates can run.
return 1;
return 2;
}
/**
* @brief Return an array with Permissions.
*
* @hooks permissions_list
* * \e array \b permissions
* * \e string \b filter
* @param string $filter (optional) only passed to hook permission_list
* @return Associative array with permissions and short description.
*/
static public function Perms($filter = '') {
$perms = [
@@ -50,7 +57,9 @@ class Permissions {
'view_storage' => t('Can view my file storage and photos'),
'write_storage' => t('Can upload/modify my file storage and photos'),
'view_pages' => t('Can view my channel webpages'),
'view_wiki' => t('Can view my wiki pages'),
'write_pages' => t('Can create/edit my channel webpages'),
'write_wiki' => t('Can write to my wiki pages'),
'post_wall' => t('Can post on my channel (wall) page'),
'post_comments' => t('Can comment on or like my posts'),
'post_mail' => t('Can send me private mail messages'),
@@ -61,18 +70,27 @@ class Permissions {
'delegate' => t('Can administer my channel')
];
$x = array('permissions' => $perms, 'filter' => $filter);
call_hooks('permissions_list',$x);
return($x['permissions']);
$x = [
'permissions' => $perms,
'filter' => $filter
];
call_hooks('permissions_list', $x);
return($x['permissions']);
}
/**
* @brief Perms from the above list that are blocked from anonymous observers.
*
* e.g. you must be authenticated.
*
* @hooks write_perms
* * \e array \b permissions
* @return Associative array with permissions and short description.
*/
static public function BlockedAnonPerms() {
// Perms from the above list that are blocked from anonymous observers.
// e.g. you must be authenticated.
$res = array();
$res = [];
$perms = PermissionLimits::Std_limits();
foreach($perms as $perm => $limit) {
if($limit != PERMS_PUBLIC) {
@@ -80,30 +98,66 @@ class Permissions {
}
}
$x = array('permissions' => $res);
call_hooks('write_perms',$x);
return($x['permissions']);
$x = ['permissions' => $res];
call_hooks('write_perms', $x);
return($x['permissions']);
}
// converts [ 0 => 'view_stream', ... ]
// to [ 'view_stream' => 1 ]
// for any permissions in $arr;
// Undeclared permissions are set to 0
/**
* @brief Converts indexed perms array to associative perms array.
*
* Converts [ 0 => 'view_stream', ... ]
* to [ 'view_stream' => 1 ] for any permissions in $arr;
* Undeclared permissions which exist in Perms() are added and set to 0.
*
* @param array $arr
* @return array
*/
static public function FilledPerms($arr) {
if(is_null($arr)) {
btlogger('FilledPerms: null');
}
$everything = self::Perms();
$ret = [];
foreach($everything as $k => $v) {
if(in_array($k,$arr))
if(in_array($k, $arr))
$ret[$k] = 1;
else
$ret[$k] = 0;
}
return $ret;
return $ret;
}
/**
* @brief Convert perms array to indexed array.
*
* Converts [ 'view_stream' => 1 ] for any permissions in $arr
* to [ 0 => ['name' => 'view_stream', 'value' => 1], ... ]
*
* @param array $arr associative perms array 'view_stream' => 1
* @return Indexed array with elements that look like
* * \e string \b name the perm name (e.g. view_stream)
* * \e int \b value the value of the perm (e.g. 1)
*/
static public function OPerms($arr) {
$ret = [];
if($arr) {
foreach($arr as $k => $v) {
$ret[] = [ 'name' => $k, 'value' => $v ];
}
}
return $ret;
}
/**
* @brief
*
* @param int $channel_id
* @return boolean|array
*/
static public function FilledAutoperms($channel_id) {
if(! intval(get_pconfig($channel_id,'system','autoperms')))
return false;
@@ -114,19 +168,109 @@ class Permissions {
);
if($r) {
foreach($r as $rr) {
$arr[$rr['k']] = $arr[$rr['v']];
$arr[$rr['k']] = intval($rr['v']);
}
}
return $arr;
}
static public function PermsCompare($p1,$p2) {
/**
* @brief Compares that all Permissions from $p1 exist also in $p2.
*
* @param array $p1 The perms that have to exist in $p2
* @param array $p2 The perms to compare against
* @return boolean true if all perms from $p1 exist also in $p2
*/
static public function PermsCompare($p1, $p2) {
foreach($p1 as $k => $v) {
if(! array_key_exists($k,$p2))
if(! array_key_exists($k, $p2))
return false;
if($p1[$k] != $p2[$k])
return false;
}
return true;
}
/**
* @brief
*
* @param int $channel_id A channel id
* @return associative array
* * \e array \b perms Permission array
* * \e int \b automatic 0 or 1
*/
static public function connect_perms($channel_id) {
$my_perms = [];
$permcat = null;
$automatic = 0;
// If a default permcat exists, use that
$pc = ((feature_enabled($channel_id,'permcats')) ? get_pconfig($channel_id,'system','default_permcat') : 'default');
if(! in_array($pc, [ '','default' ])) {
$pcp = new Zlib\Permcat($channel_id);
$permcat = $pcp->fetch($pc);
if($permcat && $permcat['perms']) {
foreach($permcat['perms'] as $p) {
$my_perms[$p['name']] = $p['value'];
}
}
}
// look up the permission role to see if it specified auto-connect
// and if there was no permcat or a default permcat, set the perms
// from the role
$role = get_pconfig($channel_id,'system','permissions_role');
if($role) {
$xx = PermissionRoles::role_perms($role);
if($xx['perms_auto'])
$automatic = 1;
if((! $my_perms) && ($xx['perms_connect'])) {
$default_perms = $xx['perms_connect'];
$my_perms = Permissions::FilledPerms($default_perms);
}
}
// If we reached this point without having any permission information,
// it is likely a custom permissions role. First see if there are any
// automatic permissions.
if(! $my_perms) {
$m = Permissions::FilledAutoperms($channel_id);
if($m) {
$automatic = 1;
$my_perms = $m;
}
}
// If we reached this point with no permissions, the channel is using
// custom perms but they are not automatic. They will be stored in abconfig with
// the channel's channel_hash (the 'self' connection).
if(! $my_perms) {
$r = q("select channel_hash from channel where channel_id = %d",
intval($channel_id)
);
if($r) {
$x = q("select * from abconfig where chan = %d and xchan = '%s' and cat = 'my_perms'",
intval($channel_id),
dbesc($r[0]['channel_hash'])
);
if($x) {
foreach($x as $xv) {
$my_perms[$xv['k']] = intval($xv['v']);
}
}
}
}
return ( [ 'perms' => $my_perms, 'automatic' => $automatic ] );
}
}

14
Zotlabs/Daemon/Addon.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
namespace Zotlabs\Daemon;
require_once('include/zot.php');
class Addon {
static public function run($argc,$argv) {
call_hooks('daemon_addon',$argv);
}
}

View File

@@ -3,7 +3,6 @@
namespace Zotlabs\Daemon;
require_once('include/zot.php');
require_once('include/hubloc.php');
class Checksites {

View File

@@ -121,6 +121,9 @@ class Cron {
}
}
require_once('include/attach.php');
attach_upgrade();
$abandon_days = intval(get_config('system','account_abandon_days'));
if($abandon_days < 1)
$abandon_days = 0;
@@ -171,7 +174,8 @@ class Cron {
// pull in some public posts
if(! get_config('system','disable_discover_tab'))
$disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false;
if(! $disable_discover_tab)
Master::Summon(array('Externals'));
$generation = 0;

View File

@@ -38,12 +38,20 @@ class Cron_daily {
db_utcnow(), db_quoteinterval('30 DAY')
);
// expire any unread notifications over a year old
q("delete from notify where seen = 0 and created < %s - INTERVAL %s",
db_utcnow(), db_quoteinterval('1 YEAR')
);
//update statistics in config
require_once('include/statistics_fns.php');
update_channels_total_stat();
update_channels_active_halfyear_stat();
update_channels_active_monthly_stat();
update_local_posts_stat();
update_local_comments_stat();
// expire old delivery reports
@@ -76,12 +84,11 @@ class Cron_daily {
Master::Summon(array('Expire'));
Master::Summon(array('Cli_suggest'));
require_once('include/hubloc.php');
remove_obsolete_hublocs();
call_hooks('cron_daily',datetime_convert());
set_config('system','last_expire_day',$d2);
set_config('system','last_expire_day',intval(datetime_convert('UTC','UTC','now','d')));
/**
* End Cron Daily

View File

@@ -17,7 +17,6 @@ class Cron_weekly {
z_check_cert();
require_once('include/hubloc.php');
prune_hub_reinstalls();
mark_orphan_hubsxchans();

View File

@@ -53,6 +53,9 @@ class Deliver {
remove_queue_item($r[0]['outq_hash']);
if($dresult && is_array($dresult)) {
// delivery reports for local deliveries do not require encryption
foreach($dresult as $xx) {
if(is_array($xx) && array_key_exists('message_id',$xx)) {
if(delivery_report_is_storable($xx)) {

View File

@@ -17,7 +17,7 @@ class Gprobe {
if(! strpos($url,'@'))
return;
$r = q("select * from xchan where xchan_addr = '%s' limit 1",
$r = q("select * from hubloc where hubloc_addr = '%s' limit 1",
dbesc($url)
);

View File

@@ -21,12 +21,18 @@ class Importdoc {
$files = glob("$d/$f");
if($files) {
foreach($files as $fi) {
if($fi === 'doc/html')
if($fi === 'doc/html') {
continue;
if(is_dir($fi))
}
if(is_dir($fi)) {
self::update_docs_dir("$fi/*");
else
store_doc_file($fi);
}
else {
// don't update media content
if(strpos(z_mime_content_type($fi),'text') === 0) {
store_doc_file($fi);
}
}
}
}
}

View File

@@ -0,0 +1,47 @@
<?php /** @file */
namespace Zotlabs\Daemon;
class Importfile {
static public function run($argc,$argv){
logger('Importfile: ' . print_r($argv,true));
if($argc < 3)
return;
$channel = channelx_by_n($argv[1]);
if(! $channel)
return;
$srcfile = $argv[2];
$folder = (($argc > 3) ? $argv[3] : '');
$dstname = (($argc > 4) ? $argv[4] : '');
$hash = random_string();
$arr = [
'src' => $srcfile,
'filename' => (($dstname) ? $dstname : basename($srcfile)),
'hash' => $hash,
'allow_cid' => $channel['channel_allow_cid'],
'allow_gid' => $channel['channel_allow_gid'],
'deny_cid' => $channel['channel_deny_cid'],
'deny_gid' => $channel['channel_deny_gid'],
'preserve_original' => true,
'replace' => true
];
if($folder)
$arr['folder'] = $folder;
attach_store($channel,$channel['channel_hash'],'import',$arr);
$sync = attach_export_data($channel,$hash);
if($sync)
build_sync_packet($channel['channel_id'],array('file' => array($sync)));
return;
}
}

View File

@@ -5,6 +5,11 @@ namespace Zotlabs\Daemon;
require_once('include/queue_fn.php');
require_once('include/html2plain.php');
require_once('include/conversation.php');
require_once('include/zot.php');
require_once('include/items.php');
require_once('include/bbcode.php');
/*
* This file was at one time responsible for doing all deliveries, but this caused
@@ -54,6 +59,8 @@ require_once('include/conversation.php');
*
* ZOT
* permission_create abook_id
* permission_accept abook_id
* permission_reject abook_id
* permission_update abook_id
* refresh_all channel_id
* purge_all channel_id
@@ -64,17 +71,11 @@ require_once('include/conversation.php');
* location channel_id
* request channel_id xchan_hash message_id
* rating xlink_id
* keychange channel_id
*
*/
require_once('include/zot.php');
require_once('include/queue_fn.php');
require_once('include/datetime.php');
require_once('include/items.php');
require_once('include/bbcode.php');
require_once('include/channel.php');
class Notifier {
@@ -98,16 +99,6 @@ class Notifier {
$deliveries = array();
$dead_hubs = array();
$dh = q("select site_url from site where site_dead = 1");
if($dh) {
foreach($dh as $dead) {
$dead_hubs[] = $dead['site_url'];
}
}
$request = false;
$mail = false;
$top_level = false;
@@ -158,7 +149,21 @@ class Notifier {
$packet_type = 'request';
$normal_mode = false;
}
elseif($cmd == 'permission_update' || $cmd == 'permission_create') {
elseif($cmd === 'keychange') {
$channel = channelx_by_n($item_id);
$r = q("select abook_xchan from abook where abook_channel = %d",
intval($item_id)
);
if($r) {
foreach($r as $rr) {
$recipients[] = $rr['abook_xchan'];
}
}
$private = false;
$packet_type = 'keychange';
$normal_mode = false;
}
elseif(in_array($cmd, [ 'permission_update', 'permission_reject', 'permission_accept', 'permission_create' ])) {
// Get the (single) recipient
$r = q("select * from abook left join xchan on abook_xchan = xchan_hash where abook_id = %d and abook_self = 0",
intval($item_id)
@@ -170,8 +175,12 @@ class Notifier {
if($channel) {
$perm_update = array('sender' => $channel, 'recipient' => $r[0], 'success' => false, 'deliveries' => '');
if($cmd == 'permission_create')
if($cmd === 'permission_create')
call_hooks('permissions_create',$perm_update);
elseif($cmd === 'permission_accept')
call_hooks('permissions_accept',$perm_update);
elseif($cmd === 'permission_reject')
call_hooks('permissions_reject',$perm_update);
else
call_hooks('permissions_update',$perm_update);
@@ -275,14 +284,15 @@ class Notifier {
$deleted_item = true;
}
if(intval($target_item['item_type']) != ITEM_TYPE_POST) {
if(! in_array(intval($target_item['item_type']), [ ITEM_TYPE_POST ] )) {
logger('notifier: target item not forwardable: type ' . $target_item['item_type'], LOGGER_DEBUG);
return;
}
// Check for non published items, but allow an exclusion for transmitting hidden file activities
if(intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) ||
if(intval($target_item['item_unpublished']) || intval($target_item['item_delayed']) ||
intval($target_item['item_blocked']) ||
( intval($target_item['item_hidden']) && ($target_item['obj_type'] !== ACTIVITY_OBJ_FILE))) {
logger('notifier: target item not published, so not forwardable', LOGGER_DEBUG);
return;
@@ -403,7 +413,6 @@ class Notifier {
return;
}
}
}
$walltowall = (($top_level_post && $channel['xchan_hash'] === $target_item['author_xchan']) ? true : false);
@@ -420,11 +429,11 @@ class Notifier {
if(! $recipients)
return;
// logger('notifier: recipients: ' . print_r($recipients,true), LOGGER_NORMAL, LOG_DEBUG);
// logger('notifier: recipients: ' . print_r($recipients,true), LOGGER_NORMAL, LOG_DEBUG);
$env_recips = (($private) ? array() : null);
$details = q("select xchan_hash, xchan_instance_url, xchan_network, xchan_addr, xchan_guid, xchan_guid_sig from xchan where xchan_hash in (" . implode(',',$recipients) . ")");
$details = q("select xchan_hash, xchan_instance_url, xchan_network, xchan_addr, xchan_guid, xchan_guid_sig from xchan where xchan_hash in (" . protect_sprintf(implode(',',$recipients)) . ")");
$recip_list = array();
@@ -433,40 +442,40 @@ class Notifier {
foreach($details as $d) {
$recip_list[] = $d['xchan_addr'] . ' (' . $d['xchan_hash'] . ')';
if($private)
$env_recips[] = array('guid' => $d['xchan_guid'],'guid_sig' => $d['xchan_guid_sig'],'hash' => $d['xchan_hash']);
if($d['xchan_network'] === 'mail' && $normal_mode) {
$delivery_options = get_xconfig($d['xchan_hash'],'system','delivery_mode');
if(! $delivery_options)
format_and_send_email($channel,$d,$target_item);
if($private) {
$env_recips[] = [
'guid' => $d['xchan_guid'],
'guid_sig' => $d['xchan_guid_sig'],
'hash' => $d['xchan_hash']
];
}
}
}
$narr = array(
'channel' => $channel,
'upstream' => $upstream,
'env_recips' => $env_recips,
'packet_recips' => $packet_recips,
'recipients' => $recipients,
'item' => $item,
'target_item' => $target_item,
$narr = [
'channel' => $channel,
'upstream' => $upstream,
'env_recips' => $env_recips,
'packet_recips' => $packet_recips,
'recipients' => $recipients,
'item' => $item,
'target_item' => $target_item,
'parent_item' => $parent_item,
'top_level_post' => $top_level_post,
'private' => $private,
'private' => $private,
'relay_to_owner' => $relay_to_owner,
'uplink' => $uplink,
'cmd' => $cmd,
'mail' => $mail,
'single' => (($cmd === 'single_mail' || $cmd === 'single_activity') ? true : false),
'location' => $location,
'request' => $request,
'normal_mode' => $normal_mode,
'packet_type' => $packet_type,
'walltowall' => $walltowall,
'queued' => array()
);
'uplink' => $uplink,
'cmd' => $cmd,
'mail' => $mail,
'single' => (($cmd === 'single_mail' || $cmd === 'single_activity') ? true : false),
'location' => $location,
'request' => $request,
'normal_mode' => $normal_mode,
'packet_type' => $packet_type,
'walltowall' => $walltowall,
'queued' => []
];
call_hooks('notifier_process', $narr);
if($narr['queued']) {
@@ -489,10 +498,10 @@ class Notifier {
// Now we have collected recipients (except for external mentions, FIXME)
// Let's reduce this to a set of hubs.
// Let's reduce this to a set of hubs; checking that the site is not dead.
$r = q("select hubloc.*, site.site_crypto from hubloc left join site on site_url = hubloc_url where hubloc_hash in (" . implode(',',$recipients) . ")
and hubloc_error = 0 and hubloc_deleted = 0"
$r = q("select hubloc.*, site.site_crypto, site.site_flags from hubloc left join site on site_url = hubloc_url where hubloc_hash in (" . protect_sprintf(implode(',',$recipients)) . ")
and hubloc_error = 0 and hubloc_deleted = 0 and ( site_dead = 0 OR site_dead is null ) "
);
@@ -503,73 +512,78 @@ class Notifier {
$hubs = $r;
/**
* Reduce the hubs to those that are unique. For zot hubs, we need to verify uniqueness by the sitekey, since it may have been
* a re-install which has not yet been detected and pruned.
* Reduce the hubs to those that are unique. For zot hubs, we need to verify uniqueness by the sitekey,
* since it may have been a re-install which has not yet been detected and pruned.
* For other networks which don't have or require sitekeys, we'll have to use the URL
*/
$hublist = array(); // this provides an easily printable list for the logs
$dhubs = array(); // delivery hubs where we store our resulting unique array
$keys = array(); // array of keys to check uniquness for zot hubs
$urls = array(); // array of urls to check uniqueness of hubs from other networks
$hublist = []; // this provides an easily printable list for the logs
$dhubs = []; // delivery hubs where we store our resulting unique array
$keys = []; // array of keys to check uniquness for zot hubs
$urls = []; // array of urls to check uniqueness of hubs from other networks
$hub_env = []; // per-hub envelope so we don't broadcast the entire envelope to all
foreach($hubs as $hub) {
if(in_array($hub['hubloc_url'],$dead_hubs)) {
logger('skipping dead hub: ' . $hub['hubloc_url'], LOGGER_DEBUG, LOG_INFO);
continue;
if($env_recips) {
foreach($env_recips as $er) {
if($hub['hubloc_hash'] === $er['hash']) {
if(! array_key_exists($hub['hubloc_host'] . $hub['hubloc_sitekey'], $hub_env)) {
$hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] = [];
}
$hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']][] = $er;
}
}
}
if($hub['hubloc_network'] == 'zot') {
if(! in_array($hub['hubloc_sitekey'],$keys)) {
$hublist[] = $hub['hubloc_host'];
$dhubs[] = $hub;
$keys[] = $hub['hubloc_sitekey'];
$hublist[] = $hub['hubloc_host'] . ' ' . $hub['hubloc_network'];
$dhubs[] = $hub;
$keys[] = $hub['hubloc_sitekey'];
}
}
else {
if(! in_array($hub['hubloc_url'],$urls)) {
$hublist[] = $hub['hubloc_host'];
$dhubs[] = $hub;
$urls[] = $hub['hubloc_url'];
$hublist[] = $hub['hubloc_host'] . ' ' . $hub['hubloc_network'];
$dhubs[] = $hub;
$urls[] = $hub['hubloc_url'];
}
}
}
logger('notifier: will notify/deliver to these hubs: ' . print_r($hublist,true), LOGGER_DEBUG, LOG_DEBUG);
foreach($dhubs as $hub) {
if($hub['hubloc_network'] !== 'zot') {
$narr = array(
'channel' => $channel,
'upstream' => $upstream,
'env_recips' => $env_recips,
'packet_recips' => $packet_recips,
'recipients' => $recipients,
'item' => $item,
'target_item' => $target_item,
'hub' => $hub,
$narr = [
'channel' => $channel,
'upstream' => $upstream,
'env_recips' => $env_recips,
'packet_recips' => $packet_recips,
'recipients' => $recipients,
'item' => $item,
'target_item' => $target_item,
'parent_item' => $parent_item,
'hub' => $hub,
'top_level_post' => $top_level_post,
'private' => $private,
'private' => $private,
'relay_to_owner' => $relay_to_owner,
'uplink' => $uplink,
'cmd' => $cmd,
'mail' => $mail,
'single' => (($cmd === 'single_mail' || $cmd === 'single_activity') ? true : false),
'location' => $location,
'request' => $request,
'normal_mode' => $normal_mode,
'packet_type' => $packet_type,
'walltowall' => $walltowall,
'queued' => array()
);
'uplink' => $uplink,
'cmd' => $cmd,
'mail' => $mail,
'single' => (($cmd === 'single_mail' || $cmd === 'single_activity') ? true : false),
'location' => $location,
'request' => $request,
'normal_mode' => $normal_mode,
'packet_type' => $packet_type,
'walltowall' => $walltowall,
'queued' => []
];
call_hooks('notifier_hub',$narr);
@@ -582,13 +596,13 @@ class Notifier {
}
// singleton deliveries by definition 'not got zot'.
// Single deliveries are other federated networks (plugins) and we're essentially
// Single deliveries are other federated networks (plugins) and we're essentially
// delivering only to those that have this site url in their abook_instance
// and only from within a sync operation. This means if you post from a clone,
// and a connection is connected to one of your other clones; assuming that hub
// is running it will receive a sync packet. On receipt of this sync packet it
// will invoke a delivery to those connections which are connected to just that
// hub instance.
// hub instance.
if($cmd === 'single_mail' || $cmd === 'single_activity') {
continue;
@@ -596,14 +610,20 @@ class Notifier {
// default: zot protocol
$hash = random_string();
$hash = random_string();
$packet = null;
$pmsg = '';
if($packet_type === 'refresh' || $packet_type === 'purge') {
$packet = zot_build_packet($channel,$packet_type,(($packet_recips) ? $packet_recips : null));
}
if($packet_type === 'keychange') {
$packet = zot_build_packet($channel,$packet_type,(($packet_recips) ? $packet_recips : null));
$pmsg = get_pconfig($channel['channel_id'],'system','keychange');
}
elseif($packet_type === 'request') {
$packet = zot_build_packet($channel,$packet_type,$env_recips,$hub['hubloc_sitekey'],$hub['site_crypto'],
$env = (($hub_env && $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']]) ? $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] : '');
$packet = zot_build_packet($channel,$packet_type,$env,$hub['hubloc_sitekey'],$hub['site_crypto'],
$hash, array('message_id' => $request_message_id)
);
}
@@ -614,19 +634,23 @@ class Notifier {
'account_id' => $channel['channel_account_id'],
'channel_id' => $channel['channel_id'],
'posturl' => $hub['hubloc_callback'],
'notify' => $packet
'notify' => $packet,
'msg' => (($pmsg) ? json_encode($pmsg) : '')
));
}
else {
$packet = zot_build_packet($channel,'notify',$env_recips,(($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'],$hash);
queue_insert(array(
'hash' => $hash,
'account_id' => $target_item['aid'],
'channel_id' => $target_item['uid'],
'posturl' => $hub['hubloc_callback'],
'notify' => $packet,
'msg' => json_encode($encoded_item)
));
$env = (($hub_env && $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']]) ? $hub_env[$hub['hubloc_host'] . $hub['hubloc_sitekey']] : '');
$packet = zot_build_packet($channel,'notify',$env,(($private) ? $hub['hubloc_sitekey'] : null), $hub['site_crypto'],$hash);
queue_insert(
[
'hash' => $hash,
'account_id' => $target_item['aid'],
'channel_id' => $target_item['uid'],
'posturl' => $hub['hubloc_callback'],
'notify' => $packet,
'msg' => json_encode($encoded_item)
]
);
// only create delivery reports for normal undeleted items
if(is_array($target_item) && array_key_exists('postopts',$target_item) && (! $target_item['item_deleted']) && (! get_config('system','disable_dreport'))) {
@@ -647,9 +671,9 @@ class Notifier {
if($normal_mode) {
$x = q("select * from hook where hook = 'notifier_normal'");
if($x)
Master::Summon(array('Deliver_hooks',$target_item['id']));
if($x) {
Master::Summon( [ 'Deliver_hooks', $target_item['id'] ] );
}
}
if($deliveries)

View File

@@ -118,13 +118,29 @@ class Onepoll {
if($fetch_feed) {
$feedurl = str_replace('/poco/','/zotfeed/',$contact['xchan_connurl']);
$feedurl .= '?f=&mindate=' . urlencode($last_update);
if(strpos($contact['xchan_connurl'],z_root()) === 0) {
// local channel - save a network fetch
$c = channelx_by_hash($contact['xchan_hash']);
if($c) {
$x = [
'success' => true,
'body' => json_encode( [
'success' => true,
'messages' => zot_feed($c['channel_id'], $importer['xchan_hash'], [ 'mindate' => $last_update ])
])
];
}
}
else {
// remote fetch
$x = z_fetch_url($feedurl);
$feedurl = str_replace('/poco/','/zotfeed/',$contact['xchan_connurl']);
$feedurl .= '?f=&mindate=' . urlencode($last_update) . '&zid=' . $importer['channel_address'] . '@' . \App::get_hostname();
$recurse = 0;
$x = z_fetch_url($feedurl, false, $recurse, [ 'session' => true ]);
}
logger('feed_update: ' . print_r($x,true), LOGGER_DATA);
}
if(($x) && ($x['success'])) {

View File

@@ -61,30 +61,15 @@ class Queue {
// the site is permanently down, there's no reason to attempt delivery at all, or at most not more than once
// or twice a day.
// FIXME: can we sort postgres on outq_priority and maintain the 'distinct' ?
// The order by max(outq_priority) might be a dodgy query because of the group by.
// The desired result is to return a sequence in the order most likely to be delivered in this run.
// If a hub has already been sitting in the queue for a few days, they should be delivered last;
// hence every failure should drop them further down the priority list.
if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
$prefix = 'DISTINCT ON (outq_posturl)';
$suffix = 'ORDER BY outq_posturl';
} else {
$prefix = '';
$suffix = 'GROUP BY outq_posturl ORDER BY max(outq_priority)';
}
$r = q("SELECT $prefix * FROM outq WHERE outq_delivered = 0 and (( outq_created > %s - INTERVAL %s and outq_updated < %s - INTERVAL %s ) OR ( outq_updated < %s - INTERVAL %s )) $suffix",
db_utcnow(), db_quoteinterval('12 HOUR'),
db_utcnow(), db_quoteinterval('15 MINUTE'),
db_utcnow(), db_quoteinterval('1 HOUR')
$r = q("SELECT * FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s ",
db_utcnow()
);
}
if(! $r)
return;
foreach($r as $rr) {
queue_deliver($rr);
foreach($r as $rv) {
queue_deliver($rv);
}
}
}

View File

@@ -40,6 +40,15 @@ class Hook {
return $r;
}
static public function register_array($file,$arr) {
if($arr) {
foreach($arr as $k => $v) {
self::register($k,$file,$v);
}
}
}
static public function unregister($hook,$file,$function,$version = 1,$priority = 0) {
if(is_array($function)) {
$function = serialize($function);

View File

@@ -0,0 +1,199 @@
<?php
namespace Zotlabs\Lib;
class ActivityStreams {
public $data;
public $valid = false;
public $id = '';
public $type = '';
public $actor = null;
public $obj = null;
public $tgt = null;
public $origin = null;
public $owner = null;
public $signer = null;
public $ldsig = null;
public $sigok = false;
public $recips = null;
public $raw_recips = null;
function __construct($string) {
$this->data = json_decode($string,true);
if($this->data) {
$this->valid = true;
}
if($this->is_valid()) {
$this->id = $this->get_property_obj('id');
$this->type = $this->get_primary_type();
$this->actor = $this->get_compound_property('actor');
$this->obj = $this->get_compound_property('object');
$this->tgt = $this->get_compound_property('target');
$this->origin = $this->get_compound_property('origin');
$this->recips = $this->collect_recips();
$this->ldsig = $this->get_compound_property('signature');
if($this->ldsig) {
$this->signer = $this->get_compound_property('creator',$this->ldsig);
if($this->signer && $this->signer['publicKey'] && $this->signer['publicKey']['publicKeyPem']) {
$this->sigok = \Zotlabs\Lib\LDSignatures::verify($this->data,$this->signer['publicKey']['publicKeyPem']);
}
}
if(($this->type === 'Note') && (! $this->obj)) {
$this->obj = $this->data;
$this->type = 'Create';
}
}
}
function is_valid() {
return $this->valid;
}
function set_recips($arr) {
$this->saved_recips = $arr;
}
function collect_recips($base = '',$namespace = '') {
$x = [];
$fields = [ 'to','cc','bto','bcc','audience'];
foreach($fields as $f) {
$y = $this->get_compound_property($f,$base,$namespace);
if($y) {
$x = array_merge($x,$y);
if(! is_array($this->raw_recips))
$this->raw_recips = [];
$this->raw_recips[$f] = $x;
}
}
// not yet ready for prime time
// $x = $this->expand($x,$base,$namespace);
return $x;
}
function expand($arr,$base = '',$namespace = '') {
$ret = [];
// right now use a hardwired recursion depth of 5
for($z = 0; $z < 5; $z ++) {
if(is_array($arr) && $arr) {
foreach($arr as $a) {
if(is_array($a)) {
$ret[] = $a;
}
else {
$x = $this->get_compound_property($a,$base,$namespace);
if($x) {
$ret = array_merge($ret,$x);
}
}
}
}
}
// @fixme de-duplicate
return $ret;
}
function get_namespace($base,$namespace) {
if(! $namespace)
return '';
$key = null;
foreach( [ $this->data, $base ] as $b ) {
if(! $b)
continue;
if(array_key_exists('@context',$b)) {
if(is_array($b['@context'])) {
foreach($b['@context'] as $ns) {
if(is_array($ns)) {
foreach($ns as $k => $v) {
if($namespace === $v)
$key = $k;
}
}
else {
if($namespace === $ns) {
$key = '';
}
}
}
}
else {
if($namespace === $b['@context']) {
$key = '';
}
}
}
}
return $key;
}
function get_property_obj($property,$base = '',$namespace = '' ) {
$prefix = $this->get_namespace($base,$namespace);
if($prefix === null)
return null;
$base = (($base) ? $base : $this->data);
$propname = (($prefix) ? $prefix . ':' : '') . $property;
return ((array_key_exists($propname,$base)) ? $base[$propname] : null);
}
function fetch_property($url) {
$redirects = 0;
if(! check_siteallowed($url)) {
logger('blacklisted: ' . $url);
return null;
}
$x = z_fetch_url($url,true,$redirects,
['headers' => [ 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams", application/activity+json' ]]);
if($x['success'])
return json_decode($x['body'],true);
return null;
}
function get_compound_property($property,$base = '',$namespace = '') {
$x = $this->get_property_obj($property,$base,$namespace);
if($this->is_url($x)) {
$x = $this->fetch_property($x);
}
return $x;
}
function is_url($url) {
if(($url) && (! is_array($url)) && (strpos($url,'http') === 0)) {
return true;
}
return false;
}
function get_primary_type($base = '',$namespace = '') {
if(! $base)
$base = $this->data;
$x = $this->get_property_obj('type',$base,$namespace);
if(is_array($x)) {
foreach($x as $y) {
if(strpos($y,':') === false) {
return $y;
}
}
}
return $x;
}
function debug() {
$x = var_export($this,true);
return $x;
}
}

View File

@@ -34,10 +34,11 @@ class Apps {
if($files) {
foreach($files as $f) {
$path = explode('/',$f);
$plugin = $path[1];
$plugin = trim($path[1]);
if(plugin_is_installed($plugin)) {
$x = self::parse_app_description($f,$translate);
if($x) {
$x['plugin'] = $plugin;
$ret[] = $x;
}
}
@@ -54,7 +55,6 @@ class Apps {
return;
$apps = self::get_system_apps(false);
self::$installed_system_apps = q("select * from app where app_system = 1 and app_channel = %d",
intval(local_channel())
);
@@ -102,11 +102,13 @@ class Apps {
foreach(self::$installed_system_apps as $iapp) {
if($iapp['app_id'] == hash('whirlpool',$app['name'])) {
$notfound = false;
if($iapp['app_version'] != $app['version']) {
if(($iapp['app_version'] != $app['version'])
|| ($app['plugin'] && (! $iapp['app_plugin']))) {
return intval($iapp['app_id']);
}
}
}
return $notfound;
}
@@ -144,8 +146,11 @@ class Apps {
$ret['type'] = 'system';
foreach($ret as $k => $v) {
if(strpos($v,'http') === 0)
$ret[$k] = zid($v);
if(strpos($v,'http') === 0) {
if(! (local_channel() && strpos($v,z_root()) === 0)) {
$ret[$k] = zid($v);
}
}
}
if(array_key_exists('desc',$ret))
@@ -157,11 +162,21 @@ class Apps {
if(array_key_exists('version',$ret))
$ret['version'] = str_replace(array('\'','"'),array('&#39;','&dquot;'),$ret['version']);
if(array_key_exists('categories',$ret))
$ret['categories'] = str_replace(array('\'','"'),array('&#39;','&dquot;'),$ret['categories']);
if(array_key_exists('requires',$ret)) {
$requires = explode(',',$ret['requires']);
foreach($requires as $require) {
$require = trim(strtolower($require));
$config = false;
if(substr($require, 0, 7) == 'config:') {
$config = true;
$require = ltrim($require, 'config:');
$require = explode('=', $require);
}
switch($require) {
case 'nologin':
if(local_channel())
@@ -184,10 +199,13 @@ class Apps {
unset($ret);
break;
default:
if(! (local_channel() && feature_enabled(local_channel(),$require)))
if($config)
$unset = ((get_config('system', $require[0]) == $require[1]) ? false : true);
else
$unset = ((local_channel() && feature_enabled(local_channel(),$require)) ? false : true);
if($unset)
unset($ret);
break;
}
}
}
@@ -202,7 +220,9 @@ class Apps {
static public function translate_system_apps(&$arr) {
$apps = array(
'Site Admin' => t('Site Admin'),
'Apps' => t('Apps'),
'Cards' => t('Cards'),
'Admin' => t('Site Admin'),
'Report Bug' => t('Report Bug'),
'View Bookmarks' => t('View Bookmarks'),
'My Chatrooms' => t('My Chatrooms'),
@@ -212,7 +232,7 @@ class Apps {
'Suggest Channels' => t('Suggest Channels'),
'Login' => t('Login'),
'Channel Manager' => t('Channel Manager'),
'Grid' => t('Grid'),
'Grid' => t('Activity'),
'Settings' => t('Settings'),
'Files' => t('Files'),
'Webpages' => t('Webpages'),
@@ -238,9 +258,19 @@ class Apps {
'Profile Photo' => t('Profile Photo')
);
if(array_key_exists($arr['name'],$apps))
$arr['name'] = $apps[$arr['name']];
if(array_key_exists('name',$arr)) {
if(array_key_exists($arr['name'],$apps)) {
$arr['name'] = $apps[$arr['name']];
}
}
else {
for($x = 0; $x < count($arr); $x++) {
if(array_key_exists($arr[$x]['name'],$apps)) {
$arr[$x]['name'] = $apps[$arr[$x]['name']];
}
}
}
}
@@ -255,6 +285,7 @@ class Apps {
* list: normal mode for viewing an app on the app page
* no buttons are shown
* edit: viewing the app page in editing mode provides a delete button
* nav: render apps for app-bin
*/
$installed = false;
@@ -267,21 +298,36 @@ class Apps {
self::translate_system_apps($papp);
if(trim($papp['plugin']) && (! plugin_is_installed(trim($papp['plugin']))))
return '';
$papp['papp'] = self::papp_encode($papp);
if(! strstr($papp['url'],'://'))
$papp['url'] = z_root() . ((strpos($papp['url'],'/') === 0) ? '' : '/') . $papp['url'];
foreach($papp as $k => $v) {
if(strpos($v,'http') === 0 && $k != 'papp')
$papp[$k] = zid($v);
if(strpos($v,'http') === 0 && $k != 'papp') {
if(! (local_channel() && strpos($v,z_root()) === 0)) {
$papp[$k] = zid($v);
}
}
if($k === 'desc')
$papp['desc'] = str_replace(array('\'','"'),array('&#39;','&dquot;'),$papp['desc']);
if($k === 'requires') {
$requires = explode(',',$v);
foreach($requires as $require) {
$require = trim(strtolower($require));
$config = false;
if(substr($require, 0, 7) == 'config:') {
$config = true;
$require = ltrim($require, 'config:');
$require = explode('=', $require);
}
switch($require) {
case 'nologin':
if(local_channel())
@@ -305,10 +351,13 @@ class Apps {
return '';
break;
default:
if(! (local_channel() && feature_enabled(local_channel(),$require)))
if($config)
$unset = ((get_config('system', $require[0]) == $require[1]) ? false : true);
else
$unset = ((local_channel() && feature_enabled(local_channel(),$require)) ? false : true);
if($unset)
return '';
break;
}
}
}
@@ -332,14 +381,31 @@ class Apps {
}
$install_action = (($installed) ? t('Update') : t('Install'));
$icon = ((strpos($papp['photo'],'icon:') === 0) ? substr($papp['photo'],5) : '');
if($mode === 'navbar') {
return replace_macros(get_markup_template('app_nav.tpl'),array(
'$app' => $papp,
'$icon' => $icon,
));
}
return replace_macros(get_markup_template('app.tpl'),array(
'$app' => $papp,
'$icon' => $icon,
'$hosturl' => $hosturl,
'$purchase' => (($papp['page'] && (! $installed)) ? t('Purchase') : ''),
'$install' => (($hosturl && $mode == 'view') ? $install_action : ''),
'$edit' => ((local_channel() && $installed && $mode == 'edit') ? t('Edit') : ''),
'$delete' => ((local_channel() && $installed && $mode == 'edit') ? t('Delete') : '')
'$delete' => ((local_channel() && $installed && $mode == 'edit') ? t('Delete') : ''),
'$undelete' => ((local_channel() && $installed && $mode == 'edit') ? t('Undelete') : ''),
'$deleted' => $papp['deleted'],
'$feature' => (($papp['embed']) ? false : true),
'$featured' => ((strpos($papp['categories'], 'nav_featured_app') === false) ? false : true),
'$navapps' => (($mode == 'nav') ? true : false),
'$order' => (($mode == 'nav-order') ? true : false),
'$add' => t('Add to app-tray'),
'$remove' => t('Remove from app-tray')
));
}
@@ -382,36 +448,82 @@ class Apps {
intval($uid)
);
if($x) {
$x[0]['app_deleted'] = 1;
q("delete from term where otype = %d and oid = %d",
intval(TERM_OBJ_APP),
intval($x[0]['id'])
);
if($x[0]['app_system']) {
$r = q("update app set app_deleted = 1 where app_id = '%s' and app_channel = %d",
dbesc($app['guid']),
intval($uid)
if(! intval($x[0]['app_deleted'])) {
$x[0]['app_deleted'] = 1;
q("delete from term where otype = %d and oid = %d",
intval(TERM_OBJ_APP),
intval($x[0]['id'])
);
if($x[0]['app_system']) {
$r = q("update app set app_deleted = 1 where app_id = '%s' and app_channel = %d",
dbesc($app['guid']),
intval($uid)
);
}
else {
$r = q("delete from app where app_id = '%s' and app_channel = %d",
dbesc($app['guid']),
intval($uid)
);
// we don't sync system apps - they may be completely different on the other system
build_sync_packet($uid,array('app' => $x));
}
}
else {
$r = q("delete from app where app_id = '%s' and app_channel = %d",
dbesc($app['guid']),
intval($uid)
);
// we don't sync system apps - they may be completely different on the other system
build_sync_packet($uid,array('app' => $x));
self::app_undestroy($uid,$app);
}
}
}
}
static public function app_undestroy($uid,$app) {
// undelete a system app
if($uid && $app['guid']) {
$x = q("select * from app where app_id = '%s' and app_channel = %d limit 1",
dbesc($app['guid']),
intval($uid)
);
if($x) {
if($x[0]['app_system']) {
$r = q("update app set app_deleted = 0 where app_id = '%s' and app_channel = %d",
dbesc($app['guid']),
intval($uid)
);
}
}
}
}
static public function app_feature($uid,$app) {
$r = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
dbesc($app['guid']),
intval($uid)
);
$x = q("select * from term where otype = %d and oid = %d and term = 'nav_featured_app' limit 1",
intval(TERM_OBJ_APP),
intval($r[0]['id'])
);
if($x) {
q("delete from term where otype = %d and oid = %d and term = 'nav_featured_app'",
intval(TERM_OBJ_APP),
intval($x[0]['oid'])
);
}
else {
store_item_tag($uid,$r[0]['id'],TERM_OBJ_APP,TERM_CATEGORY,'nav_featured_app',escape_tags(z_root() . '/apps/?f=&cat=nav_featured_app'));
}
}
static public function app_installed($uid,$app) {
$r = q("select id from app where app_id = '%s' and app_version = '%s' and app_channel = %d limit 1",
$r = q("select id from app where app_id = '%s' and app_channel = %d limit 1",
dbesc((array_key_exists('guid',$app)) ? $app['guid'] : ''),
dbesc((array_key_exists('version',$app)) ? $app['version'] : ''),
intval($uid)
);
return(($r) ? true : false);
@@ -421,7 +533,7 @@ class Apps {
static public function app_list($uid, $deleted = false, $cat = '') {
if($deleted)
$sql_extra = " and app_deleted = 1 ";
$sql_extra = "";
else
$sql_extra = " and app_deleted = 0 ";
@@ -445,6 +557,7 @@ class Apps {
$r = q("select * from app where app_channel = %d $sql_extra order by app_name asc",
intval($uid)
);
if($r) {
for($x = 0; $x < count($r); $x ++) {
if(! $r[$x]['app_system'])
@@ -455,9 +568,133 @@ class Apps {
);
}
}
return($r);
}
static public function app_order($uid,$apps) {
if(! $apps)
return $apps;
$x = (($uid) ? get_pconfig($uid,'system','app_order') : get_config('system','app_order'));
if(($x) && (! is_array($x))) {
$y = explode(',',$x);
$y = array_map('trim',$y);
$x = $y;
}
if(! (is_array($x) && ($x)))
return $apps;
$ret = [];
foreach($x as $xx) {
$y = self::find_app_in_array($xx,$apps);
if($y) {
$ret[] = $y;
}
}
foreach($apps as $ap) {
if(! self::find_app_in_array($ap['name'],$ret)) {
$ret[] = $ap;
}
}
return $ret;
}
static function find_app_in_array($name,$arr) {
if(! $arr)
return false;
foreach($arr as $x) {
if($x['name'] === $name) {
return $x;
}
}
return false;
}
static function moveup($uid,$guid) {
$syslist = array();
$list = self::app_list($uid, false, 'nav_featured_app');
if($list) {
foreach($list as $li) {
$syslist[] = self::app_encode($li);
}
}
self::translate_system_apps($syslist);
usort($syslist,'self::app_name_compare');
$syslist = self::app_order($uid,$syslist);
if(! $syslist)
return;
$newlist = [];
foreach($syslist as $k => $li) {
if($li['guid'] === $guid) {
$position = $k;
break;
}
}
if(! $position)
return;
$dest_position = $position - 1;
$saved = $syslist[$dest_position];
$syslist[$dest_position] = $syslist[$position];
$syslist[$position] = $saved;
$narr = [];
foreach($syslist as $x) {
$narr[] = $x['name'];
}
set_pconfig($uid,'system','app_order',implode(',',$narr));
}
static function movedown($uid,$guid) {
$syslist = array();
$list = self::app_list($uid, false, 'nav_featured_app');
if($list) {
foreach($list as $li) {
$syslist[] = self::app_encode($li);
}
}
self::translate_system_apps($syslist);
usort($syslist,'self::app_name_compare');
$syslist = self::app_order($uid,$syslist);
if(! $syslist)
return;
$newlist = [];
foreach($syslist as $k => $li) {
if($li['guid'] === $guid) {
$position = $k;
break;
}
}
if($position >= count($syslist) - 1)
return;
$dest_position = $position + 1;
$saved = $syslist[$dest_position];
$syslist[$dest_position] = $syslist[$position];
$syslist[$position] = $saved;
$narr = [];
foreach($syslist as $x) {
$narr[] = $x['name'];
}
set_pconfig($uid,'system','app_order',implode(',',$narr));
}
static public function app_decode($s) {
$x = base64_decode(str_replace(array('<br />',"\r","\n",' '),array('','','',''),$s));
@@ -467,7 +704,7 @@ class Apps {
static public function app_store($arr) {
// logger('app_store: ' . print_r($arr,true));
//logger('app_store: ' . print_r($arr,true));
$darray = array();
$ret = array('success' => false);
@@ -478,7 +715,7 @@ class Apps {
if((! $darray['app_url']) || (! $darray['app_channel']))
return $ret;
if($arr['photo'] && ! strstr($arr['photo'],z_root())) {
if($arr['photo'] && (strpos($arr['photo'],'icon:') !== 0) && (! strstr($arr['photo'],z_root()))) {
$x = import_xchan_photo($arr['photo'],get_observer_hash(),true);
$arr['photo'] = $x[1];
}
@@ -494,13 +731,14 @@ class Apps {
$darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : '');
$darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : '');
$darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : '');
$darray['app_plugin'] = ((x($arr,'plugin')) ? escape_tags(trim($arr['plugin'])) : '');
$darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : '');
$darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0);
$darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0);
$created = datetime_convert();
$r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel, app_addr, app_price, app_page, app_requires, app_created, app_edited, app_system, app_deleted ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
$r = q("insert into app ( app_id, app_sig, app_author, app_name, app_desc, app_url, app_photo, app_version, app_channel, app_addr, app_price, app_page, app_requires, app_created, app_edited, app_system, app_plugin, app_deleted ) values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', %d )",
dbesc($darray['app_id']),
dbesc($darray['app_sig']),
dbesc($darray['app_author']),
@@ -517,6 +755,7 @@ class Apps {
dbesc($created),
dbesc($created),
intval($darray['app_system']),
dbesc($darray['app_plugin']),
intval($darray['app_deleted'])
);
if($r) {
@@ -545,6 +784,7 @@ class Apps {
static public function app_update($arr) {
//logger('app_update: ' . print_r($arr,true));
$darray = array();
$ret = array('success' => false);
@@ -555,7 +795,7 @@ class Apps {
if((! $darray['app_url']) || (! $darray['app_channel']) || (! $darray['app_id']))
return $ret;
if($arr['photo'] && ! strstr($arr['photo'],z_root())) {
if($arr['photo'] && (strpos($arr['photo'],'icon:') !== 0) && (! strstr($arr['photo'],z_root()))) {
$x = import_xchan_photo($arr['photo'],get_observer_hash(),true);
$arr['photo'] = $x[1];
}
@@ -569,13 +809,14 @@ class Apps {
$darray['app_addr'] = ((x($arr,'addr')) ? escape_tags($arr['addr']) : '');
$darray['app_price'] = ((x($arr,'price')) ? escape_tags($arr['price']) : '');
$darray['app_page'] = ((x($arr,'page')) ? escape_tags($arr['page']) : '');
$darray['app_plugin'] = ((x($arr,'plugin')) ? escape_tags(trim($arr['plugin'])) : '');
$darray['app_requires'] = ((x($arr,'requires')) ? escape_tags($arr['requires']) : '');
$darray['app_system'] = ((x($arr,'system')) ? intval($arr['system']) : 0);
$darray['app_deleted'] = ((x($arr,'deleted')) ? intval($arr['deleted']) : 0);
$edited = datetime_convert();
$r = q("update app set app_sig = '%s', app_author = '%s', app_name = '%s', app_desc = '%s', app_url = '%s', app_photo = '%s', app_version = '%s', app_addr = '%s', app_price = '%s', app_page = '%s', app_requires = '%s', app_edited = '%s', app_system = %d, app_deleted = %d where app_id = '%s' and app_channel = %d",
$r = q("update app set app_sig = '%s', app_author = '%s', app_name = '%s', app_desc = '%s', app_url = '%s', app_photo = '%s', app_version = '%s', app_addr = '%s', app_price = '%s', app_page = '%s', app_requires = '%s', app_edited = '%s', app_system = %d, app_plugin = '%s', app_deleted = %d where app_id = '%s' and app_channel = %d",
dbesc($darray['app_sig']),
dbesc($darray['app_author']),
dbesc($darray['app_name']),
@@ -589,6 +830,7 @@ class Apps {
dbesc($darray['app_requires']),
dbesc($edited),
intval($darray['app_system']),
dbesc($darray['app_plugin']),
intval($darray['app_deleted']),
dbesc($darray['app_id']),
intval($darray['app_channel'])
@@ -655,6 +897,9 @@ class Apps {
if($app['app_photo'])
$ret['photo'] = $app['app_photo'];
if($app['app_icon'])
$ret['icon'] = $app['app_icon'];
if($app['app_version'])
$ret['version'] = $app['app_version'];
@@ -673,6 +918,9 @@ class Apps {
if($app['app_system'])
$ret['system'] = $app['app_system'];
if($app['app_plugin'])
$ret['plugin'] = trim($app['app_plugin']);
if($app['app_deleted'])
$ret['deleted'] = $app['app_deleted'];
@@ -690,6 +938,8 @@ class Apps {
if(! $embed)
return $ret;
$ret['embed'] = true;
if(array_key_exists('categories',$ret))
unset($ret['categories']);

View File

@@ -9,10 +9,10 @@ namespace Zotlabs\Lib;
class Cache {
public static function get($key) {
$key = substr($key,0,254);
$hash = hash('whirlpool',$key);
$r = q("SELECT v FROM cache WHERE k = '%s' limit 1",
dbesc($key)
dbesc($hash)
);
if ($r)
@@ -22,20 +22,20 @@ class Cache {
public static function set($key,$value) {
$key = substr($key,0,254);
$hash = hash('whirlpool',$key);
$r = q("SELECT * FROM cache WHERE k = '%s' limit 1",
dbesc($key)
dbesc($hash)
);
if($r) {
q("UPDATE cache SET v = '%s', updated = '%s' WHERE k = '%s'",
dbesc($value),
dbesc(datetime_convert()),
dbesc($key));
dbesc($hash));
}
else {
q("INSERT INTO cache ( k, v, updated) VALUES ('%s','%s','%s')",
dbesc($key),
dbesc($hash),
dbesc($value),
dbesc(datetime_convert()));
}

View File

@@ -53,7 +53,7 @@ class Config {
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
$dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue);
if(get_config($family, $key) === false || (! self::get_from_storage($family, $key))) {
if(self::Get($family, $key) === false || (! self::get_from_storage($family, $key))) {
$ret = q("INSERT INTO config ( cat, k, v ) VALUES ( '%s', '%s', '%s' ) ",
dbesc($family),
dbesc($key),

121
Zotlabs/Lib/DB_Upgrade.php Normal file
View File

@@ -0,0 +1,121 @@
<?php
namespace Zotlabs\Lib;
class DB_Upgrade {
public $config_name = '';
public $func_prefix = '';
function __construct($db_revision) {
$platform_name = System::get_platform_name();
$update_file = 'install/' . $platform_name . '/update.php';
if(! file_exists($update_file)) {
$update_file = 'install/update.php';
$this->config_name = 'db_version';
$this->func_prefix = 'update_r';
}
else {
$this->config_name = $platform_name . '_db_version';
$this->func_prefix = $platform_name . '_update_';
}
$build = get_config('system', $this->config_name, 0);
if(! intval($build))
$build = set_config('system', $this->config_name, $db_revision);
if($build == $db_revision) {
// Nothing to be done.
return;
}
else {
$stored = intval($build);
if(! $stored) {
logger('Critical: check_config unable to determine database schema version');
return;
}
$current = intval($db_revision);
if(($stored < $current) && file_exists($update_file)) {
Config::Load('database');
// We're reporting a different version than what is currently installed.
// Run any existing update scripts to bring the database up to current.
require_once($update_file);
// make sure that boot.php and update.php are the same release, we might be
// updating from git right this very second and the correct version of the update.php
// file may not be here yet. This can happen on a very busy site.
if($db_revision == UPDATE_VERSION) {
for($x = $stored; $x < $current; $x ++) {
$func = $this->func_prefix . $x;
if(function_exists($func)) {
// There could be a lot of processes running or about to run.
// We want exactly one process to run the update command.
// So store the fact that we're taking responsibility
// after first checking to see if somebody else already has.
// If the update fails or times-out completely you may need to
// delete the config entry to try again.
if(get_config('database', $func))
break;
set_config('database',$func, '1');
// call the specific update
$retval = $func();
if($retval) {
// Prevent sending hundreds of thousands of emails by creating
// a lockfile.
$lockfile = 'store/[data]/mailsent';
if ((file_exists($lockfile)) && (filemtime($lockfile) > (time() - 86400)))
return;
@unlink($lockfile);
//send the administrator an e-mail
file_put_contents($lockfile, $x);
$r = q("select account_language from account where account_email = '%s' limit 1",
dbesc(\App::$config['system']['admin_email'])
);
push_lang(($r) ? $r[0]['account_language'] : 'en');
z_mail(
[
'toEmail' => \App::$config['system']['admin_email'],
'messageSubject' => sprintf( t('Update Error at %s'), z_root()),
'textVersion' => replace_macros(get_intltext_template('update_fail_eml.tpl'),
[
'$sitename' => \App::$config['system']['sitename'],
'$siteurl' => z_root(),
'$update' => $x,
'$error' => sprintf( t('Update %s failed. See error logs.'), $x)
]
)
]
);
//try the logger
logger('CRITICAL: Update Failed: ' . $x);
pop_lang();
}
else {
set_config('database',$func, 'success');
}
}
}
set_config('system', $this->config_name, $db_revision);
}
}
}
}
}

View File

@@ -67,7 +67,7 @@ class Enotify {
$sender_name = $product;
$hostname = \App::get_hostname();
if(strpos($hostname,':'))
$hostname = substr($hostname,0,strpos($hostname,':'));
$hostname = substr($hostname,0,strpos($hostname,':'));
// Do not translate 'noreply' as it must be a legal 7-bit email address
@@ -77,7 +77,7 @@ class Enotify {
$sender_email = get_config('system','from_email');
if(! $sender_email)
$sender_email = 'Administrator' . '@' . \App::get_hostname();
$sender_email = 'Administrator' . '@' . $hostname;
$sender_name = get_config('system','from_email_name');
if(! $sender_name)
@@ -130,7 +130,9 @@ class Enotify {
if ($params['type'] == NOTIFY_COMMENT) {
// logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);
$itemlink = $params['link'];
$moderated = (($params['item']['item_blocked'] == ITEM_MODERATED) ? true : false);
$itemlink = $params['link'];
// ignore like/unlike activity on posts - they probably require a separate notification preference
@@ -170,7 +172,6 @@ class Enotify {
xchan_query($p);
$item_post_type = item_post_type($p[0]);
// $private = $p[0]['item_private'];
$parent_id = $p[0]['id'];
@@ -208,13 +209,21 @@ class Enotify {
// Before this we have the name of the replier on the subject rendering
// differents subjects for messages on the same thread.
$subject = sprintf( t('[$Projectname:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
if($moderated)
$subject = sprintf( t('[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
else
$subject = sprintf( t('[$Projectname:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
$preamble = sprintf( t('%1$s, %2$s commented on an item/conversation you have been following.'), $recip['channel_name'], $sender['xchan_name']);
$epreamble = $dest_str;
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf( $sitelink, $siteurl );
$hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>');
if($moderated) {
$tsitelink .= "\n\n" . sprintf( t('Please visit %s to approve or reject this comment.'), z_root() . '/moderate' );
$hsitelink .= "<br><br>" . sprintf( t('Please visit %s to approve or reject this comment.'), '<a href="' . z_root() . '/moderate">' . z_root() . '/moderate</a>' );
}
}
if ($params['type'] == NOTIFY_LIKE) {
@@ -495,13 +504,14 @@ class Enotify {
}
}
$r = q("insert into notify (hash,xname,url,photo,created,aid,uid,link,parent,seen,ntype,verb,otype)
values('%s','%s','%s','%s','%s',%d,%d,'%s','%s',%d,%d,'%s','%s')",
$r = q("insert into notify (hash,xname,url,photo,created,msg,aid,uid,link,parent,seen,ntype,verb,otype)
values('%s','%s','%s','%s','%s','%s',%d,%d,'%s','%s',%d,%d,'%s','%s')",
dbesc($datarray['hash']),
dbesc($datarray['xname']),
dbesc($datarray['url']),
dbesc($datarray['photo']),
dbesc($datarray['created']),
dbesc(''), // will fill this in below after the record is created
intval($datarray['aid']),
intval($datarray['uid']),
dbesc($datarray['link']),

38
Zotlabs/Lib/JSalmon.php Normal file
View File

@@ -0,0 +1,38 @@
<?php
namespace Zotlabs\Lib;
class JSalmon {
static function sign($data,$key_id,$key) {
$arr = $data;
$data = json_encode($data,JSON_UNESCAPED_SLASHES);
$data = base64url_encode($data, false); // do not strip padding
$data_type = 'application/x-zot+json';
$encoding = 'base64url';
$algorithm = 'RSA-SHA256';
$data = preg_replace('/\s+/','',$data);
// precomputed base64url encoding of data_type, encoding, algorithm concatenated with periods
$precomputed = '.' . base64url_encode($data_type,false) . '.YmFzZTY0dXJs.UlNBLVNIQTI1Ng==';
$signature = base64url_encode(rsa_sign($data . $precomputed, $key), false);
return ([
'signed' => true,
'data' => $data,
'data_type' => $data_type,
'encoding' => $encoding,
'alg' => $algorithm,
'sigs' => [
'value' => $signature,
'key_id' => base64url_encode($key_id)
]
]);
}
}

View File

@@ -0,0 +1,135 @@
<?php
namespace Zotlabs\Lib;
require_once('library/jsonld/jsonld.php');
class LDSignatures {
static function verify($data,$pubkey) {
$ohash = self::hash(self::signable_options($data['signature']));
$dhash = self::hash(self::signable_data($data));
$x = rsa_verify($ohash . $dhash,base64_decode($data['signature']['signatureValue']), $pubkey);
logger('LD-verify: ' . intval($x));
return $x;
}
static function dopplesign(&$data,$channel) {
// remove for the time being - performance issues
// $data['magicEnv'] = self::salmon_sign($data,$channel);
return self::sign($data,$channel);
}
static function sign($data,$channel) {
$options = [
'type' => 'RsaSignature2017',
'nonce' => random_string(64),
'creator' => z_root() . '/channel/' . $channel['channel_address'] . '/public_key_pem',
'created' => datetime_convert('UTC','UTC', 'now', 'Y-m-d\Th:i:s\Z')
];
$ohash = self::hash(self::signable_options($options));
$dhash = self::hash(self::signable_data($data));
$options['signatureValue'] = base64_encode(rsa_sign($ohash . $dhash,$channel['channel_prvkey']));
$signed = array_merge([
'@context' => [
ACTIVITYSTREAMS_JSONLD_REV,
'https://w3id.org/security/v1' ],
],$options);
return $signed;
}
static function signable_data($data) {
$newdata = [];
if($data) {
foreach($data as $k => $v) {
if(! in_array($k,[ 'signature' ])) {
$newdata[$k] = $v;
}
}
}
return json_encode($newdata,JSON_UNESCAPED_SLASHES);
}
static function signable_options($options) {
$newopts = [ '@context' => 'https://w3id.org/identity/v1' ];
if($options) {
foreach($options as $k => $v) {
if(! in_array($k,[ 'type','id','signatureValue' ])) {
$newopts[$k] = $v;
}
}
}
return json_encode($newopts,JSON_UNESCAPED_SLASHES);
}
static function hash($obj) {
return hash('sha256',self::normalise($obj));
}
static function normalise($data) {
if(is_string($data)) {
$data = json_decode($data);
}
if(! is_object($data))
return '';
jsonld_set_document_loader('jsonld_document_loader');
try {
$d = jsonld_normalize($data,[ 'algorithm' => 'URDNA2015', 'format' => 'application/nquads' ]);
}
catch (\Exception $e) {
logger('normalise error:' . print_r($e,true));
logger('normalise error: ' . print_r($data,true));
}
return $d;
}
static function salmon_sign($data,$channel) {
$arr = $data;
$data = json_encode($data,JSON_UNESCAPED_SLASHES);
$data = base64url_encode($data, false); // do not strip padding
$data_type = 'application/activity+json';
$encoding = 'base64url';
$algorithm = 'RSA-SHA256';
$keyhash = base64url_encode(z_root() . '/channel/' . $channel['channel_address']);
$data = str_replace(array(" ","\t","\r","\n"),array("","","",""),$data);
// precomputed base64url encoding of data_type, encoding, algorithm concatenated with periods
$precomputed = '.' . base64url_encode($data_type,false) . '.YmFzZTY0dXJs.UlNBLVNIQTI1Ng==';
$signature = base64url_encode(rsa_sign($data . $precomputed,$channel['channel_prvkey']));
return ([
'id' => $arr['id'],
'meData' => $data,
'meDataType' => $data_type,
'meEncoding' => $encoding,
'meAlgorithm' => $algorithm,
'meCreator' => z_root() . '/channel/' . $channel['channel_address'] . '/public_key_pem',
'meSignatureValue' => $signature
]);
}
}

View File

@@ -0,0 +1,103 @@
<?php
namespace Zotlabs\Lib;
/**
* MarkdownSoap
* Purify Markdown for storage
* $x = new MarkdownSoap($string_to_be_cleansed);
* $text = $x->clean();
*
* What this does:
* 1. extracts code blocks and privately escapes them from processing
* 2. Run html purifier on the content
* 3. put back the code blocks
* 4. run htmlspecialchars on the entire content for safe storage
*
* At render time:
* $markdown = \Zotlabs\Lib\MarkdownSoap::unescape($text);
* $html = \Michelf\MarkdownExtra::DefaultTransform($markdown);
*/
class MarkdownSoap {
private $token;
private $str;
function __construct($s) {
$this->str = $s;
$this->token = random_string(20);
}
function clean() {
$x = $this->extract_code($this->str);
$x = $this->purify($x);
$x = $this->putback_code($x);
$x = $this->escape($x);
return $x;
}
function extract_code($s) {
$text = preg_replace_callback('{
(?:\n\n|\A\n?)
( # $1 = the code block -- one or more lines, starting with a space/tab
(?>
[ ]{'.'4'.'} # Lines must start with a tab or a tab-width of spaces
.*\n+
)+
)
((?=^[ ]{0,'.'4'.'}\S)|\Z) # Lookahead for non-space at line-start, or end of doc
}xm',
[ $this , 'encode_code' ], $s);
return $text;
}
function encode_code($matches) {
return $this->token . ';' . base64_encode($matches[0]) . ';' ;
}
function decode_code($matches) {
return base64_decode($matches[1]);
}
function putback_code($s) {
$text = preg_replace_callback('{' . $this->token . '\;(.*?)\;}xm',[ $this, 'decode_code' ], $s);
return $text;
}
function purify($s) {
$s = $this->protect_autolinks($s);
$s = purify_html($s);
$s = $this->unprotect_autolinks($s);
return $s;
}
function protect_autolinks($s) {
$s = preg_replace('/\<(https?\:\/\/)(.*?)\>/','[$1$2]($1$2)',$s);
return $s;
}
function unprotect_autolinks($s) {
return $s;
}
function escape($s) {
return htmlspecialchars($s,ENT_QUOTES,'UTF-8',false);
}
static public function unescape($s) {
return htmlspecialchars_decode($s,ENT_QUOTES);
}
}

282
Zotlabs/Lib/NativeWiki.php Normal file
View File

@@ -0,0 +1,282 @@
<?php
namespace Zotlabs\Lib;
define ( 'NWIKI_ITEM_RESOURCE_TYPE', 'nwiki' );
class NativeWiki {
static public function listwikis($channel, $observer_hash) {
$sql_extra = item_permissions_sql($channel['channel_id'], $observer_hash);
$wikis = q("SELECT * FROM item
WHERE resource_type = '%s' AND mid = parent_mid AND uid = %d AND item_deleted = 0 $sql_extra",
dbesc(NWIKI_ITEM_RESOURCE_TYPE),
intval($channel['channel_id'])
);
if($wikis) {
foreach($wikis as &$w) {
$w['json_allow_cid'] = acl2json($w['allow_cid']);
$w['json_allow_gid'] = acl2json($w['allow_gid']);
$w['json_deny_cid'] = acl2json($w['deny_cid']);
$w['json_deny_gid'] = acl2json($w['deny_gid']);
$w['rawName'] = get_iconfig($w, 'wiki', 'rawName');
$w['htmlName'] = escape_tags($w['rawName']);
$w['urlName'] = urlencode(urlencode($w['rawName']));
$w['mimeType'] = get_iconfig($w, 'wiki', 'mimeType');
$w['typelock'] = get_iconfig($w, 'wiki', 'typelock');
$w['lockstate'] = (($w['allow_cid'] || $w['allow_gid'] || $w['deny_cid'] || $w['deny_gid']) ? 'lock' : 'unlock');
}
}
// TODO: query db for wikis the observer can access. Return with two lists, for read and write access
return array('wikis' => $wikis);
}
function create_wiki($channel, $observer_hash, $wiki, $acl) {
// Generate unique resource_id using the same method as item_message_id()
do {
$dups = false;
$resource_id = random_string();
$r = q("SELECT mid FROM item WHERE resource_id = '%s' AND resource_type = '%s' AND uid = %d LIMIT 1",
dbesc($resource_id),
dbesc(NWIKI_ITEM_RESOURCE_TYPE),
intval($channel['channel_id'])
);
if($r)
$dups = true;
} while($dups == true);
$ac = $acl->get();
$mid = item_message_id();
$arr = array(); // Initialize the array of parameters for the post
$item_hidden = ((intval($wiki['postVisible']) === 0) ? 1 : 0);
$wiki_url = z_root() . '/wiki/' . $channel['channel_address'] . '/' . $wiki['urlName'];
$arr['aid'] = $channel['channel_account_id'];
$arr['uid'] = $channel['channel_id'];
$arr['mid'] = $mid;
$arr['parent_mid'] = $mid;
$arr['item_hidden'] = $item_hidden;
$arr['resource_type'] = NWIKI_ITEM_RESOURCE_TYPE;
$arr['resource_id'] = $resource_id;
$arr['owner_xchan'] = $channel['channel_hash'];
$arr['author_xchan'] = $observer_hash;
$arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . urlencode($arr['mid']);
$arr['llink'] = $arr['plink'];
$arr['title'] = $wiki['htmlName']; // name of new wiki;
$arr['allow_cid'] = $ac['allow_cid'];
$arr['allow_gid'] = $ac['allow_gid'];
$arr['deny_cid'] = $ac['deny_cid'];
$arr['deny_gid'] = $ac['deny_gid'];
$arr['item_wall'] = 1;
$arr['item_origin'] = 1;
$arr['item_thread_top'] = 1;
$arr['item_private'] = intval($acl->is_private());
$arr['verb'] = ACTIVITY_CREATE;
$arr['obj_type'] = ACTIVITY_OBJ_WIKI;
$arr['body'] = '[table][tr][td][h1]New Wiki[/h1][/td][/tr][tr][td][zrl=' . $wiki_url . ']' . $wiki['htmlName'] . '[/zrl][/td][/tr][/table]';
$arr['public_policy'] = map_scope(\Zotlabs\Access\PermissionLimits::Get($channel['channel_id'],'view_wiki'),true);
// Save the wiki name information using iconfig. This is shareable.
if(! set_iconfig($arr, 'wiki', 'rawName', $wiki['rawName'], true)) {
return array('item' => null, 'success' => false);
}
if(! set_iconfig($arr, 'wiki', 'mimeType', $wiki['mimeType'], true)) {
return array('item' => null, 'success' => false);
}
set_iconfig($arr,'wiki','typelock',$wiki['typelock'],true);
$post = item_store($arr);
$item_id = $post['item_id'];
if($item_id) {
\Zotlabs\Daemon\Master::Summon(array('Notifier', 'activity', $item_id));
return array('item' => $post['item'], 'item_id' => $item_id, 'success' => true);
}
else {
return array('item' => null, 'success' => false);
}
}
function update_wiki($channel_id, $observer_hash, $arr, $acl) {
$w = self::get_wiki($channel_id, $observer_hash, $arr['resource_id']);
$item = $w['wiki'];
if(! $item) {
return array('item' => null, 'success' => false);
}
$x = $acl->get();
$item['allow_cid'] = $x['allow_cid'];
$item['allow_gid'] = $x['allow_gid'];
$item['deny_cid'] = $x['deny_cid'];
$item['deny_gid'] = $x['deny_gid'];
$item['item_private'] = intval($acl->is_private());
$update_title = false;
if($item['title'] !== $arr['updateRawName']) {
$update_title = true;
$item['title'] = $arr['updateRawName'];
}
$update = item_store_update($item);
$item_id = $update['item_id'];
// update acl for any existing wiki pages
q("update item set allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', item_private = %d where resource_type = 'nwikipage' and resource_id = '%s'",
dbesc($item['allow_cid']),
dbesc($item['allow_gid']),
dbesc($item['deny_cid']),
dbesc($item['deny_gid']),
dbesc($item['item_private']),
dbesc($arr['resource_id'])
);
if($update['item_id']) {
info( t('Wiki updated successfully'));
if($update_title) {
// Update the wiki name information using iconfig.
if(! set_iconfig($update['item_id'], 'wiki', 'rawName', $arr['updateRawName'], true)) {
return array('item' => null, 'success' => false);
}
}
return array('item' => $update['item'], 'item_id' => $update['item_id'], 'success' => $update['success']);
}
else {
return array('item' => null, 'success' => false);
}
}
static public function sync_a_wiki_item($uid,$id,$resource_id) {
$r = q("SELECT * from item WHERE uid = %d AND ( id = %d OR ( resource_type = '%s' and resource_id = '%s' )) ",
intval($uid),
intval($id),
dbesc(NWIKI_ITEM_RESOURCE_TYPE),
dbesc($resource_id)
);
if($r) {
$q = q("select * from item where resource_type = 'nwikipage' and resource_id = '%s'",
dbesc($r[0]['resource_type'])
);
if($q) {
$r = array_merge($r,$q);
}
xchan_query($r);
$sync_item = fetch_post_tags($r);
build_sync_packet($uid,array('wiki' => array(encode_item($sync_item[0],true))));
}
}
function delete_wiki($channel_id,$observer_hash,$resource_id) {
$w = self::get_wiki($channel_id,$observer_hash,$resource_id);
$item = $w['wiki'];
if(! $item) {
return array('item' => null, 'success' => false);
}
else {
$drop = drop_item($item['id'], false, DROPITEM_NORMAL, true);
}
info( t('Wiki files deleted successfully'));
return array('item' => $item, 'item_id' => $item['id'], 'success' => (($drop === 1) ? true : false));
}
static public function get_wiki($channel_id, $observer_hash, $resource_id) {
$sql_extra = item_permissions_sql($channel_id,$observer_hash);
$item = q("SELECT * FROM item WHERE uid = %d AND resource_type = '%s' AND resource_id = '%s' AND item_deleted = 0
$sql_extra limit 1",
intval($channel_id),
dbesc(NWIKI_ITEM_RESOURCE_TYPE),
dbesc($resource_id)
);
if(! $item) {
return array('wiki' => null);
}
else {
$w = $item[0]; // wiki item table record
// Get wiki metadata
$rawName = get_iconfig($w, 'wiki', 'rawName');
$mimeType = get_iconfig($w, 'wiki', 'mimeType');
$typelock = get_iconfig($w, 'wiki', 'typelock');
return array(
'wiki' => $w,
'rawName' => $rawName,
'htmlName' => escape_tags($rawName),
'urlName' => urlencode(urlencode($rawName)),
'mimeType' => $mimeType,
'typelock' => $typelock
);
}
}
static public function exists_by_name($uid, $urlName) {
$sql_extra = item_permissions_sql($uid);
$item = q("SELECT item.id, resource_id FROM item left join iconfig on iconfig.iid = item.id
WHERE resource_type = '%s' AND iconfig.v = '%s' AND uid = %d
AND item_deleted = 0 $sql_extra limit 1",
dbesc(NWIKI_ITEM_RESOURCE_TYPE),
dbesc(urldecode($urlName)),
intval($uid)
);
if($item) {
return array('id' => $item[0]['id'], 'resource_id' => $item[0]['resource_id']);
}
else {
return array('id' => null, 'resource_id' => null);
}
}
static public function get_permissions($resource_id, $owner_id, $observer_hash) {
// TODO: For now, only the owner can edit
$sql_extra = item_permissions_sql($owner_id, $observer_hash);
if(local_channel() && local_channel() == $owner_id) {
return [ 'read' => true, 'write' => true, 'success' => true ];
}
$r = q("SELECT * FROM item WHERE uid = %d and resource_type = '%s' AND resource_id = '%s' $sql_extra LIMIT 1",
intval($owner_id),
dbesc(NWIKI_ITEM_RESOURCE_TYPE),
dbesc($resource_id)
);
if(! $r) {
return array('read' => false, 'write' => false, 'success' => true);
}
else {
// TODO: Create a new permission setting for wiki analogous to webpages. Until
// then, use webpage permissions
$write = perm_is_allowed($owner_id, $observer_hash,'write_wiki');
return array('read' => true, 'write' => $write, 'success' => true);
}
}
}

View File

@@ -0,0 +1,691 @@
<?php
namespace Zotlabs\Lib;
use \Zotlabs\Lib as Zlib;
class NativeWikiPage {
static public function page_list($channel_id,$observer_hash, $resource_id) {
// TODO: Create item table records for pages so that metadata like title can be applied
$w = Zlib\NativeWiki::get_wiki($channel_id,$observer_hash,$resource_id);
$pages[] = [
'resource_id' => '',
'title' => 'Home',
'url' => 'Home',
'link_id' => 'id_wiki_home_0'
];
$sql_extra = item_permissions_sql($channel_id,$observer_hash);
$r = q("select * from item where resource_type = 'nwikipage' and resource_id = '%s' and uid = %d and item_deleted = 0
$sql_extra order by title asc",
dbesc($resource_id),
intval($channel_id)
);
if($r) {
$x = [];
$y = [];
foreach($r as $rv) {
if(! in_array($rv['mid'],$x)) {
$y[] = $rv;
$x[] = $rv['mid'];
}
}
$items = fetch_post_tags($y,true);
foreach($items as $page_item) {
$title = get_iconfig($page_item['id'],'nwikipage','pagetitle',t('(No Title)'));
if(urldecode($title) !== 'Home') {
$pages[] = [
'resource_id' => $resource_id,
'title' => escape_tags($title),
'url' => str_replace('%2F','/',urlencode(str_replace('%2F','/',urlencode($title)))),
'link_id' => 'id_' . substr($resource_id, 0, 10) . '_' . $page_item['id']
];
}
}
}
return array('pages' => $pages, 'wiki' => $w);
}
static public function create_page($channel_id, $observer_hash, $name, $resource_id, $mimetype = 'text/bbcode') {
logger('mimetype: ' . $mimetype);
if(! in_array($mimetype,[ 'text/markdown','text/bbcode','text/plain','text/html' ]))
$mimetype = 'text/markdown';
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (! $w['wiki']) {
return array('content' => null, 'message' => 'Error reading wiki', 'success' => false);
}
// create an empty activity
$arr = [];
$arr['uid'] = $channel_id;
$arr['author_xchan'] = $observer_hash;
$arr['mimetype'] = $mimetype;
$arr['title'] = $name;
$arr['resource_type'] = 'nwikipage';
$arr['resource_id'] = $resource_id;
$arr['allow_cid'] = $w['wiki']['allow_cid'];
$arr['allow_gid'] = $w['wiki']['allow_gid'];
$arr['deny_cid'] = $w['wiki']['deny_cid'];
$arr['deny_gid'] = $w['wiki']['deny_gid'];
$arr['public_policy'] = map_scope(\Zotlabs\Access\PermissionLimits::Get($channel_id,'view_wiki'),true);
// We may wish to change this some day.
$arr['item_unpublished'] = 1;
set_iconfig($arr,'nwikipage','pagetitle',(($name) ? $name : t('(No Title)')),true);
$p = post_activity_item($arr, false, false);
if($p['item_id']) {
$page = [
'rawName' => $name,
'htmlName' => escape_tags($name),
'urlName' => urlencode($name),
];
return array('page' => $page, 'item_id' => $p['item_id'], 'item' => $p['activity'], 'wiki' => $w, 'message' => '', 'success' => true);
}
return [ 'success' => false, 'message' => t('Wiki page create failed.') ];
}
static public function rename_page($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$pageNewName = ((array_key_exists('pageNewName',$arr)) ? $arr['pageNewName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if(! $w['wiki']) {
return array('message' => t('Wiki not found.'), 'success' => false);
}
$ic = q("select * from iconfig left join item on iconfig.iid = item.id
where uid = %d and cat = 'nwikipage' and k = 'pagetitle' and v = '%s'",
intval($channel_id),
dbesc($pageNewName)
);
if($ic) {
return [ 'success' => false, 'message' => t('Destination name already exists') ];
}
$ids = [];
$ic = q("select *, item.id as item_id from iconfig left join item on iconfig.iid = item.id
where uid = %d and cat = 'nwikipage' and k = 'pagetitle' and v = '%s'",
intval($channel_id),
dbesc($pageUrlName)
);
if($ic) {
foreach($ic as $c) {
set_iconfig($c['item_id'],'nwikipage','pagetitle',$pageNewName);
$ids[] = $c['item_id'];
}
$str_ids = implode(',', $ids);
q("update item set title = '%s' where id in ($str_ids)",
dbesc($pageNewName)
);
$page = [
'rawName' => $pageNewName,
'htmlName' => escape_tags($pageNewName),
'urlName' => urlencode(escape_tags($pageNewName))
];
return [ 'success' => true, 'page' => $page ];
}
return [ 'success' => false, 'item_id' => $c['item_id'], 'message' => t('Page not found') ];
}
static public function get_page_content($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? intval($arr['channel_id']) : 0);
$revision = ((array_key_exists('revision',$arr)) ? intval($arr['revision']) : (-1));
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (! $w['wiki']) {
return array('content' => null, 'message' => 'Error reading wiki', 'success' => false);
}
$item = self::load_page($arr);
if($item) {
$content = $item['body'];
return [
'content' => $content,
'mimeType' => $w['mimeType'],
'pageMimeType' => $item['mimetype'],
'message' => '',
'success' => true
];
}
return array('content' => null, 'message' => t('Error reading page content'), 'success' => false);
}
static public function page_history($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (!$w['wiki']) {
return array('history' => null, 'message' => 'Error reading wiki', 'success' => false);
}
$items = self::load_page_history($arr);
$history = [];
if($items) {
$processed = 0;
foreach($items as $item) {
if($processed > 1000)
break;
$processed ++;
$history[] = [
'revision' => $item['revision'],
'date' => datetime_convert('UTC',date_default_timezone_get(),$item['edited']),
'name' => $item['author']['xchan_name'],
'title' => get_iconfig($item,'nwikipage','commit_msg')
];
}
return [ 'success' => true, 'history' => $history ];
}
return [ 'success' => false ];
}
static public function load_page($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$revision = ((array_key_exists('revision',$arr)) ? $arr['revision'] : (-1));
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (! $w['wiki']) {
return array('content' => null, 'message' => 'Error reading wiki', 'success' => false);
}
$ids = '';
$ic = q("select * from iconfig left join item on iconfig.iid = item.id where uid = %d and cat = 'nwikipage' and k = 'pagetitle' and v = '%s'",
intval($channel_id),
dbesc($pageUrlName)
);
if($ic) {
foreach($ic as $c) {
if($ids)
$ids .= ',';
$ids .= intval($c['iid']);
}
}
$sql_extra = item_permissions_sql($channel_id,$observer_hash);
if($revision == (-1))
$sql_extra .= " order by revision desc ";
elseif($revision)
$sql_extra .= " and revision = " . intval($revision) . " ";
$r = null;
if($ids) {
$r = q("select * from item where resource_type = 'nwikipage' and resource_id = '%s' and uid = %d and id in ( $ids ) $sql_extra limit 1",
dbesc($resource_id),
intval($channel_id)
);
if($r) {
$items = fetch_post_tags($r,true);
return $items[0];
}
}
return null;
}
static public function load_page_history($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$revision = ((array_key_exists('revision',$arr)) ? $arr['revision'] : (-1));
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (! $w['wiki']) {
return array('content' => null, 'message' => 'Error reading wiki', 'success' => false);
}
$ids = '';
$ic = q("select * from iconfig left join item on iconfig.iid = item.id where uid = %d and cat = 'nwikipage' and k = 'pagetitle' and v = '%s'",
intval($channel_id),
dbesc($pageUrlName)
);
if($ic) {
foreach($ic as $c) {
if($ids)
$ids .= ',';
$ids .= intval($c['iid']);
}
}
$sql_extra = item_permissions_sql($channel_id,$observer_hash);
$sql_extra .= " order by revision desc ";
$r = null;
if($ids) {
$r = q("select * from item where resource_type = 'nwikipage' and resource_id = '%s' and uid = %d and id in ( $ids ) and item_deleted = 0 $sql_extra",
dbesc($resource_id),
intval($channel_id)
);
if($r) {
xchan_query($r);
$items = fetch_post_tags($r,true);
return $items;
}
}
return null;
}
static public function save_page($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$content = ((array_key_exists('content',$arr)) ? $arr['content'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$revision = ((array_key_exists('revision',$arr)) ? $arr['revision'] : 0);
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (!$w['wiki']) {
return array('message' => t('Error reading wiki'), 'success' => false);
}
// fetch the most recently saved revision.
$item = self::load_page($arr);
if(! $item) {
return array('message' => t('Page not found'), 'success' => false);
}
$mimetype = $item['mimetype'];
// change just the fields we need to change to create a revision;
unset($item['id']);
unset($item['author']);
$item['parent'] = 0;
$item['body'] = $content;
$item['author_xchan'] = $observer_hash;
$item['revision'] = (($arr['revision']) ? intval($arr['revision']) + 1 : intval($item['revision']) + 1);
$item['edited'] = datetime_convert();
$item['mimetype'] = $mimetype;
if($item['iconfig'] && is_array($item['iconfig']) && count($item['iconfig'])) {
for($x = 0; $x < count($item['iconfig']); $x ++) {
unset($item['iconfig'][$x]['id']);
unset($item['iconfig'][$x]['iid']);
}
}
$ret = item_store($item, false, false);
if($ret['item_id'])
return array('message' => '', 'item_id' => $ret['item_id'], 'filename' => $filename, 'success' => true);
else
return array('message' => t('Page update failed.'), 'success' => false);
}
static public function delete_page($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if(! $w['wiki']) {
return [ 'success' => false, 'message' => t('Error reading wiki') ];
}
$ids = [];
$ic = q("select * from iconfig left join item on iconfig.iid = item.id
where uid = %d and cat = 'nwikipage' and k = 'pagetitle' and v = '%s'",
intval($channel_id),
dbesc($pageUrlName)
);
if($ic) {
foreach($ic as $c) {
$ids[] = intval($c['iid']);
}
}
if($ids) {
drop_items($ids);
return [ 'success' => true ];
}
return [ 'success' => false, 'message' => t('Nothing deleted') ];
}
static public function revert_page($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$commitHash = ((array_key_exists('commitHash',$arr)) ? $arr['commitHash'] : null);
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
if (! $commitHash) {
return array('content' => $content, 'message' => 'No commit was provided', 'success' => false);
}
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (!$w['wiki']) {
return array('content' => $content, 'message' => 'Error reading wiki', 'success' => false);
}
$x = $arr;
if(intval($commitHash) > 0) {
unset($x['commitHash']);
$x['revision'] = intval($commitHash) - 1;
$loaded = self::load_page($x);
if($loaded) {
$content = $loaded['body'];
return [ 'content' => $content, 'success' => true ];
}
return [ 'content' => $content, 'success' => false ];
}
}
static public function compare_page($arr) {
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
$currentCommit = ((array_key_exists('currentCommit',$arr)) ? $arr['currentCommit'] : (-1));
$compareCommit = ((array_key_exists('compareCommit',$arr)) ? $arr['compareCommit'] : 0);
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (!$w['wiki']) {
return array('message' => t('Error reading wiki'), 'success' => false);
}
$x = $arr;
$x['revision'] = (-1);
$currpage = self::load_page($x);
if($currpage)
$currentContent = $currpage['body'];
$x['revision'] = $compareCommit;
$comppage = self::load_page($x);
if($comppage)
$compareContent = $comppage['body'];
if($currpage && $comppage) {
require_once('library/class.Diff.php');
$diff = \Diff::toTable(\Diff::compare($currentContent, $compareContent));
return [ 'success' => true, 'diff' => $diff ];
}
return [ 'success' => false, 'message' => t('Compare: object not found.') ];
}
static public function commit($arr) {
$commit_msg = ((array_key_exists('commit_msg', $arr)) ? $arr['commit_msg'] : t('Page updated'));
$observer_hash = ((array_key_exists('observer_hash',$arr)) ? $arr['observer_hash'] : '');
$channel_id = ((array_key_exists('channel_id',$arr)) ? $arr['channel_id'] : 0);
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : t('Untitled'));
if(array_key_exists('resource_id', $arr)) {
$resource_id = $arr['resource_id'];
}
else {
return array('message' => t('Wiki resource_id required for git commit'), 'success' => false);
}
$w = Zlib\NativeWiki::get_wiki($channel_id, $observer_hash, $resource_id);
if (! $w['wiki']) {
return array('message' => t('Error reading wiki'), 'success' => false);
}
$page = self::load_page($arr);
if($page) {
set_iconfig($page['id'],'nwikipage','commit_msg',escape_tags($commit_msg),true);
return [ 'success' => true, 'item_id' => $page['id'], 'page' => $page ];
}
return [ 'success' => false, 'message' => t('Page not found.') ];
}
static public function convert_links($s, $wikiURL) {
if (strpos($s,'[[') !== false) {
preg_match_all("/\[\[(.*?)\]\]/", $s, $match);
$pages = $pageURLs = array();
foreach ($match[1] as $m) {
// TODO: Why do we need to double urlencode for this to work?
$pageURLs[] = urlencode(urlencode(escape_tags($m)));
$pages[] = $m;
}
$idx = 0;
while(strpos($s,'[[') !== false) {
$replace = '<a href="'.$wikiURL.'/'.$pageURLs[$idx].'">'.$pages[$idx].'</a>';
$s = preg_replace("/\[\[(.*?)\]\]/", $replace, $s, 1);
$idx++;
}
}
return $s;
}
static public function render_page_history($arr) {
$pageUrlName = ((array_key_exists('pageUrlName', $arr)) ? $arr['pageUrlName'] : '');
$resource_id = ((array_key_exists('resource_id', $arr)) ? $arr['resource_id'] : '');
$pageHistory = self::page_history([
'channel_id' => \App::$profile_uid,
'observer_hash' => get_observer_hash(),
'resource_id' => $resource_id,
'pageUrlName' => $pageUrlName
]);
return replace_macros(get_markup_template('nwiki_page_history.tpl'), array(
'$pageHistory' => $pageHistory['history'],
'$permsWrite' => $arr['permsWrite'],
'$name_lbl' => t('Name'),
'$msg_label' => t('Message','wiki_history')
));
}
/**
* Replace the instances of the string [toc] with a list element that will be populated by
* a table of contents by the JavaScript library
* @param string $s
* @return string
*/
static public function generate_toc($s) {
if (strpos($s,'[toc]') !== false) {
//$toc_md = wiki_toc($s); // Generate Markdown-formatted list prior to HTML render
$toc_md = '<ul id="wiki-toc"></ul>'; // use the available jQuery plugin http://ndabas.github.io/toc/
$s = preg_replace("/\[toc\]/", $toc_md, $s, -1);
}
return $s;
}
/**
* Converts a select set of bbcode tags. Much of the code is copied from include/bbcode.php
* @param string $s
* @return string
*/
static public function bbcode($s) {
$s = str_replace(array('[baseurl]', '[sitename]'), array(z_root(), get_config('system', 'sitename')), $s);
$s = preg_replace_callback("/\[observer\.language\=(.*?)\](.*?)\[\/observer\]/ism",'oblanguage_callback', $s);
$s = preg_replace_callback("/\[observer\.language\!\=(.*?)\](.*?)\[\/observer\]/ism",'oblanguage_necallback', $s);
$observer = \App::get_observer();
if ($observer) {
$s1 = '<span class="bb_observer" title="' . t('Different viewers will see this text differently') . '">';
$s2 = '</span>';
$obsBaseURL = $observer['xchan_connurl'];
$obsBaseURL = preg_replace("/\/poco\/.*$/", '', $obsBaseURL);
$s = str_replace('[observer.baseurl]', $obsBaseURL, $s);
$s = str_replace('[observer.url]', $observer['xchan_url'], $s);
$s = str_replace('[observer.name]', $s1 . $observer['xchan_name'] . $s2, $s);
$s = str_replace('[observer.address]', $s1 . $observer['xchan_addr'] . $s2, $s);
$s = str_replace('[observer.webname]', substr($observer['xchan_addr'], 0, strpos($observer['xchan_addr'], '@')), $s);
$s = str_replace('[observer.photo]', '', $s);
}
else {
$s = str_replace('[observer.baseurl]', '', $s);
$s = str_replace('[observer.url]', '', $s);
$s = str_replace('[observer.name]', '', $s);
$s = str_replace('[observer.address]', '', $s);
$s = str_replace('[observer.webname]', '', $s);
$s = str_replace('[observer.photo]', '', $s);
}
return $s;
}
static public function get_file_ext($arr) {
if($arr['mimetype'] === 'text/bbcode')
return '.bb';
elseif($arr['mimetype'] === 'text/markdown')
return '.md';
elseif($arr['mimetype'] === 'text/plain')
return '.txt';
}
// This function is derived from
// http://stackoverflow.com/questions/32068537/generate-table-of-contents-from-markdown-in-php
static public function toc($content) {
// ensure using only "\n" as line-break
$source = str_replace(["\r\n", "\r"], "\n", $content);
// look for markdown TOC items
preg_match_all(
'/^(?:=|-|#).*$/m',
$source,
$matches,
PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE
);
// preprocess: iterate matched lines to create an array of items
// where each item is an array(level, text)
$file_size = strlen($source);
foreach ($matches[0] as $item) {
$found_mark = substr($item[0], 0, 1);
if ($found_mark == '#') {
// text is the found item
$item_text = $item[0];
$item_level = strrpos($item_text, '#') + 1;
$item_text = substr($item_text, $item_level);
} else {
// text is the previous line (empty if <hr>)
$item_offset = $item[1];
$prev_line_offset = strrpos($source, "\n", -($file_size - $item_offset + 2));
$item_text =
substr($source, $prev_line_offset, $item_offset - $prev_line_offset - 1);
$item_text = trim($item_text);
$item_level = $found_mark == '=' ? 1 : 2;
}
if (!trim($item_text) OR strpos($item_text, '|') !== FALSE) {
// item is an horizontal separator or a table header, don't mind
continue;
}
$raw_toc[] = ['level' => $item_level, 'text' => trim($item_text)];
}
$o = '';
foreach($raw_toc as $t) {
$level = intval($t['level']);
$text = $t['text'];
switch ($level) {
case 1:
$li = '* ';
break;
case 2:
$li = ' * ';
break;
case 3:
$li = ' * ';
break;
case 4:
$li = ' * ';
break;
default:
$li = '* ';
break;
}
$o .= $li . $text . "\n";
}
return $o;
}
}

View File

@@ -20,11 +20,12 @@ class PConfig {
if(is_null($uid) || $uid === false)
return false;
if(! array_key_exists($uid, \App::$config))
\App::$config[$uid] = array();
if(! is_array(\App::$config)) {
btlogger('App::$config not an array: ' . $uid);
btlogger('App::$config not an array');
}
if(! array_key_exists($uid, \App::$config)) {
\App::$config[$uid] = array();
}
if(! is_array(\App::$config[$uid])) {
@@ -119,7 +120,7 @@ class PConfig {
$dbvalue = ((is_array($value)) ? serialize($value) : $value);
$dbvalue = ((is_bool($dbvalue)) ? intval($dbvalue) : $dbvalue);
if(get_pconfig($uid, $family, $key) === false) {
if(self::Get($uid, $family, $key) === false) {
if(! array_key_exists($uid, \App::$config))
\App::$config[$uid] = array();
if(! array_key_exists($family, \App::$config[$uid]))

146
Zotlabs/Lib/Permcat.php Normal file
View File

@@ -0,0 +1,146 @@
<?php
namespace Zotlabs\Lib;
use \Zotlabs\Access as Zaccess;
class Permcat {
private $permcats = [];
public function __construct($channel_id) {
$perms = [];
// first check role perms for a perms_connect setting
$role = get_pconfig($channel_id,'system','permissions_role');
if($role) {
$x = Zaccess\PermissionRoles::role_perms($role);
if($x['perms_connect']) {
$perms = Zaccess\Permissions::FilledPerms($x['perms_connect']);
}
}
// if no role perms it may be a custom role, see if there any autoperms
if(! $perms) {
$perms = Zaccess\Permissions::FilledAutoPerms($channel_id);
}
// if no autoperms it may be a custom role with manual perms
if(! $perms) {
$r = q("select channel_hash from channel where channel_id = %d",
intval($channel_id)
);
if($r) {
$x = q("select * from abconfig where chan = %d and xchan = '%s' and cat = 'my_perms'",
intval($channel_id),
dbesc($r[0]['channel_hash'])
);
if($x) {
foreach($x as $xv) {
$perms[$xv['k']] = intval($xv['v']);
}
}
}
}
// nothing was found - create a filled permission array where all permissions are 0
if(! $perms) {
$perms = Zaccess\Permissions::FilledPerms([]);
}
$this->permcats[] = [
'name' => 'default',
'localname' => t('default','permcat'),
'perms' => Zaccess\Permissions::Operms($perms),
'system' => 1
];
$p = $this->load_permcats($channel_id);
if($p) {
for($x = 0; $x < count($p); $x++) {
$this->permcats[] = [
'name' => $p[$x][0],
'localname' => $p[$x][1],
'perms' => Zaccess\Permissions::Operms(Zaccess\Permissions::FilledPerms($p[$x][2])),
'system' => intval($p[$x][3])
];
}
}
}
public function listing() {
return $this->permcats;
}
public function fetch($name) {
if($name && $this->permcats) {
foreach($this->permcats as $permcat) {
if(strcasecmp($permcat['name'],$name) === 0) {
return $permcat;
}
}
}
return ['error' => true];
}
public function load_permcats($uid) {
$permcats = [
[ 'follower', t('follower','permcat'),
[ 'view_stream','view_profile','view_contacts','view_storage','view_pages','view_wiki',
'post_like' ], 1
],
[ 'contributor', t('contributor','permcat'),
[ 'view_stream','view_profile','view_contacts','view_storage','view_pages','view_wiki',
'post_wall','post_comments','write_wiki','post_like','tag_deliver','chat' ], 1
],
[ 'publisher', t('publisher','permcat'),
[ 'view_stream','view_profile','view_contacts','view_storage','view_pages',
'write_storage','post_wall','write_pages','write_wiki','post_comments','post_like','tag_deliver',
'chat', 'republish' ], 1
]
];
if($uid) {
$x = q("select * from pconfig where uid = %d and cat = 'permcat'",
intval($uid)
);
if($x) {
foreach($x as $xv) {
$value = ((preg_match('|^a:[0-9]+:{.*}$|s', $xv['v'])) ? unserialize($xv['v']) : $xv['v']);
$permcats[] = [ $xv['k'], $xv['k'], $value, 0 ];
}
}
}
call_hooks('permcats',$permcats);
return $permcats;
}
static public function find_permcat($arr,$name) {
if((! $arr) || (! $name))
return false;
foreach($arr as $p)
if($p['name'] == $name)
return $p['value'];
}
static public function update($channel_id, $name,$permarr) {
PConfig::Set($channel_id,'permcat',$name,$permarr);
}
static public function delete($channel_id,$name) {
PConfig::Delete($channel_id,'permcat',$name);
}
}

25
Zotlabs/Lib/SConfig.php Normal file
View File

@@ -0,0 +1,25 @@
<?php
namespace Zotlabs\Lib;
// account configuration storage is built on top of the under-utilised xconfig
class SConfig {
static public function Load($server_id) {
return XConfig::Load('s_' . $server_id);
}
static public function Get($server_id,$family,$key,$default = false) {
return XConfig::Get('s_' . $server_id,$family,$key, $default);
}
static public function Set($server_id,$family,$key,$value) {
return XConfig::Set('s_' . $server_id,$family,$key,$value);
}
static public function Delete($server_id,$family,$key) {
return XConfig::Delete('s_' . $server_id,$family,$key);
}
}

View File

@@ -19,6 +19,9 @@ class System {
static public function get_project_version() {
if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['hide_version'])
return '';
if(is_array(\App::$config) && is_array(\App::$config['system']) && array_key_exists('std_version',\App::$config['system']))
return \App::$config['system']['std_version'];
return self::get_std_version();
}
@@ -54,12 +57,15 @@ class System {
return 'https://github.com/redmatrix/hubzilla';
}
static public function get_server_role() {
if(is_array(\App::$config) && is_array(\App::$config['system']) && \App::$config['system']['server_role'])
return \App::$config['system']['server_role'];
return 'standard';
return 'pro';
}
static public function get_zot_revision() {
$x = [ 'revision' => ZOT_REVISION ];
call_hooks('zot_revision',$x);
return $x['revision'];
}
static public function get_std_version() {
@@ -72,11 +78,8 @@ class System {
if(get_directory_realm() != DIRECTORY_REALM)
return true;
foreach(['hubzilla','zap'] as $t) {
if(stristr($p,$t))
return true;
}
if(in_array(strtolower($p),['hubzilla','zap','red']))
return true;
return false;
}
}

View File

@@ -7,12 +7,12 @@ class Techlevels {
static public function levels() {
$techlevels = [
'0' => t('Beginner/Basic'),
'1' => t('Novice - not skilled but willing to learn'),
'2' => t('Intermediate - somewhat comfortable'),
'3' => t('Advanced - very comfortable'),
'4' => t('Expert - I can write computer code'),
'5' => t('Wizard - I probably know more than you do')
'0' => t('0. Beginner/Basic'),
'1' => t('1. Novice - not skilled but willing to learn'),
'2' => t('2. Intermediate - somewhat comfortable'),
'3' => t('3. Advanced - very comfortable'),
'4' => t('4. Expert - I can write computer code'),
'5' => t('5. Wizard - I probably know more than you do')
];
return $techlevels;
}

View File

@@ -29,6 +29,7 @@ class ThreadItem {
private $visiting = false;
private $channel = null;
private $display_mode = 'normal';
private $reload = '';
public function __construct($data) {
@@ -82,7 +83,8 @@ class ThreadItem {
$dropping = false;
$star = false;
$isstarred = "unstarred fa-star-o";
$indent = '';
$is_comment = false;
$is_item = false;
$osparkle = '';
$total_children = $this->count_descendants();
$unseen_comments = (($item['real_uid']) ? 0 : $this->count_unseen_descendants());
@@ -100,10 +102,13 @@ class ThreadItem {
if($item['author']['xchan_network'] === 'rss')
$shareable = true;
$mode = $conv->get_mode();
$edlink = (($item['item_type'] == ITEM_TYPE_CARD) ? 'card_edit' : 'editpost');
if(local_channel() && $observer['xchan_hash'] === $item['author_xchan'])
$edpost = array(z_root()."/editpost/".$item['id'], t("Edit"));
$edpost = array(z_root() . '/' . $edlink . '/' . $item['id'], t('Edit'));
else
$edpost = false;
@@ -136,7 +141,7 @@ class ThreadItem {
$filer = ((($conv->get_profile_owner() == local_channel()) && (! array_key_exists('real_uid',$item))) ? t("Save to Folder") : false);
$profile_avatar = $item['author']['xchan_photo_m'];
$profile_link = chanlink_url($item['author']['xchan_url']);
$profile_link = chanlink_hash($item['author_xchan']);
$profile_name = $item['author']['xchan_name'];
$location = format_location($item);
@@ -152,7 +157,7 @@ class ThreadItem {
$response_verbs[] = 'attendyes';
$response_verbs[] = 'attendno';
$response_verbs[] = 'attendmaybe';
if($this->is_commentable()) {
if($this->is_commentable() && $observer) {
$isevent = true;
$attend = array( t('I will attend'), t('I will not attend'), t('I might attend'));
}
@@ -163,7 +168,7 @@ class ThreadItem {
$response_verbs[] = 'agree';
$response_verbs[] = 'disagree';
$response_verbs[] = 'abstain';
if($this->is_commentable()) {
if($this->is_commentable() && $observer) {
$conlabels = array( t('I agree'), t('I disagree'), t('I abstain'));
$canvote = true;
}
@@ -183,7 +188,7 @@ class ThreadItem {
$like_list = ((x($conv_responses['like'],$item['mid'])) ? $conv_responses['like'][$item['mid'] . '-l'] : '');
if (count($like_list) > MAX_LIKERS) {
$like_list_part = array_slice($like_list, 0, MAX_LIKERS);
array_push($like_list_part, '<a href="#" data-toggle="modal" data-target="#likeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
array_push($like_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#likeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
} else {
$like_list_part = '';
}
@@ -195,7 +200,7 @@ class ThreadItem {
$dislike_button_label = tt('Dislike','Dislikes',$dislike_count,'noun');
if (count($dislike_list) > MAX_LIKERS) {
$dislike_list_part = array_slice($dislike_list, 0, MAX_LIKERS);
array_push($dislike_list_part, '<a href="#" data-toggle="modal" data-target="#dislikeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
array_push($dislike_list_part, '<a class="dropdown-item" href="#" data-toggle="modal" data-target="#dislikeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
} else {
$dislike_list_part = '';
}
@@ -232,7 +237,7 @@ class ThreadItem {
}
}
else {
$indent = 'comment';
$is_comment = true;
}
@@ -250,8 +255,6 @@ class ThreadItem {
);
}
$server_role = get_config('system','server_role');
$has_bookmarks = false;
if(is_array($item['term'])) {
foreach($item['term'] as $t) {
@@ -264,7 +267,7 @@ class ThreadItem {
if(($item['obj_type'] === ACTIVITY_OBJ_EVENT) && $conv->get_profile_owner() == local_channel())
$has_event = true;
if($this->is_commentable()) {
if($this->is_commentable() && $observer) {
$like = array( t("I like this \x28toggle\x29"), t("like"));
$dislike = array( t("I don't like this \x28toggle\x29"), t("dislike"));
}
@@ -276,13 +279,13 @@ class ThreadItem {
$keep_reports = intval(get_config('system','expire_delivery_reports'));
if($keep_reports === 0)
$keep_reports = 30;
$keep_reports = 10;
if((! get_config('system','disable_dreport')) && strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC',"now - $keep_reports days")) > 0)
$dreport = t('Delivery Report');
if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
$indent .= ' shiny';
$is_new = true;
localize_item($item);
@@ -295,7 +298,7 @@ class ThreadItem {
$owner_address = substr($item['owner']['xchan_addr'],0,strpos($item['owner']['xchan_addr'],'@'));
$viewthread = $item['llink'];
if($conv->get_mode() === 'channel')
$viewthread = z_root() . '/channel/' . $owner_address . '?f=&mid=' . $item['mid'];
$viewthread = z_root() . '/channel/' . $owner_address . '?f=&mid=' . urlencode($item['mid']);
$comment_count_txt = sprintf( tt('%d comment','%d comments',$total_children),$total_children );
$list_unseen_txt = (($unseen_comments) ? sprintf('%d unseen',$unseen_comments) : '');
@@ -310,7 +313,8 @@ class ThreadItem {
$tmp_item = array(
'template' => $this->get_template(),
'mode' => $mode,
'mode' => $mode,
'item_type' => intval($item['item_type']),
'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
'body' => $body['html'],
'tags' => $body['tags'],
@@ -335,7 +339,8 @@ class ThreadItem {
'wall' => t('Wall-to-Wall'),
'vwall' => t('via Wall-To-Wall:'),
'profile_url' => $profile_link,
'item_photo_menu' => item_photo_menu($item),
'thread_action_menu' => thread_action_menu($item,$conv->get_mode()),
'thread_author_menu' => thread_author_menu($item,$conv->get_mode()),
'dreport' => $dreport,
'name' => $profile_name,
'thumb' => $profile_avatar,
@@ -359,7 +364,8 @@ class ThreadItem {
'attend_title' => t('Attendance Options'),
'vote_label' => t('Vote'),
'vote_title' => t('Voting Options'),
'indent' => $indent,
'is_comment' => $is_comment,
'is_new' => $is_new,
'owner_url' => $this->get_owner_url(),
'owner_photo' => $this->get_owner_photo(),
'owner_name' => $this->get_owner_name(),
@@ -368,7 +374,7 @@ class ThreadItem {
'has_tags' => $has_tags,
'reactions' => $this->reactions,
// Item toolbar buttons
'emojis' => (($this->is_toplevel() && $this->is_commentable() && feature_enabled($conv->get_profile_owner(),'emojis')) ? '1' : ''),
'emojis' => (($this->is_toplevel() && $this->is_commentable() && $observer && feature_enabled($conv->get_profile_owner(),'emojis')) ? '1' : ''),
'like' => $like,
'dislike' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike : ''),
'share' => $share,
@@ -405,9 +411,10 @@ class ThreadItem {
'showlike' => $showlike,
'showdislike' => $showdislike,
'comment' => $this->get_comment_box($indent),
'previewing' => ($conv->is_preview() ? ' preview ' : ''),
'previewing' => ($conv->is_preview() ? true : false ),
'preview_lbl' => t('This is an unsaved preview'),
'wait' => t('Please wait'),
'submid' => substr($item['mid'],0,32),
'submid' => str_replace(['+','='], ['',''], base64_encode($item['mid'])),
'thread_level' => $thread_level
);
@@ -478,6 +485,14 @@ class ThreadItem {
return $this->threaded;
}
public function set_reload($val) {
$this->reload = $val;
}
public function get_reload() {
return $this->reload;
}
public function set_commentable($val) {
$this->commentable = $val;
foreach($this->get_children() as $child)
@@ -711,11 +726,10 @@ class ThreadItem {
call_hooks('comment_buttons',$arr);
$comment_buttons = $arr['comment_buttons'];
$comment_box = replace_macros($template,array(
'$return_path' => '',
'$threaded' => $this->is_threaded(),
'$jsreload' => '', //(($conv->get_mode() === 'display') ? $_SESSION['return_url'] : ''),
'$jsreload' => $conv->reload,
'$type' => (($conv->get_mode() === 'channel') ? 'wall-comment' : 'net-comment'),
'$id' => $this->get_id(),
'$parent' => $this->get_id(),
@@ -733,15 +747,21 @@ class ThreadItem {
'$edquote' => t('Quote'),
'$edcode' => t('Code'),
'$edimg' => t('Image'),
'$edatt' => t('Attach File'),
'$edurl' => t('Insert Link'),
'$edvideo' => t('Video'),
'$preview' => t('Preview'), // ((feature_enabled($conv->get_profile_owner(),'preview')) ? t('Preview') : ''),
'$indent' => $indent,
'$can_upload' => (perm_is_allowed($conv->get_profile_owner(),get_observer_hash(),'write_storage') && $conv->is_uploadable()),
'$feature_encrypt' => ((feature_enabled($conv->get_profile_owner(),'content_encrypt')) ? true : false),
'$encrypt' => t('Encrypt text'),
'$cipher' => $conv->get_cipher(),
'$sourceapp' => \App::$sourcename
'$sourceapp' => \App::$sourcename,
'$observer' => get_observer_hash(),
'$anoncomments' => ((($conv->get_mode() === 'channel' || $conv->get_mode() === 'display') && perm_is_allowed($conv->get_profile_owner(),'','post_comments')) ? true : false),
'$anonname' => [ 'anonname', t('Your full name (required)') ],
'$anonmail' => [ 'anonmail', t('Your email address (required)') ],
'$anonurl' => [ 'anonurl', t('Your website URL (optional)') ]
));
return $comment_box;
@@ -765,7 +785,7 @@ class ThreadItem {
return;
if($this->is_toplevel() && ($this->get_data_value('author_xchan') != $this->get_data_value('owner_xchan'))) {
$this->owner_url = chanlink_url($this->data['owner']['xchan_url']);
$this->owner_url = chanlink_hash($this->data['owner']['xchan_hash']);
$this->owner_photo = $this->data['owner']['xchan_photo_m'];
$this->owner_name = $this->data['owner']['xchan_name'];
$this->wall_to_wall = true;

View File

@@ -18,18 +18,21 @@ class ThreadStream {
private $observer = null;
private $writable = false;
private $commentable = false;
private $uploadable = false;
private $profile_owner = 0;
private $preview = false;
private $prepared_item = '';
public $reload = '';
private $cipher = 'aes256';
// $prepared_item is for use by alternate conversation structures such as photos
// wherein we've already prepared a top level item which doesn't look anything like
// a normal "post" item
public function __construct($mode, $preview, $prepared_item = '') {
public function __construct($mode, $preview, $uploadable, $prepared_item = '') {
$this->set_mode($mode);
$this->preview = $preview;
$this->uploadable = $uploadable;
$this->prepared_item = $prepared_item;
$c = ((local_channel()) ? get_pconfig(local_channel(),'system','default_cipher') : '');
if($c)
@@ -55,11 +58,17 @@ class ThreadStream {
$this->profile_owner = \App::$profile['profile_uid'];
$this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments');
break;
case 'cards':
$this->profile_owner = \App::$profile['profile_uid'];
$this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments');
$this->reload = $_SESSION['return_url'];
break;
case 'display':
// in this mode we set profile_owner after initialisation (from conversation()) and then
// pull some trickery which allows us to re-invoke this function afterward
// it's an ugly hack so @FIXME
$this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments');
$this->uploadable = perm_is_allowed($this->profile_owner,$ob_hash,'write_storage');
break;
case 'page':
$this->profile_owner = \App::$profile['uid'];
@@ -91,6 +100,11 @@ class ThreadStream {
return $this->commentable;
}
public function is_uploadable() {
return $this->uploadable;
}
/**
* Check if page is a preview
*/
@@ -158,7 +172,7 @@ class ThreadStream {
if(intval($item->get_data_value('item_nocomment'))) {
$item->set_commentable(false);
}
elseif(($this->observer) && (! $item->is_commentable())) {
elseif(! $item->is_commentable()) {
if((array_key_exists('owner',$item->data)) && intval($item->data['owner']['abook_self']))
$item->set_commentable(perm_is_allowed($this->profile_owner,$ob_hash,'post_comments'));
else

View File

@@ -19,9 +19,9 @@ require_once("include/group.php");
class Acl extends \Zotlabs\Web\Controller {
function init(){
function init() {
// logger('mod_acl: ' . print_r($_REQUEST,true));
logger('mod_acl: ' . print_r($_REQUEST,true));
$start = (x($_REQUEST,'start') ? $_REQUEST['start'] : 0);
$count = (x($_REQUEST,'count') ? $_REQUEST['count'] : 500);
@@ -33,6 +33,7 @@ class Acl extends \Zotlabs\Web\Controller {
// $type =
// '' => standard ACL request
// 'g' => Groups only ACL request
// 'f' => forums only ACL request
// 'c' => Connections only ACL request or editor (textarea) mention request
// $_REQUEST['search'] contains ACL search text.
@@ -49,19 +50,19 @@ class Acl extends \Zotlabs\Web\Controller {
$extra_channels = (x($_REQUEST,'extra_channels') ? $_REQUEST['extra_channels'] : array());
// The different autocomplete libraries use different names for the search text
// parameter. Internaly we'll use $search to represent the search text no matter
// parameter. Internally we'll use $search to represent the search text no matter
// what request variable it was attached to.
if(array_key_exists('query',$_REQUEST)) {
$search = $_REQUEST['query'];
}
if( (! local_channel()) && (! ($type == 'x' || $type == 'c')))
if( (! local_channel()) && (! in_array($type, [ 'x', 'c', 'f' ])))
killme();
$permitted = [];
if(in_array($type, [ 'm', 'a', 'c' ])) {
if(in_array($type, [ 'm', 'a', 'c', 'f' ])) {
// These queries require permission checking. We'll create a simple array of xchan_hash for those with
// the requisite permissions which we can check against.
@@ -87,8 +88,8 @@ class Acl extends \Zotlabs\Web\Controller {
$order_extra2 = "CASE WHEN xchan_name LIKE "
. protect_sprintf( "'%" . dbesc($search) . "%'" )
. " then POSITION('" . dbesc($search)
. "' IN xchan_name) else position('" . dbesc($search) . "' IN xchan_addr) end, ";
. " then POSITION('" . protect_sprintf(dbesc($search))
. "' IN xchan_name) else position('" . protect_sprintf(dbesc($search)) . "' IN xchan_addr) end, ";
$col = ((strpos($search,'@') !== false) ? 'xchan_addr' : 'xchan_name' );
$sql_extra3 = "AND $col like " . protect_sprintf( "'%" . dbesc($search) . "%'" ) . " ";
@@ -103,7 +104,28 @@ class Acl extends \Zotlabs\Web\Controller {
$contacts = array();
if($type == '' || $type == 'g') {
// virtual groups based on private profile viewing ability
$r = q("select id, profile_guid, profile_name from profile where is_default = 0 and uid = %d",
intval(local_channel())
);
if($r) {
foreach($r as $rv) {
$groups[] = array(
"type" => "g",
"photo" => "images/twopeople.png",
"name" => t('Profile','acl') . ' ' . $rv['profile_name'],
"id" => 'vp' . $rv['id'],
"xid" => 'vp.' . $rv['profile_guid'],
"uids" => group_get_profile_members_xchan(local_channel(), $rv['id']),
"link" => ''
);
}
}
// Normal privacy groups
$r = q("SELECT groups.id, groups.hash, groups.gname
FROM groups, group_member
WHERE groups.deleted = 0 AND groups.uid = %d
@@ -133,26 +155,35 @@ class Acl extends \Zotlabs\Web\Controller {
}
}
if($type == '' || $type == 'c') {
if($type == '' || $type == 'c' || $type === 'f') {
$extra_channels_sql = '';
// Only include channels who allow the observer to view their permissions
foreach($extra_channels as $channel) {
if(perm_is_allowed(intval($channel), get_observer_hash(),'view_contacts'))
$extra_channels_sql .= "," . intval($channel);
// Only include channels who allow the observer to view their connections
if($extra_channels) {
foreach($extra_channels as $channel) {
if(perm_is_allowed(intval($channel), get_observer_hash(),'view_contacts')) {
if($extra_channel_sql)
$extra_channels_sql .= ',';
$extra_channels_sql .= intval($channel);
}
}
}
$extra_channels_sql = substr($extra_channels_sql,1); // Remove initial comma
// Getting info from the abook is better for local users because it contains info about permissions
if(local_channel()) {
if($extra_channels_sql != '')
$extra_channels_sql = " OR (abook_channel IN ($extra_channels_sql)) and abook_hidden = 0 ";
// Add atokens belonging to the local channel @TODO restrict by search
$r2 = null;
$r1 = q("select * from atoken where atoken_uid = %d",
intval(local_channel())
);
if($r1) {
require_once('include/security.php');
$r2 = array();
@@ -172,6 +203,7 @@ class Acl extends \Zotlabs\Web\Controller {
}
}
// add connections
$r = q("SELECT abook_id as id, xchan_hash as hash, xchan_name as name, xchan_photo_s as micro, xchan_url as url, xchan_addr as nick, abook_their_perms, xchan_pubforum, abook_flags, abook_self
FROM abook left join xchan on abook_xchan = xchan_hash
@@ -276,7 +308,7 @@ class Acl extends \Zotlabs\Web\Controller {
$contacts[] = array(
"photo" => $g['photo'],
"name" => $g['name'],
"nick" => $g['address'],
"nick" => $g['address']
);
}
}
@@ -293,18 +325,24 @@ class Acl extends \Zotlabs\Web\Controller {
$r = array();
if($r) {
foreach($r as $g){
foreach($r as $g) {
// remove RSS feeds from ACLs - they are inaccessible
if(strpos($g['hash'],'/') && $type != 'a')
if(($g['network'] === 'rss') && ($type != 'a'))
continue;
if(in_array($g['hash'],$permitted) && $type == 'c' && (! $noforums)) {
$g['hash'] = urlencode($g['hash']);
if(! $g['nick']) {
$t = explode(' ',strtolower($g['name']));
$g['nick'] = $t[0] . '@';
}
if(in_array($g['hash'],$permitted) && in_array($type, [ 'c', 'f' ]) && (! $noforums)) {
$contacts[] = array(
"type" => "c",
"photo" => "images/twopeople.png",
"name" => $g['name'] . '+',
"id" => $g['id'] . '+',
"name" => $g['name'] . (($type === 'f') ? '' : '+'),
"id" => urlencode($g['id']) . (($type === 'f') ? '' : '+'),
"xid" => $g['hash'],
"link" => $g['nick'],
"nick" => substr($g['nick'],0,strpos($g['nick'],'@')),
@@ -313,18 +351,20 @@ class Acl extends \Zotlabs\Web\Controller {
"label" => t('network')
);
}
$contacts[] = array(
"type" => "c",
"photo" => $g['micro'],
"name" => $g['name'],
"id" => $g['id'],
"xid" => $g['hash'],
"link" => $g['nick'],
"nick" => (($g['nick']) ? substr($g['nick'],0,strpos($g['nick'],'@')) : t('RSS')),
"self" => (intval($g['abook_self']) ? 'abook-self' : ''),
"taggable" => '',
"label" => '',
);
if($type !== 'f') {
$contacts[] = array(
"type" => "c",
"photo" => $g['micro'],
"name" => $g['name'],
"id" => urlencode($g['id']),
"xid" => $g['hash'],
"link" => $g['nick'],
"nick" => (($g['nick']) ? substr($g['nick'],0,strpos($g['nick'],'@')) : $g['nick']),
"self" => (intval($g['abook_self']) ? 'abook-self' : ''),
"taggable" => '',
"label" => '',
);
}
}
}
@@ -381,10 +421,12 @@ class Acl extends \Zotlabs\Web\Controller {
$directory = find_upstream_directory($dirmode);
$url = $directory['url'] . '/dirsearch';
}
$token = get_config('system','realm_token');
$count = (x($_REQUEST,'count') ? $_REQUEST['count'] : 100);
if($url) {
$query = $url . '?f=' ;
$query = $url . '?f=' . (($token) ? '&t=' . urlencode($token) : '');
$query .= '&name=' . urlencode($search) . "&limit=$count" . (($address) ? '&address=' . urlencode($search) : '');
$x = z_fetch_url($query);

View File

@@ -52,6 +52,8 @@ class Admin extends \Zotlabs\Web\Controller {
* Page content
*/
nav_set_selected('Admin');
$o = '';
if(argc() > 1) {
@@ -91,10 +93,10 @@ class Admin extends \Zotlabs\Web\Controller {
intval(ACCOUNT_BLOCKED)
);
if ($r) {
$accounts['total'] = array('label' => t('# Accounts'), 'val' => $r[0]['total']);
$accounts['blocked'] = array('label' => t('# blocked accounts'), 'val' => $r[0]['blocked']);
$accounts['expired'] = array('label' => t('# expired accounts'), 'val' => $r[0]['expired']);
$accounts['expiring'] = array('label' => t('# expiring accounts'), 'val' => $r[0]['expiring']);
$accounts['total'] = array('label' => t('Accounts'), 'val' => $r[0]['total']);
$accounts['blocked'] = array('label' => t('Blocked accounts'), 'val' => $r[0]['blocked']);
$accounts['expired'] = array('label' => t('Expired accounts'), 'val' => $r[0]['expired']);
$accounts['expiring'] = array('label' => t('Expiring accounts'), 'val' => $r[0]['expiring']);
}
// pending registrations
@@ -105,9 +107,9 @@ class Admin extends \Zotlabs\Web\Controller {
$channels = array();
$r = q("SELECT COUNT(*) AS total, COUNT(CASE WHEN channel_primary = 1 THEN 1 ELSE NULL END) AS main, COUNT(CASE WHEN channel_primary = 0 THEN 1 ELSE NULL END) AS clones FROM channel WHERE channel_removed = 0");
if ($r) {
$channels['total'] = array('label' => t('# Channels'), 'val' => $r[0]['total']);
$channels['main'] = array('label' => t('# primary'), 'val' => $r[0]['main']);
$channels['clones'] = array('label' => t('# clones'), 'val' => $r[0]['clones']);
$channels['total'] = array('label' => t('Channels'), 'val' => $r[0]['total']);
$channels['main'] = array('label' => t('Primary'), 'val' => $r[0]['main']);
$channels['clones'] = array('label' => t('Clones'), 'val' => $r[0]['clones']);
}
// We can do better, but this is a quick queue status
@@ -118,14 +120,11 @@ class Admin extends \Zotlabs\Web\Controller {
// If no plugins active return 0, otherwise list of plugin names
$plugins = (count(\App::$plugins) == 0) ? count(\App::$plugins) : \App::$plugins;
if(is_array($plugins))
sort($plugins);
// Could be extended to provide also other alerts to the admin
$alertmsg = '';
// annoy admin about upcoming unsupported PHP version
if (version_compare(PHP_VERSION, '5.4', '<')) {
$alertmsg = 'Your PHP version ' . PHP_VERSION . ' will not be supported with the next major release of $Projectname. You are strongly urged to upgrade to a current version.'
. '<br>PHP 5.3 has reached its <a href="http://php.net/eol.php" class="alert-link">End of Life (EOL)</a> in August 2014.'
. ' A list about current PHP versions can be found <a href="http://php.net/supported-versions.php" class="alert-link">here</a>.';
}
$vmaster = get_repository_version('master');
$vdev = get_repository_version('dev');

View File

@@ -3,10 +3,14 @@
namespace Zotlabs\Module\Admin;
use \Zotlabs\Storage\GitRepo as GitRepo;
use \Michelf\MarkdownExtra;
class Plugins {
/**
* @brief
*
*/
function post() {
if(argc() > 2 && is_file("addon/" . argv(2) . "/" . argv(2) . ".php")) {
@@ -15,16 +19,15 @@ class Plugins {
$func = argv(2) . '_plugin_admin_post';
$func($a);
}
goaway(z_root() . '/admin/plugins/' . argv(2) );
goaway(z_root() . '/admin/plugins/' . argv(2) );
}
elseif(argc() > 2) {
switch(argv(2)) {
case 'updaterepo':
if (array_key_exists('repoName', $_REQUEST)) {
$repoName = $_REQUEST['repoName'];
}
}
else {
json_return_and_die(array('message' => 'No repo name provided.', 'success' => false));
}
@@ -36,7 +39,7 @@ class Plugins {
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
}
else {
if (!symlink('extend/addon', $addonDir)) {
if (!symlink(realpath('extend/addon'), $addonDir)) {
logger('Error creating symlink to addon folder: ' . $addonDir);
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
}
@@ -57,7 +60,7 @@ class Plugins {
$files = array_diff(scandir($repoDir), array('.', '..'));
foreach ($files as $file) {
if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
$source = 'extend/addon/' . $repoName . '/' . $file;
$source = '../extend/addon/' . $repoName . '/' . $file;
$target = realpath('addon/') . '/' . $file;
unlink($target);
if (!symlink($source, $target)) {
@@ -86,7 +89,7 @@ class Plugins {
logger('Error creating extend folder: ' . $extendDir);
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
} else {
if (!symlink('extend/addon', $addonDir)) {
if (!symlink(realpath('extend/addon'), $addonDir)) {
logger('Error creating symlink to addon folder: ' . $addonDir);
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
}
@@ -101,16 +104,15 @@ class Plugins {
logger('Repo directory not writable to web server: ' . $repoDir);
json_return_and_die(array('message' => 'Repo directory not writable to web server.', 'success' => false));
}
// TODO: remove directory and unlink /addon/files
/// @TODO remove directory and unlink /addon/files
if (rrmdir($repoDir)) {
json_return_and_die(array('message' => 'Repo deleted.', 'success' => true));
} else {
json_return_and_die(array('message' => 'Error deleting addon repo.', 'success' => false));
}
case 'installrepo':
require_once('library/markdown.php');
if (array_key_exists('repoURL', $_REQUEST)) {
require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
$repoURL = $_REQUEST['repoURL'];
$extendDir = 'store/[data]/git/sys/extend';
$addonDir = $extendDir . '/addon';
@@ -119,7 +121,7 @@ class Plugins {
logger('Error creating extend folder: ' . $extendDir);
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
} else {
if (!symlink('extend/addon', $addonDir)) {
if (!symlink(realpath('extend/addon'), $addonDir)) {
logger('Error creating symlink to addon folder: ' . $addonDir);
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
}
@@ -156,7 +158,7 @@ class Plugins {
$files = array_diff(scandir($repoDir), array('.', '..'));
foreach ($files as $file) {
if (is_dir($repoDir . '/' . $file) && $file !== '.git') {
$source = 'extend/addon/' . $repoName . '/' . $file;
$source = '../extend/addon/' . $repoName . '/' . $file;
$target = realpath('addon/') . '/' . $file;
unlink($target);
if (!symlink($source, $target)) {
@@ -170,19 +172,18 @@ class Plugins {
json_return_and_die(array('repo' => $repo, 'message' => '', 'success' => true));
}
case 'addrepo':
require_once('library/markdown.php');
if (array_key_exists('repoURL', $_REQUEST)) {
require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
require_once('library/PHPGit.autoload.php'); // Load PHPGit dependencies
$repoURL = $_REQUEST['repoURL'];
$extendDir = 'store/[data]/git/sys/extend';
$addonDir = $extendDir . '/addon';
$tempAddonDir = 'store/[data]/git/sys/temp';
$tempAddonDir = realpath('store/[data]') . '/git/sys/temp';
if (!file_exists($extendDir)) {
if (!mkdir($extendDir, 0770, true)) {
logger('Error creating extend folder: ' . $extendDir);
json_return_and_die(array('message' => 'Error creating extend folder: ' . $extendDir, 'success' => false));
} else {
if (!symlink('extend/addon', $addonDir)) {
if (!symlink(realpath('extend/addon'), $addonDir)) {
logger('Error creating symlink to addon folder: ' . $addonDir);
json_return_and_die(array('message' => 'Error creating symlink to addon folder: ' . $addonDir, 'success' => false));
}
@@ -225,7 +226,7 @@ class Plugins {
$repo['readme'] = $repo['manifest'] = null;
foreach ($git->git->tree('master') as $object) {
if ($object['type'] == 'blob' && (strtolower($object['file']) === 'readme.md' || strtolower($object['file']) === 'readme')) {
$repo['readme'] = Markdown($git->git->cat->blob($object['hash']));
$repo['readme'] = MarkdownExtra::defaultTransform($git->git->cat->blob($object['hash']));
} else if ($object['type'] == 'blob' && strtolower($object['file']) === 'manifest.json') {
$repo['manifest'] = $git->git->cat->blob($object['hash']);
}
@@ -241,7 +242,11 @@ class Plugins {
}
}
/**
* @brief Plugins admin page.
*
* @return string with parsed HTML
*/
function get() {
/*
@@ -254,13 +259,13 @@ class Plugins {
notice( t("Item not found.") );
return '';
}
$enabled = in_array($plugin,\App::$plugins);
$info = get_plugin_info($plugin);
$x = check_plugin_versions($info);
// disable plugins which are installed but incompatible versions
if($enabled && ! $x) {
$enabled = false;
$idz = array_search($plugin, \App::$plugins);
@@ -271,7 +276,7 @@ class Plugins {
}
}
$info['disabled'] = 1-intval($x);
if (x($_GET,"a") && $_GET['a']=="t"){
check_form_security_token_redirectOnErr('/admin/plugins', 'admin_plugins', 't');
$pinstalled = false;
@@ -297,9 +302,9 @@ class Plugins {
}
goaway(z_root() . '/admin/plugins' );
}
// display plugin details
require_once('library/markdown.php');
if (in_array($plugin, \App::$plugins)){
$status = 'on';
$action = t('Disable');
@@ -307,21 +312,21 @@ class Plugins {
$status = 'off';
$action = t('Enable');
}
$readme = null;
if (is_file("addon/$plugin/README.md")){
$readme = file_get_contents("addon/$plugin/README.md");
$readme = Markdown($readme);
$readme = MarkdownExtra::defaultTransform($readme);
} else if (is_file("addon/$plugin/README")){
$readme = "<pre>". file_get_contents("addon/$plugin/README") ."</pre>";
}
$admin_form = '';
$r = q("select * from addon where plugin_admin = 1 and aname = '%s' limit 1",
dbesc($plugin)
);
if($r) {
@require_once("addon/$plugin/$plugin.php");
if(function_exists($plugin.'_plugin_admin')) {
@@ -329,8 +334,8 @@ class Plugins {
$func($a, $admin_form);
}
}
$t = get_markup_template('admin_plugins_details.tpl');
return replace_macros($t, array(
'$title' => t('Administration'),
@@ -338,7 +343,7 @@ class Plugins {
'$toggle' => t('Toggle'),
'$settings' => t('Settings'),
'$baseurl' => z_root(),
'$plugin' => $plugin,
'$status' => $status,
'$action' => $action,
@@ -351,17 +356,17 @@ class Plugins {
'$str_serverroles' => t('Compatible Server Roles: '),
'$str_requires' => t('Requires: '),
'$disabled' => t('Disabled - version incompatibility'),
'$admin_form' => $admin_form,
'$function' => 'plugins',
'$screenshot' => '',
'$readme' => $readme,
'$form_security_token' => get_form_security_token('admin_plugins'),
));
}
/*
* List plugins
*/
@@ -374,9 +379,9 @@ class Plugins {
$info = get_plugin_info($id);
$enabled = in_array($id,\App::$plugins);
$x = check_plugin_versions($info);
// disable plugins which are installed but incompatible versions
if($enabled && ! $x) {
$enabled = false;
$idz = array_search($id, \App::$plugins);
@@ -387,15 +392,19 @@ class Plugins {
}
}
$info['disabled'] = 1-intval($x);
$plugins[] = array( $id, (($enabled)?"on":"off") , $info);
}
}
}
usort($plugins,'self::plugin_sort');
$allowManageRepos = false;
if(is_writable('extend/addon') && is_writable('store/[data]')) {
$allowManageRepos = true;
}
$admin_plugins_add_repo_form= replace_macros(
get_markup_template('admin_plugins_addrepo.tpl'), array(
'$post' => 'admin/plugins/addrepo',
@@ -414,14 +423,14 @@ class Plugins {
'$cancel' => t('Cancel')
)
);
$reponames = $this->listAddonRepos();
$addonrepos = [];
foreach($reponames as $repo) {
$addonrepos[] = array('name' => $repo, 'description' => '');
// TODO: Parse repo info to provide more information about repos
/// @TODO Parse repo info to provide more information about repos
}
$t = get_markup_template('admin_plugins.tpl');
return replace_macros($t, array(
'$title' => t('Administration'),
@@ -432,6 +441,7 @@ class Plugins {
'$plugins' => $plugins,
'$disabled' => t('Disabled - version incompatibility'),
'$form_security_token' => get_form_security_token('admin_plugins'),
'$allowManageRepos' => $allowManageRepos,
'$managerepos' => t('Manage Repos'),
'$installedtitle' => t('Installed Plugin Repositories'),
'$addnewrepotitle' => t('Install a New Plugin Repository'),
@@ -466,5 +476,4 @@ class Plugins {
return(strcmp(strtolower($a[2]['name']),strtolower($b[2]['name'])));
}
}

View File

@@ -15,7 +15,6 @@ class Queue {
$expert = ((array_key_exists('expert',$_REQUEST)) ? intval($_REQUEST['expert']) : 0);
if($_REQUEST['drophub']) {
require_once('hubloc.php');
hubloc_mark_as_down($_REQUEST['drophub']);
remove_queue_by_posturl($_REQUEST['drophub']);
}

View File

@@ -17,7 +17,6 @@ class Site {
check_form_security_token_redirectOnErr('/admin/site', 'admin_site');
$sitename = ((x($_POST,'sitename')) ? notags(trim($_POST['sitename'])) : '');
$server_role = ((x($_POST,'server_role')) ? notags(trim($_POST['server_role'])) : 'standard');
$banner = ((x($_POST,'banner')) ? trim($_POST['banner']) : false);
@@ -48,6 +47,10 @@ class Site {
$no_community_page = !((x($_POST,'no_community_page')) ? True : False);
$default_expire_days = ((array_key_exists('default_expire_days',$_POST)) ? intval($_POST['default_expire_days']) : 0);
$reply_address = ((array_key_exists('reply_address',$_POST) && trim($_POST['reply_address'])) ? trim($_POST['reply_address']) : 'noreply@' . \App::get_hostname());
$from_email = ((array_key_exists('from_email',$_POST) && trim($_POST['from_email'])) ? trim($_POST['from_email']) : 'Administrator@' . \App::get_hostname());
$from_email_name = ((array_key_exists('from_email_name',$_POST) && trim($_POST['from_email_name'])) ? trim($_POST['from_email_name']) : \Zotlabs\Lib\System::get_site_name());
$verifyssl = ((x($_POST,'verifyssl')) ? True : False);
$proxyuser = ((x($_POST,'proxyuser')) ? notags(trim($_POST['proxyuser'])) : '');
$proxy = ((x($_POST,'proxy')) ? notags(trim($_POST['proxy'])) : '');
@@ -59,12 +62,12 @@ class Site {
$feed_contacts = ((x($_POST,'feed_contacts')) ? intval($_POST['feed_contacts']) : 0);
$verify_email = ((x($_POST,'verify_email')) ? 1 : 0);
$techlevel_lock = ((x($_POST,'techlock')) ? intval($_POST['techlock']) : 0);
$imagick_path = ((x($_POST,'imagick_path')) ? trim($_POST['imagick_path']) : '');
$techlevel = null;
if(array_key_exists('techlevel', $_POST))
$techlevel = intval($_POST['techlevel']);
set_config('system', 'server_role', $server_role);
set_config('system', 'feed_contacts', $feed_contacts);
set_config('system', 'delivery_interval', $delivery_interval);
set_config('system', 'delivery_batch_count', $delivery_batch_count);
@@ -77,8 +80,16 @@ class Site {
set_config('system', 'enable_context_help', $enable_context_help);
set_config('system', 'verify_email', $verify_email);
set_config('system', 'default_expire_days', $default_expire_days);
set_config('system', 'reply_address', $reply_address);
set_config('system', 'from_email', $from_email);
set_config('system', 'from_email_name' , $from_email_name);
set_config('system', 'imagick_convert_path' , $imagick_path);
set_config('system', 'techlevel_lock', $techlevel_lock);
if(! is_null($techlevel))
set_config('system', 'techlevel', $techlevel);
@@ -163,6 +174,14 @@ class Site {
foreach($files as $file) {
$vars = '';
$f = basename($file);
$info = get_theme_info($f);
$compatible = check_plugin_versions($info);
if(!$compatible) {
$theme_choices[$f] = $theme_choices_mobile[$f] = sprintf(t('%s - (Incompatible)'), $f);
continue;
}
if (file_exists($file . '/library'))
continue;
if (file_exists($file . '/mobile'))
@@ -189,7 +208,7 @@ class Site {
// directory server should not be set or settable unless we are a directory client
if($dirmode == DIRECTORY_MODE_NORMAL) {
$x = q("select site_url from site where site_flags in (%d,%d) and site_realm = '%s'",
$x = q("select site_url from site where site_flags in (%d,%d) and site_realm = '%s' and site_dead = 0",
intval(DIRECTORY_MODE_SECONDARY),
intval(DIRECTORY_MODE_PRIMARY),
dbesc($realm)
@@ -235,12 +254,6 @@ class Site {
// now invert the logic for the setting.
$discover_tab = (1 - $discover_tab);
$server_roles = [
'basic' => t('Basic/Minimal Social Networking'),
'standard' => t('Standard Configuration (default)'),
'pro' => t('Professional')
];
$techlevels = [
'0' => t('Beginner/Basic'),
'1' => t('Novice - not skilled but willing to learn'),
@@ -267,8 +280,6 @@ class Site {
// name, label, value, help string, extra data...
'$sitename' => array('sitename', t("Site name"), htmlspecialchars(get_config('system','sitename'), ENT_QUOTES, 'UTF-8'),''),
'$server_role' => array('server_role', t("Server Configuration/Role"), get_config('system','server_role'),'',$server_roles),
'$techlevel' => [ 'techlevel', t('Site default technical skill level'), get_config('system','techlevel'), t('Used to provide a member experience matched to technical comfort level'), $techlevels ],
'$techlock' => [ 'techlock', t('Lock the technical skill level setting'), get_config('system','techlevel_lock'), t('Members can set their own technical comfort level by default') ],
@@ -296,6 +307,10 @@ class Site {
'$login_on_homepage' => array('login_on_homepage', t("Login on Homepage"),((intval($homelogin) || $homelogin === false) ? 1 : '') , t("Present a login box to visitors on the home page if no other content has been configured.")),
'$enable_context_help' => array('enable_context_help', t("Enable context help"),((intval($enable_context_help) === 1 || $enable_context_help === false) ? 1 : 0) , t("Display contextual help for the current page when the help button is pressed.")),
'$reply_address' => [ 'reply_address', t('Reply-to email address for system generated email.'), get_config('system','reply_address','noreply@' . \App::get_hostname()),'' ],
'$from_email' => [ 'from_email', t('Sender (From) email address for system generated email.'), get_config('system','from_email','Administrator@' . \App::get_hostname()),'' ],
'$from_email_name' => [ 'from_email_name', t('Name of email sender for system generated email.'), get_config('system','from_email_name',\Zotlabs\Lib\System::get_site_name()),'' ],
'$directory_server' => (($dir_choices) ? array('directory_server', t("Directory Server URL"), get_config('system','directory_server'), t("Default directory server"), $dir_choices) : null),
'$proxyuser' => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""),
@@ -304,10 +319,11 @@ class Site {
'$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")),
'$delivery_batch_count' => array('delivery_batch_count', t('Deliveries per process'),(x(get_config('system','delivery_batch_count'))?get_config('system','delivery_batch_count'):1), t("Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5.")),
'$poll_interval' => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")),
'$imagick_path' => array('imagick_path', t("Path to ImageMagick convert program"), get_config('system','imagick_convert_path'), t("If set, use this program to generate photo thumbnails for huge images ( > 4000 pixels in either dimension), otherwise memory exhaustion may occur. Example: /usr/bin/convert")),
'$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
'$default_expire_days' => array('default_expire_days', t('Expiration period in days for imported (grid/network) content'), intval(get_config('system','default_expire_days')), t('0 for no expiration of imported content')),
'$form_security_token' => get_form_security_token("admin_site"),
));
}
}
}

View File

@@ -2,38 +2,41 @@
namespace Zotlabs\Module\Admin;
use \Michelf\MarkdownExtra;
/**
* @brief Admin area theme settings.
*/
class Themes {
/**
* @brief
*
*/
function post() {
$theme = argv(2);
if (is_file("view/theme/$theme/php/config.php")){
require_once("view/theme/$theme/php/config.php");
// fixme add parent theme if derived
if (function_exists("theme_admin_post")){
/// @FIXME add parent theme if derived
if (function_exists('theme_admin_post')){
theme_admin_post($a);
}
}
info(t('Theme settings updated.'));
if(is_ajax())
if(is_ajax())
return;
goaway(z_root() . '/admin/themes/' . $theme );
}
/**
* @brief Themes admin page.
*
* @return string
* @return string with parsed HTML
*/
function get(){
$allowed_themes_str = get_config('system', 'allowed_themes');
$allowed_themes_raw = explode(',', $allowed_themes_str);
$allowed_themes = array();
@@ -41,7 +44,7 @@ class Themes {
foreach($allowed_themes_raw as $x)
if(strlen(trim($x)))
$allowed_themes[] = trim($x);
$themes = array();
$files = glob('view/theme/*');
if($files) {
@@ -53,56 +56,55 @@ class Themes {
$themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed);
}
}
if(! count($themes)) {
notice( t('No themes found.'));
return '';
}
/*
* Single theme
*/
if (\App::$argc == 3){
$theme = \App::$argv[2];
if(! is_dir("view/theme/$theme")){
notice( t("Item not found.") );
return '';
}
if (x($_GET,"a") && $_GET['a']=="t"){
check_form_security_token_redirectOnErr('/admin/themes', 'admin_themes', 't');
// Toggle theme status
$this->toggle_theme($themes, $theme, $result);
$s = $this->rebuild_theme_table($themes);
if($result)
info( sprintf('Theme %s enabled.', $theme));
else
info( sprintf('Theme %s disabled.', $theme));
set_config('system', 'allowed_themes', $s);
goaway(z_root() . '/admin/themes' );
}
// display theme details
require_once('library/markdown.php');
if ($this->theme_status($themes,$theme)) {
$status="on"; $action= t("Disable");
} else {
$status="off"; $action= t("Enable");
}
$readme=Null;
if (is_file("view/theme/$theme/README.md")){
$readme = file_get_contents("view/theme/$theme/README.md");
$readme = Markdown($readme);
$readme = MarkdownExtra::defaultTransform($readme);
} else if (is_file("view/theme/$theme/README")){
$readme = "<pre>". file_get_contents("view/theme/$theme/README") ."</pre>";
$readme = '<pre>'. file_get_contents("view/theme/$theme/README") .'</pre>';
}
$admin_form = '';
if (is_file("view/theme/$theme/php/config.php")){
require_once("view/theme/$theme/php/config.php");
@@ -110,11 +112,11 @@ class Themes {
$admin_form = theme_admin($a);
}
}
$screenshot = array( get_theme_screenshot($theme), t('Screenshot'));
if(! stristr($screenshot[0],$theme))
$screenshot = null;
$t = get_markup_template('admin_plugins_details.tpl');
return replace_macros($t, array(
'$title' => t('Administration'),
@@ -122,7 +124,7 @@ class Themes {
'$toggle' => t('Toggle'),
'$settings' => t('Settings'),
'$baseurl' => z_root(),
'$plugin' => $theme,
'$status' => $status,
'$action' => $action,
@@ -133,22 +135,22 @@ class Themes {
'$str_maintainer' => t('Maintainer: '),
'$screenshot' => $screenshot,
'$readme' => $readme,
'$form_security_token' => get_form_security_token('admin_themes'),
));
}
/*
* List themes
*/
$xthemes = array();
if($themes) {
foreach($themes as $th) {
$xthemes[] = array($th['name'],(($th['allowed']) ? "on" : "off"), get_theme_info($th['name']));
}
}
$t = get_markup_template('admin_plugins.tpl');
return replace_macros($t, array(
'$title' => t('Administration'),
@@ -162,13 +164,14 @@ class Themes {
'$form_security_token' => get_form_security_token('admin_themes'),
));
}
/**
* @param array $themes
* @param string $th
* @param int $result
* @brief Toggle a theme.
*
* @param array &$themes
* @param[in] string $th
* @param[out] int &$result
*/
function toggle_theme(&$themes, $th, &$result) {
for($x = 0; $x < count($themes); $x ++) {
@@ -184,7 +187,7 @@ class Themes {
}
}
}
/**
* @param array $themes
* @param string $th
@@ -203,8 +206,7 @@ class Themes {
}
return 0;
}
/**
* @param array $themes
* @return string
@@ -222,12 +224,5 @@ class Themes {
}
return $o;
}
}
}

View File

@@ -27,6 +27,7 @@ class Appman extends \Zotlabs\Web\Controller {
'price' => escape_tags($_REQUEST['price']),
'requires' => escape_tags($_REQUEST['requires']),
'system' => intval($_REQUEST['system']),
'plugin' => escape_tags($_REQUEST['plugin']),
'sig' => escape_tags($_REQUEST['sig']),
'categories' => escape_tags($_REQUEST['categories'])
);
@@ -35,8 +36,9 @@ class Appman extends \Zotlabs\Web\Controller {
if(Zlib\Apps::app_installed(local_channel(),$arr))
info( t('App installed.') . EOL);
return;
goaway(z_root() . '/apps');
return; //not reached
}
@@ -56,13 +58,18 @@ class Appman extends \Zotlabs\Web\Controller {
if($_POST['delete']) {
Zlib\Apps::app_destroy(local_channel(),$papp);
}
if($_POST['edit']) {
return;
}
if($_POST['feature']) {
Zlib\Apps::app_feature(local_channel(),$papp);
}
if($_SESSION['return_url'])
goaway(z_root() . '/' . $_SESSION['return_url']);
goaway(z_root() . '/apps');
@@ -75,8 +82,22 @@ class Appman extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL);
return;
}
$channel = \App::get_channel();
if(argc() > 2) {
if(argv(2) === 'moveup') {
Zlib\Apps::moveup(local_channel(),argv(1));
}
if(argv(2) === 'movedown') {
Zlib\Apps::movedown(local_channel(),argv(1));
}
goaway(z_root() . '/apporder');
}
$app = null;
$embed = null;
if($_REQUEST['appid']) {
@@ -121,6 +142,7 @@ class Appman extends \Zotlabs\Web\Controller {
'$price' => array('price', t('Price of app'),(($app) ? $app['app_price'] : ''), ''),
'$page' => array('page', t('Location (URL) to purchase app'),(($app) ? $app['app_page'] : ''), ''),
'$system' => (($app) ? intval($app['app_system']) : 0),
'$plugin' => (($app) ? $app['app_plugin'] : ''),
'$requires' => (($app) ? $app['app_requires'] : ''),
'$embed' => $embed,
'$submit' => t('Submit')

View File

@@ -0,0 +1,45 @@
<?php
namespace Zotlabs\Module;
use \Zotlabs\Lib as Zlib;
class Apporder extends \Zotlabs\Web\Controller {
function post() {
}
function get() {
if(! local_channel())
return;
nav_set_selected('Order Apps');
$syslist = array();
$list = Zlib\Apps::app_list(local_channel(), false, 'nav_featured_app');
if($list) {
foreach($list as $li) {
$syslist[] = Zlib\Apps::app_encode($li);
}
}
Zlib\Apps::translate_system_apps($syslist);
usort($syslist,'Zotlabs\\Lib\\Apps::app_name_compare');
$syslist = Zlib\Apps::app_order(local_channel(),$syslist);
foreach($syslist as $app) {
$nav_apps[] = Zlib\Apps::app_render($app,'nav-order');
}
return replace_macros(get_markup_template('apporder.tpl'),
[
'$header' => t('Change Order of Navigation Apps'),
'$desc' => t('Use arrows to move the corresponding app up or down in the display list'),
'$nav_apps' => $nav_apps
]
);
}
}

View File

@@ -7,21 +7,22 @@ use \Zotlabs\Lib as Zlib;
class Apps extends \Zotlabs\Web\Controller {
function get() {
nav_set_selected('Apps');
if(argc() == 2 && argv(1) == 'edit')
$mode = 'edit';
else
$mode = 'list';
$_SESSION['return_url'] = \App::$cmd;
$_SESSION['return_url'] = \App::$query_string;
$apps = array();
if(local_channel()) {
Zlib\Apps::import_system_apps();
$syslist = array();
$list = Zlib\Apps::app_list(local_channel(), false, $_GET['cat']);
$list = Zlib\Apps::app_list(local_channel(), (($mode == 'edit') ? true : false), $_GET['cat']);
if($list) {
foreach($list as $x) {
$syslist[] = Zlib\Apps::app_encode($x);
@@ -39,12 +40,15 @@ class Apps extends \Zotlabs\Web\Controller {
foreach($syslist as $app) {
$apps[] = Zlib\Apps::app_render($app,$mode);
}
return replace_macros(get_markup_template('myapps.tpl'), array(
'$sitename' => get_config('system','sitename'),
'$cat' => ((array_key_exists('cat',$_GET) && $_GET['cat']) ? ' - ' . escape_tags($_GET['cat']) : ''),
'$cat' => ((array_key_exists('cat',$_GET) && $_GET['cat']) ? escape_tags($_GET['cat']) : ''),
'$title' => t('Apps'),
'$apps' => $apps,
'$authed' => ((local_channel()) ? true : false),
'$manage' => t('Manage apps'),
'$create' => (($mode == 'edit') ? t('Create new app') : '')
));
}

View File

@@ -31,7 +31,7 @@ class Attach extends \Zotlabs\Web\Controller {
$unsafe_types = array('text/html','text/css','application/javascript');
if(in_array($r['data']['filetype'],$unsafe_types)) {
if(in_array($r['data']['filetype'],$unsafe_types) && (! channel_codeallowed($r['data']['uid']))) {
header('Content-type: text/plain');
}
else {

View File

@@ -0,0 +1,71 @@
<?php
namespace Zotlabs\Module;
class Authorize extends \Zotlabs\Web\Controller {
function get() {
// workaround for HTTP-auth in CGI mode
if (x($_SERVER, 'REDIRECT_REMOTE_USER')) {
$userpass = base64_decode(substr($_SERVER["REDIRECT_REMOTE_USER"], 6)) ;
if(strlen($userpass)) {
list($name, $password) = explode(':', $userpass);
$_SERVER['PHP_AUTH_USER'] = $name;
$_SERVER['PHP_AUTH_PW'] = $password;
}
}
if (x($_SERVER, 'HTTP_AUTHORIZATION')) {
$userpass = base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)) ;
if(strlen($userpass)) {
list($name, $password) = explode(':', $userpass);
$_SERVER['PHP_AUTH_USER'] = $name;
$_SERVER['PHP_AUTH_PW'] = $password;
}
}
require_once('include/oauth2.php');
$request = \OAuth2\Request::createFromGlobals();
$response = new \OAuth2\Response();
// validate the authorize request
if (! $oauth2_server->validateAuthorizeRequest($request, $response)) {
$response->send();
killme();
}
// display an authorization form
if (empty($_POST)) {
return '
<form method="post">
<label>Do You Authorize TestClient?</label><br />
<input type="submit" name="authorized" value="yes">
<input type="submit" name="authorized" value="no">
</form>';
}
// print the authorization code if the user has authorized your client
$is_authorized = ($_POST['authorized'] === 'yes');
$oauth2_server->handleAuthorizeRequest($request, $response, $is_authorized);
if ($is_authorized) {
// this is only here so that you get to see your code in the cURL request. Otherwise,
// we'd redirect back to the client
$code = substr($response->getHttpHeader('Location'), strpos($response->getHttpHeader('Location'), 'code=')+5, 40);
echo("SUCCESS! Authorization Code: $code");
}
$response->send();
killme();
}
}

View File

@@ -3,8 +3,6 @@ namespace Zotlabs\Module;
require_once('include/items.php');
require_once('include/conversation.php');
require_once('include/page_widgets.php');
class Block extends \Zotlabs\Web\Controller {

View File

@@ -7,6 +7,9 @@ class Bookmarks extends \Zotlabs\Web\Controller {
function init() {
if(! local_channel())
return;
nav_set_selected('View Bookmarks');
$item_id = intval($_REQUEST['item']);
$burl = trim($_REQUEST['burl']);
@@ -68,7 +71,8 @@ class Bookmarks extends \Zotlabs\Web\Controller {
$channel = \App::get_channel();
$o = profile_tabs($a,true,$channel['channel_address']);
//$o = profile_tabs($a,true,$channel['channel_address']);
$o = '';
$o .= '<div class="generic-content-wrapper-styled">';

View File

@@ -86,7 +86,8 @@ class Cal extends \Zotlabs\Web\Controller {
$o = '';
$tabs = profile_tabs($a, True, $channel['channel_address']);
//$tabs = profile_tabs($a, True, $channel['channel_address']);
$tabs = '';
$mode = 'view';
$y = 0;
@@ -292,8 +293,8 @@ class Cal extends \Zotlabs\Web\Controller {
$title = strip_tags(html_entity_decode($title,ENT_QUOTES,'UTF-8'));
}
$html = format_event_html($rr);
$rr['desc'] = bbcode($rr['desc']);
$rr['location'] = bbcode($rr['location']);
$rr['desc'] = zidify_links(smilies(bbcode($rr['desc'])));
$rr['location'] = zidify_links(smilies(bbcode($rr['location'])));
$events[] = array(
'id'=>$rr['id'],
'hash' => $rr['event_hash'],

View File

@@ -0,0 +1,138 @@
<?php
namespace Zotlabs\Module;
require_once('include/channel.php');
require_once('include/acl_selectors.php');
require_once('include/conversation.php');
class Card_edit extends \Zotlabs\Web\Controller {
function get() {
// Figure out which post we're editing
$post_id = ((argc() > 1) ? intval(argv(1)) : 0);
if(! $post_id) {
notice( t('Item not found') . EOL);
return;
}
$itm = q("SELECT * FROM item WHERE id = %d and item_type = %d LIMIT 1",
intval($post_id),
intval(ITEM_TYPE_CARD)
);
if($itm) {
$item_id = q("select * from iconfig where cat = 'system' and k = 'CARD' and iid = %d limit 1",
intval($itm[0]['id'])
);
if($item_id)
$card_title = $item_id[0]['v'];
}
else {
notice( t('Item not found') . EOL);
return;
}
$owner = $itm[0]['uid'];
$uid = local_channel();
$observer = \App::get_observer();
$channel = channelx_by_n($owner);
if(! $channel) {
notice( t('Channel not found.') . EOL);
return;
}
$ob_hash = (($observer) ? $observer['xchan_hash'] : '');
if(! perm_is_allowed($owner,$ob_hash,'write_pages')) {
notice( t('Permission denied.') . EOL);
return;
}
$is_owner = (($uid && $uid == $owner) ? true : false);
$o = '';
$category = '';
$catsenabled = ((feature_enabled($owner,'categories')) ? 'categories' : '');
if ($catsenabled){
$itm = fetch_post_tags($itm);
$cats = get_terms_oftype($itm[0]['term'], TERM_CATEGORY);
foreach ($cats as $cat) {
if (strlen($category))
$category .= ', ';
$category .= $cat['term'];
}
}
if($itm[0]['attach']) {
$j = json_decode($itm[0]['attach'],true);
if($j) {
foreach($j as $jj) {
$itm[0]['body'] .= "\n" . '[attachment]' . basename($jj['href']) . ',' . $jj['revision'] . '[/attachment]' . "\n";
}
}
}
$mimetype = $itm[0]['mimetype'];
$content = $itm[0]['body'];
$rp = 'cards/' . $channel['channel_address'];
$x = array(
'nickname' => $channel['channel_address'],
'bbco_autocomplete'=> 'bbcode',
'return_path' => $rp,
'webpage' => ITEM_TYPE_CARD,
'button' => t('Edit'),
'writefiles' => perm_is_allowed($owner, get_observer_hash(), 'write_pages'),
'weblink' => t('Insert web link'),
'hide_voting' => false,
'hide_future' => false,
'hide_location' => false,
'hide_expire' => false,
'showacl' => true,
'acl' => populate_acl($itm[0],false,\Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')),
'permissions' => $itm[0],
'lockstate' => (($itm[0]['allow_cid'] || $itm[0]['allow_gid'] || $itm[0]['deny_cid'] || $itm[0]['deny_gid']) ? 'lock' : 'unlock'),
'ptyp' => $itm[0]['type'],
'mimeselect' => false,
'mimetype' => $itm[0]['mimetype'],
'body' => undo_post_tagging($content),
'post_id' => $post_id,
'visitor' => true,
'title' => htmlspecialchars($itm[0]['title'],ENT_COMPAT,'UTF-8'),
'placeholdertitle' => t('Title (optional)'),
'pagetitle' => $card_title,
'profile_uid' => (intval($channel['channel_id'])),
'catsenabled' => $catsenabled,
'category' => $category,
'bbcode' => (($mimetype == 'text/bbcode') ? true : false)
);
$editor = status_editor($a, $x);
$o .= replace_macros(get_markup_template('edpost_head.tpl'), array(
'$title' => t('Edit Card'),
'$delete' => ((($itm[0]['author_xchan'] === $ob_hash) || ($itm[0]['owner_xchan'] === $ob_hash)) ? t('Delete') : false),
'$id' => $itm[0]['id'],
'$editor' => $editor
));
return $o;
}
}

187
Zotlabs/Module/Cards.php Normal file
View File

@@ -0,0 +1,187 @@
<?php
namespace Zotlabs\Module;
require_once('include/channel.php');
require_once('include/conversation.php');
require_once('include/acl_selectors.php');
class Cards extends \Zotlabs\Web\Controller {
function init() {
if(argc() > 1)
$which = argv(1);
else
return;
profile_load($which);
}
function get($update = 0, $load = false) {
if(observer_prohibited(true)) {
return login();
}
if(! \App::$profile) {
notice( t('Requested profile is not available.') . EOL );
\App::$error = 404;
return;
}
if(! feature_enabled(\App::$profile_uid,'cards')) {
return;
}
nav_set_selected(t('Cards'));
head_add_link([
'rel' => 'alternate',
'type' => 'application/json+oembed',
'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string),
'title' => 'oembed'
]);
$category = (($_REQUEST['cat']) ? escape_tags(trim($_REQUEST['cat'])) : '');
if($category) {
$sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'],'item', $category, TERM_CATEGORY));
}
$which = argv(1);
$selected_card = ((argc() > 2) ? argv(2) : '');
$_SESSION['return_url'] = \App::$query_string;
$uid = local_channel();
$owner = \App::$profile_uid;
$observer = \App::get_observer();
$ob_hash = (($observer) ? $observer['xchan_hash'] : '');
if(! perm_is_allowed($owner,$ob_hash,'view_pages')) {
notice( t('Permission denied.') . EOL);
return;
}
$is_owner = ($uid && $uid == $owner);
$channel = channelx_by_n($owner);
if($channel) {
$channel_acl = array(
'allow_cid' => $channel['channel_allow_cid'],
'allow_gid' => $channel['channel_allow_gid'],
'deny_cid' => $channel['channel_deny_cid'],
'deny_gid' => $channel['channel_deny_gid']
);
}
else {
$channel_acl = [ 'allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '' ];
}
if(perm_is_allowed($owner,$ob_hash,'write_pages')) {
$x = [
'webpage' => ITEM_TYPE_CARD,
'is_owner' => true,
'content_label' => t('Add Card'),
'button' => t('Create'),
'nickname' => $channel['channel_address'],
'lockstate' => (($channel['channel_allow_cid'] || $channel['channel_allow_gid']
|| $channel['channel_deny_cid'] || $channel['channel_deny_gid']) ? 'lock' : 'unlock'),
'acl' => (($is_owner) ? populate_acl($channel_acl, false,
\Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')) : ''),
'permissions' => $channel_acl,
'showacl' => (($is_owner) ? true : false),
'visitor' => true,
'hide_location' => false,
'hide_voting' => false,
'profile_uid' => intval($owner),
'mimetype' => 'text/bbcode',
'mimeselect' => false,
'layoutselect' => false,
'expanded' => false,
'novoting' => false,
'catsenabled' => feature_enabled($owner,'categories'),
'bbco_autocomplete' => 'bbcode',
'bbcode' => true
];
if($_REQUEST['title'])
$x['title'] = $_REQUEST['title'];
if($_REQUEST['body'])
$x['body'] = $_REQUEST['body'];
$editor = status_editor($a,$x);
}
else {
$editor = '';
}
$sql_extra = item_permissions_sql($owner);
if($selected_card) {
$r = q("select * from iconfig where iconfig.cat = 'system' and iconfig.k = 'CARD' and iconfig.v = '%s' limit 1",
dbesc($selected_card)
);
if($r) {
$sql_extra .= "and item.id = " . intval($r[0]['iid']) . " ";
}
}
$r = q("select * from item
where item.uid = %d and item_type = %d
$sql_extra order by item.created desc",
intval($owner),
intval(ITEM_TYPE_CARD)
);
$item_normal = " and item.item_hidden = 0 and item.item_type in (0,6) and item.item_deleted = 0
and item.item_unpublished = 0 and item.item_delayed = 0 and item.item_pending_remove = 0
and item.item_blocked = 0 ";
if($r) {
$parents_str = ids_to_querystr($r,'id');
$items = q("SELECT item.*, item.id AS item_id
FROM item
WHERE item.uid = %d $item_normal
AND item.parent IN ( %s )
$sql_extra $sql_extra2 ",
intval(\App::$profile['profile_uid']),
dbesc($parents_str)
);
if($items) {
xchan_query($items);
$items = fetch_post_tags($items, true);
$items = conv_sort($items,'updated');
}
else
$items = [];
}
$mode = 'cards';
$content = conversation($items,$mode,false,'traditional');
$o = replace_macros(get_markup_template('cards.tpl'), [
'$title' => t('Cards'),
'$editor' => $editor,
'$content' => $content,
'$pager' => alt_pager($a,count($items))
]);
return $o;
}
}

1259
Zotlabs/Module/Cdav.php Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,88 @@
<?php
namespace Zotlabs\Module;
class Changeaddr extends \Zotlabs\Web\Controller {
function post() {
if(! local_channel())
return;
if($_SESSION['delegate'])
return;
if((! x($_POST,'qxz_password')) || (! strlen(trim($_POST['qxz_password']))))
return;
if((! x($_POST,'verify')) || (! strlen(trim($_POST['verify']))))
return;
if($_POST['verify'] !== $_SESSION['remove_account_verify'])
return;
$account = \App::get_account();
$channel = \App::get_channel();
$x = account_verify_password($account['account_email'],$_POST['qxz_password']);
if(! ($x && $x['account']))
return;
if($account['account_password_changed'] > NULL_DATE) {
$d1 = datetime_convert('UTC','UTC','now - 48 hours');
if($account['account_password_changed'] > d1) {
notice( t('Channel name changes are not allowed within 48 hours of changing the account password.') . EOL);
return;
}
}
$new_address = trim($_POST['newname']);
if($new_address === $channel['channel_address'])
return;
if($new_address === 'sys') {
notice( t('Reserved nickname. Please choose another.') . EOL);
return;
}
if(check_webbie(array($new_address)) !== $new_address) {
notice( t('Nickname has unsupported characters or is already being used on this site.') . EOL);
return $ret;
}
channel_change_address($channel,$new_address);
goaway(z_root() . '/changeaddr');
}
function get() {
if(! local_channel())
goaway(z_root());
$channel = \App::get_channel();
$hash = random_string();
$_SESSION['remove_account_verify'] = $hash;
$tpl = get_markup_template('channel_rename.tpl');
$o .= replace_macros($tpl, array(
'$basedir' => z_root(),
'$hash' => $hash,
'$title' => t('Change channel nickname/address'),
'$desc' => array(t('WARNING: '), t('Any/all connections on other networks will be lost!')),
'$passwd' => t('Please enter your password for verification:'),
'$newname' => array('newname', t('New channel address'),$channel['channel_address'], ''),
'$submit' => t('Rename Channel')
));
return $o;
}
}

View File

@@ -41,12 +41,20 @@ class Channel extends \Zotlabs\Web\Controller {
$profile = argv(1);
}
\App::$page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" title="' . t('Posts and comments') . '" href="' . z_root() . '/feed/' . $which . '" />' . "\r\n" ;
\App::$page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" title="' . t('Only posts') . '" href="' . z_root() . '/feed/' . $which . '?top=1" />' . "\r\n" ;
head_add_link( [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'title' => t('Posts and comments'),
'href' => z_root() . '/feed/' . $which
]);
head_add_link( [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'title' => t('Only posts'),
'href' => z_root() . '/feed/' . $which . '?f=&top=1'
]);
// Not yet ready for prime time
// \App::$page['htmlhead'] .= '<link rel="openid.server" href="' . z_root() . '/id/' . $which .'?f=" />' . "\r\n" ;
// \App::$page['htmlhead'] .= '<link rel="openid.delegate" href="' . z_root() . '/channel/' . $which .'" />' . "\r\n" ;
// Run profile_load() here to make sure the theme is set before
// we start loading content
@@ -84,11 +92,6 @@ class Channel extends \Zotlabs\Web\Controller {
// Ensure we've got a profile owner if updating.
\App::$profile['profile_uid'] = \App::$profile_uid = $update;
}
else {
if(\App::$profile['profile_uid'] == local_channel()) {
nav_set_selected('home');
}
}
$is_owner = (((local_channel()) && (\App::$profile['profile_uid'] == local_channel())) ? true : false);
@@ -111,11 +114,13 @@ class Channel extends \Zotlabs\Web\Controller {
if(! $update) {
nav_set_selected('Channel Home');
$static = channel_manual_conv_update(\App::$profile['profile_uid']);
$o .= profile_tabs($a, $is_owner, \App::$profile['channel_address']);
//$o .= profile_tabs($a, $is_owner, \App::$profile['channel_address']);
$o .= common_friends_visitor_widget(\App::$profile['profile_uid']);
// $o .= common_friends_visitor_widget(\App::$profile['profile_uid']);
if($channel && $is_owner) {
$channel_acl = array(
@@ -161,6 +166,7 @@ class Channel extends \Zotlabs\Web\Controller {
*/
$item_normal = item_normal();
$item_normal_update = item_normal_update();
$sql_extra = item_permissions_sql(\App::$profile['profile_uid']);
if(get_pconfig(\App::$profile['profile_uid'],'system','channel_list_mode') && (! $mid))
@@ -172,7 +178,12 @@ class Channel extends \Zotlabs\Web\Controller {
$simple_update = (($update) ? " AND item_unseen = 1 " : '');
\App::$page['htmlhead'] .= "\r\n" . '<link rel="alternate" type="application/json+oembed" href="' . z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string) . '" title="oembed" />' . "\r\n";
head_add_link([
'rel' => 'alternate',
'type' => 'application/json+oembed',
'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string),
'title' => 'oembed'
]);
if($update && $_SESSION['loadtime'])
$simple_update = " AND (( item_unseen = 1 AND item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) OR item.changed > '" . datetime_convert('UTC','UTC',$_SESSION['loadtime']) . "' ) ";
@@ -180,12 +191,12 @@ class Channel extends \Zotlabs\Web\Controller {
$simple_update = '';
if($static && $simple_update)
$simple_update .= " and item_thread_top = 0 and author_xchan = '" . protect_sprintf(get_observer_hash()) . "' ";
$simple_update .= " and author_xchan = '" . protect_sprintf(get_observer_hash()) . "' ";
if(($update) && (! $load)) {
if($mid) {
$r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal
$r = q("SELECT parent AS item_id from item where mid like '%s' and uid = %d $item_normal_update
AND item_wall = 1 $simple_update $sql_extra limit 1",
dbesc($mid . '%'),
intval(\App::$profile['profile_uid'])
@@ -195,7 +206,7 @@ class Channel extends \Zotlabs\Web\Controller {
else {
$r = q("SELECT distinct parent AS item_id, created from item
left join abook on ( item.owner_xchan = abook.abook_xchan $abook_uids )
WHERE uid = %d $item_normal
WHERE uid = %d $item_normal_update
AND item_wall = 1 $simple_update
AND (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra
@@ -209,10 +220,10 @@ class Channel extends \Zotlabs\Web\Controller {
else {
if(x($category)) {
$sql_extra .= protect_sprintf(term_query('item', $category, TERM_CATEGORY));
$sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'],'item', $category, TERM_CATEGORY));
}
if(x($hashtags)) {
$sql_extra .= protect_sprintf(term_query('item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG));
$sql_extra2 .= protect_sprintf(term_item_parent_query(\App::$profile['profile_uid'],'item', $hashtags, TERM_HASHTAG, TERM_COMMUNITYTAG));
}
if($datequery) {
@@ -228,9 +239,9 @@ class Channel extends \Zotlabs\Web\Controller {
if($load || ($checkjs->disabled())) {
if($mid) {
$r = q("SELECT parent AS item_id from item where mid = '%s' and uid = %d $item_normal
$r = q("SELECT distinct parent AS item_id from item where mid like '%s' and uid = %d $item_normal
AND item_wall = 1 $sql_extra limit 1",
dbesc($mid),
dbesc($mid . '%'),
intval(\App::$profile['profile_uid'])
);
if (! $r) {
@@ -313,11 +324,12 @@ class Channel extends \Zotlabs\Web\Controller {
'$static' => $static,
'$page' => ((\App::$pager['page'] != 1) ? \App::$pager['page'] : 1),
'$search' => '',
'$xchan' => '',
'$order' => '',
'$list' => ((x($_REQUEST,'list')) ? intval($_REQUEST['list']) : 0),
'$file' => '',
'$cats' => (($category) ? $category : ''),
'$tags' => (($hashtags) ? $hashtags : ''),
'$cats' => (($category) ? urlencode($category) : ''),
'$tags' => (($hashtags) ? urlencode($hashtags) : ''),
'$mid' => $mid,
'$verb' => '',
'$dend' => $datequery,
@@ -349,17 +361,21 @@ class Channel extends \Zotlabs\Web\Controller {
}
if($is_owner && $update_unseen) {
$r = q("UPDATE item SET item_unseen = 0 where item_unseen = 1 and item_wall = 1 AND uid = %d $update_unseen",
intval(local_channel())
);
$x = [ 'channel_id' => local_channel(), 'update' => 'unset' ];
call_hooks('update_unseen',$x);
if($x['update'] === 'unset' || intval($x['update'])) {
$r = q("UPDATE item SET item_unseen = 0 where item_unseen = 1 and item_wall = 1 AND uid = %d $update_unseen",
intval(local_channel())
);
}
}
if($checkjs->disabled()) {
$o .= conversation($a,$items,'channel',$update,'traditional');
$o .= conversation($items,'channel',$update,'traditional');
}
else {
$o .= conversation($a,$items,'channel',$update,$page_mode);
$o .= conversation($items,'channel',$update,$page_mode);
}
if((! $update) || ($checkjs->disabled())) {

View File

@@ -102,27 +102,32 @@ class Chanview extends \Zotlabs\Web\Controller {
}
$is_zot = false;
$connected = false;
if (\App::$poi) {
$url = \App::$poi['xchan_url'];
if(\App::$poi['xchan_network'] === 'zot') {
$is_zot = true;
}
if(local_channel()) {
$c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s' limit 1",
intval(local_channel()),
dbesc(\App::$poi['xchan_hash'])
);
if($c)
$connected = true;
}
}
// We will load the chanview template if it's a foreign network,
// just so that we can provide a connect button along with a profile
// photo. Chances are we can't load the remote profile into an iframe
// because of cross-domain security headers. So provide a link to
// the remote profile.
// If we are already connected, just go to the profile.
// Zot channels will usually have a connect link.
// If it isn't zot, 'pro' members won't be able to use the connect
// button as it is a foreign network so just send them to the remote
// profile.
if($is_zot || \Zotlabs\Lib\System::get_server_role() === 'pro') {
if($is_zot || $connected) {
if($is_zot && $observer) {
$url = zid($url);
}

View File

@@ -33,9 +33,7 @@ class Chat extends \Zotlabs\Web\Controller {
$which = $channel['channel_address'];
$profile = argv(1);
}
\App::$page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . z_root() . '/feed/' . $which .'" />' . "\r\n" ;
// Run profile_load() here to make sure the theme is set before
// we start loading content
@@ -91,9 +89,11 @@ class Chat extends \Zotlabs\Web\Controller {
function get() {
if(local_channel())
if(local_channel()) {
$channel = \App::get_channel();
nav_set_selected('My Chatrooms');
}
$ob = \App::get_observer();
$observer = get_observer_hash();
if(! $observer) {
@@ -212,7 +212,8 @@ class Chat extends \Zotlabs\Web\Controller {
require_once('include/conversation.php');
$o = profile_tabs($a,((local_channel() && local_channel() == \App::$profile['profile_uid']) ? true : false),\App::$profile['channel_address']);
//$o = profile_tabs($a,((local_channel() && local_channel() == \App::$profile['profile_uid']) ? true : false),\App::$profile['channel_address']);
$o = '';
if(! feature_enabled(\App::$profile['profile_uid'],'ajaxchat')) {
notice( t('Feature disabled.') . EOL);

View File

@@ -111,8 +111,22 @@ class Chatsvc extends \Zotlabs\Web\Controller {
intval(\App::$data['chat']['room_id'])
);
if($r) {
foreach($r as $rr) {
switch($rr['cp_status']) {
foreach($r as $rv) {
if(! $rv['xchan_name']) {
$rv['xchan_hash'] = $rv['cp_xchan'];
$rv['xchan_name'] = substr($rv['cp_xchan'],strrpos($rv['cp_xchan'],'.')+1);
$rv['xchan_addr'] = '';
$rv['xchan_network'] = 'unknown';
$rv['xchan_url'] = z_root();
$rv['xchan_hidden'] = 1;
$rv['xchan_photo_mimetype'] = 'image/jpeg';
$rv['xchan_photo_l'] = get_default_profile_photo(300);
$rv['xchan_photo_m'] = get_default_profile_photo(80);
$rv['xchan_photo_s'] = get_default_profile_photo(48);
}
switch($rv['cp_status']) {
case 'away':
$status = t('Away');
$status_class = 'away';
@@ -124,7 +138,7 @@ class Chatsvc extends \Zotlabs\Web\Controller {
break;
}
$inroom[] = array('img' => zid($rr['xchan_photo_m']), 'img_type' => $rr['xchan_photo_mimetype'],'name' => $rr['xchan_name'], 'status' => $status, 'status_class' => $status_class);
$inroom[] = array('img' => zid($rv['xchan_photo_m']), 'img_type' => $rv['xchan_photo_mimetype'],'name' => $rv['xchan_name'], 'status' => $status, 'status_class' => $status_class);
}
}
@@ -143,7 +157,7 @@ class Chatsvc extends \Zotlabs\Web\Controller {
'name' => $rr['xchan_name'],
'isotime' => datetime_convert('UTC', date_default_timezone_get(), $rr['created'], 'c'),
'localtime' => datetime_convert('UTC', date_default_timezone_get(), $rr['created'], 'r'),
'text' => smilies(bbcode($rr['chat_text'])),
'text' => zidify_links(smilies(bbcode($rr['chat_text']))),
'self' => ((get_observer_hash() == $rr['chat_xchan']) ? 'self' : '')
);
}

View File

@@ -37,8 +37,6 @@ class Cloud extends \Zotlabs\Web\Controller {
$profile = 0;
\App::$page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . z_root() . '/feed/' . $which . '" />' . "\r\n";
if ($which)
profile_load( $which, $profile);
@@ -59,16 +57,12 @@ class Cloud extends \Zotlabs\Web\Controller {
$auth->observer = $ob_hash;
}
if ($_GET['davguest'])
$_SESSION['davguest'] = true;
$_SERVER['QUERY_STRING'] = str_replace(array('?f=', '&f='), array('', ''), $_SERVER['QUERY_STRING']);
$_SERVER['QUERY_STRING'] = strip_zids($_SERVER['QUERY_STRING']);
$_SERVER['QUERY_STRING'] = preg_replace('/[\?&]davguest=(.*?)([\?&]|$)/ism', '', $_SERVER['QUERY_STRING']);
$_SERVER['REQUEST_URI'] = str_replace(array('?f=', '&f='), array('', ''), $_SERVER['REQUEST_URI']);
$_SERVER['REQUEST_URI'] = strip_zids($_SERVER['REQUEST_URI']);
$_SERVER['REQUEST_URI'] = preg_replace('/[\?&]davguest=(.*?)([\?&]|$)/ism', '', $_SERVER['REQUEST_URI']);
$rootDirectory = new \Zotlabs\Storage\Directory('/', $auth);
@@ -92,12 +86,13 @@ class Cloud extends \Zotlabs\Web\Controller {
// require_once('\Zotlabs\Storage/QuotaPlugin.php');
// $server->addPlugin(new \Zotlabs\Storage\\QuotaPlugin($auth));
ob_start();
// ob_start();
// All we need to do now, is to fire up the server
$server->exec();
ob_end_flush();
// ob_end_flush();
if($browser->build_page)
construct_page();
killme();
}

View File

@@ -25,7 +25,7 @@ class Common extends \Zotlabs\Web\Controller {
}
function get() {
function get() {
$o = '';
@@ -34,38 +34,37 @@ class Common extends \Zotlabs\Web\Controller {
$observer_hash = get_observer_hash();
if(! perm_is_allowed(\App::$profile['profile_uid'],$observer_hash,'view_contacts')) {
notice( t('Permission denied.') . EOL);
return;
}
$o .= '<h2>' . t('Common connections') . '</h2>';
$t = count_common_friends(\App::$profile['profile_uid'],$observer_hash);
if(! $t) {
notice( t('No connections in common.') . EOL);
return $o;
return;
}
$r = common_friends(\App::$profile['profile_uid'],$observer_hash);
if($r) {
$tpl = get_markup_template('common_friends.tpl');
foreach($r as $rr) {
$o .= replace_macros($tpl,array(
'$url' => $rr['xchan_url'],
'$name' => $rr['xchan_name'],
'$photo' => $rr['xchan_photo_m'],
'$tags' => ''
));
$items[] = [
'url' => $rr['xchan_url'],
'name' => $rr['xchan_name'],
'photo' => $rr['xchan_photo_m'],
'tags' => ''
];
}
$o .= cleardiv();
}
$tpl = get_markup_template('common_friends.tpl');
$o = replace_macros($tpl, [
'$title' => t('View Common Connections'),
'$items' => $items
]);
return $o;
}

View File

@@ -5,10 +5,6 @@ namespace Zotlabs\Module;
require_once('include/socgraph.php');
require_once('include/selectors.php');
require_once('include/group.php');
require_once('include/contact_widgets.php');
require_once('include/zot.php');
require_once('include/widgets.php');
class Connections extends \Zotlabs\Web\Controller {
@@ -23,7 +19,7 @@ class Connections extends \Zotlabs\Web\Controller {
}
function get() {
function get() {
$sort_type = 0;
$o = '';
@@ -33,6 +29,8 @@ class Connections extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL);
return login();
}
nav_set_selected('Connections');
$blocked = false;
$hidden = false;
@@ -67,15 +65,14 @@ class Connections extends \Zotlabs\Web\Controller {
$hidden = true;
break;
case 'archived':
$search_flags = " and abook_archived = 1 ";
$head = t('Archived');
$search_flags = " and ( abook_archived = 1 OR abook_not_here = 1) ";
$head = t('Archived/Unreachable');
$archived = true;
break;
case 'pending':
$search_flags = " and abook_pending = 1 ";
$head = t('New');
$pending = true;
nav_set_selected('intros');
break;
case 'ifpending':
$r = q("SELECT COUNT(abook.abook_id) AS total FROM abook left join xchan on abook.abook_xchan = xchan.xchan_hash where abook_channel = %d and abook_pending = 1 and abook_self = 0 and abook_ignored = 0 and xchan_deleted = 0 and xchan_orphan = 0 ",
@@ -85,7 +82,6 @@ class Connections extends \Zotlabs\Web\Controller {
$search_flags = " and abook_pending = 1 ";
$head = t('New');
$pending = true;
nav_set_selected('intros');
\App::$argv[1] = 'pending';
}
else {
@@ -95,7 +91,6 @@ class Connections extends \Zotlabs\Web\Controller {
\App::$argc = 1;
unset(\App::$argv[1]);
}
nav_set_selected('intros');
break;
// case 'unconnected':
// $search_flags = " and abook_unconnected = 1 ";
@@ -172,10 +167,10 @@ class Connections extends \Zotlabs\Web\Controller {
),
'archived' => array(
'label' => t('Archived'),
'label' => t('Archived/Unreachable'),
'url' => z_root() . '/connections/archived',
'sel' => ($archived) ? 'active' : '',
'title' => t('Only show archived connections'),
'title' => t('Only show archived/unreachable connections'),
),
'hidden' => array(
@@ -228,10 +223,18 @@ class Connections extends \Zotlabs\Web\Controller {
$contacts = array();
if(count($r)) {
if($r) {
vcard_query($r);
foreach($r as $rr) {
if($rr['xchan_url']) {
if(($rr['vcard']) && is_array($rr['vcard']['tels']) && $rr['vcard']['tels'][0]['nr'])
$phone = ((\App::$is_mobile || \App::$is_tablet) ? $rr['vcard']['tels'][0]['nr'] : '');
else
$phone = '';
$status_str = '';
$status = array(
@@ -239,7 +242,8 @@ class Connections extends \Zotlabs\Web\Controller {
((intval($rr['abook_archived'])) ? t('Archived') : ''),
((intval($rr['abook_hidden'])) ? t('Hidden') : ''),
((intval($rr['abook_ignored'])) ? t('Ignored') : ''),
((intval($rr['abook_blocked'])) ? t('Blocked') : '')
((intval($rr['abook_blocked'])) ? t('Blocked') : ''),
((intval($rr['abook_not_here'])) ? t('Not connected at this location') : '')
);
foreach($status as $str) {
@@ -253,20 +257,23 @@ class Connections extends \Zotlabs\Web\Controller {
$contacts[] = array(
'img_hover' => sprintf( t('%1$s [%2$s]'),$rr['xchan_name'],$rr['xchan_url']),
'edit_hover' => t('Edit connection'),
'edit' => t('Edit'),
'delete_hover' => t('Delete connection'),
'id' => $rr['abook_id'],
'thumb' => $rr['xchan_photo_m'],
'name' => $rr['xchan_name'],
'classes' => (intval($rr['abook_archived']) ? 'archived' : ''),
'classes' => ((intval($rr['abook_archived']) || intval($rr['abook_not_here'])) ? 'archived' : ''),
'link' => z_root() . '/connedit/' . $rr['abook_id'],
'deletelink' => z_root() . '/connedit/' . intval($rr['abook_id']) . '/drop',
'delete' => t('Delete'),
'url' => chanlink_url($rr['xchan_url']),
'url' => chanlink_hash($rr['xchan_hash']),
'webbie_label' => t('Channel address'),
'webbie' => $rr['xchan_addr'],
'network_label' => t('Network'),
'network' => network_to_name($rr['xchan_network']),
'public_forum' => ((intval($rr['xchan_pubforum'])) ? true : false),
'call' => t('Call'),
'phone' => $phone,
'status_label' => t('Status'),
'status' => $status_str,
'connected_label' => t('Connected'),

View File

@@ -11,9 +11,6 @@ namespace Zotlabs\Module;
require_once('include/socgraph.php');
require_once('include/selectors.php');
require_once('include/group.php');
require_once('include/contact_widgets.php');
require_once('include/zot.php');
require_once('include/widgets.php');
require_once('include/photos.php');
@@ -37,7 +34,7 @@ class Connedit extends \Zotlabs\Web\Controller {
intval(argv(1))
);
if($r) {
\App::$poi = $r[0];
\App::$poi = array_shift($r);
}
}
@@ -86,6 +83,12 @@ class Connedit extends \Zotlabs\Web\Controller {
call_hooks('contact_edit_post', $_POST);
$vc = get_abconfig(local_channel(),$orig_record['abook_xchan'],'system','vcard');
$vcard = (($vc) ? \Sabre\VObject\Reader::read($vc) : null);
$serialised_vcard = update_vcard($_REQUEST,$vcard);
if($serialised_vcard)
set_abconfig(local_channel(),$orig_record[0]['abook_xchan'],'system','vcard',$serialised_vcard);
if(intval($orig_record[0]['abook_self'])) {
$autoperms = intval($_POST['autoperms']);
$is_self = true;
@@ -206,6 +209,7 @@ class Connedit extends \Zotlabs\Web\Controller {
}
if(($_REQUEST['pending']) && intval($orig_record[0]['abook_pending'])) {
$new_friend = true;
// @fixme it won't be common, but when you accept a new connection request
@@ -215,21 +219,13 @@ class Connedit extends \Zotlabs\Web\Controller {
// request. The workaround is to approve the connection, then go back and
// adjust permissions as desired.
$abook_my_perms = get_channel_default_perms(local_channel());
$role = get_pconfig(local_channel(),'system','permissions_role');
if($role) {
$x = \Zotlabs\Access\PermissionRoles::role_perms($role);
if($x['perms_connect']) {
$abook_my_perms = $x['perms_connect'];
$p = \Zotlabs\Access\Permissions::connect_perms(local_channel());
$my_perms = $p['perms'];
if($my_perms) {
foreach($my_perms as $k => $v) {
set_abconfig($channel['channel_id'],$orig_record[0]['abook_xchan'],'my_perms',$k,$v);
}
}
$filled_perms = \Zotlabs\Access\Permissions::FilledPerms($abook_my_perms);
foreach($filled_perms as $k => $v) {
set_abconfig($channel['channel_id'],$orig_record[0]['abook_xchan'],'my_perms',$k,$v);
}
}
$abook_pending = (($new_friend) ? 0 : $orig_record[0]['abook_pending']);
@@ -246,20 +242,16 @@ class Connedit extends \Zotlabs\Web\Controller {
intval(local_channel())
);
if($orig_record[0]['abook_profile'] != $profile_id) {
//Update profile photo permissions
logger('A new profile was assigned - updating profile photos');
profile_photo_set_profile_perms(local_channel(),$profile_id);
}
if($r)
info( t('Connection updated.') . EOL);
else
notice( t('Failed to update connection record.') . EOL);
if(! intval(\App::$poi['abook_self'])) {
if($new_friend) {
\Zotlabs\Daemon\Master::Summon( [ 'Notifier', 'permission_accept', $contact_id ] );
}
\Zotlabs\Daemon\Master::Summon( [
'Notifier',
(($new_friend) ? 'permission_create' : 'permission_update'),
@@ -367,7 +359,7 @@ class Connedit extends \Zotlabs\Web\Controller {
intval(\App::$poi['abook_id'])
);
if($r) {
\App::$poi = $r[0];
\App::$poi = array_shift($r);
}
$clone = \App::$poi;
@@ -400,30 +392,22 @@ class Connedit extends \Zotlabs\Web\Controller {
$section = ((array_key_exists('section',$_REQUEST)) ? $_REQUEST['section'] : '');
$channel = \App::get_channel();
$my_perms = get_channel_default_perms(local_channel());
$role = get_pconfig(local_channel(),'system','permissions_role');
if($role) {
$x = \Zotlabs\Access\PermissionRoles::role_perms($role);
if($x['perms_connect'])
$my_perms = $x['perms_connect'];
}
$yes_no = array(t('No'),t('Yes'));
if($my_perms) {
$o .= "<script>function connectDefaultShare() {
\$('.abook-edit-me').each(function() {
if(! $(this).is(':disabled'))
$(this).prop('checked', false);
});\n\n";
$perms = get_perms();
foreach($perms as $p => $v) {
if($my_perms & $v[1]) {
$o .= "\$('#me_id_perms_" . $p . "').prop('checked', true); \n";
}
$connect_perms = \Zotlabs\Access\Permissions::connect_perms(local_channel());
$o .= "<script>function connectDefaultShare() {
\$('.abook-edit-me').each(function() {
if(! $(this).is(':disabled'))
$(this).prop('checked', false);
});\n\n";
foreach($connect_perms['perms'] as $p => $v) {
if($v) {
$o .= "\$('#me_id_perms_" . $p . "').prop('checked', true); \n";
}
$o .= " }\n</script>\n";
}
$o .= " }\n</script>\n";
if(argc() == 3) {
@@ -450,6 +434,34 @@ class Connedit extends \Zotlabs\Web\Controller {
goaway(z_root() . '/connedit/' . $contact_id);
}
if($cmd === 'fetchvc') {
$url = str_replace('/channel/','/profile/',$orig_record[0]['xchan_url']) . '/vcard';
$recurse = 0;
$x = z_fetch_url(zid($url),false,$recurse,['session' => true]);
if($x['success']) {
$h = new \Zotlabs\Web\HTTPHeaders($x['header']);
$fields = $h->fetch();
if($fields) {
foreach($fields as $y) {
if(array_key_exists('content-type',$y)) {
$type = explode(';',trim($y['content-type']));
if($type && $type[0] === 'text/vcard' && $x['body']) {
$vc = \Sabre\VObject\Reader::read($x['body']);
$vcard = $vc->serialize();
if($vcard) {
set_abconfig(local_channel(),$orig_record[0]['abook_xchan'],'system','vcard',$vcard);
$this->connedit_clone($a);
}
}
}
}
}
}
goaway(z_root() . '/connedit/' . $contact_id);
}
if($cmd === 'resetphoto') {
q("update xchan set xchan_photo_date = '2001-01-01 00:00:00' where xchan_hash = '%s'",
dbesc($orig_record[0]['xchan_hash'])
@@ -591,6 +603,13 @@ class Connedit extends \Zotlabs\Web\Controller {
'sel' => '',
'title' => t('Fetch updated permissions'),
),
'rephoto' => array(
'label' => t('Refresh Photo'),
'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/resetphoto',
'sel' => '',
'title' => t('Fetch updated photo'),
),
'recent' => array(
'label' => t('Recent Activity'),
@@ -639,6 +658,26 @@ class Connedit extends \Zotlabs\Web\Controller {
),
);
if($contact['xchan_network'] === 'zot') {
$tools['fetchvc'] = [
'label' => t('Fetch Vcard'),
'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/fetchvc',
'sel' => '',
'title' => t('Fetch electronic calling card for this connection')
];
}
$sections = [];
$sections['perms'] = [
'label' => t('Permissions'),
'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/?f=&section=perms',
'sel' => '',
'title' => t('Open Individual Permissions section by default'),
];
$self = false;
@@ -647,17 +686,32 @@ class Connedit extends \Zotlabs\Web\Controller {
$abook_prev = $abook_next = 0;
}
$vc = get_abconfig(local_channel(),$contact['abook_xchan'],'system','vcard');
$vctmp = (($vc) ? \Sabre\VObject\Reader::read($vc) : null);
$vcard = (($vctmp) ? get_vcard_array($vctmp,$contact['abook_id']) : [] );
if(! $vcard)
$vcard['fn'] = $contact['xchan_name'];
$tpl = get_markup_template("abook_edit.tpl");
if(feature_enabled(local_channel(),'affinity')) {
$sections['affinity'] = [
'label' => t('Affinity'),
'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/?f=&section=affinity',
'sel' => '',
'title' => t('Open Set Affinity section by default'),
];
$labels = array(
$labels = [
t('Me'),
t('Family'),
t('Friends'),
t('Acquaintances'),
t('All')
);
];
call_hooks('affinity_labels',$labels);
$label_str = '';
@@ -679,6 +733,15 @@ class Connedit extends \Zotlabs\Web\Controller {
'$labels' => $label_str,
));
}
if(feature_enabled(local_channel(),'connfilter')) {
$sections['filter'] = [
'label' => t('Filter'),
'url' => z_root() . '/connedit/' . $contact['abook_id'] . '/?f=&section=filter',
'sel' => '',
'title' => t('Open Custom Filter section by default'),
];
}
$rating_val = 0;
$rating_text = '';
@@ -754,6 +817,15 @@ class Connedit extends \Zotlabs\Web\Controller {
$perms[] = array('perms_' . $k, $v, ((array_key_exists($k,$their_perms)) ? intval($their_perms[$k]) : ''),$thisperm, 1, (($checkinherited & PERMS_SPECIFIC) ? '' : '1'), '', $checkinherited);
}
$pcat = new \Zotlabs\Lib\Permcat(local_channel());
$pcatlist = $pcat->listing();
$permcats = [];
if($pcatlist) {
foreach($pcatlist as $pc) {
$permcats[$pc['name']] = $pc['localname'];
}
}
$locstr = '';
$locs = q("select hubloc_addr as location from hubloc left join site on hubloc_url = site_url where hubloc_hash = '%s'
@@ -773,17 +845,39 @@ class Connedit extends \Zotlabs\Web\Controller {
}
}
else
$locstr = t('none');
$o .= replace_macros($tpl,array(
$locstr = $contact['xchan_url'];
$clone_warn = '';
$clonable = (in_array($contact['xchan_network'],['zot','rss']) ? true : false);
if(! $clonable) {
$clone_warn = '<strong>';
$clone_warn .= ((intval($contact['abook_not_here']))
? t('This connection is unreachable from this location.')
: t('This connection may be unreachable from other channel locations.')
);
$clone_warn .= '</strong><br>' . t('Location independence is not supported by their network.');
}
if(intval($contact['abook_not_here']) && $unclonable)
$not_here = t('This connection is unreachable from this location. Location independence is not supported by their network.');
$o .= replace_macros($tpl, [
'$header' => (($self) ? t('Connection Default Permissions') : sprintf( t('Connection: %s'),$contact['xchan_name'])),
'$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('Connection requests will be approved without your interaction'), $yes_no),
'$permcat' => [ 'permcat', t('Permission role'), '', '',$permcats ],
'$permcat_new' => t('Add permission role'),
'$permcat_enable' => feature_enabled(local_channel(),'permcats'),
'$addr' => $contact['xchan_addr'],
'$primeurl' => $contact['xchan_url'],
'$section' => $section,
'$sections' => $sections,
'$vcard' => $vcard,
'$addr_text' => t('This connection\'s primary address is'),
'$loc_text' => t('Available locations:'),
'$locstr' => $locstr,
'$unclonable' => $clone_warn,
'$notself' => (($self) ? '' : '1'),
'$self' => (($self) ? '1' : ''),
'$autolbl' => t('The permissions indicated on this page will be applied to all new connections.'),
@@ -818,13 +912,42 @@ class Connedit extends \Zotlabs\Web\Controller {
'$permnote_self' => t('Some permissions may be inherited from your channel\'s <a href="settings"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes.'),
'$lastupdtext' => t('Last update:'),
'$last_update' => relative_date($contact['abook_connected']),
'$is_mobile' => ((\App::$is_mobile || \App::$is_tablet) ? true : false),
'$profile_select' => contact_profile_assign($contact['abook_profile']),
'$multiprofs' => $multiprofs,
'$contact_id' => $contact['abook_id'],
'$name' => $contact['xchan_name'],
'$abook_prev' => $abook_prev,
'$abook_next' => $abook_next
));
'$abook_next' => $abook_next,
'$vcard_label' => t('Details'),
'$displayname' => $displayname,
'$name_label' => t('Name'),
'$org_label' => t('Organisation'),
'$title_label' => t('Title'),
'$tel_label' => t('Phone'),
'$email_label' => t('Email'),
'$impp_label' => t('Instant messenger'),
'$url_label' => t('Website'),
'$adr_label' => t('Address'),
'$note_label' => t('Note'),
'$mobile' => t('Mobile'),
'$home' => t('Home'),
'$work' => t('Work'),
'$other' => t('Other'),
'$add_card' => t('Add Contact'),
'$add_field' => t('Add Field'),
'$create' => t('Create'),
'$update' => t('Update'),
'$delete' => t('Delete'),
'$cancel' => t('Cancel'),
'$po_box' => t('P.O. Box'),
'$extra' => t('Additional'),
'$street' => t('Street'),
'$locality' => t('Locality'),
'$region' => t('Region'),
'$zip_code' => t('ZIP Code'),
'$country' => t('Country')
]);
$arr = array('contact' => $contact,'output' => $o);

View File

@@ -23,19 +23,17 @@ require_once('include/channel.php');
class Cover_photo extends \Zotlabs\Web\Controller {
function init() {
if(! local_channel()) {
return;
}
$channel = \App::get_channel();
profile_load($channel['channel_address']);
profile_load($channel['channel_address']);
}
/* @brief Evaluate posted values
/**
* @brief Evaluate posted values
*
* @param $a Current application
* @return void
*
*/
@@ -130,8 +128,15 @@ class Cover_photo extends \Zotlabs\Web\Controller {
$aid = get_account_id();
$p = array('aid' => $aid, 'uid' => local_channel(), 'resource_id' => $base_image['resource_id'],
'filename' => $base_image['filename'], 'album' => t('Cover Photos'));
$p = [
'aid' => $aid,
'uid' => local_channel(),
'resource_id' => $base_image['resource_id'],
'filename' => $base_image['filename'],
'album' => t('Cover Photos'),
'os_path' => $base_image['os_path'],
'display_path' => $base_image['display_path']
];
$p['imgscale'] = 7;
$p['photo_usage'] = PHOTO_COVER;
@@ -195,11 +200,10 @@ class Cover_photo extends \Zotlabs\Web\Controller {
$os_storage = false;
foreach($i as $ii) {
$smallest = intval($ii['imgscale']);
$smallest = intval($ii['imgscale']);
$os_storage = intval($ii['os_storage']);
$imagedata = $ii['content'];
$filetype = $ii['mimetype'];
$imagedata = $ii['content'];
$filetype = $ii['mimetype'];
}
}
@@ -263,10 +267,10 @@ class Cover_photo extends \Zotlabs\Web\Controller {
}
/* @brief Generate content of profile-photo view
/**
* @brief Generate content of profile-photo view
*
* @param $a Current application
* @return void
* @return string
*
*/
@@ -350,15 +354,15 @@ class Cover_photo extends \Zotlabs\Web\Controller {
$tpl = get_markup_template('cover_photo.tpl');
$o .= replace_macros($tpl,array(
'$user' => \App::$channel['channel_address'],
'$lbl_upfile' => t('Upload File:'),
'$lbl_profiles' => t('Select a profile:'),
'$title' => t('Upload Cover Photo'),
'$submit' => t('Upload'),
'$profiles' => $profiles,
'$user' => \App::$channel['channel_address'],
'$lbl_upfile' => t('Upload File:'),
'$lbl_profiles' => t('Select a profile:'),
'$title' => t('Upload Cover Photo'),
'$submit' => t('Upload'),
'$profiles' => $profiles,
'$form_security_token' => get_form_security_token("cover_photo"),
// FIXME - yuk
'$select' => sprintf('%s %s', t('or'), ($newuser) ? '<a href="' . z_root() . '">' . t('skip this step') . '</a>' : '<a href="'. z_root() . '/photos/' . \App::$channel['channel_address'] . '">' . t('select a photo from your photo albums') . '</a>')
/// @FIXME - yuk
'$select' => sprintf('%s %s', t('or'), ($newuser) ? '<a href="' . z_root() . '">' . t('skip this step') . '</a>' : '<a href="'. z_root() . '/photos/' . \App::$channel['channel_address'] . '">' . t('select a photo from your photo albums') . '</a>')
));
call_hooks('cover_photo_content_end', $o);
@@ -370,14 +374,14 @@ class Cover_photo extends \Zotlabs\Web\Controller {
$resolution = 3;
$tpl = get_markup_template("cropcover.tpl");
$o .= replace_macros($tpl,array(
'$filename' => $filename,
'$profile' => intval($_REQUEST['profile']),
'$resource' => \App::$data['imagecrop'] . '-3',
'$image_url' => z_root() . '/photo/' . $filename,
'$title' => t('Crop Image'),
'$desc' => t('Please adjust the image cropping for optimum viewing.'),
'$filename' => $filename,
'$profile' => intval($_REQUEST['profile']),
'$resource' => \App::$data['imagecrop'] . '-3',
'$image_url' => z_root() . '/photo/' . $filename,
'$title' => t('Crop Image'),
'$desc' => t('Please adjust the image cropping for optimum viewing.'),
'$form_security_token' => get_form_security_token("cover_photo"),
'$done' => t('Done Editing')
'$done' => t('Done Editing')
));
return $o;
}
@@ -393,8 +397,6 @@ class Cover_photo extends \Zotlabs\Web\Controller {
*
*/
function cover_photo_crop_ui_head(&$a, $ph, $hash, $smallest){
$max_length = get_config('system','max_image_length');

View File

@@ -12,6 +12,9 @@ use \Sabre\DAV as SDAV;
use \Zotlabs\Storage;
require_once('include/attach.php');
require_once('include/auth.php');
require_once('include/security.php');
class Dav extends \Zotlabs\Web\Controller {
@@ -21,22 +24,65 @@ class Dav extends \Zotlabs\Web\Controller {
*/
function init() {
// workaround for HTTP-auth in CGI mode
if (x($_SERVER, 'REDIRECT_REMOTE_USER')) {
$userpass = base64_decode(substr($_SERVER["REDIRECT_REMOTE_USER"], 6)) ;
if(strlen($userpass)) {
list($name, $password) = explode(':', $userpass);
$_SERVER['PHP_AUTH_USER'] = $name;
$_SERVER['PHP_AUTH_PW'] = $password;
}
}
foreach([ 'REDIRECT_REMOTE_USER', 'HTTP_AUTHORIZATION' ] as $head) {
if (x($_SERVER, 'HTTP_AUTHORIZATION')) {
$userpass = base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)) ;
if(strlen($userpass)) {
list($name, $password) = explode(':', $userpass);
$_SERVER['PHP_AUTH_USER'] = $name;
$_SERVER['PHP_AUTH_PW'] = $password;
/* Basic authentication */
if(array_key_exists($head,$_SERVER) && substr(trim($_SERVER[$head]),0,5) === 'Basic') {
$userpass = @base64_decode(substr(trim($_SERVER[$head]),6)) ;
if(strlen($userpass)) {
list($name, $password) = explode(':', $userpass);
$_SERVER['PHP_AUTH_USER'] = $name;
$_SERVER['PHP_AUTH_PW'] = $password;
}
break;
}
/* Signature authentication */
if(array_key_exists($head,$_SERVER) && substr(trim($_SERVER[$head]),0,9) === 'Signature') {
if($head !== 'HTTP_AUTHORIZATION') {
$_SERVER['HTTP_AUTHORIZATION'] = $_SERVER[$head];
continue;
}
$sigblock = \Zotlabs\Web\HTTPSig::parse_sigheader($_SERVER[$head]);
if($sigblock) {
$keyId = $sigblock['keyId'];
if($keyId) {
$r = q("select * from hubloc where hubloc_addr = '%s' limit 1",
dbesc($keyId)
);
if($r) {
$c = channelx_by_hash($r[0]['hubloc_hash']);
if($c) {
$a = q("select * from account where account_id = %d limit 1",
intval($c['channel_account_id'])
);
if($a) {
$record = [ 'channel' => $c, 'account' => $a[0] ];
$channel_login = $c['channel_id'];
}
}
}
if(! $record)
continue;
if($record) {
$verified = \Zotlabs\Web\HTTPSig::verify('',$record['channel']['channel_pubkey']);
if(! ($verified && $verified['header_signed'] && $verified['header_valid'])) {
$record = null;
}
if($record['account']) {
authenticate_success($record['account']);
if($channel_login) {
change_channel($channel_login);
}
}
break;
}
}
}
}
}

View File

@@ -4,7 +4,6 @@ namespace Zotlabs\Module;
require_once('include/socgraph.php');
require_once('include/dir_fns.php');
require_once('include/widgets.php');
require_once('include/bbcode.php');
@@ -68,6 +67,7 @@ class Directory extends \Zotlabs\Web\Controller {
$observer = get_observer_hash();
$globaldir = get_directory_setting($observer, 'globaldir');
// override your personal global search pref if we're doing a navbar search of the directory
if(intval($_REQUEST['navsearch']))
$globaldir = 1;
@@ -77,7 +77,7 @@ class Directory extends \Zotlabs\Web\Controller {
$pubforums = get_directory_setting($observer, 'pubforums');
$o = '';
nav_set_selected('directory');
nav_set_selected('Directory');
if(x($_POST,'search'))
$search = notags(trim($_POST['search']));
@@ -233,7 +233,7 @@ class Directory extends \Zotlabs\Web\Controller {
$age = '';
if(strlen($rr['birthday'])) {
if(($years = age($rr['birthday'],'UTC','')) != 0)
if(($years = age($rr['birthday'],'UTC','')) > 0)
$age = $years;
}
@@ -262,7 +262,7 @@ class Directory extends \Zotlabs\Web\Controller {
$hometown = ((x($profile,'hometown') == 1) ? $profile['hometown'] : False);
$about = ((x($profile,'about') == 1) ? bbcode($profile['about']) : False);
$about = ((x($profile,'about') == 1) ? zidify_links(bbcode($profile['about'])) : False);
$keywords = ((x($profile,'keywords')) ? $profile['keywords'] : '');

View File

@@ -1,40 +1,33 @@
<?php
namespace Zotlabs\Module;
require_once("include/bbcode.php");
require_once('include/security.php');
require_once('include/conversation.php');
require_once('include/acl_selectors.php');
require_once('include/items.php');
class Display extends \Zotlabs\Web\Controller {
function get($update = 0, $load = false) {
$checkjs = new \Zotlabs\Web\CheckJS(1);
if($load)
$_SESSION['loadtime'] = datetime_convert();
if(observer_prohibited()) {
notice( t('Public access denied.') . EOL);
return;
}
require_once("include/bbcode.php");
require_once('include/security.php');
require_once('include/conversation.php');
require_once('include/acl_selectors.php');
require_once('include/items.php');
\App::$page['htmlhead'] .= replace_macros(get_markup_template('display-head.tpl'), array());
if(argc() > 1 && argv(1) !== 'load')
$item_hash = argv(1);
if($_REQUEST['mid'])
$item_hash = $_REQUEST['mid'];
if(! $item_hash) {
\App::$error = 404;
notice( t('Item not found.') . EOL);
@@ -42,21 +35,19 @@ class Display extends \Zotlabs\Web\Controller {
}
$observer_is_owner = false;
$updateable = false;
if(local_channel() && (! $update)) {
$channel = \App::get_channel();
$channel_acl = array(
'allow_cid' => $channel['channel_allow_cid'],
'allow_gid' => $channel['channel_allow_gid'],
'deny_cid' => $channel['channel_deny_cid'],
'deny_gid' => $channel['channel_deny_gid']
);
$x = array(
'is_owner' => true,
'allow_location' => ((intval(get_pconfig($channel['channel_id'],'system','use_browser_location'))) ? '1' : ''),
@@ -80,7 +71,6 @@ class Display extends \Zotlabs\Web\Controller {
$o = '<div id="jot-popup">';
$o .= status_editor($a,$x);
$o .= '</div>';
}
// This page can be viewed by anybody so the query could be complicated
@@ -93,14 +83,24 @@ class Display extends \Zotlabs\Web\Controller {
// find a copy of the item somewhere
$target_item = null;
$r = q("select id, uid, mid, parent_mid, item_type, item_deleted from item where mid like '%s' limit 1",
if(strpos($item_hash,'b64.') === 0)
$decoded = @base64url_decode(substr($item_hash,4));
if($decoded)
$item_hash = $decoded;
$r = q("select id, uid, mid, parent_mid, thr_parent, verb, item_type, item_deleted, item_blocked from item where mid like '%s' limit 1",
dbesc($item_hash . '%')
);
if($r) {
$target_item = $r[0];
}
//if the item is to be moderated redirect to /moderate
if($target_item['item_blocked'] == ITEM_MODERATED) {
goaway(z_root() . '/moderate/' . $target_item['id']);
}
$r = null;
@@ -136,10 +136,16 @@ class Display extends \Zotlabs\Web\Controller {
$simple_update .= " and item_thread_top = 0 and author_xchan = '" . protect_sprintf(get_observer_hash()) . "' ";
if((! $update) && (! $load)) {
$static = ((local_channel()) ? channel_manual_conv_update(local_channel()) : 0);
$static = ((local_channel()) ? channel_manual_conv_update(local_channel()) : 1);
//if the target item is not a post (eg a like) we want to address its thread parent
$mid = ((($target_item['verb'] == ACTIVITY_LIKE) || ($target_item['verb'] == ACTIVITY_DISLIKE)) ? $target_item['thr_parent'] : $target_item['mid']);
//if we got a decoded hash we must encode it again before handing to javascript
if($decoded)
$mid = 'b64.' . base64url_encode($mid);
$o .= '<div id="live-display"></div>' . "\r\n";
$o .= "<script> var profile_uid = " . ((intval(local_channel())) ? local_channel() : (-1))
. "; var netargs = '?f='; var profile_page = " . \App::$pager['page'] . "; </script>\r\n";
@@ -163,6 +169,7 @@ class Display extends \Zotlabs\Web\Controller {
'$page' => ((\App::$pager['page'] != 1) ? \App::$pager['page'] : 1),
'$list' => ((x($_REQUEST,'list')) ? intval($_REQUEST['list']) : 0),
'$search' => '',
'$xchan' => '',
'$order' => '',
'$file' => '',
'$cats' => '',
@@ -170,32 +177,37 @@ class Display extends \Zotlabs\Web\Controller {
'$dend' => '',
'$dbegin' => '',
'$verb' => '',
'$mid' => $item_hash
'$mid' => $mid
));
head_add_link([
'rel' => 'alternate',
'type' => 'application/json+oembed',
'href' => z_root() . '/oep?f=&url=' . urlencode(z_root() . '/' . \App::$query_string),
'title' => 'oembed'
]);
}
$observer_hash = get_observer_hash();
$item_normal = item_normal();
$item_normal_update = item_normal_update();
$sql_extra = public_permissions_sql($observer_hash);
if(($update && $load) || ($checkjs->disabled())) {
$updateable = false;
$pager_sql = sprintf(" LIMIT %d OFFSET %d ", intval(\App::$pager['itemspage']),intval(\App::$pager['start']));
if($load || ($checkjs->disabled())) {
$r = null;
require_once('include/channel.php');
$sys = get_sys_channel();
$sysid = $sys['channel_id'];
if(local_channel()) {
$r = q("SELECT * from item
$r = q("SELECT item.id as item_id from item
WHERE uid = %d
and mid = '%s'
$item_normal
@@ -205,24 +217,22 @@ class Display extends \Zotlabs\Web\Controller {
);
if($r) {
$updateable = true;
}
}
if($r === null) {
// in case somebody turned off public access to sys channel content using permissions
// make that content unsearchable by ensuring the owner_xchan can't match
// make that content unsearchable by ensuring the owner uid can't match
if(! perm_is_allowed($sysid,$observer_hash,'view_stream'))
$sysid = 0;
$r = q("SELECT * from item
$r = q("SELECT item.id as item_id from item
WHERE mid = '%s'
AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = ''
AND item.deny_gid = '' AND item_private = 0 )
and owner_xchan in ( " . stream_perms_xchans(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " ))
and uid in ( " . stream_perms_api_uids(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " ))
OR uid = %d )
$sql_extra )
$item_normal
@@ -230,7 +240,6 @@ class Display extends \Zotlabs\Web\Controller {
dbesc($target_item['parent_mid']),
intval($sysid)
);
}
}
}
@@ -241,12 +250,12 @@ class Display extends \Zotlabs\Web\Controller {
require_once('include/channel.php');
$sys = get_sys_channel();
$sysid = $sys['channel_id'];
if(local_channel()) {
$r = q("SELECT * from item
$r = q("SELECT item.parent AS item_id from item
WHERE uid = %d
and mid = '%s'
$item_normal
and parent_mid = '%s'
$item_normal_update
$simple_update
limit 1",
intval(local_channel()),
@@ -256,20 +265,21 @@ class Display extends \Zotlabs\Web\Controller {
$updateable = true;
}
}
if($r === null) {
// in case somebody turned off public access to sys channel content using permissions
// make that content unsearchable by ensuring the owner_xchan can't match
if(! perm_is_allowed($sysid,$observer_hash,'view_stream'))
$sysid = 0;
$r = q("SELECT * from item
WHERE mid = '%s'
$r = q("SELECT item.parent AS item_id from item
WHERE parent_mid = '%s'
AND (((( item.allow_cid = '' AND item.allow_gid = '' AND item.deny_cid = ''
AND item.deny_gid = '' AND item_private = 0 )
and owner_xchan in ( " . stream_perms_xchans(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " ))
and uid in ( " . stream_perms_api_uids(($observer_hash) ? (PERMS_NETWORK|PERMS_PUBLIC) : PERMS_PUBLIC) . " ))
OR uid = %d )
$sql_extra )
$item_normal
$item_normal_update
$simple_update
limit 1",
dbesc($target_item['parent_mid']),
@@ -284,10 +294,8 @@ class Display extends \Zotlabs\Web\Controller {
}
if($r) {
$parents_str = ids_to_querystr($r,'id');
$parents_str = ids_to_querystr($r,'item_id');
if($parents_str) {
$items = q("SELECT item.*, item.id AS item_id
FROM item
WHERE parent in ( %s ) $item_normal ",
@@ -298,39 +306,35 @@ class Display extends \Zotlabs\Web\Controller {
$items = fetch_post_tags($items,true);
$items = conv_sort($items,'created');
}
} else {
}
else {
$items = array();
}
if ($checkjs->disabled()) {
$o .= conversation($a, $items, 'display', $update, 'traditional');
$o .= conversation($items, 'display', $update, 'traditional');
if ($items[0]['title'])
\App::$page['title'] = $items[0]['title'] . " - " . \App::$page['title'];
}
else {
$o .= conversation($a, $items, 'display', $update, 'client');
$o .= conversation($items, 'display', $update, 'client');
}
if($updateable) {
$x = q("UPDATE item SET item_unseen = 0 where item_unseen = 1 AND uid = %d and parent = %d ",
intval(local_channel()),
intval($r[0]['parent'])
intval($r[0]['item_id'])
);
}
$o .= '<div id="content-complete"></div>';
return $o;
/*
elseif((! $update) && (! {
if((($update && $load) || $checkjs->disabled()) && (! $items)) {
$r = q("SELECT id, item_flags FROM item WHERE id = '%s' OR mid = '%s' LIMIT 1",
dbesc($item_hash),
$r = q("SELECT id, item_deleted FROM item WHERE mid = '%s' LIMIT 1",
dbesc($item_hash)
);
if($r) {
if(intval($r[0]['item_deleted'])) {
notice( t('Item has been removed.') . EOL );
@@ -344,8 +348,9 @@ class Display extends \Zotlabs\Web\Controller {
}
}
*/
return $o;
}
}

View File

@@ -98,6 +98,11 @@ class Editblock extends \Zotlabs\Web\Controller {
$mimetype = $itm[0]['mimetype'];
$content = $itm[0]['body'];
if($itm[0]['mimetype'] === 'text/markdown')
$content = \Zotlabs\Lib\MarkdownSoap::unescape($itm[0]['body']);
$rp = 'blocks/' . $channel['channel_address'];
$x = array(
@@ -117,7 +122,7 @@ class Editblock extends \Zotlabs\Web\Controller {
'ptyp' => $itm[0]['type'],
'mimeselect' => true,
'mimetype' => $itm[0]['mimetype'],
'body' => undo_post_tagging($itm[0]['body']),
'body' => undo_post_tagging($content),
'post_id' => $post_id,
'visitor' => true,
'title' => htmlspecialchars($itm[0]['title'],ENT_COMPAT,'UTF-8'),

View File

@@ -119,6 +119,7 @@ class Editlayout extends \Zotlabs\Web\Controller {
'hide_weblink' => true,
'hide_attach' => true,
'hide_preview' => true,
'disable_comments' => true,
'ptyp' => $itm[0]['obj_type'],
'body' => undo_post_tagging($itm[0]['body']),
'post_id' => $post_id,

View File

@@ -31,7 +31,15 @@ class Editpost extends \Zotlabs\Web\Controller {
dbesc(get_observer_hash())
);
if(! count($itm)) {
// don't allow web editing of potentially binary content (item_obscured = 1)
// @FIXME how do we do it instead?
if((! $itm) || intval($itm[0]['item_obscured'])) {
notice( t('Item is not editable') . EOL);
return;
}
if($itm[0]['resource_type'] === 'photo' && $itm[0]['resource_id']) {
notice( t('Item is not editable') . EOL);
return;
}
@@ -44,14 +52,6 @@ class Editpost extends \Zotlabs\Web\Controller {
$channel = \App::get_channel();
if(intval($itm[0]['item_obscured'])) {
$key = get_config('system','prvkey');
if($itm[0]['title'])
$itm[0]['title'] = crypto_unencapsulate(json_decode($itm[0]['title'],true),$key);
if($itm[0]['body'])
$itm[0]['body'] = crypto_unencapsulate(json_decode($itm[0]['body'],true),$key);
}
$category = '';
$catsenabled = ((feature_enabled($owner_uid,'categories')) ? 'categories' : '');
@@ -78,6 +78,7 @@ class Editpost extends \Zotlabs\Web\Controller {
$x = array(
'nickname' => $channel['channel_address'],
'item' => $itm[0],
'editor_autocomplete'=> true,
'bbco_autocomplete'=> 'bbcode',
'return_path' => $_SESSION['return_url'],

View File

@@ -100,24 +100,19 @@ class Editwebpage extends \Zotlabs\Web\Controller {
intval($owner)
);
if(! $itm) {
// don't allow web editing of potentially binary content (item_obscured = 1)
// @FIXME how do we do it instead?
if((! $itm) || intval($itm[0]['item_obscured'])) {
notice( t('Permission denied.') . EOL);
return;
}
if(intval($itm[0]['item_obscured'])) {
$key = get_config('system','prvkey');
if($itm[0]['title'])
$itm[0]['title'] = crypto_unencapsulate(json_decode($itm[0]['title'],true),$key);
if($itm[0]['body'])
$itm[0]['body'] = crypto_unencapsulate(json_decode($itm[0]['body'],true),$key);
}
$item_id = q("select * from iconfig where cat = 'system' and k = 'WEBPAGE' and iid = %d limit 1",
intval($itm[0]['id'])
);
if($item_id)
$page_title = $item_id[0]['v'];
$page_title = urldecode($item_id[0]['v']);
$mimetype = $itm[0]['mimetype'];
@@ -129,9 +124,11 @@ class Editwebpage extends \Zotlabs\Web\Controller {
}
$layout = $itm[0]['layout_mid'];
$tpl = get_markup_template("jot.tpl");
$content = $itm[0]['body'];
if($itm[0]['mimetype'] === 'text/markdown')
$content = \Zotlabs\Lib\MarkdownSoap::unescape($itm[0]['body']);
$rp = 'webpages/' . $which;
$x = array(
@@ -147,7 +144,7 @@ class Editwebpage extends \Zotlabs\Web\Controller {
'hide_location' => true,
'hide_voting' => true,
'ptyp' => $itm[0]['type'],
'body' => undo_post_tagging($itm[0]['body']),
'body' => undo_post_tagging($content),
'post_id' => $post_id,
'visitor' => ($is_owner) ? true : false,
'acl' => populate_acl($itm[0],false,\Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_pages')),

View File

@@ -92,6 +92,7 @@ class Embedphotos extends \Zotlabs\Web\Controller {
* It is a limitation of the photo table using a name for a photo album instead of a folder hash
*/
if($album) {
require_once('include/attach.php');
$x = q("select hash from attach where filename = '%s' and uid = %d limit 1",
dbesc($album),
intval($owner_uid)

View File

@@ -43,6 +43,10 @@ class Events extends \Zotlabs\Web\Controller {
$adjust = intval($_POST['adjust']);
$nofinish = intval($_POST['nofinish']);
$timezone = ((x($_POST,'timezone_select')) ? notags(trim($_POST['timezone_select'])) : '');
$tz = (($timezone) ? $timezone : date_default_timezone_get());
$categories = escape_tags(trim($_POST['category']));
// only allow editing your own events.
@@ -71,9 +75,9 @@ class Events extends \Zotlabs\Web\Controller {
if($adjust) {
$start = datetime_convert(date_default_timezone_get(),'UTC',$start);
$start = datetime_convert($tz,'UTC',$start);
if(! $nofinish)
$finish = datetime_convert(date_default_timezone_get(),'UTC',$finish);
$finish = datetime_convert($tz,'UTC',$finish);
}
else {
$start = datetime_convert('UTC','UTC',$start);
@@ -268,7 +272,7 @@ class Events extends \Zotlabs\Web\Controller {
return;
}
nav_set_selected('all_events');
nav_set_selected('Events');
if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) {
$r = q("update event set dismissed = 1 where id = %d and uid = %d",
@@ -374,11 +378,14 @@ class Events extends \Zotlabs\Web\Controller {
$event_xchan = ((x($orig_event)) ? $orig_event['event_xchan'] : $channel['channel_hash']);
$mid = ((x($orig_event)) ? $orig_event['mid'] : '');
if(! x($orig_event))
if(! x($orig_event)) {
$sh_checked = '';
else
$a_checked = ' checked="checked" ';
}
else {
$sh_checked = ((($orig_event['allow_cid'] === '<' . $channel['channel_hash'] . '>' || (! $orig_event['allow_cid'])) && (! $orig_event['allow_gid']) && (! $orig_event['deny_cid']) && (! $orig_event['deny_gid'])) ? '' : ' checked="checked" ' );
}
if($orig_event['event_xchan'])
$sh_checked .= ' disabled="disabled" ';
@@ -478,6 +485,8 @@ class Events extends \Zotlabs\Web\Controller {
'$allow_gid' => acl2json($permissions['allow_gid']),
'$deny_cid' => acl2json($permissions['deny_cid']),
'$deny_gid' => acl2json($permissions['deny_gid']),
'$tz_choose' => feature_enabled(local_channel(),'event_tz_select'),
'$timezone' => array('timezone_select' , t('Timezone:'), date_default_timezone_get(), '', get_timezones()),
'$lockstate' => (($acl->is_private()) ? 'lock' : 'unlock'),
@@ -625,14 +634,14 @@ class Events extends \Zotlabs\Web\Controller {
$drop = array(z_root().'/events/drop/'.$rr['event_hash'],t('Delete event'),'','');
$title = strip_tags(html_entity_decode(bbcode($rr['summary']),ENT_QUOTES,'UTF-8'));
$title = strip_tags(html_entity_decode(zidify_links(bbcode($rr['summary'])),ENT_QUOTES,'UTF-8'));
if(! $title) {
list($title, $_trash) = explode("<br",bbcode($rr['desc']),2);
$title = strip_tags(html_entity_decode($title,ENT_QUOTES,'UTF-8'));
}
$html = format_event_html($rr);
$rr['desc'] = bbcode($rr['desc']);
$rr['location'] = bbcode($rr['location']);
$rr['desc'] = zidify_links(smilies(bbcode($rr['desc'])));
$rr['location'] = zidify_links(smilies(bbcode($rr['location'])));
$events[] = array(
'id'=>$rr['id'],
'hash' => $rr['event_hash'],

View File

@@ -1,40 +1,41 @@
<?php
namespace Zotlabs\Module;
require_once('include/items.php');
class Feed extends \Zotlabs\Web\Controller {
function init() {
$params = array();
$params = [];
$params['begin'] = ((x($_REQUEST,'date_begin')) ? $_REQUEST['date_begin'] : NULL_DATE);
$params['end'] = ((x($_REQUEST,'date_end')) ? $_REQUEST['date_end'] : '');
$params['type'] = ((stristr(argv(0),'json')) ? 'json' : 'xml');
$params['pages'] = ((x($_REQUEST,'pages')) ? intval($_REQUEST['pages']) : 0);
$params['top'] = ((x($_REQUEST,'top')) ? intval($_REQUEST['top']) : 0);
$params['start'] = ((x($params,'start')) ? intval($params['start']) : 0);
$params['records'] = ((x($params,'records')) ? intval($params['records']) : 40);
$params['direction'] = ((x($params,'direction')) ? dbesc($params['direction']) : 'desc');
$params['cat'] = ((x($_REQUEST,'cat')) ? escape_tags($_REQUEST['cat']) : '');
$channel = '';
$params['begin'] = ((x($_REQUEST,'date_begin')) ? $_REQUEST['date_begin'] : NULL_DATE);
$params['end'] = ((x($_REQUEST,'date_end')) ? $_REQUEST['date_end'] : '');
$params['type'] = ((stristr(argv(0),'json')) ? 'json' : 'xml');
$params['pages'] = ((x($_REQUEST,'pages')) ? intval($_REQUEST['pages']) : 0);
$params['top'] = ((x($_REQUEST,'top')) ? intval($_REQUEST['top']) : 0);
$params['start'] = ((x($params,'start')) ? intval($params['start']) : 0);
$params['records'] = ((x($params,'records')) ? intval($params['records']) : 40);
$params['direction'] = ((x($params,'direction')) ? dbesc($params['direction']) : 'desc');
$params['cat'] = ((x($_REQUEST,'cat')) ? escape_tags($_REQUEST['cat']) : '');
$params['compat'] = ((x($_REQUEST,'compat')) ? intval($_REQUEST['compat']) : 0);
if(argc() > 1) {
$r = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_address = '%s' limit 1",
dbesc(argv(1))
);
if(!($r && count($r)))
if(observer_prohibited(true)) {
killme();
$channel = $r[0];
if(observer_prohibited(true))
}
$channel = channelx_by_nick(argv(1));
if(! $channel) {
killme();
}
logger('mod_feed: public feed request from ' . $_SERVER['REMOTE_ADDR'] . ' for ' . $channel['channel_address']);
logger('public feed request from ' . $_SERVER['REMOTE_ADDR'] . ' for ' . $channel['channel_address']);
echo get_public_feed($channel,$params);
@@ -43,6 +44,4 @@ class Feed extends \Zotlabs\Web\Controller {
}
}

View File

@@ -1,71 +0,0 @@
<?php
namespace Zotlabs\Module;
class Ffsapi extends \Zotlabs\Web\Controller {
function get() {
$baseurl = z_root();
$name = get_config('system','sitename');
$description = t('Share content from Firefox to $Projectname');
$author = 'Mike Macgirvin';
$homepage = 'http://hubzilla.org';
$activate = t('Activate the Firefox $Projectname provider');
$s = <<< EOT
<script>
var baseurl = '$baseurl';
var data = {
"origin": baseurl,
// currently required
"name": '$name',
"iconURL": baseurl+"/images/hz-16.png",
"icon32URL": baseurl+"/images/hz-32.png",
"icon64URL": baseurl+"/images/hz-64.png",
// at least one of these must be defined
// "workerURL": baseurl+"/worker.js",
// "sidebarURL": baseurl+"/sidebar.htm",
"shareURL": baseurl+"/rpost?f=&url=%{url}",
// status buttons are scheduled for Firefox 26 or 27
//"statusURL": baseurl+"/statusPanel.html",
// social bookmarks are available in Firefox 26
"markURL": baseurl+"/rbmark?f=&url=%{url}&title=%{title}",
// icons should be 32x32 pixels
// "markedIcon": baseurl+"/images/checkbox-checked-32.png",
// "unmarkedIcon": baseurl+"/images/checkbox-unchecked-32.png",
"unmarkedIcon": baseurl+"/images/hz-bookmark-32.png",
// should be available for display purposes
"description": "$description",
"author": "$author",
"homepageURL": "$homepage",
// optional
"version": "1.0"
}
function activate(node) {
var event = new CustomEvent("ActivateSocialFeature");
var jdata = JSON.stringify(data);
node.setAttribute("data-service", JSON.stringify(data));
node.dispatchEvent(event);
}
</script>
<button onclick="activate(this)" title="$activate" class="btn btn-primary">$activate</button>
EOT;
return $s;
}
}

View File

@@ -56,19 +56,21 @@ class Fhublocs extends \Zotlabs\Web\Controller {
// Create a verified hub location pointing to this site.
$h = q("insert into hubloc ( hubloc_guid, hubloc_guid_sig, hubloc_hash, hubloc_addr, hubloc_primary, hubloc_url, hubloc_url_sig, hubloc_host, hubloc_callback, hubloc_sitekey, hubloc_network )
values ( '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s' )",
dbesc($rr['channel_guid']),
dbesc($rr['channel_guid_sig']),
dbesc($rr['channel_hash']),
dbesc(channel_reddress($rr)),
intval($primary),
dbesc(z_root()),
dbesc(base64url_encode(rsa_sign(z_root(),$rr['channel_prvkey']))),
dbesc(\App::get_hostname()),
dbesc(z_root() . '/post'),
dbesc($sitekey),
dbesc('zot')
$h = hubloc_store_lowlevel(
[
'hubloc_guid' => $rr['channel_guid'],
'hubloc_guid_sig' => $rr['channel_guid_sig'],
'hubloc_hash' => $rr['channel_hash'],
'hubloc_addr' => channel_reddress($rr),
'hubloc_network' => 'zot',
'hubloc_primary' => $primary,
'hubloc_url' => z_root(),
'hubloc_url_sig' => base64url_encode(rsa_sign(z_root(),$rr['channel_prvkey'])),
'hubloc_host' => \App::get_hostname(),
'hubloc_callback' => z_root() . '/post',
'hubloc_sitekey' => $sitekey
]
);
if($h)

View File

@@ -28,15 +28,32 @@ class File_upload extends \Zotlabs\Web\Controller {
$_REQUEST['group_deny'] = expand_acl($channel['channel_deny_gid']);
}
$_REQUEST['allow_cid'] = perms2str($_REQUEST['contact_allow']);
$_REQUEST['allow_gid'] = perms2str($_REQUEST['group_allow']);
$_REQUEST['deny_cid'] = perms2str($_REQUEST['contact_deny']);
$_REQUEST['deny_gid'] = perms2str($_REQUEST['group_deny']);
if($_REQUEST['filename']) {
$_REQUEST['allow_cid'] = perms2str($_REQUEST['contact_allow']);
$_REQUEST['allow_gid'] = perms2str($_REQUEST['group_allow']);
$_REQUEST['deny_cid'] = perms2str($_REQUEST['contact_deny']);
$_REQUEST['deny_gid'] = perms2str($_REQUEST['group_deny']);
$r = attach_mkdir($channel,get_observer_hash(),$_REQUEST);
$r = attach_mkdir($channel, get_observer_hash(), $_REQUEST);
if($r['success']) {
$hash = $r['data']['hash'];
$sync = attach_export_data($channel,$hash);
if($sync) {
build_sync_packet($channel['channel_id'],array('file' => array($sync)));
}
goaway(z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path']);
}
}
else {
$r = attach_store($channel,get_observer_hash(), '', $_REQUEST);
$r = attach_store($channel, get_observer_hash(), '', $_REQUEST);
if($r['success']) {
$sync = attach_export_data($channel,$r['data']['hash']);
if($sync)
build_sync_packet($channel['channel_id'],array('file' => array($sync)));
}
}
goaway(z_root() . '/' . $_REQUEST['return_url']);

View File

@@ -49,8 +49,10 @@ class Filer extends \Zotlabs\Web\Controller {
}
$tpl = get_markup_template("filer_dialog.tpl");
$o = replace_macros($tpl, array(
'$field' => array('term', t("Save to Folder:"), '', '', $filetags, t('- select -')),
'$field' => array('term', t('Enter a folder name'), '', '', $filetags, 'placeholder="' . t('or select an existing folder (doubleclick)') . '"'),
'$submit' => t('Save'),
'$title' => t('Save to Folder'),
'$cancel' => t('Cancel')
));
echo $o;

View File

@@ -5,14 +5,6 @@ namespace Zotlabs\Module;
*
*/
require_once('include/attach.php');
/**
*
* @param object &$a
*/
class Filestorage extends \Zotlabs\Web\Controller {
function post() {
@@ -26,7 +18,7 @@ class Filestorage extends \Zotlabs\Web\Controller {
$recurse = ((x($_POST, 'recurse')) ? intval($_POST['recurse']) : 0);
$resource = ((x($_POST, 'filehash')) ? notags($_POST['filehash']) : '');
$notify = ((x($_POST, 'notify')) ? intval($_POST['notify']) : 0);
$notify = ((x($_POST, 'notify_edit')) ? intval($_POST['notify_edit']) : 0);
if(! $resource) {
notice(t('Item not found.') . EOL);
@@ -36,19 +28,19 @@ class Filestorage extends \Zotlabs\Web\Controller {
$channel = \App::get_channel();
$acl = new \Zotlabs\Access\AccessList($channel);
$acl->set_from_array($_REQUEST);
$acl->set_from_array($_POST);
$x = $acl->get();
$cloudPath = get_parent_cloudpath($channel_id, $channel['channel_address'], $resource);
$url = get_cloud_url($channel_id, $channel['channel_address'], $resource);
//get the object before permissions change so we can catch eventual former allowed members
$object = get_file_activity_object($channel_id, $resource, $cloudPath);
$object = get_file_activity_object($channel_id, $resource, $url);
attach_change_permissions($channel_id, $resource, $x['allow_cid'], $x['allow_gid'], $x['deny_cid'], $x['deny_gid'], $recurse, true);
file_activity($channel_id, $object, $x['allow_cid'], $x['allow_gid'], $x['deny_cid'], $x['deny_gid'], 'post', $notify);
goaway($cloudPath);
goaway(dirname($url));
}
function get() {
@@ -107,11 +99,11 @@ class Filestorage extends \Zotlabs\Web\Controller {
$f = $r[0];
$channel = \App::get_channel();
$parentpath = get_parent_cloudpath($channel['channel_id'], $channel['channel_address'], $f['hash']);
$url = get_cloud_url($channel['channel_id'], $channel['channel_address'], $f['hash']);
attach_delete($owner, $f['hash']);
goaway($parentpath);
goaway(dirname($url));
}
if(argc() > 3 && argv(3) === 'edit') {
@@ -130,8 +122,7 @@ class Filestorage extends \Zotlabs\Web\Controller {
$f = $r[0];
$channel = \App::get_channel();
$cloudpath = get_cloudpath($f) . (intval($f['is_dir']) ? '?f=&davguest=1' : '');
$parentpath = get_parent_cloudpath($channel['channel_id'], $channel['channel_address'], $f['hash']);
$cloudpath = get_cloudpath($f);
$aclselect_e = populate_acl($f, false, \Zotlabs\Lib\PermissionDescription::fromGlobalPermission('view_storage'));
$is_a_dir = (intval($f['is_dir']) ? true : false);
@@ -146,7 +137,6 @@ class Filestorage extends \Zotlabs\Web\Controller {
'$header' => t('Edit file permissions'),
'$file' => $f,
'$cloudpath' => z_root() . '/' . $encoded_path,
'$parentpath' => $parentpath,
'$uid' => $channel['channel_id'],
'$channelnick' => $channel['channel_address'],
'$permissions' => t('Permissions'),
@@ -165,7 +155,7 @@ class Filestorage extends \Zotlabs\Web\Controller {
'$submit' => t('Submit'),
'$attach_btn_title' => t('Share this file'),
'$link_btn_title' => t('Show URL to this file'),
'$notify' => array('notify', t('Notify your contacts about this file'), 0, '', array(t('No'), t('Yes'))),
'$notify' => array('notify_edit', t('Show in your contacts shared folder'), 0, '', array(t('No'), t('Yes'))),
));
echo $o;

View File

@@ -35,6 +35,7 @@ class Getfile extends \Zotlabs\Web\Controller {
$sig = $_POST['signature'];
$resource = $_POST['resource'];
$revision = intval($_POST['revision']);
$resolution = (-1);
if(! $hash)
killme();
@@ -46,6 +47,11 @@ class Getfile extends \Zotlabs\Web\Controller {
killme();
}
if(substr($resource,-2,1) == '-') {
$resolution = intval(substr($resource,-1,1));
$resource = substr($resource,0,-2);
}
$slop = intval(get_pconfig($channel['channel_id'],'system','getfile_time_slop'));
if($slop < 1)
$slop = 3;
@@ -63,6 +69,35 @@ class Getfile extends \Zotlabs\Web\Controller {
killme();
}
if($resolution > 0) {
$r = q("select * from photo where resource_id = '%s' and uid = %d limit 1",
dbesc($resource),
intval($channel['channel_id'])
);
if($r) {
header('Content-type: ' . $r[0]['mimetype']);
if(intval($r[0]['os_storage'])) {
$fname = dbunescbin($r[0]['content']);
if(strpos($fname,'store') !== false)
$istream = fopen($fname,'rb');
else
$istream = fopen('store/' . $channel['channel_address'] . '/' . $fname,'rb');
$ostream = fopen('php://output','wb');
if($istream && $ostream) {
pipe_streams($istream,$ostream);
fclose($istream);
fclose($ostream);
}
}
else {
echo dbunescbin($r[0]['content']);
}
}
killme();
}
$r = attach_by_hash($resource,$channel['channel_hash'],$revision);
if(! $r['success']) {
@@ -73,7 +108,7 @@ class Getfile extends \Zotlabs\Web\Controller {
$unsafe_types = array('text/html','text/css','application/javascript');
if(in_array($r['data']['filetype'],$unsafe_types)) {
if(in_array($r['data']['filetype'],$unsafe_types) && (! channel_codeallowed($channel['channel_id']))) {
header('Content-type: text/plain');
}
else {

View File

@@ -56,6 +56,7 @@ class Group extends \Zotlabs\Web\Controller {
);
if($r)
info( t('Privacy group updated.') . EOL );
build_sync_packet(local_channel(),null,true);
}
goaway(z_root() . '/group/' . argv(1) . '/' . argv(2));
@@ -63,7 +64,8 @@ class Group extends \Zotlabs\Web\Controller {
return;
}
function get() {
function get() {
$change = false;
logger('mod_group: ' . \App::$cmd,LOGGER_DEBUG);

View File

@@ -14,6 +14,8 @@ class Hcard extends \Zotlabs\Web\Controller {
return;
}
logger('hcard_request: ' . $which, LOGGER_DEBUG);
$profile = '';
$channel = \App::get_channel();
@@ -29,7 +31,20 @@ class Hcard extends \Zotlabs\Web\Controller {
$profile = $r[0]['profile_guid'];
}
\App::$page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . z_root() . '/feed/' . $which .'" />' . "\r\n" ;
head_add_link( [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'title' => t('Posts and comments'),
'href' => z_root() . '/feed/' . $which
]);
head_add_link( [
'rel' => 'alternate',
'type' => 'application/atom+xml',
'title' => t('Only posts'),
'href' => z_root() . '/feed/' . $which . '?f=&top=1'
]);
if(! $profile) {
$x = q("select channel_id as profile_uid from channel where channel_address = '%s' limit 1",
@@ -46,12 +61,10 @@ class Hcard extends \Zotlabs\Web\Controller {
}
function get() {
require_once('include/widgets.php');
return widget_profile(array());
function get() {
$x = new \Zotlabs\Widget\Profile();
return $x->widget(array());
}

View File

@@ -15,7 +15,7 @@ require_once('include/help.php');
class Help extends \Zotlabs\Web\Controller {
function get() {
nav_set_selected('help');
nav_set_selected('Help');
if($_REQUEST['search']) {
$o .= '<div id="help-content" class="generic-content-wrapper">';
@@ -44,42 +44,42 @@ class Help extends \Zotlabs\Web\Controller {
return $o;
}
if(argc() > 2 && argv(argc()-2) === 'assets') {
$path = '';
for($x = 1; $x < argc(); $x ++) {
if(strlen($path))
$path .= '/';
$path .= argv($x);
}
$realpath = 'doc/' . $path;
//Set the content-type header as appropriate
$imageInfo = getimagesize($realpath);
switch ($imageInfo[2]) {
case IMAGETYPE_JPEG:
header("Content-Type: image/jpeg");
break;
case IMAGETYPE_GIF:
header("Content-Type: image/gif");
break;
case IMAGETYPE_PNG:
header("Content-Type: image/png");
break;
default:
break;
}
header("Content-Length: " . filesize($realpath));
if(argc() > 2 && argv(argc()-2) === 'assets') {
$path = '';
for($x = 1; $x < argc(); $x ++) {
if(strlen($path))
$path .= '/';
$path .= argv($x);
}
$realpath = 'doc/' . $path;
//Set the content-type header as appropriate
$imageInfo = getimagesize($realpath);
switch ($imageInfo[2]) {
case IMAGETYPE_JPEG:
header("Content-Type: image/jpeg");
break;
case IMAGETYPE_GIF:
header("Content-Type: image/gif");
break;
case IMAGETYPE_PNG:
header("Content-Type: image/png");
break;
default:
break;
}
header("Content-Length: " . filesize($realpath));
// dump the picture and stop the script
readfile($realpath);
killme();
}
// dump the picture and stop the script
readfile($realpath);
killme();
}
$headings = [
'about' => t('About'),
'member' => t('Members'),
'admin' => t('Administrators'),
'about' => t('About'),
'member' => t('Members'),
'admin' => t('Administrators'),
'developer' => t('Developers'),
'tutorials' => t('Tutorials')
];
@@ -87,13 +87,16 @@ class Help extends \Zotlabs\Web\Controller {
if(array_key_exists(argv(1), $headings))
$heading = $headings[argv(1)];
$content = get_help_content();
$content = get_help_content();
$language = determine_help_language()['language'];
return replace_macros(get_markup_template('help.tpl'), array(
'$title' => t('$Projectname Documentation'),
'$title' => t('$Projectname Documentation'),
'$tocHeading' => t('Contents'),
'$content' => $content,
'$heading' => $heading
'$content' => $content,
'$heading' => $heading,
'$language' => $language
));
}

View File

@@ -5,6 +5,7 @@ namespace Zotlabs\Module;
class Hostxrd extends \Zotlabs\Web\Controller {
function init() {
session_write_close();
header('Access-Control-Allow-Origin: *');
header("Content-type: application/xrd+xml");
logger('hostxrd',LOGGER_DEBUG);

View File

@@ -144,18 +144,8 @@ class Impel extends \Zotlabs\Web\Controller {
// Verify ability to use html or php!!!
$execflag = false;
if($arr['mimetype'] === 'application/x-php') {
$z = q("select account_id, account_roles, channel_pageflags from account left join channel on channel_account_id = account_id where channel_id = %d limit 1",
intval(local_channel())
);
if($z && (($z[0]['account_roles'] & ACCOUNT_ROLE_ALLOWCODE) || ($z[0]['channel_pageflags'] & PAGE_ALLOWCODE))) {
$execflag = true;
}
}
$execflag = ((intval($channel['channel_id']) == intval(local_channel()) && ($channel['channel_pageflags'] & PAGE_ALLOWCODE)) ? true : false);
$i = q("select id, edited, item_deleted from item where mid = '%s' and uid = %d limit 1",
dbesc($arr['mid']),
intval(local_channel())

View File

@@ -1,80 +1,76 @@
<?php
namespace Zotlabs\Module;
// Import a channel, either by direct file upload or via
// connection to original server.
require_once('include/zot.php');
require_once('include/channel.php');
require_once('include/import.php');
require_once('include/perm_upgrade.php');
/**
* @brief Module for channel import.
*
* Import a channel, either by direct file upload or via
* connection to another server.
*/
class Import extends \Zotlabs\Web\Controller {
/**
* @brief Import channel into account.
*
* @param int $account_id
*/
function import_account($account_id) {
if(! $account_id){
logger("import_account: No account ID supplied");
logger('No account ID supplied');
return;
}
$max_identities = account_service_class_fetch($account_id,'total_identities');
$max_friends = account_service_class_fetch($account_id,'total_channels');
$max_feeds = account_service_class_fetch($account_id,'total_feeds');
if($max_identities !== false) {
$r = q("select channel_id from channel where channel_account_id = %d",
intval($account_id)
);
if($r && count($r) > $max_identities) {
notice( sprintf( t('Your service plan only allows %d channels.'), $max_identities) . EOL);
return;
}
}
$data = null;
$seize = ((x($_REQUEST,'make_primary')) ? intval($_REQUEST['make_primary']) : 0);
$import_posts = ((x($_REQUEST,'import_posts')) ? intval($_REQUEST['import_posts']) : 0);
$src = $_FILES['filename']['tmp_name'];
$filename = basename($_FILES['filename']['name']);
$filesize = intval($_FILES['filename']['size']);
$filetype = $_FILES['filename']['type'];
$completed = ((array_key_exists('import_step',$_SESSION)) ? intval($_SESSION['import_step']) : 0);
if($completed)
logger('saved import step: ' . $_SESSION['import_step']);
$max_friends = account_service_class_fetch($account_id,'total_channels');
$max_feeds = account_service_class_fetch($account_id,'total_feeds');
$data = null;
$seize = ((x($_REQUEST,'make_primary')) ? intval($_REQUEST['make_primary']) : 0);
$import_posts = ((x($_REQUEST,'import_posts')) ? intval($_REQUEST['import_posts']) : 0);
$moving = intval($_REQUEST['moving']);
$src = $_FILES['filename']['tmp_name'];
$filename = basename($_FILES['filename']['name']);
$filesize = intval($_FILES['filename']['size']);
$filetype = $_FILES['filename']['type'];
// import channel from file
if($src) {
// This is OS specific and could also fail if your tmpdir isn't very large
// mostly used for Diaspora which exports gzipped files.
// This is OS specific and could also fail if your tmpdir isn't very
// large mostly used for Diaspora which exports gzipped files.
if(strpos($filename,'.gz')){
@rename($src,$src . '.gz');
@system('gunzip ' . escapeshellarg($src . '.gz'));
}
if($filesize) {
$data = @file_get_contents($src);
}
unlink($src);
}
// import channel from another server
if(! $src) {
$old_address = ((x($_REQUEST,'old_address')) ? $_REQUEST['old_address'] : '');
if(! $old_address) {
logger('mod_import: nothing to import.');
logger('Nothing to import.');
notice( t('Nothing to import.') . EOL);
return;
} else if(strpos($old_address, '')) {
// if you copy the identity address from your profile page, make it work for convenience
$old_address = str_replace('', '@', $old_address);
}
$email = ((x($_REQUEST,'email')) ? $_REQUEST['email'] : '');
$password = ((x($_REQUEST,'password')) ? $_REQUEST['password'] : '');
$channelname = substr($old_address,0,strpos($old_address,'@'));
$servername = substr($old_address,strpos($old_address,'@')+1);
@@ -87,6 +83,7 @@ class Import extends \Zotlabs\Web\Controller {
$api_path .= 'channel/export/basic?f=&channel=' . $channelname;
if($import_posts)
$api_path .= '&posts=1';
$binary = false;
$redirects = 0;
$opts = array('http_auth' => $email . ':' . $password);
@@ -99,217 +96,205 @@ class Import extends \Zotlabs\Web\Controller {
return;
}
}
if(! $data) {
logger('mod_import: empty file.');
logger('Empty import file.');
notice( t('Imported file is empty.') . EOL);
return;
}
$data = json_decode($data,true);
// logger('import: data: ' . print_r($data,true));
// print_r($data);
if(array_key_exists('user',$data) && array_key_exists('version',$data)) {
require_once('include/Import/import_diaspora.php');
import_diaspora($data);
return;
//logger('import: data: ' . print_r($data,true));
//print_r($data);
if(! array_key_exists('compatibility',$data)) {
call_hooks('import_foreign_channel_data',$data);
if($data['handled'])
return;
}
$moving = false;
if(array_key_exists('compatibility',$data) && array_key_exists('database',$data['compatibility'])) {
$v1 = substr($data['compatibility']['database'],-4);
$v2 = substr(DB_UPDATE_VERSION,-4);
if($v2 > $v1) {
$t = sprintf( t('Warning: Database versions differ by %1$d updates.'), $v2 - $v1 );
$t = sprintf( t('Warning: Database versions differ by %1$d updates.'), $v2 - $v1 );
notice($t);
}
if(array_key_exists('server_role',$data['compatibility']) && $data['compatibility']['server_role'] == 'basic')
$moving = true;
}
if($moving)
$seize = 1;
// import channel
$relocate = ((array_key_exists('relocate',$data)) ? $data['relocate'] : null);
if(array_key_exists('channel',$data)) {
if($completed < 1) {
$channel = import_channel($data['channel'], $account_id, $seize);
}
else {
$r = q("select * from channel where channel_account_id = %d and channel_guid = '%s' limit 1",
intval($account_id),
dbesc($channel['channel_guid'])
$max_identities = account_service_class_fetch($account_id,'total_identities');
if($max_identities !== false) {
$r = q("select channel_id from channel where channel_account_id = %d",
intval($account_id)
);
if($r)
$channel = $r[0];
}
if(! $channel) {
logger('mod_import: channel not found. ', print_r($channel,true));
notice( t('Cloned channel not found. Import failed.') . EOL);
return;
if($r && count($r) > $max_identities) {
notice( sprintf( t('Your service plan only allows %d channels.'), $max_identities) . EOL);
return;
}
}
$channel = import_channel($data['channel'], $account_id, $seize);
}
if(! $channel)
else {
$moving = false;
$channel = \App::get_channel();
}
if(! $channel) {
logger('mod_import: channel not found. ', print_r($channel,true));
logger('Channel not found. ', print_r($channel,true));
notice( t('No channel. Import failed.') . EOL);
return;
}
if($completed < 2) {
if(is_array($data['config'])) {
import_config($channel,$data['config']);
}
logger('import step 2');
$_SESSION['import_step'] = 2;
if(is_array($data['config'])) {
import_config($channel,$data['config']);
}
if($completed < 3) {
logger('import step 2');
if(array_key_exists('channel',$data)) {
if($data['photo']) {
require_once('include/photo/photo_driver.php');
import_channel_photo(base64url_decode($data['photo']['data']),$data['photo']['type'],$account_id,$channel['channel_id']);
}
if(is_array($data['profile']))
import_profiles($channel,$data['profile']);
logger('import step 3');
$_SESSION['import_step'] = 3;
}
if($completed < 4) {
if(is_array($data['hubloc']) && (! $moving)) {
import_hublocs($channel,$data['hubloc'],$seize);
}
logger('import step 4');
$_SESSION['import_step'] = 4;
logger('import step 3');
if(is_array($data['hubloc'])) {
import_hublocs($channel,$data['hubloc'],$seize,$moving);
}
if($completed < 5) {
// create new hubloc for the new channel at this site
$r = q("insert into hubloc ( hubloc_guid, hubloc_guid_sig, hubloc_hash, hubloc_addr, hubloc_network, hubloc_primary,
hubloc_url, hubloc_url_sig, hubloc_host, hubloc_callback, hubloc_sitekey )
values ( '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s' )",
dbesc($channel['channel_guid']),
dbesc($channel['channel_guid_sig']),
dbesc($channel['channel_hash']),
dbesc(channel_reddress($channel)),
dbesc('zot'),
intval(($seize) ? 1 : 0),
dbesc(z_root()),
dbesc(base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey']))),
dbesc(\App::get_hostname()),
dbesc(z_root() . '/post'),
dbesc(get_config('system','pubkey'))
logger('import step 4');
// create new hubloc for the new channel at this site
if(array_key_exists('channel',$data)) {
$r = hubloc_store_lowlevel(
[
'hubloc_guid' => $channel['channel_guid'],
'hubloc_guid_sig' => $channel['channel_guid_sig'],
'hubloc_hash' => $channel['channel_hash'],
'hubloc_addr' => channel_reddress($channel),
'hubloc_network' => 'zot',
'hubloc_primary' => (($seize) ? 1 : 0),
'hubloc_url' => z_root(),
'hubloc_url_sig' => base64url_encode(rsa_sign(z_root(),$channel['channel_prvkey'])),
'hubloc_host' => \App::get_hostname(),
'hubloc_callback' => z_root() . '/post',
'hubloc_sitekey' => get_config('system','pubkey'),
'hubloc_updated' => datetime_convert()
]
);
// reset the original primary hubloc if it is being seized
if($seize) {
$r = q("update hubloc set hubloc_primary = 0 where hubloc_primary = 1 and hubloc_hash = '%s' and hubloc_url != '%s' ",
dbesc($channel['channel_hash']),
dbesc(z_root())
);
}
logger('import step 5');
$_SESSION['import_step'] = 5;
}
if($completed < 6) {
// import xchans and contact photos
if($seize) {
// replace any existing xchan we may have on this site if we're seizing control
$r = q("delete from xchan where xchan_hash = '%s'",
dbesc($channel['channel_hash'])
);
$r = q("insert into xchan ( xchan_hash, xchan_guid, xchan_guid_sig, xchan_pubkey, xchan_photo_l, xchan_photo_m, xchan_photo_s, xchan_addr, xchan_url, xchan_follow, xchan_connurl, xchan_name, xchan_network, xchan_photo_date, xchan_name_date, xchan_hidden, xchan_orphan, xchan_censored, xchan_selfcensored, xchan_system, xchan_pubforum, xchan_deleted ) values ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, %d, %d, %d )",
dbesc($channel['channel_hash']),
dbesc($channel['channel_guid']),
dbesc($channel['channel_guid_sig']),
dbesc($channel['channel_pubkey']),
dbesc(z_root() . "/photo/profile/l/" . $channel['channel_id']),
dbesc(z_root() . "/photo/profile/m/" . $channel['channel_id']),
dbesc(z_root() . "/photo/profile/s/" . $channel['channel_id']),
dbesc(channel_reddress($channel)),
dbesc(z_root() . '/channel/' . $channel['channel_address']),
dbesc(z_root() . '/follow?f=&url=%s'),
dbesc(z_root() . '/poco/' . $channel['channel_address']),
dbesc($channel['channel_name']),
dbesc('zot'),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
0,0,0,0,0,0,0
);
}
logger('import step 6');
$_SESSION['import_step'] = 6;
logger('import step 5');
// import xchans and contact photos
if(array_key_exists('channel',$data) && $seize) {
// replace any existing xchan we may have on this site if we're seizing control
$r = q("delete from xchan where xchan_hash = '%s'",
dbesc($channel['channel_hash'])
);
$r = xchan_store_lowlevel(
[
'xchan_hash' => $channel['channel_hash'],
'xchan_guid' => $channel['channel_guid'],
'xchan_guid_sig' => $channel['channel_guid_sig'],
'xchan_pubkey' => $channel['channel_pubkey'],
'xchan_photo_l' => z_root() . "/photo/profile/l/" . $channel['channel_id'],
'xchan_photo_m' => z_root() . "/photo/profile/m/" . $channel['channel_id'],
'xchan_photo_s' => z_root() . "/photo/profile/s/" . $channel['channel_id'],
'xchan_addr' => channel_reddress($channel),
'xchan_url' => z_root() . '/channel/' . $channel['channel_address'],
'xchan_connurl' => z_root() . '/poco/' . $channel['channel_address'],
'xchan_follow' => z_root() . '/follow?f=&url=%s',
'xchan_name' => $channel['channel_name'],
'xchan_network' => 'zot',
'xchan_photo_date' => datetime_convert(),
'xchan_name_date' => datetime_convert()
]
);
}
if($completed < 7) {
$xchans = $data['xchan'];
if($xchans) {
foreach($xchans as $xchan) {
$hash = make_xchan_hash($xchan['xchan_guid'],$xchan['xchan_guid_sig']);
if($xchan['xchan_network'] === 'zot' && $hash !== $xchan['xchan_hash']) {
logger('forged xchan: ' . print_r($xchan,true));
continue;
}
if(! array_key_exists('xchan_hidden',$xchan)) {
$xchan['xchan_hidden'] = (($xchan['xchan_flags'] & 0x0001) ? 1 : 0);
$xchan['xchan_orphan'] = (($xchan['xchan_flags'] & 0x0002) ? 1 : 0);
$xchan['xchan_censored'] = (($xchan['xchan_flags'] & 0x0004) ? 1 : 0);
$xchan['xchan_selfcensored'] = (($xchan['xchan_flags'] & 0x0008) ? 1 : 0);
$xchan['xchan_system'] = (($xchan['xchan_flags'] & 0x0010) ? 1 : 0);
$xchan['xchan_pubforum'] = (($xchan['xchan_flags'] & 0x0020) ? 1 : 0);
$xchan['xchan_deleted'] = (($xchan['xchan_flags'] & 0x1000) ? 1 : 0);
}
$r = q("select xchan_hash from xchan where xchan_hash = '%s' limit 1",
logger('import step 6');
// import xchans
$xchans = $data['xchan'];
if($xchans) {
foreach($xchans as $xchan) {
$hash = make_xchan_hash($xchan['xchan_guid'],$xchan['xchan_guid_sig']);
if($xchan['xchan_network'] === 'zot' && $hash !== $xchan['xchan_hash']) {
logger('forged xchan: ' . print_r($xchan,true));
continue;
}
if(! array_key_exists('xchan_hidden',$xchan)) {
$xchan['xchan_hidden'] = (($xchan['xchan_flags'] & 0x0001) ? 1 : 0);
$xchan['xchan_orphan'] = (($xchan['xchan_flags'] & 0x0002) ? 1 : 0);
$xchan['xchan_censored'] = (($xchan['xchan_flags'] & 0x0004) ? 1 : 0);
$xchan['xchan_selfcensored'] = (($xchan['xchan_flags'] & 0x0008) ? 1 : 0);
$xchan['xchan_system'] = (($xchan['xchan_flags'] & 0x0010) ? 1 : 0);
$xchan['xchan_pubforum'] = (($xchan['xchan_flags'] & 0x0020) ? 1 : 0);
$xchan['xchan_deleted'] = (($xchan['xchan_flags'] & 0x1000) ? 1 : 0);
}
$r = q("select xchan_hash from xchan where xchan_hash = '%s' limit 1",
dbesc($xchan['xchan_hash'])
);
if($r)
continue;
create_table_from_array('xchan',$xchan);
require_once('include/photo/photo_driver.php');
if($xchan['xchan_hash'] === $channel['channel_hash']) {
$r = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s' where xchan_hash = '%s'",
dbesc(z_root() . '/photo/profile/l/' . $channel['channel_id']),
dbesc(z_root() . '/photo/profile/m/' . $channel['channel_id']),
dbesc(z_root() . '/photo/profile/s/' . $channel['channel_id']),
dbesc($xchan['xchan_hash'])
);
if($r)
continue;
create_table_from_array('xchan',$xchan);
require_once('include/photo/photo_driver.php');
}
else {
$photos = import_xchan_photo($xchan['xchan_photo_l'],$xchan['xchan_hash']);
if($photos[4])
$photodate = NULL_DATE;
else
$photodate = $xchan['xchan_photo_date'];
$r = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s', xchan_photo_date = '%s'
where xchan_hash = '%s'",
$r = q("update xchan set xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s', xchan_photo_date = '%s' where xchan_hash = '%s'",
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),
@@ -317,215 +302,214 @@ class Import extends \Zotlabs\Web\Controller {
dbesc($photodate),
dbesc($xchan['xchan_hash'])
);
}
}
logger('import step 7');
$_SESSION['import_step'] = 7;
}
// FIXME - ensure we have an xchan if somebody is trying to pull a fast one
if($completed < 8) {
$friends = 0;
$feeds = 0;
// import contacts
$abooks = $data['abook'];
if($abooks) {
foreach($abooks as $abook) {
$abook_copy = $abook;
$abconfig = null;
if(array_key_exists('abconfig',$abook) && is_array($abook['abconfig']) && count($abook['abconfig']))
$abconfig = $abook['abconfig'];
unset($abook['abook_id']);
unset($abook['abook_rating']);
unset($abook['abook_rating_text']);
unset($abook['abconfig']);
unset($abook['abook_their_perms']);
unset($abook['abook_my_perms']);
$friends = 0;
$feeds = 0;
$abook['abook_account'] = $account_id;
$abook['abook_channel'] = $channel['channel_id'];
if(! array_key_exists('abook_blocked',$abook)) {
$abook['abook_blocked'] = (($abook['abook_flags'] & 0x0001 ) ? 1 : 0);
$abook['abook_ignored'] = (($abook['abook_flags'] & 0x0002 ) ? 1 : 0);
$abook['abook_hidden'] = (($abook['abook_flags'] & 0x0004 ) ? 1 : 0);
$abook['abook_archived'] = (($abook['abook_flags'] & 0x0008 ) ? 1 : 0);
$abook['abook_pending'] = (($abook['abook_flags'] & 0x0010 ) ? 1 : 0);
$abook['abook_unconnected'] = (($abook['abook_flags'] & 0x0020 ) ? 1 : 0);
$abook['abook_self'] = (($abook['abook_flags'] & 0x0080 ) ? 1 : 0);
$abook['abook_feed'] = (($abook['abook_flags'] & 0x0100 ) ? 1 : 0);
}
if($abook['abook_self']) {
$role = get_pconfig($channel['channel_id'],'system','permissions_role');
if(($role === 'forum') || ($abook['abook_my_perms'] & PERMS_W_TAGWALL)) {
q("update xchan set xchan_pubforum = 1 where xchan_hash = '%s' ",
dbesc($abook['abook_xchan'])
);
}
}
else {
if($max_friends !== false && $friends > $max_friends)
continue;
if($max_feeds !== false && intval($abook['abook_feed']) && ($feeds > $max_feeds))
continue;
}
create_table_from_array('abook',$abook);
// import contacts
$abooks = $data['abook'];
if($abooks) {
foreach($abooks as $abook) {
$friends ++;
if(intval($abook['abook_feed']))
$feeds ++;
$abook_copy = $abook;
translate_abook_perms_inbound($channel,$abook_copy);
if($abconfig) {
// @fixme does not handle sync of del_abconfig
foreach($abconfig as $abc) {
set_abconfig($channel['channel_id'],$abc['xchan'],$abc['cat'],$abc['k'],$abc['v']);
}
}
$abconfig = null;
if(array_key_exists('abconfig',$abook) && is_array($abook['abconfig']) && count($abook['abconfig']))
$abconfig = $abook['abconfig'];
unset($abook['abook_id']);
unset($abook['abook_rating']);
unset($abook['abook_rating_text']);
unset($abook['abconfig']);
unset($abook['abook_their_perms']);
unset($abook['abook_my_perms']);
unset($abook['abook_not_here']);
$abook['abook_account'] = $account_id;
$abook['abook_channel'] = $channel['channel_id'];
if(! array_key_exists('abook_blocked',$abook)) {
$abook['abook_blocked'] = (($abook['abook_flags'] & 0x0001 ) ? 1 : 0);
$abook['abook_ignored'] = (($abook['abook_flags'] & 0x0002 ) ? 1 : 0);
$abook['abook_hidden'] = (($abook['abook_flags'] & 0x0004 ) ? 1 : 0);
$abook['abook_archived'] = (($abook['abook_flags'] & 0x0008 ) ? 1 : 0);
$abook['abook_pending'] = (($abook['abook_flags'] & 0x0010 ) ? 1 : 0);
$abook['abook_unconnected'] = (($abook['abook_flags'] & 0x0020 ) ? 1 : 0);
$abook['abook_self'] = (($abook['abook_flags'] & 0x0080 ) ? 1 : 0);
$abook['abook_feed'] = (($abook['abook_flags'] & 0x0100 ) ? 1 : 0);
}
}
logger('import step 8');
$_SESSION['import_step'] = 8;
}
if($completed < 9) {
$groups = $data['group'];
if($groups) {
$saved = array();
foreach($groups as $group) {
$saved[$group['hash']] = array('old' => $group['id']);
if(array_key_exists('name',$group)) {
$group['gname'] = $group['name'];
unset($group['name']);
}
unset($group['id']);
$group['uid'] = $channel['channel_id'];
create_table_from_array('groups',$group);
}
$r = q("select * from groups where uid = %d",
intval($channel['channel_id'])
);
if($r) {
foreach($r as $rr) {
$saved[$rr['hash']]['new'] = $rr['id'];
}
if(array_key_exists('abook_instance',$abook) && $abook['abook_instance'] && strpos($abook['abook_instance'],z_root()) === false) {
$abook['abook_not_here'] = 1;
}
}
$group_members = $data['group_member'];
if($group_members) {
foreach($group_members as $group_member) {
unset($group_member['id']);
$group_member['uid'] = $channel['channel_id'];
foreach($saved as $x) {
if($x['old'] == $group_member['gid'])
$group_member['gid'] = $x['new'];
if($abook['abook_self']) {
$role = get_pconfig($channel['channel_id'],'system','permissions_role');
if(($role === 'forum') || ($abook['abook_my_perms'] & PERMS_W_TAGWALL)) {
q("update xchan set xchan_pubforum = 1 where xchan_hash = '%s' ",
dbesc($abook['abook_xchan'])
);
}
}
else {
if($max_friends !== false && $friends > $max_friends)
continue;
if($max_feeds !== false && intval($abook['abook_feed']) && ($feeds > $max_feeds))
continue;
}
abook_store_lowlevel($abook);
$friends ++;
if(intval($abook['abook_feed']))
$feeds ++;
translate_abook_perms_inbound($channel,$abook_copy);
if($abconfig) {
/// @FIXME does not handle sync of del_abconfig
foreach($abconfig as $abc) {
set_abconfig($channel['channel_id'],$abc['xchan'],$abc['cat'],$abc['k'],$abc['v']);
}
create_table_from_array('group_member',$group_member);
}
}
logger('import step 9');
$_SESSION['import_step'] = 9;
logger('import step 8');
}
// import groups
$groups = $data['group'];
if($groups) {
$saved = array();
foreach($groups as $group) {
$saved[$group['hash']] = array('old' => $group['id']);
if(array_key_exists('name', $group)) {
$group['gname'] = $group['name'];
unset($group['name']);
}
unset($group['id']);
$group['uid'] = $channel['channel_id'];
create_table_from_array('groups', $group);
}
$r = q("select * from groups where uid = %d",
intval($channel['channel_id'])
);
if($r) {
foreach($r as $rr) {
$saved[$rr['hash']]['new'] = $rr['id'];
}
}
}
// import group members
$group_members = $data['group_member'];
if($group_members) {
foreach($group_members as $group_member) {
unset($group_member['id']);
$group_member['uid'] = $channel['channel_id'];
foreach($saved as $x) {
if($x['old'] == $group_member['gid'])
$group_member['gid'] = $x['new'];
}
create_table_from_array('group_member', $group_member);
}
}
logger('import step 9');
if(is_array($data['obj']))
import_objs($channel,$data['obj']);
if(is_array($data['likes']))
import_likes($channel,$data['likes']);
if(is_array($data['app']))
import_apps($channel,$data['app']);
if(is_array($data['chatroom']))
import_chatrooms($channel,$data['chatroom']);
if(is_array($data['conv']))
import_conv($channel,$data['conv']);
if(is_array($data['mail']))
import_mail($channel,$data['mail']);
if(is_array($data['event']))
import_events($channel,$data['event']);
if(is_array($data['event_item']))
import_items($channel,$data['event_item'],false,$relocate);
if(is_array($data['menu']))
import_menus($channel,$data['menu']);
if(is_array($data['wiki']))
import_items($channel,$data['wiki'],false,$relocate);
if(is_array($data['webpages']))
import_items($channel,$data['webpages'],false,$relocate);
$addon = array('channel' => $channel,'data' => $data);
call_hooks('import_channel',$addon);
$saved_notification_flags = notifications_off($channel['channel_id']);
if($import_posts && array_key_exists('item',$data) && $data['item'])
import_items($channel,$data['item'],false,$relocate);
notifications_on($channel['channel_id'],$saved_notification_flags);
if(array_key_exists('item_id',$data) && $data['item_id'])
import_item_ids($channel,$data['item_id']);
// FIXME - ensure we have a self entry if somebody is trying to pull a fast one
// send out refresh requests
// notify old server that it may no longer be primary.
\Zotlabs\Daemon\Master::Summon(array('Notifier','location',$channel['channel_id']));
// This will indirectly perform a refresh_all *and* update the directory
\Zotlabs\Daemon\Master::Summon(array('Directory', $channel['channel_id']));
notice( t('Import completed.') . EOL);
change_channel($channel['channel_id']);
unset($_SESSION['import_step']);
goaway(z_root() . '/network' );
}
/**
* @brief Handle POST action on channel import page.
*/
function post() {
$account_id = get_account_id();
if(! $account_id)
return;
check_form_security_token_redirectOnErr('/import', 'channel_import');
$this->import_account($account_id);
}
/**
* @brief Generate channel import page.
*
* @return string with parsed HTML.
*/
function get() {
if(! get_account_id()) {
notice( t('You must be logged in to use this feature.'));
notice( t('You must be logged in to use this feature.') . EOL);
return '';
}
$o = replace_macros(get_markup_template('channel_import.tpl'),array(
'$title' => t('Import Channel'),
'$desc' => t('Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file.'),
@@ -536,15 +520,16 @@ class Import extends \Zotlabs\Web\Controller {
'$label_old_pass' => t('Your old login password'),
'$common' => t('For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media.'),
'$label_import_primary' => t('Make this hub my primary location'),
'$label_import_posts' => t('Import existing posts if possible (experimental - limited by available memory'),
'$pleasewait' => t('This process may take several minutes to complete. Please submit the form only once and leave this page open until finished.'),
'$label_import_moving' => t('Move this channel (disable all previous locations)'),
'$label_import_posts' => t('Import a few months of posts if possible (limited by available memory'),
'$pleasewait' => t('This process may take several minutes to complete. Please submit the form only once and leave this page open until finished.'),
'$email' => '',
'$pass' => '',
'$form_security_token' => get_form_security_token('channel_import'),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@@ -3,54 +3,60 @@ namespace Zotlabs\Module;
require_once('include/import.php');
/**
* @brief Module for importing items.
*
* Import existing posts and content from an export file.
*/
class Import_items extends \Zotlabs\Web\Controller {
function post() {
if(! local_channel())
return;
check_form_security_token_redirectOnErr('/import_items', 'import_items');
$data = null;
$src = $_FILES['filename']['tmp_name'];
$filename = basename($_FILES['filename']['name']);
$filesize = intval($_FILES['filename']['size']);
$filetype = $_FILES['filename']['type'];
if($src) {
// This is OS specific and could also fail if your tmpdir isn't very large
// mostly used for Diaspora which exports gzipped files.
if(strpos($filename,'.gz')){
@rename($src,$src . '.gz');
@system('gunzip ' . escapeshellarg($src . '.gz'));
}
if($filesize) {
$data = @file_get_contents($src);
}
unlink($src);
}
if(! $src) {
$old_address = ((x($_REQUEST,'old_address')) ? $_REQUEST['old_address'] : '');
if(! $old_address) {
logger('mod_import: nothing to import.');
logger('Nothing to import.');
notice( t('Nothing to import.') . EOL);
return;
}
$email = ((x($_REQUEST,'email')) ? $_REQUEST['email'] : '');
$password = ((x($_REQUEST,'password')) ? $_REQUEST['password'] : '');
$year = ((x($_REQUEST,'year')) ? $_REQUEST['year'] : '');
$channelname = substr($old_address,0,strpos($old_address,'@'));
$servername = substr($old_address,strpos($old_address,'@')+1);
$scheme = 'https://';
$api_path = '/api/red/channel/export/items?f=&channel=' . $channelname . '&year=' . intval($year);
$binary = false;
@@ -64,68 +70,66 @@ class Import_items extends \Zotlabs\Web\Controller {
$data = $ret['body'];
else
notice( t('Unable to download data from old server') . EOL);
}
if(! $data) {
logger('mod_import: empty file.');
logger('Empty file.');
notice( t('Imported file is empty.') . EOL);
return;
}
$data = json_decode($data,true);
// logger('import: data: ' . print_r($data,true));
// print_r($data);
$data = json_decode($data, true);
//logger('import: data: ' . print_r($data,true));
//print_r($data);
if(! is_array($data))
return;
if(array_key_exists('compatibility',$data) && array_key_exists('database',$data['compatibility'])) {
$v1 = substr($data['compatibility']['database'],-4);
$v2 = substr(DB_UPDATE_VERSION,-4);
if($v2 > $v1) {
$t = sprintf( t('Warning: Database versions differ by %1$d updates.'), $v2 - $v1 );
notice($t);
$t = sprintf( t('Warning: Database versions differ by %1$d updates.'), $v2 - $v1 );
notice($t . EOL);
}
}
$channel = \App::get_channel();
if(array_key_exists('item',$data) && $data['item']) {
import_items($channel,$data['item'],false,((array_key_exists('relocate',$data)) ? $data['relocate'] : null));
}
if(array_key_exists('item_id',$data) && $data['item_id']) {
import_item_ids($channel,$data['item_id']);
}
info( t('Import completed') . EOL);
return;
}
/**
* @brief Generate item import page.
*
* @return string with parsed HTML.
*/
function get() {
if(! local_channel()) {
notice( t('Permission denied') . EOL);
return login();
}
$o = replace_macros(get_markup_template('item_import.tpl'),array(
$o = replace_macros(get_markup_template('item_import.tpl'), array(
'$title' => t('Import Items'),
'$desc' => t('Use this form to import existing posts and content from an export file.'),
'$label_filename' => t('File to Upload'),
'$form_security_token' => get_form_security_token('import_items'),
'$submit' => t('Submit')
));
return $o;
}
}

View File

@@ -49,7 +49,7 @@ class Invite extends \Zotlabs\Web\Controller {
if(! $recip)
continue;
if(! valid_email($recip)) {
if(! validate_email($recip)) {
notice( sprintf( t('%s : Not a valid email address.'), $recip) . EOL);
continue;
}
@@ -88,12 +88,14 @@ class Invite extends \Zotlabs\Web\Controller {
}
function get() {
function get() {
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
return;
}
nav_set_selected('Invite');
$tpl = get_markup_template('invite.tpl');
$invonly = false;

View File

@@ -21,6 +21,7 @@ require_once('include/crypto.php');
require_once('include/items.php');
require_once('include/attach.php');
require_once('include/bbcode.php');
require_once('include/security.php');
use \Zotlabs\Lib as Zlib;
@@ -32,11 +33,9 @@ class Item extends \Zotlabs\Web\Controller {
// This will change. Figure out who the observer is and whether or not
// they have permission to post here. Else ignore the post.
if((! local_channel()) && (! remote_channel()) && (! x($_REQUEST,'commenter')))
if((! local_channel()) && (! remote_channel()) && (! x($_REQUEST,'anonname')))
return;
require_once('include/security.php');
$uid = local_channel();
$channel = null;
$observer = null;
@@ -78,7 +77,7 @@ class Item extends \Zotlabs\Web\Controller {
call_hooks('post_local_start', $_REQUEST);
// logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA);
// logger('postvars ' . print_r($_REQUEST,true), LOGGER_DATA);
$api_source = ((x($_REQUEST,'api_source') && $_REQUEST['api_source']) ? true : false);
@@ -111,6 +110,7 @@ class Item extends \Zotlabs\Web\Controller {
$preview = ((x($_REQUEST,'preview')) ? intval($_REQUEST['preview']) : 0);
$categories = ((x($_REQUEST,'category')) ? escape_tags($_REQUEST['category']) : '');
$webpage = ((x($_REQUEST,'webpage')) ? intval($_REQUEST['webpage']) : 0);
$item_obscured = ((x($_REQUEST,'obscured')) ? intval($_REQUEST['obscured']) : 0);
$pagetitle = ((x($_REQUEST,'pagetitle')) ? escape_tags(urlencode($_REQUEST['pagetitle'])) : '');
$layout_mid = ((x($_REQUEST,'layout_mid')) ? escape_tags($_REQUEST['layout_mid']): '');
$plink = ((x($_REQUEST,'permalink')) ? escape_tags($_REQUEST['permalink']) : '');
@@ -141,6 +141,7 @@ class Item extends \Zotlabs\Web\Controller {
$item_flags = $item_restrict = 0;
$expires = NULL_DATE;
$route = '';
$parent_item = null;
@@ -204,10 +205,29 @@ class Item extends \Zotlabs\Web\Controller {
$route = $parent_item['route'];
}
$moderated = false;
if(! $observer)
if(! $observer) {
$observer = \App::get_observer();
if(! $observer) {
$observer = anon_identity_init($_REQUEST);
if($observer) {
$moderated = true;
$remote_xchan = $remote_observer = $observer;
}
}
}
if(! $observer) {
notice( t('Permission denied.') . EOL) ;
if($api_source)
return ( [ 'success' => false, 'message' => 'permission denied' ] );
if(x($_REQUEST,'return'))
goaway(z_root() . "/" . $return_path );
killme();
}
if($parent) {
logger('mod_item: item_post parent=' . $parent);
$can_comment = false;
@@ -311,7 +331,7 @@ class Item extends \Zotlabs\Web\Controller {
$walltowall = false;
$walltowall_comment = false;
if($remote_xchan)
if($remote_xchan && ! $moderated)
$observer = $remote_observer;
if($observer) {
@@ -395,6 +415,7 @@ class Item extends \Zotlabs\Web\Controller {
$postopts = $orig_post['postopts'];
$created = $orig_post['created'];
$expires = $orig_post['expires'];
$mid = $orig_post['mid'];
$parent_mid = $orig_post['parent_mid'];
$plink = $orig_post['plink'];
@@ -428,7 +449,9 @@ class Item extends \Zotlabs\Web\Controller {
$body = trim($_REQUEST['body']);
$body .= trim($_REQUEST['attachment']);
$postopts = '';
$allow_empty = ((array_key_exists('allow_empty',$_REQUEST)) ? intval($_REQUEST['allow_empty']) : 0);
$private = intval($acl->is_private() || ($public_policy));
// If this is a comment, set the permissions from the parent.
@@ -441,7 +464,7 @@ class Item extends \Zotlabs\Web\Controller {
$owner_hash = $parent_item['owner_xchan'];
}
if(! strlen($body)) {
if((! $allow_empty) && (! strlen($body))) {
if($preview)
killme();
info( t('Empty post discarded.') . EOL );
@@ -454,7 +477,6 @@ class Item extends \Zotlabs\Web\Controller {
}
$expires = NULL_DATE;
if(feature_enabled($profile_uid,'content_expire')) {
if(x($_REQUEST,'expire')) {
@@ -463,39 +485,22 @@ class Item extends \Zotlabs\Web\Controller {
$expires = NULL_DATE;
}
}
$mimetype = notags(trim($_REQUEST['mimetype']));
if(! $mimetype)
$mimetype = 'text/bbcode';
$execflag = ((intval($uid) == intval($profile_uid)
&& ($channel['channel_pageflags'] & PAGE_ALLOWCODE)) ? true : false);
if($preview) {
$body = z_input_filter($profile_uid,$body,$mimetype);
$body = z_input_filter($body,$mimetype,$execflag);
}
// Verify ability to use html or php!!!
$execflag = false;
if($mimetype !== 'text/bbcode') {
$z = q("select account_id, account_roles, channel_pageflags from account left join channel on channel_account_id = account_id where channel_id = %d limit 1",
intval($profile_uid)
);
if($z && (($z[0]['account_roles'] & ACCOUNT_ROLE_ALLOWCODE) || ($z[0]['channel_pageflags'] & PAGE_ALLOWCODE))) {
if($uid && (get_account_id() == $z[0]['account_id'])) {
$execflag = true;
}
else {
notice( t('Executable content type not permitted to this channel.') . EOL);
if($api_source)
return ( [ 'success' => false, 'message' => 'forbidden content type' ] );
if(x($_REQUEST,'return'))
goaway(z_root() . "/" . $return_path );
killme();
}
}
}
$gacl = $acl->get();
$str_contact_allow = $gacl['allow_cid'];
$str_group_allow = $gacl['allow_gid'];
@@ -520,7 +525,7 @@ class Item extends \Zotlabs\Web\Controller {
// <img src="javascript:alert('hacked');" />
// if($uid && $uid == $profile_uid && feature_enabled($uid,'markdown')) {
// require_once('include/bb2diaspora.php');
// require_once('include/markdown.php');
// $body = escape_tags(trim($body));
// $body = str_replace("\n",'<br />', $body);
// $body = preg_replace_callback('/\[share(.*?)\]/ism','\share_shield',$body);
@@ -556,42 +561,8 @@ class Item extends \Zotlabs\Web\Controller {
if($x)
$body .= "\n\n@group+" . $x[0]['abook_id'] . "\n";
}
/**
* fix naked links by passing through a callback to see if this is a hubzilla site
* (already known to us) which will get a zrl, otherwise link with url, add bookmark tag to both.
* First protect any url inside certain bbcode tags so we don't double link it.
*/
$body = preg_replace_callback('/\[code(.*?)\[\/(code)\]/ism','\red_escape_codeblock',$body);
$body = preg_replace_callback('/\[url(.*?)\[\/(url)\]/ism','\red_escape_codeblock',$body);
$body = preg_replace_callback('/\[zrl(.*?)\[\/(zrl)\]/ism','\red_escape_codeblock',$body);
$body = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\+\,\(\)]+)/ism", 'nakedoembed', $body);
$body = preg_replace_callback("/([^\]\='".'"'."\/]|^|\#\^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\@\_\~\#\%\$\!\+\,\(\)]+)/ism", '\red_zrl_callback', $body);
$body = preg_replace_callback('/\[\$b64zrl(.*?)\[\/(zrl)\]/ism','\red_unescape_codeblock',$body);
$body = preg_replace_callback('/\[\$b64url(.*?)\[\/(url)\]/ism','\red_unescape_codeblock',$body);
$body = preg_replace_callback('/\[\$b64code(.*?)\[\/(code)\]/ism','\red_unescape_codeblock',$body);
// fix any img tags that should be zmg
$body = preg_replace_callback('/\[img(.*?)\](.*?)\[\/img\]/ism','\red_zrlify_img_callback',$body);
$body = bb_translate_video($body);
/**
* Fold multi-line [code] sequences
*/
$body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body);
$body = scale_external_images($body,false);
$body = cleanup_bbcode($body);
// Look for tags and linkify them
$results = linkify_tags($a, $body, ($uid) ? $uid : $profile_uid);
@@ -663,7 +634,7 @@ class Item extends \Zotlabs\Web\Controller {
$attach_link = '';
$hash = substr($mtch,0,strpos($mtch,','));
$rev = intval(substr($mtch,strpos($mtch,',')));
$r = attach_by_hash_nodata($hash,$rev);
$r = attach_by_hash_nodata($hash, $observer['xchan_hash'], $rev);
if($r['success']) {
$attachments[] = array(
'href' => z_root() . '/attach/' . $r['data']['hash'],
@@ -688,14 +659,23 @@ class Item extends \Zotlabs\Web\Controller {
// BBCODE end alert
if(strlen($categories)) {
$cats = explode(',',$categories);
foreach($cats as $cat) {
if($webpage == ITEM_TYPE_CARD) {
$catlink = z_root() . '/cards/' . $channel['channel_address'] . '?f=&cat=' . urlencode(trim($cat));
}
else {
$catlink = $owner_xchan['xchan_url'] . '?f=&cat=' . urlencode(trim($cat));
}
$post_tags[] = array(
'uid' => $profile_uid,
'ttype' => TERM_CATEGORY,
'otype' => TERM_OBJ_POST,
'term' => trim($cat),
'url' => $owner_xchan['xchan_url'] . '?f=&cat=' . urlencode(trim($cat))
'url' => $catlink
);
}
}
@@ -714,7 +694,7 @@ class Item extends \Zotlabs\Web\Controller {
foreach($t as $t1) {
$post_tags[] = array(
'uid' => $profile_uid,
'ttype' => $t1['type'],
'ttype' => $t1['ttype'],
'otype' => TERM_OBJ_POST,
'term' => $t1['term'],
'url' => $t1['url'],
@@ -755,22 +735,41 @@ class Item extends \Zotlabs\Web\Controller {
if(! $mid) {
$mid = (($message_id) ? $message_id : item_message_id());
}
if(! $parent_mid) {
$parent_mid = $mid;
}
if($parent_item)
$parent_mid = $parent_item['mid'];
// Fallback so that we alway have a thr_parent
if(!$thr_parent)
$thr_parent = $mid;
$datarray = array();
$item_thread_top = ((! $parent) ? 1 : 0);
// fix permalinks for cards
if($webpage == ITEM_TYPE_CARD) {
$plink = z_root() . '/cards/' . $channel['channel_address'] . '/' . (($pagetitle) ? $pagetitle : substr($mid,0,16));
}
if(($parent_item) && ($parent_item['item_type'] == ITEM_TYPE_CARD)) {
$r = q("select v from iconfig where iconfig.cat = 'system' and iconfig.k = 'CARD' and iconfig.iid = %d limit 1",
intval($parent_item['id'])
);
if($r) {
$plink = z_root() . '/cards/' . $channel['channel_address'] . '/' . $r[0]['v'];
}
}
if ((! $plink) && ($item_thread_top)) {
$plink = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $mid;
}
@@ -845,7 +844,7 @@ class Item extends \Zotlabs\Web\Controller {
$datarray['owner'] = $owner_xchan;
$datarray['author'] = $observer;
$datarray['attach'] = json_encode($datarray['attach']);
$o = conversation($a,array($datarray),'search',false,'preview');
$o = conversation(array($datarray),'search',false,'preview');
// logger('preview: ' . $o, LOGGER_DEBUG);
echo json_encode(array('preview' => $o));
killme();
@@ -888,20 +887,8 @@ class Item extends \Zotlabs\Web\Controller {
}
if(mb_strlen($datarray['title']) > 255)
$datarray['title'] = mb_substr($datarray['title'],0,255);
if(array_key_exists('item_private',$datarray) && $datarray['item_private']) {
$datarray['body'] = trim(z_input_filter($datarray['uid'],$datarray['body'],$datarray['mimetype']));
if($uid) {
if($channel['channel_hash'] === $datarray['author_xchan']) {
$datarray['sig'] = base64url_encode(rsa_sign($datarray['body'],$channel['channel_prvkey']));
$datarray['item_verified'] = 1;
}
}
}
if(mb_strlen($datarray['title']) > 191)
$datarray['title'] = mb_substr($datarray['title'],0,191);
if($webpage) {
Zlib\IConfig::Set($datarray,'system', webpage_to_namespace($webpage),
@@ -918,7 +905,17 @@ class Item extends \Zotlabs\Web\Controller {
$x = item_store_update($datarray,$execflag);
item_create_edit_activity($x);
// We only need edit activities for other federated protocols
// which do not support edits natively. While this does federate
// edits, it presents a number of issues locally - such as #757 and #758.
// The SQL check for an edit activity would not perform that well so to fix these issues
// requires an additional item flag (perhaps 'item_edit_activity') that we can add to the
// query for searches and notifications.
// For now we'll just forget about trying to make edits work on network protocols that
// don't support them.
// item_create_edit_activity($x);
if(! $parent) {
$r = q("select * from item where id = %d",
@@ -957,6 +954,11 @@ class Item extends \Zotlabs\Web\Controller {
if($parent) {
// prevent conversations which you are involved from being expired
if(local_channel())
retain_item($parent);
// only send comment notification if this is a wall-to-wall comment,
// otherwise it will happen during delivery
@@ -966,7 +968,7 @@ class Item extends \Zotlabs\Web\Controller {
'from_xchan' => $datarray['author_xchan'],
'to_xchan' => $datarray['owner_xchan'],
'item' => $datarray,
'link' => z_root() . '/display/' . $datarray['mid'],
'link' => z_root() . '/display/' . gen_link_id($datarray['mid']),
'verb' => ACTIVITY_POST,
'otype' => 'item',
'parent' => $parent,
@@ -984,7 +986,7 @@ class Item extends \Zotlabs\Web\Controller {
'from_xchan' => $datarray['author_xchan'],
'to_xchan' => $datarray['owner_xchan'],
'item' => $datarray,
'link' => z_root() . '/display/' . $datarray['mid'],
'link' => z_root() . '/display/' . gen_link_id($datarray['mid']),
'verb' => ACTIVITY_POST,
'otype' => 'item'
));
@@ -1036,7 +1038,7 @@ class Item extends \Zotlabs\Web\Controller {
}
$datarray['id'] = $post_id;
$datarray['llink'] = z_root() . '/display/' . $channel['channel_address'] . '/' . $post_id;
$datarray['llink'] = z_root() . '/display/' . gen_link_id($datarray['mid']);
call_hooks('post_local_end', $datarray);
@@ -1044,6 +1046,10 @@ class Item extends \Zotlabs\Web\Controller {
\Zotlabs\Daemon\Master::Summon(array('Notifier', $notify_type, $post_id));
logger('post_complete');
if($moderated) {
info(t('Your comment is awaiting approval.') . EOL);
}
// figure out how to return, depending on from whence we came
@@ -1070,9 +1076,7 @@ class Item extends \Zotlabs\Web\Controller {
if((! local_channel()) && (! remote_channel()))
return;
require_once('include/security.php');
if((argc() == 3) && (argv(1) === 'drop') && intval(argv(2))) {
require_once('include/items.php');
@@ -1101,21 +1105,28 @@ class Item extends \Zotlabs\Web\Controller {
// if this is a different page type or it's just a local delete
// but not by the item author or owner, do a simple deletion
$complex = false;
if(intval($i[0]['item_type']) || ($local_delete && (! $can_delete))) {
drop_item($i[0]['id']);
}
else {
// complex deletion that needs to propagate and be performed in phases
drop_item($i[0]['id'],true,DROPITEM_PHASE1);
$r = q("select * from item where id = %d",
intval($i[0]['id'])
);
if($r) {
xchan_query($r);
$sync_item = fetch_post_tags($r);
build_sync_packet($i[0]['uid'],array('item' => array(encode_item($sync_item[0],true))));
}
$complex = true;
}
$r = q("select * from item where id = %d",
intval($i[0]['id'])
);
if($r) {
xchan_query($r);
$sync_item = fetch_post_tags($r);
build_sync_packet($i[0]['uid'],array('item' => array(encode_item($sync_item[0],true))));
}
if($complex) {
tag_deliver($i[0]['uid'],$i[0]['id']);
}
}

View File

@@ -5,6 +5,7 @@ namespace Zotlabs\Module;
class Lang extends \Zotlabs\Web\Controller {
function get() {
nav_set_selected('Language');
return lang_selector();
}

View File

@@ -125,6 +125,7 @@ class Layouts extends \Zotlabs\Web\Controller {
'hide_weblink' => true,
'hide_attach' => true,
'hide_preview' => true,
'disable_comments' => true,
'ptlabel' => t('Layout Name'),
'profile_uid' => intval($owner),
'expanded' => true,

View File

@@ -255,7 +255,7 @@ class Like extends \Zotlabs\Web\Controller {
// get the item. Allow linked photos (which are normally hidden) to be liked
$r = q("SELECT * FROM item WHERE id = %d
and item_type = 0 and item_deleted = 0 and item_unpublished = 0
and (item_type = 0 or item_type = 6) and item_deleted = 0 and item_unpublished = 0
and item_delayed = 0 and item_pending_remove = 0 and item_blocked = 0 LIMIT 1",
intval($item_id)
);
@@ -373,6 +373,10 @@ class Like extends \Zotlabs\Web\Controller {
$links = array(array('rel' => 'alternate','type' => 'text/html', 'href' => $item['plink']));
$objtype = (($item['resource_type'] === 'photo') ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE );
if($objtype === ACTIVITY_OBJ_NOTE && (! intval($item['item_thread_top'])))
$objtype = ACTIVITY_OBJ_COMMENT;
$body = $item['body'];
@@ -447,7 +451,7 @@ class Like extends \Zotlabs\Web\Controller {
$arr['thr_parent'] = $item['mid'];
$ulink = '[zrl=' . $item_author['xchan_url'] . ']' . $item_author['xchan_name'] . '[/zrl]';
$alink = '[zrl=' . $observer['xchan_url'] . ']' . $observer['xchan_name'] . '[/zrl]';
$plink = '[zrl=' . z_root() . '/display/' . $item['mid'] . ']' . $post_type . '[/zrl]';
$plink = '[zrl=' . z_root() . '/display/' . gen_link_id($item['mid']) . ']' . $post_type . '[/zrl]';
$allow_cid = $item['allow_cid'];
$allow_gid = $item['allow_gid'];
$deny_cid = $item['deny_cid'];
@@ -500,6 +504,11 @@ class Like extends \Zotlabs\Web\Controller {
$post = item_store($arr);
$post_id = $post['item_id'];
// save the conversation from expiration
if(local_channel() && array_key_exists('item',$post) && (intval($post['item']['id']) != intval($post['item']['parent'])))
retain_item($post['item']['parent']);
$arr['id'] = $post_id;

View File

@@ -95,7 +95,7 @@ class Linkinfo extends \Zotlabs\Web\Controller {
echo $arr['text'];
killme();
}
if($process_oembed) {
$x = oembed_process($url);
if($x) {

View File

@@ -32,10 +32,10 @@ class Lockview extends \Zotlabs\Web\Controller {
if(! $item_id)
killme();
if (!in_array($type, array('item','photo','event', 'menu_item', 'chatroom')))
if (! in_array($type, array('item', 'photo', 'attach', 'event', 'menu_item', 'chatroom')))
killme();
//we have different naming in in menu_item table and chatroom table
// we have different naming in in menu_item table and chatroom table
switch($type) {
case 'menu_item':
$id = 'mitem_id';
@@ -72,7 +72,7 @@ class Lockview extends \Zotlabs\Web\Controller {
}
if($uid != local_channel()) {
echo '<li>' . t('Remote privacy information not available.') . '</li>';
echo '<div class="dropdown-item">' . t('Remote privacy information not available.') . '</div>';
killme();
}
@@ -84,7 +84,7 @@ class Lockview extends \Zotlabs\Web\Controller {
// as unknown specific recipients. The sender will have the visibility list and will fall through to the
// next section.
echo '<li>' . translate_scope((! $item['public_policy']) ? 'specific' : $item['public_policy']) . '</li>';
echo '<div class="dropdown-item">' . translate_scope((! $item['public_policy']) ? 'specific' : $item['public_policy']) . '</div>';
killme();
}
@@ -93,7 +93,7 @@ class Lockview extends \Zotlabs\Web\Controller {
$deny_users = expand_acl($item['deny_cid']);
$deny_groups = expand_acl($item['deny_gid']);
$o = '<li>' . t('Visible to:') . '</li>';
$o = '<div class="dropdown-item">' . t('Visible to:') . '</div>';
$l = array();
stringify_array_elms($allowed_groups,true);
@@ -101,41 +101,76 @@ class Lockview extends \Zotlabs\Web\Controller {
stringify_array_elms($deny_groups,true);
stringify_array_elms($deny_users,true);
$profile_groups = [];
if($allowed_groups) {
foreach($allowed_groups as $g) {
if(substr($g,0,4) === '\'vp.') {
$profile_groups[] = '\'' . substr($g,4);
}
}
}
if(count($profile_groups)) {
$r = q("SELECT profile_name FROM profile WHERE profile_guid IN ( " . implode(', ', $profile_groups) . " )");
if($r)
foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b>' . t('Profile','acl') . ' ' . $rr['profile_name'] . '</b></div>';
}
if(count($allowed_groups)) {
$r = q("SELECT gname FROM groups WHERE hash IN ( " . implode(', ', $allowed_groups) . " )");
if($r)
foreach($r as $rr)
$l[] = '<li><b>' . $rr['gname'] . '</b></li>';
$l[] = '<div class="dropdown-item"><b>' . $rr['gname'] . '</b></div>';
}
if(count($allowed_users)) {
$r = q("SELECT xchan_name FROM xchan WHERE xchan_hash IN ( " . implode(', ',$allowed_users) . " )");
if($r)
foreach($r as $rr)
$l[] = '<li>' . $rr['xchan_name'] . '</li>';
$l[] = '<div class="dropdown-item">' . $rr['xchan_name'] . '</div>';
if($atokens) {
foreach($atokens as $at) {
if(in_array("'" . $at['xchan_hash'] . "'",$allowed_users)) {
$l[] = '<li>' . $at['xchan_name'] . '</li>';
$l[] = '<div class="dropdown-item">' . $at['xchan_name'] . '</div>';
}
}
}
}
$profile_groups = [];
if($deny_groups) {
foreach($deny_groups as $g) {
if(substr($g,0,4) === '\'vp.') {
$profile_groups[] = '\'' . substr($g,4);
}
}
}
if(count($profile_groups)) {
$r = q("SELECT profile_name FROM profile WHERE profile_guid IN ( " . implode(', ', $profile_groups) . " )");
if($r)
foreach($r as $rr)
$l[] = '<div class="dropdown-item"><b><strike>' . t('Profile','acl') . ' ' . $rr['profile_name'] . '</strike></b></div>';
}
if(count($deny_groups)) {
$r = q("SELECT gname FROM groups WHERE hash IN ( " . implode(', ', $deny_groups) . " )");
if($r)
foreach($r as $rr)
$l[] = '<li><b><strike>' . $rr['gname'] . '</strike></b></li>';
$l[] = '<div class="dropdown-item"><b><strike>' . $rr['gname'] . '</strike></b></div>';
}
if(count($deny_users)) {
$r = q("SELECT xchan_name FROM xchan WHERE xchan_hash IN ( " . implode(', ', $deny_users) . " )");
if($r)
foreach($r as $rr)
$l[] = '<li><strike>' . $rr['xchan_name'] . '</strike></li>';
$l[] = '<div class="dropdown-item"><strike>' . $rr['xchan_name'] . '</strike></div>';
if($atokens) {
foreach($atokens as $at) {
if(in_array("'" . $at['xchan_hash'] . "'",$deny_users)) {
$l[] = '<li><strike>' . $at['xchan_name'] . '</strike></li>';
$l[] = '<div class="dropdown-item"><strike>' . $at['xchan_name'] . '</strike></div>';
}
}
}

12
Zotlabs/Module/Logout.php Normal file
View File

@@ -0,0 +1,12 @@
<?php
namespace Zotlabs\Module;
class Logout extends \Zotlabs\Web\Controller {
function init() {
\App::$session->nuke();
goaway(z_root());
}
}

View File

@@ -17,6 +17,7 @@ class Magic extends \Zotlabs\Web\Controller {
$dest = ((x($_REQUEST,'dest')) ? $_REQUEST['dest'] : '');
$test = ((x($_REQUEST,'test')) ? intval($_REQUEST['test']) : 0);
$rev = ((x($_REQUEST,'rev')) ? intval($_REQUEST['rev']) : 0);
$owa = ((x($_REQUEST,'owa')) ? intval($_REQUEST['owa']) : 0);
$delegate = ((x($_REQUEST,'delegate')) ? $_REQUEST['delegate'] : '');
$parsed = parse_url($dest);
@@ -132,12 +133,32 @@ class Magic extends \Zotlabs\Web\Controller {
if(local_channel()) {
$channel = \App::get_channel();
// OpenWebAuth
if($owa) {
$headers = [];
$headers['Accept'] = 'application/x-zot+json' ;
$headers['X-Open-Web-Auth'] = random_string();
$headers = \Zotlabs\Web\HTTPSig::create_sig('',$headers,$channel['channel_prvkey'],
'acct:' . $channel['channel_address'] . '@' . \App::get_hostname(),false,true,'sha512');
$x = z_fetch_url($basepath . '/owa',false,$redirects,[ 'headers' => $headers ]);
if($x['success']) {
$j = json_decode($x['body'],true);
if($j['success'] && $j['token']) {
$x = strpbrk($dest,'?&');
$args = (($x) ? '&owt=' . $j['token'] : '?f=&owt=' . $j['token']) . (($delegate) ? '&delegate=1' : '');
goaway($dest . $args);
}
}
goaway($dest);
}
$token = random_string();
$token_sig = base64url_encode(rsa_sign($token,$channel['channel_prvkey']));
$channel['token'] = $token;
$channel['token_sig'] = $token_sig;
\Zotlabs\Zot\Verify::create('auth',$channel['channel_id'],$token,$x[0]['hubloc_url']);
$target_url = $x[0]['hubloc_callback'] . '/?f=&auth=' . urlencode(channel_reddress($channel))

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