691 Commits
2.4 ... 2.6.2

Author SHA1 Message Date
git-marijus
0ee2378cec bump version 2017-08-31 10:23:09 +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
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
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
zotlabs
3443416540 hubzilla issue #846 2017-08-18 08:20:04 +02: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
6adfbabbb7 update changelog 2017-08-16 10:06:49 +02:00
Mario Vavti
f560a88ff3 typo 2017-08-14 22:06:04 +02:00
Mario Vavti
05453ce493 changelog 2017-08-14 21:59:06 +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
57602647ef minor js and css changes 2017-08-12 22:32:06 +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
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
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
zotlabs
acb8eeb853 libxml errors 2017-08-10 09:47:09 +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
zotlabs
037e1edb1f ostatus feed was missing comments 2017-08-07 13:32:04 +02:00
phellmes
23f9f8bc3b Update DE translation strings 2017-08-06 23:41:28 +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
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
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
05444f92f9 missing observer hash 2017-08-03 21:37:05 +02:00
git-marijus
d704832ff6 fix issue #836 - missing opening form tag 2017-08-03 20:36:19 +02:00
git-marijus
4edf580ebf fix attachment upload for private mail 2017-08-03 15:31:28 +02:00
git-marijus
d183e47dc9 return preview also if we have no attachment 2017-08-03 14:09:57 +02:00
Andrew Manning
a100c47f11 Fix styling on help page content list in sidebar. 2017-08-03 01:56:54 +00:00
Manuel Jiménez Friaza
2a34a497d5 Updated the Spanish translation 2017-08-02 12:22:21 +02:00
git-marijus
acddf5aa8d css fix 2017-08-02 00:29:14 +02:00
git-marijus
2ea482d163 finally fix recursive attachments permissions 2017-08-01 23:32:37 +02:00
git-marijus
1416b81877 use small line-height only for larger screens 2017-08-01 18:04:31 +02:00
Mario Vavti
4e2a050afb remove blugrid schema until somebody cares to fix it 2017-08-01 14:27:20 +02:00
Mario Vavti
a72b549aa7 less badge more icon 2017-08-01 12:46:12 +02:00
Mario Vavti
91d19a3326 strings 2017-08-01 12:01:04 +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
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
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
11cdd0033d no need for jquery here 2017-07-30 10:46:37 +02:00
git-marijus
222113ee57 version 2.6RC 2017-07-28 10:21:08 +02:00
git-marijus
53570de5a3 remove borders from navbar toggler 2017-07-27 20:47:49 +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
e71cdf02a8 move the active app code to include/nav.php - it is only relevant there 2017-07-26 21:42:07 +02: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
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
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
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
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
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
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
zotlabs
e32e616031 resolve merge conflict 2017-05-20 22:57:38 +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
3fad69e5ca some styling for system notifications 2017-05-18 14:57:10 +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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
zotlabs
f1c6fd08c4 database upgrade 2017-04-23 20:28:04 -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
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
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
1c6d2857cb follow_from_feed issue when called from push 2017-04-19 17:52:15 -07: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
e3dc242a3c allow downloading via viewsrc to support client side e2ee 2017-04-17 20:48:57 -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
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
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
63dd6ad01a don't allow any null fields in notify creation 2017-04-11 23:05:56 -07: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
zotlabs
ed8e4962b9 ugly hack to webfinger to allow connections to be made to mastodon servers. 2017-04-10 20:31:45 -07: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
zotlabs
e682b93883 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-07 15:00:31 -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
zotlabs
1352e334b1 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-04-06 20:07:15 -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
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
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
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
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
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
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
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
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
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
zotlabs
5cbf603203 Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge 2017-03-26 14:40:20 -07: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
zotlabs
a2e1019978 move db_upgrade to zlib 2017-03-23 21:49:20 -07: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
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
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
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
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
be10bf2ceb Merge branch 'dev' of https://github.com/redmatrix/hubzilla into dev_merge 2017-03-19 15:44:59 -07:00
zotlabs
b0b96daec0 Merge branch 'dev' into merge 2017-03-18 17:00:09 -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
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
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
e1fe637dcd Merge branch 'dev' into red 2017-03-15 15:57:37 -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
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
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
6c641b1834 move oauth2 to vendor 2017-03-14 09:09:05 +11: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
zotlabs
4c526c7d3d Merge branch 'dev' into red 2017-03-11 18:02:59 -08:00
zotlabs
bbb83bea38 strings 2017-03-10 12:44:57 -08:00
zotlabs
1a49f0d164 one role. 2017-03-09 18:54:10 -08: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
zotlabs
b6477cd38b go back to where the problem started 2017-03-09 11:51:21 -08:00
zotlabs
15ab331b6b move all the diaspora content hacks to the diaspora plugin 2017-03-08 17:35:19 -08:00
zotlabs
9ca53fdc5d DCV stuff 2017-03-07 17:44:19 -08:00
zotlabs
98ccdf65fb Merge branch 'dev' into red 2017-03-05 16:32:53 -08:00
zotlabs
c533c62c64 some event work 2017-03-05 14:47:20 -08:00
777 changed files with 24128 additions and 60514 deletions

View File

@@ -81,6 +81,12 @@ matrix:
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
@@ -100,6 +106,8 @@ cache:
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:

110
CHANGELOG
View File

@@ -1,3 +1,113 @@
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

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

@@ -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 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.
*
*/
static public function version() {
// This must match the version in PermissionRoles.php before permission updates can run.
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 = [
@@ -63,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) {
@@ -82,17 +98,22 @@ 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');
@@ -101,15 +122,26 @@ class Permissions {
$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) {
@@ -120,7 +152,12 @@ class Permissions {
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;
@@ -137,16 +174,34 @@ class Permissions {
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 = [];
@@ -155,7 +210,7 @@ class Permissions {
// If a default permcat exists, use that
$pc = ((feature_enabled($channel_id,'permcats')) ? get_pconfig($channel_id,'system','default_permcat') : 'default');
$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);
@@ -167,7 +222,7 @@ class Permissions {
}
// 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
// and if there was no permcat or a default permcat, set the perms
// from the role
$role = get_pconfig($channel_id,'system','permissions_role');
@@ -195,7 +250,7 @@ class Permissions {
}
// 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
// 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) {

View File

@@ -174,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

@@ -51,6 +51,7 @@ class Cron_daily {
update_channels_active_halfyear_stat();
update_channels_active_monthly_stat();
update_local_posts_stat();
update_local_comments_stat();
// expire old delivery reports
@@ -87,7 +88,7 @@ class Cron_daily {
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

@@ -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

@@ -64,8 +64,6 @@ require_once('include/bbcode.php');
* purge_all channel_id
* expire channel_id
* relay item_id (item was relayed to owner, we will deliver it as owner)
* single_activity item_id (deliver to a singleton network from the appropriate clone)
* single_mail mail_id (deliver to a singleton network from the appropriate clone)
* location channel_id
* request channel_id xchan_hash message_id
* rating xlink_id
@@ -105,7 +103,7 @@ class Notifier {
$normal_mode = true;
$packet_type = 'undefined';
if($cmd === 'mail' || $cmd === 'single_mail') {
if($cmd === 'mail') {
$normal_mode = false;
$mail = true;
$private = true;
@@ -270,7 +268,8 @@ class Notifier {
// 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;
@@ -391,7 +390,6 @@ class Notifier {
return;
}
}
}
$walltowall = (($top_level_post && $channel['xchan_hash'] === $target_item['author_xchan']) ? true : false);
@@ -408,7 +406,7 @@ 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);
@@ -421,40 +419,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' => false,
'location' => $location,
'request' => $request,
'normal_mode' => $normal_mode,
'packet_type' => $packet_type,
'walltowall' => $walltowall,
'queued' => []
];
call_hooks('notifier_process', $narr);
if($narr['queued']) {
@@ -491,8 +489,6 @@ 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.
@@ -523,49 +519,48 @@ class Notifier {
if($hub['hubloc_network'] == 'zot') {
if(! in_array($hub['hubloc_sitekey'],$keys)) {
$hublist[] = $hub['hubloc_host'];
$dhubs[] = $hub;
$keys[] = $hub['hubloc_sitekey'];
$dhubs[] = $hub;
$keys[] = $hub['hubloc_sitekey'];
}
}
else {
if(! in_array($hub['hubloc_url'],$urls)) {
$hublist[] = $hub['hubloc_host'];
$dhubs[] = $hub;
$urls[] = $hub['hubloc_url'];
$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' => false,
'location' => $location,
'request' => $request,
'normal_mode' => $normal_mode,
'packet_type' => $packet_type,
'walltowall' => $walltowall,
'queued' => []
];
call_hooks('notifier_hub',$narr);
@@ -577,21 +572,6 @@ class Notifier {
}
// singleton deliveries by definition 'not got zot'.
// 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.
if($cmd === 'single_mail' || $cmd === 'single_activity') {
continue;
}
// default: zot protocol
$hash = random_string();
$packet = null;
@@ -617,14 +597,16 @@ class Notifier {
else {
$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(array(
'hash' => $hash,
'account_id' => $target_item['aid'],
'channel_id' => $target_item['uid'],
'posturl' => $hub['hubloc_callback'],
'notify' => $packet,
'msg' => json_encode($encoded_item)
));
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'))) {
@@ -645,9 +627,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

@@ -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,86 @@
<?php
namespace Zotlabs\Lib;
class ActivityStreams2 {
public $data;
public $valid = false;
public $id = '';
public $type = '';
public $actor = null;
public $obj = null;
public $tgt = 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');
}
}
function is_valid() {
return $this->valid;
}
function get_property_obj($property,$base = '') {
if(! $base) {
$base = $this->data;
}
return $base[$property];
}
function fetch_property($url) {
$redirects = 0;
$x = z_fetch_url($url,true,$redirects,
['headers' => [ 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"']]);
if($x['success'])
return json_decode($x['body'],true);
return null;
}
function get_compound_property($property,$base = '') {
$x = $this->get_property_obj($property,$base);
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 = '') {
if(! $base)
$base = $this->data;
$x = $this->get_property_obj('type',$base);
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

@@ -209,6 +209,7 @@ class Apps {
static public function translate_system_apps(&$arr) {
$apps = array(
'Apps' => t('Apps'),
'Site Admin' => t('Site Admin'),
'Report Bug' => t('Report Bug'),
'View Bookmarks' => t('View Bookmarks'),
@@ -371,6 +372,7 @@ class Apps {
'$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')
));
@@ -539,6 +541,129 @@ 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));

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),

View File

@@ -10,15 +10,17 @@ class DB_Upgrade {
function __construct($db_revision) {
$update_file = 'install/' . PLATFORM_NAME . '/update.php';
$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_';
$this->config_name = $platform_name . '_db_version';
$this->func_prefix = $platform_name . '_update_';
}
$build = get_config('system', $this->config_name, 0);

View File

@@ -170,6 +170,7 @@ class Enotify {
xchan_query($p);
$moderated = (($p[0]['item_blocked'] == ITEM_MODERATED) ? true : false);
$item_post_type = item_post_type($p[0]);
// $private = $p[0]['item_private'];
@@ -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) {

View File

@@ -44,7 +44,7 @@ class NativeWikiPage {
$pages[] = [
'resource_id' => $resource_id,
'title' => escape_tags($title),
'url' => urlencode(urlencode($title)),
'url' => str_replace('%2F','/',urlencode(str_replace('%2F','/',urlencode($title)))),
'link_id' => 'id_' . substr($resource_id, 0, 10) . '_' . $page_item['id']
];
}

View File

@@ -119,7 +119,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]))

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,8 @@ 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_std_version() {
@@ -72,11 +71,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

@@ -153,7 +153,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'));
}
@@ -164,7 +164,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;
}
@@ -251,8 +251,6 @@ class ThreadItem {
);
}
$server_role = get_config('system','server_role');
$has_bookmarks = false;
if(is_array($item['term'])) {
foreach($item['term'] as $t) {
@@ -265,7 +263,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"));
}
@@ -371,7 +369,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,
@@ -714,7 +712,6 @@ class ThreadItem {
call_hooks('comment_buttons',$arr);
$comment_buttons = $arr['comment_buttons'];
$comment_box = replace_macros($template,array(
'$return_path' => '',
'$threaded' => $this->is_threaded(),
@@ -743,8 +740,12 @@ class ThreadItem {
'$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' && perm_is_allowed($conv->get_profile_owner(),'','post_comments')) ? true : false),
'$anonname' => [ 'anonname', t('Your full name (required)'),'','','','onBlur="commentCloseUI(this,\'' . $this->get_id() . '\')"' ],
'$anonmail' => [ 'anonmail', t('Your email address (required)'),'','','','onBlur="commentCloseUI(this,\'' . $this->get_id() . '\')"' ],
'$anonurl' => [ 'anonurl', t('Your website URL (optional)'),'','','','onBlur="commentCloseUI(this,\'' . $this->get_id() . '\')"' ]
));
return $comment_box;

View File

@@ -18,6 +18,7 @@ class ThreadStream {
private $observer = null;
private $writable = false;
private $commentable = false;
private $uploadable = false;
private $profile_owner = 0;
private $preview = false;
private $prepared_item = '';
@@ -158,7 +159,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

@@ -412,10 +412,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

@@ -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);
@@ -68,7 +67,6 @@ class Site {
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);
@@ -254,12 +252,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'),
@@ -286,8 +278,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') ],

View File

@@ -0,0 +1,38 @@
<?php
namespace Zotlabs\Module;
require_once('include/zot.php');
class Ap_probe extends \Zotlabs\Web\Controller {
function get() {
$o .= '<h3>ActivityPub Probe Diagnostic</h3>';
$o .= '<form action="ap_probe" method="get">';
$o .= 'Lookup URI: <input type="text" style="width: 250px;" name="addr" value="' . $_GET['addr'] .'" /><br>';
$o .= 'Request Signed version: <input type=checkbox name="magenv" value="1" ><br>';
$o .= '<input type="submit" name="submit" value="Submit" /></form>';
$o .= '<br /><br />';
if(x($_GET,'addr')) {
$addr = $_GET['addr'];
if($_GET['magenv']) {
$headers = 'Accept: application/magic-envelope+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
}
else {
$headers = 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
}
$redirects = 0;
$x = z_fetch_url($addr,true,$redirects, [ 'headers' => [ $headers ]]);
if($x['success'])
$o .= '<pre>' . str_replace(['\\n','\\'],["\n",''],jindent($x['body'])) . '</pre>';
}
return $o;
}
}

View File

@@ -84,6 +84,20 @@ class Appman extends \Zotlabs\Web\Controller {
}
$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']) {

View File

@@ -0,0 +1,40 @@
<?php
namespace Zotlabs\Module;
use \Zotlabs\Lib as Zlib;
class Apporder extends \Zotlabs\Web\Controller {
function post() {
}
function get() {
$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

@@ -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(t('View Bookmarks'));
$item_id = intval($_REQUEST['item']);
$burl = trim($_REQUEST['burl']);

1209
Zotlabs/Module/Cdav.php Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -94,7 +94,7 @@ class Channel extends \Zotlabs\Web\Controller {
}
else {
if(\App::$profile['profile_uid'] == local_channel()) {
nav_set_selected('home');
nav_set_selected(t('Channel Home'));
}
}
@@ -217,10 +217,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) {
@@ -236,9 +236,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 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) {
@@ -325,8 +325,8 @@ class Channel extends \Zotlabs\Web\Controller {
'$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,
@@ -365,10 +365,10 @@ class Channel extends \Zotlabs\Web\Controller {
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

@@ -89,9 +89,11 @@ class Chat extends \Zotlabs\Web\Controller {
function get() {
if(local_channel())
if(local_channel()) {
$channel = \App::get_channel();
nav_set_selected(t('My Chatrooms'));
}
$ob = \App::get_observer();
$observer = get_observer_hash();
if(! $observer) {

View File

@@ -86,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

@@ -19,7 +19,7 @@ class Connections extends \Zotlabs\Web\Controller {
}
function get() {
function get() {
$sort_type = 0;
$o = '';
@@ -29,6 +29,8 @@ class Connections extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL);
return login();
}
nav_set_selected(t('Connections'));
$blocked = false;
$hidden = false;
@@ -63,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 ",
@@ -81,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 {
@@ -91,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 ";
@@ -168,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(
@@ -243,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) {
@@ -257,11 +257,12 @@ 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'),

View File

@@ -842,6 +842,22 @@ class Connedit extends \Zotlabs\Web\Controller {
}
else
$locstr = t('none');
$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'])),
@@ -856,6 +872,7 @@ class Connedit extends \Zotlabs\Web\Controller {
'$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.'),

View File

@@ -77,7 +77,7 @@ class Directory extends \Zotlabs\Web\Controller {
$pubforums = get_directory_setting($observer, 'pubforums');
$o = '';
nav_set_selected('directory');
nav_set_selected(t('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;
}

View File

@@ -308,12 +308,12 @@ class Display extends \Zotlabs\Web\Controller {
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) {

View File

@@ -39,6 +39,11 @@ class Editpost extends \Zotlabs\Web\Controller {
return;
}
if($itm[0]['resource_type'] === 'photo' && $itm[0]['resource_id']) {
notice( t('Item is not editable') . EOL);
return;
}
if($itm[0]['resource_type'] === 'event' && $itm[0]['resource_id']) {
goaway(z_root() . '/events/' . $itm[0]['resource_id'] . '?expandform=1');
}

View File

@@ -112,7 +112,7 @@ class Editwebpage extends \Zotlabs\Web\Controller {
intval($itm[0]['id'])
);
if($item_id)
$page_title = $item_id[0]['v'];
$page_title = urldecode($item_id[0]['v']);
$mimetype = $itm[0]['mimetype'];

View File

@@ -272,7 +272,7 @@ class Events extends \Zotlabs\Web\Controller {
return;
}
nav_set_selected('all_events');
nav_set_selected(t('Events'));
if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) {
$r = q("update event set dismissed = 1 where id = %d and uid = %d",

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() {
@@ -36,7 +28,7 @@ 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);

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']) {

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();

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(t('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,13 @@ 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();
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
));
}

View File

@@ -121,8 +121,7 @@ class Import extends \Zotlabs\Web\Controller {
$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)
@@ -333,6 +332,10 @@ class Import extends \Zotlabs\Web\Controller {
$abook['abook_feed'] = (($abook['abook_flags'] & 0x0100 ) ? 1 : 0);
}
if(array_key_exists('abook_instance',$abook) && $abook['abook_instance'] && strpos($abook['abook_instance'],z_root()) === false) {
$abook['abook_not_here'] = 1;
}
if($abook['abook_self']) {
$role = get_pconfig($channel['channel_id'],'system','permissions_role');
if(($role === 'forum') || ($abook['abook_my_perms'] & PERMS_W_TAGWALL)) {

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(t('Invite'));
$tpl = get_markup_template('invite.tpl');
$invonly = false;

View File

@@ -33,7 +33,7 @@ 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;
$uid = local_channel();
@@ -77,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);
@@ -205,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;
@@ -312,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) {
@@ -615,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'],
@@ -799,7 +818,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();
@@ -842,8 +861,8 @@ class Item extends \Zotlabs\Web\Controller {
}
if(mb_strlen($datarray['title']) > 255)
$datarray['title'] = mb_substr($datarray['title'],0,255);
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),
@@ -909,6 +928,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
@@ -996,6 +1020,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

View File

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

View File

@@ -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'];
@@ -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

@@ -22,32 +22,40 @@ class Mail extends \Zotlabs\Web\Controller {
$recipient = ((x($_REQUEST,'messageto')) ? notags(trim($_REQUEST['messageto'])) : '');
$rstr = ((x($_REQUEST,'messagerecip')) ? notags(trim($_REQUEST['messagerecip'])) : '');
$preview = ((x($_REQUEST,'preview')) ? intval($_REQUEST['preview']) : 0);
$expires = ((x($_REQUEST,'expires')) ? datetime_convert(date_default_timezone_get(),'UTC', $_REQUEST['expires']) : NULL_DATE);
$expires = ((x($_REQUEST,'expires')) ? datetime_convert(date_default_timezone_get(),'UTC', $_REQUEST['expires']) : NULL_DATE);
$raw = ((x($_REQUEST,'raw')) ? intval($_REQUEST['raw']) : 0);
$mimetype = ((x($_REQUEST,'mimetype')) ? notags(trim($_REQUEST['mimetype'])) : 'text/bbcode');
if($preview) {
$body = cleanup_bbcode($body);
$results = linkify_tags($a, $body, local_channel());
if(preg_match_all('/(\[attachment\](.*?)\[\/attachment\])/',$body,$match)) {
$attachments = array();
foreach($match[2] as $mtch) {
$hash = substr($mtch,0,strpos($mtch,','));
$rev = intval(substr($mtch,strpos($mtch,',')));
$r = attach_by_hash_nodata($hash,get_observer_hash(),$rev);
if($r['success']) {
$attachments[] = array(
'href' => z_root() . '/attach/' . $r['data']['hash'],
'length' => $r['data']['filesize'],
'type' => $r['data']['filetype'],
'title' => urlencode($r['data']['filename']),
'revision' => $r['data']['revision']
);
}
$body = trim(str_replace($match[1],'',$body));
}
if($raw) {
$body = mail_prepare_binary(['id' => 'M0']);
echo json_encode(['preview' => $body]);
}
else {
$body = cleanup_bbcode($body);
$results = linkify_tags($a, $body, local_channel());
if(preg_match_all('/(\[attachment\](.*?)\[\/attachment\])/',$body,$match)) {
$attachments = array();
foreach($match[2] as $mtch) {
$hash = substr($mtch,0,strpos($mtch,','));
$rev = intval(substr($mtch,strpos($mtch,',')));
$r = attach_by_hash_nodata($hash,get_observer_hash(),$rev);
if($r['success']) {
$attachments[] = array(
'href' => z_root() . '/attach/' . $r['data']['hash'],
'length' => $r['data']['filesize'],
'type' => $r['data']['filetype'],
'title' => urlencode($r['data']['filename']),
'revision' => $r['data']['revision']
);
}
$body = trim(str_replace($match[1],'',$body));
}
}
echo json_encode(['preview' => zidify_links(smilies(bbcode($body)))]);
}
echo json_encode(['preview' => zidify_links(smilies(bbcode($body)))]);
killme();
}
@@ -102,36 +110,10 @@ class Mail extends \Zotlabs\Web\Controller {
}
}
// if(feature_enabled(local_channel(),'richtext')) {
// $body = fix_mce_lf($body);
// }
require_once('include/text.php');
linkify_tags($a, $body, local_channel());
// I don't think this is used any more.
if($preview) {
$mail = [
'mailbox' => 'outbox',
'id' => 0,
'mid' => 'M0',
'from_name' => $channel['xchan_name'],
'from_url' => $channel['xchan_url'],
'from_photo' => $channel['xchan_photo_s'],
'subject' => zidify_links(smilies(bbcode($subject))),
'body' => zidify_links(smilies(bbcode($body))),
'attachments' => '',
'can_recall' => false,
'is_recalled' => '',
'date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'], 'c')
];
echo replace_macros(get_markup_template('mail_conv.tpl'), [ '$mail' => $mail ] );
killme();
}
if(! $recipient) {
notice('No recipient found.');
\App::$argc = 2;
@@ -141,7 +123,7 @@ class Mail extends \Zotlabs\Web\Controller {
// We have a local_channel, let send_message use the session channel and save a lookup
$ret = send_message(0, $recipient, $body, $subject, $replyto, $expires);
$ret = send_message(0, $recipient, $body, $subject, $replyto, $expires, $mimetype, $raw);
if($ret['success']) {
xchan_mail_query($ret['mail']);
@@ -158,7 +140,7 @@ class Mail extends \Zotlabs\Web\Controller {
function get() {
$o = '';
nav_set_selected('messages');
nav_set_selected(t('Mail'));
if(! local_channel()) {
notice( t('Permission denied.') . EOL);

View File

@@ -10,6 +10,8 @@ class Manage extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL);
return;
}
nav_set_selected('Manage');
require_once('include/security.php');

View File

@@ -0,0 +1,76 @@
<?php
namespace Zotlabs\Module;
require_once('include/conversation.php');
class Moderate extends \Zotlabs\Web\Controller {
function get() {
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
return;
}
if(argc() > 2) {
$post_id = intval(argv(1));
if(! $post_id)
goaway(z_root() . '/moderate');
$action = argv(2);
$r = q("select * from item where uid = %d and id = %d and item_blocked = %d limit 1",
intval(local_channel()),
intval($post_id),
intval(ITEM_MODERATED)
);
if($r) {
if($action === 'approve') {
q("update item set item_blocked = 0 where uid = %d and id = %d",
intval(local_channel()),
intval($post_id)
);
notice( t('Comment approved') . EOL);
}
elseif($action === 'drop') {
drop_item($post_id,false);
notice( t('Comment deleted') . EOL);
}
$r = q("select * from item where id = %d",
intval($post_id)
);
if($r) {
xchan_query($r);
$sync_item = fetch_post_tags($r);
build_sync_packet(local_channel(),array('item' => array(encode_item($sync_item[0],true))));
}
if($action === 'approve') {
\Zotlabs\Daemon\Master::Summon(array('Notifier', 'comment-new', $post_id));
}
goaway(z_root() . '/moderate');
}
}
$r = q("select item.id as item_id, item.* from item where item.uid = %d and item_blocked = %d and item_deleted = 0 order by created desc limit 60",
intval(local_channel()),
intval(ITEM_MODERATED)
);
if($r) {
xchan_query($r);
$items = fetch_post_tags($r,true);
}
else {
$items = array();
}
$o = conversation($items,'moderate',false,'traditional');
return $o;
}
}

View File

@@ -110,17 +110,17 @@ class Mood extends \Zotlabs\Web\Controller {
function get() {
function get() {
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
return;
}
nav_set_selected(t('Mood'));
$parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0');
$verbs = get_mood_verbs();
$shortlist = array();

View File

@@ -154,7 +154,7 @@ class Network extends \Zotlabs\Web\Controller {
));
}
nav_set_selected('network');
nav_set_selected(t('Activity'));
$channel_acl = array(
'allow_cid' => $channel['channel_allow_cid'],
@@ -325,8 +325,8 @@ class Network extends \Zotlabs\Web\Controller {
'$xchan' => $xchan,
'$order' => $order,
'$file' => $file,
'$cats' => $category,
'$tags' => $hashtags,
'$cats' => urlencode($category),
'$tags' => urlencode($hashtags),
'$dend' => $datequery,
'$mid' => '',
'$verb' => $verb,
@@ -409,8 +409,9 @@ class Network extends \Zotlabs\Web\Controller {
}
$abook_uids = " and abook.abook_channel = " . local_channel() . " ";
if($firehose && (! get_config('system','disable_discover_tab'))) {
$disable_discover_tab = get_config('system','disable_discover_tab') || get_config('system','disable_discover_tab') === false;
if($firehose && (! $disable_discover_tab)) {
require_once('include/channel.php');
$sys = get_sys_channel();
$uids = " and item.uid = " . intval($sys['channel_id']) . " ";
@@ -551,7 +552,7 @@ class Network extends \Zotlabs\Web\Controller {
$mode = (($nouveau) ? 'network-new' : 'network');
$o .= conversation($a,$items,$mode,$update,$page_mode);
$o .= conversation($items,$mode,$update,$page_mode);
if(($items) && (! $update))
$o .= alt_pager($a,count($items));

View File

@@ -134,7 +134,7 @@ class New_channel extends \Zotlabs\Web\Controller {
$name = array('name', t('Name or caption'), ((x($_REQUEST,'name')) ? $_REQUEST['name'] : ''), t('Examples: "Bob Jameson", "Lisa and her Horses", "Soccer", "Aviation Group"'), "*");
$nickhub = '@' . \App::get_hostname();
$nickname = array('nickname', t('Choose a short nickname'), ((x($_REQUEST,'nickname')) ? $_REQUEST['nickname'] : ''), sprintf( t('Your nickname will be used to create an easy to remember channel address e.g. nickname%s'), $nickhub), "*");
$role = array('permissions_role' , t('Channel role and privacy'), ($privacy_role) ? $privacy_role : 'social', t('Select a channel role with your privacy requirements.') . ' <a href="help/roles" target="_blank">' . t('Read more about roles') . '</a>',$perm_roles);
$role = array('permissions_role' , t('Channel role and privacy'), ($privacy_role) ? $privacy_role : 'social', t('Select a channel role with your privacy requirements.') . ' <a href="help/member/member_guide#Account_Permission_Roles" target="_blank">' . t('Read more about roles') . '</a>',$perm_roles);
$o = replace_macros(get_markup_template('new_channel.tpl'), array(
'$title' => t('Create Channel'),

View File

@@ -22,7 +22,7 @@ class Oembed extends \Zotlabs\Web\Controller {
}
else {
echo "<html><head><base target=\"_blank\" /></head><body>";
echo "<html><head><base target=\"_blank\" rel=\"nofollow noopener\" /></head><body>";
$src = base64url_decode(argv(1));
$j = oembed_fetch_url($src);
echo $j['html'];

View File

@@ -108,7 +108,7 @@ class Oep extends \Zotlabs\Web\Controller {
$ret['type'] = 'rich';
$w = (($maxwidth) ? $maxwidth : 640);
$h = (($maxheight) ? $maxheight : $w * 2 / 3);
$h = (($maxheight) ? $maxheight : intval($w * 2 / 3));
$ret['html'] = '<div style="width: ' . $w . '; height: ' . $h . '; font-family: sans-serif,arial,freesans;" >' . $o . '</div>';
@@ -167,7 +167,7 @@ class Oep extends \Zotlabs\Web\Controller {
$ret['type'] = 'rich';
$w = (($maxwidth) ? $maxwidth : 640);
$h = (($maxheight) ? $maxheight : $w * 2 / 3);
$h = (($maxheight) ? $maxheight : intval($w * 2 / 3));
$ret['html'] = '<div style="width: ' . $w . '; height: ' . $h . '; font-family: sans-serif,arial,freesans;" >' . $o . '</div>';

View File

@@ -3,7 +3,6 @@ namespace Zotlabs\Module;
require_once('include/items.php');
require_once('include/conversation.php');
require_once('include/page_widgets.php');
class Page extends \Zotlabs\Web\Controller {
@@ -43,11 +42,31 @@ class Page extends \Zotlabs\Web\Controller {
$channel_address = argv(1);
// Always look first for the page name prefixed by the observer language; for instance page/nickname/de/foo
// followed by page/nickname/foo if that is not found.
// If your browser language is de and you want to access the default in this case,
// use page/nickname/-/foo to over-ride the language and access only the page with pagelink of 'foo'
$page_name = '';
$ignore_language = false;
for($x = 2; $x < argc(); $x ++) {
if($page_name === '' && argv($x) === '-') {
$ignore_language = true;
continue;
}
if($page_name)
$page_name .= '/';
$page_name .= argv($x);
}
// The page link title was stored in a urlencoded format
// php or the browser may/will have decoded it, so re-encode it for our search
$page_id = urlencode(argv(2));
$page_id = urlencode($page_name);
$lang_page_id = urlencode(\App::$language . '/' . $page_name);
$u = q("select channel_id from channel where channel_address = '%s' limit 1",
dbesc($channel_address)
);
@@ -64,16 +83,31 @@ class Page extends \Zotlabs\Web\Controller {
require_once('include/security.php');
$sql_options = item_permissions_sql($u[0]['channel_id']);
$r = q("select item.* from item left join iconfig on item.id = iconfig.iid
where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
and (( iconfig.k = 'WEBPAGE' and item_type = %d )
OR ( iconfig.k = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
intval($u[0]['channel_id']),
dbesc($page_id),
intval(ITEM_TYPE_WEBPAGE),
intval(ITEM_TYPE_PDL)
);
$r = null;
if(! $ignore_language) {
$r = q("select item.* from item left join iconfig on item.id = iconfig.iid
where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
and (( iconfig.k = 'WEBPAGE' and item_type = %d )
OR ( iconfig.k = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
intval($u[0]['channel_id']),
dbesc($lang_page_id),
intval(ITEM_TYPE_WEBPAGE),
intval(ITEM_TYPE_PDL)
);
}
if(! $r) {
$r = q("select item.* from item left join iconfig on item.id = iconfig.iid
where item.uid = %d and iconfig.cat = 'system' and iconfig.v = '%s' and item.item_delayed = 0
and (( iconfig.k = 'WEBPAGE' and item_type = %d )
OR ( iconfig.k = 'PDL' AND item_type = %d )) $sql_options $revision limit 1",
intval($u[0]['channel_id']),
dbesc($page_id),
intval(ITEM_TYPE_WEBPAGE),
intval(ITEM_TYPE_PDL)
);
}
if(! $r) {
// Check again with no permissions clause to see if it is a permissions issue

View File

@@ -154,7 +154,9 @@ class Photo extends \Zotlabs\Web\Controller {
intval($resolution)
);
if($r && $r[0]['photo_usage'] == PHOTO_COVER)
// viewing cover photos is allowed unless a plugin chooses to block it.
if($r && intval($r[0]['photo_usage']) === PHOTO_COVER && $resolution >= PHOTO_RES_COVER_1200)
$allowed = 1;
$d = [ 'imgscale' => $resolution, 'resource_id' => $photo, 'photo' => $r, 'allowed' => $allowed ];

View File

@@ -554,6 +554,8 @@ class Photos extends \Zotlabs\Web\Controller {
$sql_item = item_permissions_sql($owner_uid,get_observer_hash());
$sql_extra = permissions_sql($owner_uid,get_observer_hash(),'photo');
$sql_attach = permissions_sql($owner_uid,get_observer_hash(),'attach');
nav_set_selected(t('Photos'));
$o = "";
@@ -689,7 +691,7 @@ class Photos extends \Zotlabs\Web\Controller {
(SELECT resource_id, max(imgscale) imgscale FROM photo left join attach on folder = '%s' and photo.resource_id = attach.hash WHERE attach.uid = %d AND imgscale <= 4 AND photo_usage IN ( %d, %d ) and is_nsfw = %d $sql_extra GROUP BY resource_id) ph
ON (p.resource_id = ph.resource_id AND p.imgscale = ph.imgscale)
ORDER BY created $order LIMIT %d OFFSET %d",
dbesc($datum),
dbesc($x['hash']),
intval($owner_uid),
intval(PHOTO_NORMAL),
intval(PHOTO_PROFILE),

View File

@@ -41,7 +41,10 @@ class Poke extends \Zotlabs\Web\Controller {
$activity = ACTIVITY_POKE . '#' . urlencode($verbs[$verb][0]);
$contact_id = intval($_REQUEST['cid']);
if(! $contact_id)
$xchan = trim($_REQUEST['xchan']);
if(! ($contact_id || $xchan))
return;
$parent = ((x($_REQUEST,'parent')) ? intval($_REQUEST['parent']) : 0);
@@ -49,13 +52,20 @@ class Poke extends \Zotlabs\Web\Controller {
logger('poke: verb ' . $verb . ' contact ' . $contact_id, LOGGER_DEBUG);
$r = q("SELECT * FROM abook left join xchan on xchan_hash = abook_xchan where abook_id = %d and abook_channel = %d LIMIT 1",
intval($contact_id),
intval($uid)
);
if($contact_id) {
$r = q("SELECT * FROM abook left join xchan on xchan_hash = abook_xchan where abook_id = %d and abook_channel = %d LIMIT 1",
intval($contact_id),
intval($uid)
);
}
if($xchan) {
$r = q("SELECT * FROM xchan where xchan_hash like ( '%s' ) LIMIT 1",
dbesc($xchan . '%')
);
}
if(! $r) {
logger('poke: no target ' . $contact_id);
logger('poke: no target.');
return;
}
@@ -79,7 +89,7 @@ class Poke extends \Zotlabs\Web\Controller {
$deny_gid = $r[0]['deny_gid'];
}
}
else {
elseif($contact_id) {
$item_private = ((x($_GET,'private')) ? intval($_GET['private']) : 0);
@@ -92,9 +102,11 @@ class Poke extends \Zotlabs\Web\Controller {
$arr = array();
$arr['item_wall'] = 1;
$arr['owner_xchan'] = (($parent_item) ? $parent_item['owner_xchan'] : $channel['channel_hash']);
$arr['parent_mid'] = (($parent_mid) ? $parent_mid : $mid);
$arr['parent_mid'] = (($parent_mid) ? $parent_mid : '');
$arr['title'] = '';
$arr['allow_cid'] = $allow_cid;
$arr['allow_gid'] = $allow_gid;
@@ -131,12 +143,14 @@ class Poke extends \Zotlabs\Web\Controller {
function get() {
function get() {
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
return;
}
nav_set_selected(t('Poke'));
$name = '';
$id = '';

View File

@@ -7,7 +7,9 @@ require_once('include/zot.php');
class Probe extends \Zotlabs\Web\Controller {
function get() {
nav_set_selected(t('Remote Diagnostics'));
$o .= '<h3>Probe Diagnostic</h3>';
$o .= '<form action="probe" method="get">';

View File

@@ -21,6 +21,8 @@ class Profile extends \Zotlabs\Web\Controller {
\App::$error = 404;
return;
}
nav_set_selected('Profile');
$profile = '';
$channel = \App::get_channel();

View File

@@ -190,7 +190,7 @@ class Profile_photo extends \Zotlabs\Web\Controller {
build_sync_packet($channel['channel_id'],array('file' => array($sync)));
// Similarly, tell the nav bar to bypass the cache and update the avater image.
// Similarly, tell the nav bar to bypass the cache and update the avatar image.
$_SESSION['reload_avatar'] = true;
info( t('Shift-reload the page or clear browser cache if the new photo does not display immediately.') . EOL);

View File

@@ -9,7 +9,7 @@ class Profiles extends \Zotlabs\Web\Controller {
function init() {
nav_set_selected('profiles');
nav_set_selected('Profiles');
if(! local_channel()) {
return;

View File

@@ -16,8 +16,8 @@ class Pubstream extends \Zotlabs\Web\Controller {
return login();
}
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)
return;
$item_normal = item_normal();
@@ -167,7 +167,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
// fake it
$mode = ('network');
$o .= conversation($a,$items,$mode,$update,$page_mode);
$o .= conversation($items,$mode,$update,$page_mode);
if(($items) && (! $update))
$o .= alt_pager($a,count($items));

View File

@@ -8,7 +8,7 @@ class Randprof extends \Zotlabs\Web\Controller {
function init() {
$x = random_profile();
if($x)
goaway(chanlink_url($x));
goaway(chanlink_hash($x));
/** FIXME this doesn't work at the moment as a fallback */
goaway(z_root() . '/profile');

View File

@@ -39,6 +39,10 @@ class React extends \Zotlabs\Web\Controller {
$n['author_xchan'] = $channel['channel_hash'];
$x = item_store($n);
if(local_channel())
retain_item($postid);
if($x['success']) {
$nid = $x['item_id'];
\Zotlabs\Daemon\Master::Summon(array('Notifier','like',$nid));

View File

@@ -151,7 +151,7 @@ class Register extends \Zotlabs\Web\Controller {
$new_channel = false;
$next_page = 'new_channel';
if(get_config('system','auto_channel_create') || get_config('system','server_role') == 'basic') {
if(get_config('system','auto_channel_create')) {
$new_channel = auto_channel_create($result['account']['account_id']);
if($new_channel['success']) {
$channel_id = $new_channel['channel']['channel_id'];
@@ -237,14 +237,12 @@ class Register extends \Zotlabs\Web\Controller {
$name = array('name', t('Name or caption'), ((x($_REQUEST,'name')) ? $_REQUEST['name'] : ''), t('Examples: "Bob Jameson", "Lisa and her Horses", "Soccer", "Aviation Group"'));
$nickhub = '@' . str_replace(array('http://','https://','/'), '', get_config('system','baseurl'));
$nickname = array('nickname', t('Choose a short nickname'), ((x($_REQUEST,'nickname')) ? $_REQUEST['nickname'] : ''), sprintf( t('Your nickname will be used to create an easy to remember channel address e.g. nickname%s'), $nickhub));
$role = array('permissions_role' , t('Channel role and privacy'), ($privacy_role) ? $privacy_role : 'social', t('Select a channel role with your privacy requirements.') . ' <a href="help/roles" target="_blank">' . t('Read more about roles') . '</a>',$perm_roles);
$role = array('permissions_role' , t('Channel role and privacy'), ($privacy_role) ? $privacy_role : 'social', t('Select a channel role with your privacy requirements.') . ' <a href="help/member/member_guide#Account_Permission_Roles" target="_blank">' . t('Read more about roles') . '</a>',$perm_roles);
$tos = array('tos', $label_tos, '', '', array(t('no'),t('yes')));
$server_role = get_config('system','server_role');
$auto_create = (($server_role == 'basic') || (get_config('system','auto_channel_create')) ? true : false);
$default_role = (($server_role == 'basic') ? 'social' : get_config('system','default_permissions_role'));
$auto_create = (get_config('system','auto_channel_create') ? true : false);
$default_role = get_config('system','default_permissions_role');
require_once('include/bbcode.php');

View File

@@ -59,6 +59,8 @@ class Rpost extends \Zotlabs\Web\Controller {
}
return login();
}
nav_set_selected(t('Post'));
// If we have saved rpost session variables, but nothing in the current $_REQUEST, recover the saved variables

View File

@@ -15,14 +15,14 @@ class Search extends \Zotlabs\Web\Controller {
if((get_config('system','block_public')) || (get_config('system','block_public_search'))) {
if ((! local_channel()) && (! remote_channel())) {
notice( t('Public access denied.') . EOL);
return;
return;
}
}
if($load)
$_SESSION['loadtime'] = datetime_convert();
nav_set_selected('search');
nav_set_selected(t('Search'));
require_once("include/bbcode.php");
require_once('include/security.php');
@@ -81,11 +81,12 @@ class Search extends \Zotlabs\Web\Controller {
return $o;
if($tag) {
$sql_extra = sprintf(" AND item.id IN (select oid from term where otype = %d and ttype in ( %d , %d) and term = '%s') ",
$wildtag = str_replace('*','%',$search);
$sql_extra = sprintf(" AND item.id IN (select oid from term where otype = %d and ttype in ( %d , %d) and term like '%s') ",
intval(TERM_OBJ_POST),
intval(TERM_HASHTAG),
intval(TERM_COMMUNITYTAG),
dbesc(protect_sprintf($search))
dbesc(protect_sprintf($wildtag))
);
}
else {
@@ -144,7 +145,7 @@ class Search extends \Zotlabs\Web\Controller {
}
$item_normal = item_normal();
$item_normal = item_normal_search();
$pub_sql = public_permissions_sql($observer_hash);
require_once('include/channel.php');
@@ -225,7 +226,7 @@ class Search extends \Zotlabs\Web\Controller {
else
$o .= '<h2>' . sprintf( t('Search results for: %s'),htmlspecialchars($search, ENT_COMPAT,'UTF-8')) . '</h2>';
$o .= conversation($a,$items,'search',$update,'client');
$o .= conversation($items,'search',$update,'client');
$o .= '</div>';

View File

@@ -53,7 +53,7 @@ class Settings extends \Zotlabs\Web\Controller {
function get() {
nav_set_selected('settings');
nav_set_selected('Settings');
if((! local_channel()) || ($_SESSION['delegate'])) {
notice( t('Permission denied.') . EOL );

View File

@@ -16,7 +16,7 @@ class Account {
$account = \App::get_account();
if($email != $account['account_email']) {
if(! valid_email($email))
if(! validate_email($email))
$errs[] = t('Not valid email.');
$adm = trim(get_config('system','admin_email'));
if(($adm) && (strcasecmp($email,$adm) == 0)) {

View File

@@ -324,7 +324,7 @@ class Channel {
foreach($global_perms as $k => $perm) {
$options = array();
foreach($perm_opts as $opt) {
if((! strstr($k,'view')) && $opt[1] == PERMS_PUBLIC)
if(((! strstr($k,'view')) && $k !== 'post_comments') && $opt[1] == PERMS_PUBLIC)
continue;
$options[$opt[1]] = $opt[0];
}
@@ -489,7 +489,6 @@ class Channel {
'$h_prv' => t('Security and Privacy Settings'),
'$permissions_set' => $permissions_set,
'$server_role' => \Zotlabs\Lib\System::get_server_role(),
'$perms_set_msg' => t('Your permissions are already configured. Click to view/adjust'),
'$hide_presence' => array('hide_presence', t('Hide my online presence'),$hide_presence, t('Prevents displaying in your profile that you are online'), $yes_no),

View File

@@ -10,14 +10,16 @@ class Featured {
call_hooks('feature_settings_post', $_POST);
if(intval($_POST['affinity_cmax'])) {
set_pconfig(local_channel(),'affinity','cmax',intval($_POST['affinity_cmax']));
}
if(intval($_POST['affinity_cmin'])) {
set_pconfig(local_channel(),'affinity','cmin',intval($_POST['affinity_cmin']));
}
if(intval($_POST['affinity_cmax']) || intval($_POST['affinity_cmin'])) {
info( t('Affinity Slider settings updated.') . EOL);
if($_POST['affinity_slider-submit']) {
if(intval($_POST['affinity_cmax'])) {
set_pconfig(local_channel(),'affinity','cmax',intval($_POST['affinity_cmax']));
}
if(intval($_POST['affinity_cmin'])) {
set_pconfig(local_channel(),'affinity','cmin',intval($_POST['affinity_cmin']));
}
if(intval($_POST['affinity_cmax']) || intval($_POST['affinity_cmin'])) {
info( t('Affinity Slider settings updated.') . EOL);
}
}
build_sync_packet();

View File

@@ -73,9 +73,6 @@ class Setup extends \Zotlabs\Web\Controller {
$phpath = trim($_POST['phpath']);
$adminmail = trim($_POST['adminmail']);
$siteurl = trim($_POST['siteurl']);
$server_role = trim($_POST['server_role']);
if(! $server_role)
$server_role = 'standard';
// $siteurl should not have a trailing slash
@@ -103,9 +100,6 @@ class Setup extends \Zotlabs\Web\Controller {
$timezone = trim($_POST['timezone']);
$adminmail = trim($_POST['adminmail']);
$siteurl = trim($_POST['siteurl']);
$server_role = trim($_POST['server_role']);
if(! $server_role)
$server_role = 'standard';
if($siteurl != z_root()) {
$test = z_fetch_url($siteurl."/setup/testrewrite");
@@ -134,7 +128,7 @@ class Setup extends \Zotlabs\Web\Controller {
'$dbpass' => $dbpass,
'$dbdata' => $dbdata,
'$dbtype' => $dbtype,
'$server_role' => $server_role,
'$server_role' => 'pro',
'$timezone' => $timezone,
'$siteurl' => $siteurl,
'$site_id' => random_string(),
@@ -192,14 +186,17 @@ class Setup extends \Zotlabs\Web\Controller {
}
$db_return_text = '';
if(x(\App::$data, 'db_installed')) {
$txt = '<p style="font-size: 130%;">';
$txt .= t('Your site database has been installed.') . EOL;
$pass = 'Installation succeeded!';
$icon = 'check';
$txt = t('Your site database has been installed.') . EOL;
$db_return_text .= $txt;
}
if(x(\App::$data, 'db_failed')) {
$pass = 'Database install failed!';
$icon = 'exclamation-triangle';
$txt = t('You may need to import the file "install/schema_xxx.sql" manually using a database client.') . EOL;
$txt .= t('Please see the file "install/INSTALL.txt".') . EOL ."<hr>" ;
$txt .= "<pre>".\App::$data['db_failed'] . "</pre>". EOL ;
$txt .= "<pre>" . \App::$data['db_failed'] . "</pre>". EOL ;
$db_return_text .= $txt;
}
if(\DBA::$dba && \DBA::$dba->connected) {
@@ -223,8 +220,10 @@ class Setup extends \Zotlabs\Web\Controller {
$tpl = get_markup_template('install.tpl');
return replace_macros($tpl, array(
'$title' => $install_title,
'$pass' => '',
'$text' => $db_return_text . $this->what_next(),
'$icon' => $icon,
'$pass' => $pass,
'$text' => $db_return_text,
'$what_next' => $this->what_next()
));
}
@@ -324,11 +323,6 @@ class Setup extends \Zotlabs\Web\Controller {
$siteurl = trim($_POST['siteurl']);
$timezone = ((x($_POST,'timezone')) ? ($_POST['timezone']) : 'America/Los_Angeles');
$server_roles = [
'basic' => t('Basic/Minimal Social Networking'),
'standard' => t('Standard Configuration (default)'),
'pro' => t('Professional')
];
$tpl = get_markup_template('install_settings.tpl');
$o .= replace_macros($tpl, array(
@@ -348,8 +342,6 @@ class Setup extends \Zotlabs\Web\Controller {
'$siteurl' => array('siteurl', t('Website URL'), z_root(), t('Please use SSL (https) URL if available.')),
'$server_role' => array('server_role', t("Server Configuration/Role"), 'standard','',$server_roles),
'$timezone' => array('timezone', t('Please select a default timezone for your website'), $timezone, '', get_timezones()),
'$baseurl' => z_root(),
@@ -408,7 +400,7 @@ class Setup extends \Zotlabs\Web\Controller {
if(!$passed) {
$help .= t('Could not find a command line version of PHP in the web server PATH.'). EOL;
$help .= t('If you don\'t have a command line version of PHP installed on server, you will not be able to run background polling via cron.') . EOL;
$help .= EOL . EOL ;
$help .= EOL;
$tpl = get_markup_template('field_input.tpl');
$help .= replace_macros($tpl, array(
'$field' => array('phpath', t('PHP executable path'), $phpath, t('Enter full path to php executable. You can leave this blank to continue the installation.')),
@@ -456,7 +448,7 @@ class Setup extends \Zotlabs\Web\Controller {
userReadableSize($result['max_upload_filesize']),
$result['max_file_uploads']
);
$help .= '<br>' . t('You can adjust these settings in the server php.ini file.');
$help .= '<br><br>' . t('You can adjust these settings in the server php.ini file.');
$this->check_add($checks, t('PHP upload limits'), true, false, $help);
}
@@ -748,12 +740,12 @@ class Setup extends \Zotlabs\Web\Controller {
$baseurl = z_root();
return
t('<h1>What next</h1>')
."<p>".t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.')
t('<h1>What next?</h1>')
."<div class=\"alert alert-info\">".t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.').EOL
.t('Please see the file "install/INSTALL.txt".')
."</p><p>"
."</div><div>"
.t("Go to your new hub <a href='$baseurl/register'>registration page</a> and register as new member. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.")
."</p>";
."</div>";
}
/**

View File

@@ -76,7 +76,7 @@ class Share extends \Zotlabs\Web\Controller {
$observer = \App::get_observer();
$parsed = $observer['xchan_url'];
if($parsed) {
$post_url = $parsed['scheme'] . ':' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '')
$post_url = $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '')
. '/rpost';
/**

View File

@@ -4,6 +4,11 @@ require_once('include/conversation.php');
require_once('include/text.php');
/**
* @file Zotlabs/Module/Sharedwithme.php
*
*/
class Sharedwithme extends \Zotlabs\Web\Controller {
function get() {

View File

@@ -5,14 +5,13 @@ namespace Zotlabs\Module;
class Siteinfo extends \Zotlabs\Web\Controller {
function init() {
if (argv(1) === 'json') {
logger(print_r($_REQUEST,true));
if (argv(1) === 'json' || $_REQUEST['module_format'] === 'json') {
$data = get_site_info();
json_return_and_die($data);
}
}
function get() {
$siteinfo = replace_macros(get_markup_template('siteinfo.tpl'),

View File

@@ -1,14 +0,0 @@
<?php
namespace Zotlabs\Module;
class Siteinfo_json extends \Zotlabs\Web\Controller {
function init() {
$data = get_site_info();
json_return_and_die($data);
}
}

View File

@@ -28,6 +28,8 @@ class Suggest extends \Zotlabs\Web\Controller {
notice( t('Permission denied.') . EOL);
return;
}
nav_set_selected(t('Suggest Channels'));
$_SESSION['return_url'] = z_root() . '/' . \App::$cmd;

40
Zotlabs/Module/Token.php Normal file
View File

@@ -0,0 +1,40 @@
<?php
namespace Zotlabs\Module;
class Token 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');
$oauth2_server->handleTokenRequest(\OAuth2\Request::createFromGlobals())->send();
killme();
}
}

View File

@@ -2,16 +2,25 @@
namespace Zotlabs\Module;
require_once('include/attach.php');
require_once('include/channel.php');
require_once('include/photos.php');
class Wall_attach extends \Zotlabs\Web\Controller {
function init() {
logger('request_method: ' . $_SERVER['REQUEST_METHOD'],LOGGER_DATA,LOG_INFO);
logger('wall_attach: ' . print_r($_REQUEST,true),LOGGER_DEBUG,LOG_INFO);
logger('wall_attach files: ' . print_r($_FILES,true),LOGGER_DEBUG,LOG_INFO);
// for testing without actually storing anything
// http_status_exit(200,'OK');
}
function post() {
$using_api = false;
$result = [];
if($_REQUEST['api_source'] && array_key_exists('media',$_FILES)) {
$using_api = true;
}
@@ -28,7 +37,46 @@ class Wall_attach extends \Zotlabs\Web\Controller {
if(! $channel)
killme();
$matches = [];
$partial = false;
$x = preg_match('/bytes (\d*)\-(\d*)\/(\d*)/',$_SERVER['HTTP_CONTENT_RANGE'],$matches);
if($x) {
// logger('Content-Range: ' . print_r($matches,true));
$partial = true;
}
if($partial) {
$x = save_chunk($channel,$matches[1],$matches[2],$matches[3]);
if($x['partial']) {
header('Range: bytes=0-' . (($x['length']) ? $x['length'] - 1 : 0));
json_return_and_die($result);
}
else {
header('Range: bytes=0-' . (($x['size']) ? $x['size'] - 1 : 0));
$_FILES['userfile'] = [
'name' => $x['name'],
'type' => $x['type'],
'tmp_name' => $x['tmp_name'],
'error' => $x['error'],
'size' => $x['size']
];
}
}
else {
if(! array_key_exists('userfile',$_FILES)) {
$_FILES['userfile'] = [
'name' => $_FILES['files']['name'],
'type' => $_FILES['files']['type'],
'tmp_name' => $_FILES['files']['tmp_name'],
'error' => $_FILES['files']['error'],
'size' => $_FILES['files']['size']
];
}
}
$observer = \App::get_observer();
@@ -51,10 +99,11 @@ class Wall_attach extends \Zotlabs\Web\Controller {
if($using_api)
return $s;
echo $s;
killme();
$result['message'] = $s;
json_return_and_die($result);
}
}

View File

@@ -34,7 +34,9 @@ class Webpages extends \Zotlabs\Web\Controller {
\App::$error = 404;
return;
}
nav_set_selected(t('Webpages'));
$which = argv(1);
$_SESSION['return_url'] = \App::$query_string;
@@ -179,11 +181,8 @@ class Webpages extends \Zotlabs\Web\Controller {
// so just list titles and an edit link.
/** @TODO - this should be replaced with pagelist_widget */
$sql_extra = item_permissions_sql($owner);
$r = q("select * from iconfig left join item on iconfig.iid = item.id
where item.uid = %d and iconfig.cat = 'system' and iconfig.k = 'WEBPAGE' and item_type = %d
$sql_extra order by item.created desc",
@@ -191,12 +190,6 @@ class Webpages extends \Zotlabs\Web\Controller {
intval(ITEM_TYPE_WEBPAGE)
);
// $r = q("select * from item_id left join item on item_id.iid = item.id
// where item_id.uid = %d and service = 'WEBPAGE' and item_type = %d $sql_extra order by item.created desc",
// intval($owner),
// intval(ITEM_TYPE_WEBPAGE)
// );
if(! $r)
$x['pagetitle'] = 'home';
@@ -218,13 +211,15 @@ class Webpages extends \Zotlabs\Web\Controller {
'created' => $rr['created'],
'edited' => $rr['edited'],
'mimetype' => $rr['mimetype'],
'pagetitle' => $rr['v'],
'pageurl' => str_replace('%2f','/',$rr['v']),
'pagetitle' => urldecode($rr['v']),
'mid' => $rr['mid'],
'layout_mid' => $rr['layout_mid']
);
$pages[$rr['iid']][] = array(
'url' => $rr['iid'],
'pagetitle' => $rr['v'],
'pageurl' => str_replace('%2f','/',$rr['v']),
'pagetitle' => urldecode($rr['v']),
'title' => $rr['title'],
'created' => datetime_convert('UTC',date_default_timezone_get(),$rr['created']),
'edited' => datetime_convert('UTC',date_default_timezone_get(),$rr['edited']),

View File

@@ -117,7 +117,7 @@ class Wfinger extends \Zotlabs\Web\Controller {
[
'rel' => 'http://ostatus.org/schema/1.0/subscribe',
'template' => z_root() . '/follow/url={uri}',
'template' => z_root() . '/follow?f=&url={uri}',
],
[

View File

@@ -42,7 +42,7 @@ class Wiki extends \Zotlabs\Web\Controller {
if(! feature_enabled(\App::$profile_uid,'wiki')) {
notice( t('Not found') . EOL);
return;
return;
}
@@ -76,6 +76,8 @@ class Wiki extends \Zotlabs\Web\Controller {
$wiki_owner = true;
nav_set_selected(t('Wiki'));
// Obtain the default permission settings of the channel
$owner_acl = array(
'allow_cid' => $owner['channel_allow_cid'],
@@ -192,12 +194,29 @@ class Wiki extends \Zotlabs\Web\Controller {
goaway(z_root() . '/' . argv(0) . '/' . argv(1) . '/' . $wikiUrlName . '/Home');
case 4:
default:
// GET /wiki/channel/wiki/page
// Fetch the wiki info and determine observer permissions
$wikiUrlName = urldecode(argv(2));
$pageUrlName = urldecode(argv(3));
$page_name = '';
$ignore_language = false;
for($x = 3; $x < argc(); $x ++) {
if($page_name === '' && argv($x) === '-') {
$ignore_language = true;
continue;
}
if($page_name) {
$page_name .= '/';
}
$page_name .= argv($x);
}
$pageUrlName = urldecode($page_name);
$langPageUrlName = urldecode(\App::$language . '/' . $page_name);
$w = Zlib\NativeWiki::exists_by_name($owner['channel_id'], $wikiUrlName);
@@ -227,9 +246,15 @@ class Wiki extends \Zotlabs\Web\Controller {
$wikiheaderPage = urldecode($pageUrlName);
$renamePage = (($wikiheaderPage === 'Home') ? '' : t('Rename page'));
$p = [];
$p = Zlib\NativeWikiPage::get_page_content(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
if(! $p['success']) {
if(! $ignore_language) {
$p = Zlib\NativeWikiPage::get_page_content(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $langPageUrlName));
}
if(! ($p && $p['success'])) {
$p = Zlib\NativeWikiPage::get_page_content(array('channel_id' => $owner['channel_id'], 'observer_hash' => $observer_hash, 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
}
if(! ($p && $p['success'])) {
notice( t('Error retrieving page content') . EOL);
goaway(z_root() . '/' . argv(0) . '/' . argv(1) );
}
@@ -251,8 +276,8 @@ class Wiki extends \Zotlabs\Web\Controller {
}
$showPageControls = $wiki_editor;
break;
default: // Strip the extraneous URL components
goaway('/' . argv(0) . '/' . argv(1) . '/' . $wikiUrlName . '/' . $pageUrlName);
// default: // Strip the extraneous URL components
// goaway('/' . argv(0) . '/' . argv(1) . '/' . $wikiUrlName . '/' . $pageUrlName);
}
@@ -274,7 +299,8 @@ class Wiki extends \Zotlabs\Web\Controller {
'$showPageControls' => $showPageControls,
'$editOrSourceLabel' => (($showPageControls) ? t('Edit') : t('Source')),
'$tools_label' => 'Page Tools',
'$channel' => $owner['channel_address'],
'$channel_address' => $owner['channel_address'],
'$channel_id' => $owner['channel_id'],
'$resource_id' => $resource_id,
'$page' => $pageUrlName,
'$mimeType' => $mimeType,
@@ -331,6 +357,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$html = Zlib\NativeWikiPage::convert_links(zidify_links(smilies(bbcode($content))),$wikiURL);
}
else {
$bb = Zlib\NativeWikiPage::bbcode($content);
$x = new ZLib\MarkdownSoap($bb);
$md = $x->clean();
@@ -473,10 +500,12 @@ class Wiki extends \Zotlabs\Web\Controller {
$x = new \Zotlabs\Widget\Wiki_pages();
$page_list_html = $x->widget(array(
'resource_id' => $resource_id,
'refresh' => true,
'channel' => argv(1)));
$page_list_html = $x->widget([
'resource_id' => $resource_id,
'channel_id' => $owner['channel_id'],
'channel_address' => $owner['channel_address'],
'refresh' => true
]);
json_return_and_die(array('pages' => $page_list_html, 'message' => '', 'success' => true));
}

View File

@@ -9,6 +9,7 @@ class Xrd extends \Zotlabs\Web\Controller {
function init() {
$uri = urldecode(notags(trim($_GET['uri'])));
$subject = $uri;
logger('xrd: ' . $uri,LOGGER_DEBUG);
$resource = $uri;
@@ -30,13 +31,7 @@ class Xrd extends \Zotlabs\Web\Controller {
);
if(! $r)
killme();
$dspr = replace_macros(get_markup_template('xrd_diaspora.tpl'),array(
'$baseurl' => z_root(),
'$dspr_guid' => $r[0]['channel_guid'] . str_replace('.','',\App::get_hostname()),
'$dspr_key' => base64_encode(pemtorsa($r[0]['channel_pubkey']))
));
$salmon_key = salmon_key($r[0]['channel_pubkey']);
header('Access-Control-Allow-Origin: *');
@@ -49,11 +44,11 @@ class Xrd extends \Zotlabs\Web\Controller {
if($aliases[$x] === $resource)
unset($aliases[$x]);
}
$o = replace_macros(get_markup_template('xrd_person.tpl'), array(
'$nick' => $r[0]['channel_address'],
'$accturi' => $resource,
'$subject' => $subject,
'$aliases' => $aliases,
'$profile_url' => z_root() . '/channel/' . $r[0]['channel_address'],
'$hcard_url' => z_root() . '/hcard/' . $r[0]['channel_address'],
@@ -61,12 +56,8 @@ class Xrd extends \Zotlabs\Web\Controller {
'$zot_post' => z_root() . '/post/' . $r[0]['channel_address'],
'$poco_url' => z_root() . '/poco/' . $r[0]['channel_address'],
'$photo' => z_root() . '/photo/profile/l/' . $r[0]['channel_id'],
'$dspr' => $dspr,
// '$salmon' => z_root() . '/salmon/' . $r[0]['channel_address'],
// '$salmen' => z_root() . '/salmon/' . $r[0]['channel_address'] . '/mention',
'$modexp' => 'data:application/magic-public-key,' . $salmon_key,
'$subscribe' => z_root() . '/follow?url={uri}',
'$bigkey' => salmon_key($r[0]['channel_pubkey'])
'$subscribe' => z_root() . '/follow?f=&amp;url={uri}',
));

View File

@@ -187,14 +187,11 @@ class BasicAuth extends DAV\Auth\Backend\AbstractBasic {
}
protected function check_module_access($channel_id) {
if($channel_id && \App::$module === 'cdav') {
$x = get_pconfig($channel_id,'cdav','enabled');
if(! $x) {
$this->module_disabled = true;
return false;
}
if($channel_id && in_array(\App::$module,[ 'dav', 'cdav', 'snap'] )) {
return true;
}
return true;
$this->module_disabled = true;
return false;
}
/**

View File

@@ -17,6 +17,7 @@ use Sabre\DAV;
*/
class Browser extends DAV\Browser\Plugin {
public $build_page = false;
/**
* @see set_writeable()
* @see \\Sabre\\DAV\\Auth\\Backend\\BackendInterface
@@ -243,6 +244,8 @@ class Browser extends DAV\Browser\Plugin {
$a = false;
nav_set_selected(t('Files'));
\App::$page['content'] = $html;
load_pdl();
@@ -257,7 +260,7 @@ class Browser extends DAV\Browser\Plugin {
}
}
$this->server->httpResponse->setHeader('Content-Security-Policy', "script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'");
construct_page();
$this->build_page = true;
}
/**

View File

@@ -265,7 +265,7 @@ class File extends DAV\Node implements DAV\IFile {
$f = 'store/' . $this->auth->owner_nick . '/' . (($this->os_path) ? $this->os_path . '/' : '') . $x;
else
$f = $x;
return fopen($f, 'rb');
return @fopen($f, 'rb');
}
return dbunescbin($r[0]['content']);
}

View File

@@ -50,7 +50,7 @@ class Activity {
$o .= '<h3>' . t('Activity','widget') . '</h3><ul class="nav nav-pills flex-column">';
foreach($arr as $rv) {
$o .= '<li class="nav-item"><a class="nav-link" href="network?f=&xchan=' . urlencode($rv['author_xchan']) . '" ><span class="badge badge-default float-right">' . ((intval($rv['total'])) ? intval($rv['total']) : '') . '</span><img src="' . $rv['author']['xchan_photo_s'] . '" class="menu-img-1" /> ' . $rv['author']['xchan_name'] . '</a></li>';
$o .= '<li class="nav-item"><a class="nav-link" href="network?f=&xchan=' . urlencode($rv['author_xchan']) . '" ><span class="badge badge-secondary float-right">' . ((intval($rv['total'])) ? intval($rv['total']) : '') . '</span><img src="' . $rv['author']['xchan_photo_s'] . '" class="menu-img-1" /> ' . $rv['author']['xchan_name'] . '</a></li>';
}
$o .= '</ul></div>';
}

176
Zotlabs/Widget/Cdav.php Normal file
View File

@@ -0,0 +1,176 @@
<?php
namespace Zotlabs\Widget;
class Cdav {
function widget() {
if(!local_channel())
return;
$channel = \App::get_channel();
$principalUri = 'principals/' . $channel['channel_address'];
if(!cdav_principal($principalUri))
return;
$pdo = \DBA::$dba->db;
require_once 'vendor/autoload.php';
$o = '';
if(argc() == 2 && argv(1) === 'calendar') {
$caldavBackend = new \Sabre\CalDAV\Backend\PDO($pdo);
$sabrecals = $caldavBackend->getCalendarsForUser($principalUri);
//TODO: we should probably also check for permission to send stream here
$local_channels = q("SELECT * FROM channel LEFT JOIN abook ON abook_xchan = channel_hash WHERE channel_system = 0 AND channel_removed = 0 AND channel_hash != '%s' AND abook_channel = %d",
dbesc($channel['channel_hash']),
intval($channel['channel_id'])
);
$sharee_options .= '<option value="">' . t('Select Channel') . '</option>' . "\r\n";
foreach($local_channels as $local_channel) {
$sharee_options .= '<option value="' . $local_channel['channel_hash'] . '">' . $local_channel['channel_name'] . '</option>' . "\r\n";
}
$access_options = '<option value="3">' . t('Read-write') . '</option>' . "\r\n";
$access_options .= '<option value="2">' . t('Read-only') . '</option>' . "\r\n";
//list calendars
foreach($sabrecals as $sabrecal) {
if($sabrecal['share-access'] == 1)
$access = '';
if($sabrecal['share-access'] == 2)
$access = 'read';
if($sabrecal['share-access'] == 3)
$access = 'read-write';
$invites = $caldavBackend->getInvites($sabrecal['id']);
$json_source = '/cdav/calendar/json/' . $sabrecal['id'][0] . '/' . $sabrecal['id'][1];
$switch = get_pconfig(local_channel(), 'cdav_calendar', $sabrecal['id'][0]);
$color = (($sabrecal['{http://apple.com/ns/ical/}calendar-color']) ? $sabrecal['{http://apple.com/ns/ical/}calendar-color'] : '#3a87ad');
$editable = (($sabrecal['share-access'] == 2) ? 'false' : 'true'); // false/true must be string since we're passing it to javascript
$sharees = [];
$share_displayname = [];
foreach($invites as $invite) {
if(strpos($invite->href, 'mailto:') !== false) {
$sharee = channelx_by_hash(substr($invite->href, 7));
$sharees[] = [
'name' => $sharee['channel_name'],
'access' => (($invite->access == 3) ? ' (RW)' : ' (R)'),
'hash' => $sharee['channel_hash']
];
}
}
if(!$access) {
$my_calendars[] = [
'ownernick' => $channel['channel_address'],
'uri' => $sabrecal['uri'],
'displayname' => $sabrecal['{DAV:}displayname'],
'calendarid' => $sabrecal['id'][0],
'instanceid' => $sabrecal['id'][1],
'json_source' => $json_source,
'color' => $color,
'editable' => $editable,
'switch' => $switch,
'sharees' => $sharees
];
}
else {
$shared_calendars[] = [
'ownernick' => $channel['channel_address'],
'uri' => $sabrecal['uri'],
'displayname' => $sabrecal['{DAV:}displayname'],
'calendarid' => $sabrecal['id'][0],
'instanceid' => $sabrecal['id'][1],
'json_source' => $json_source,
'color' => $color,
'editable' => $editable,
'switch' => $switch,
'sharer' => $sabrecal['{urn:ietf:params:xml:ns:caldav}calendar-description'],
'access' => $access
];
}
if(!$access || $access === 'read-write') {
$writable_calendars[] = [
'displayname' => ((!$access) ? $sabrecal['{DAV:}displayname'] : $share_displayname[0]),
'id' => $sabrecal['id']
];
}
}
$o .= replace_macros(get_markup_template('cdav_widget_calendar.tpl'), [
'$my_calendars_label' => t('My Calendars'),
'$my_calendars' => $my_calendars,
'$shared_calendars_label' => t('Shared Calendars'),
'$shared_calendars' => $shared_calendars,
'$sharee_options' => $sharee_options,
'$access_options' => $access_options,
'$share_label' => t('Share this calendar'),
'$share' => t('Share'),
'$edit_label' => t('Calendar name and color'),
'$edit' => t('Edit'),
'$create_label' => t('Create new calendar'),
'$create' => t('Create'),
'$create_placeholder' => t('Calendar Name'),
'$tools_label' => t('Calendar Tools'),
'$import_label' => t('Import calendar'),
'$import_placeholder' => t('Select a calendar to import to'),
'$upload' => t('Upload'),
'$writable_calendars' => $writable_calendars
]);
return $o;
}
if(argc() >= 2 && argv(1) === 'addressbook') {
$carddavBackend = new \Sabre\CardDAV\Backend\PDO($pdo);
$sabreabooks = $carddavBackend->getAddressBooksForUser($principalUri);
//list addressbooks
foreach($sabreabooks as $sabreabook) {
$addressbooks[] = [
'ownernick' => $channel['channel_address'],
'uri' => $sabreabook['uri'],
'displayname' => $sabreabook['{DAV:}displayname'],
'id' => $sabreabook['id']
];
}
$o .= replace_macros(get_markup_template('cdav_widget_addressbook.tpl'), [
'$addressbooks_label' => t('Addressbooks'),
'$addressbooks' => $addressbooks,
'$edit_label' => t('Addressbook name'),
'$edit' => t('Edit'),
'$create_label' => t('Create new addressbook'),
'$create_placeholder' => t('Addressbook Name'),
'$create' => t('Create'),
'$tools_label' => t('Addressbook Tools'),
'$import_label' => t('Import addressbook'),
'$import_placeholder' => t('Select an addressbook to import to'),
'$upload' => t('Upload')
]);
return $o;
}
}
}

View File

@@ -12,10 +12,6 @@ class Conversations {
if(argc() > 1) {
switch(argv(1)) {
case 'combined':
$mailbox = 'combined';
$header = t('Conversations');
break;
case 'inbox':
$mailbox = 'inbox';
$header = t('Received Messages');
@@ -44,6 +40,8 @@ class Conversations {
foreach($r as $rr) {
$selected = ((argc() == 3) ? intval(argv(2)) == intval($rr['id']) : $r[0]['id'] == $rr['id']);
$messages[] = array(
'mailbox' => $mailbox,
'id' => $rr['id'],
@@ -58,7 +56,7 @@ class Conversations {
'body' => $rr['body'],
'date' => datetime_convert('UTC',date_default_timezone_get(),$rr['created'], 'c'),
'seen' => $rr['seen'],
'selected' => ((argv(2)) ? (argv(2) == $rr['id']) : ($r[0]['id'] == $rr['id']))
'selected' => ((argv(1) != 'new') ? $selected : '')
);
}
@@ -71,4 +69,6 @@ class Conversations {
}
return $o;
}
}

View File

@@ -87,7 +87,7 @@ class Forums {
foreach($r1 as $rr) {
if($unseen && (! intval($rr['unseen'])))
continue;
$o .= '<li class="nav-item"><a class="nav-link" href="network?f=&pf=1&cid=' . $rr['abook_id'] . '" ><span class="badge badge-default float-right">' . ((intval($rr['unseen'])) ? intval($rr['unseen']) : '') . '</span><img class ="menu-img-1" src="' . $rr['xchan_photo_s'] . '" /> ' . $rr['xchan_name'] . '</a></li>';
$o .= '<li class="nav-item"><a class="nav-link" href="network?f=&pf=1&cid=' . $rr['abook_id'] . '" ><span class="badge badge-secondary float-right">' . ((intval($rr['unseen'])) ? intval($rr['unseen']) : '') . '</span><img class ="menu-img-1" src="' . $rr['xchan_photo_s'] . '" /> ' . $rr['xchan_name'] . '</a></li>';
}
$o .= '</ul></div>';
}

View File

@@ -0,0 +1,108 @@
<?php
namespace Zotlabs\Widget;
require_once('include/attach.php');
class Portfolio {
function widget($args) {
$owner_uid = \App::$profile_uid;
$sql_extra = permissions_sql($owner_uid);
if(! perm_is_allowed($owner_uid,get_observer_hash(),'view_storage'))
return '';
if($args['album'])
$album = $args['album'];
if($args['title'])
$title = $args['title'];
/**
* This may return incorrect permissions if you have multiple directories of the same name.
* It is a limitation of the photo table using a name for a photo album instead of a folder hash
*/
if($album) {
$x = q("select hash from attach where filename = '%s' and uid = %d limit 1",
dbesc($album),
intval($owner_uid)
);
if($x) {
$y = attach_can_view_folder($owner_uid,get_observer_hash(),$x[0]['hash']);
if(! $y)
return '';
}
}
$order = 'DESC';
$r = q("SELECT p.resource_id, p.id, p.filename, p.mimetype, p.imgscale, p.description, p.created FROM photo p INNER JOIN
(SELECT resource_id, max(imgscale) imgscale FROM photo WHERE uid = %d AND album = '%s' AND imgscale <= 4 AND photo_usage IN ( %d, %d ) $sql_extra GROUP BY resource_id) ph
ON (p.resource_id = ph.resource_id AND p.imgscale = ph.imgscale)
ORDER BY created $order ",
intval($owner_uid),
dbesc($album),
intval(PHOTO_NORMAL),
intval(PHOTO_PROFILE)
);
//edit album name
$album_edit = null;
$photos = array();
if($r) {
$twist = 'rotright';
foreach($r as $rr) {
if($twist == 'rotright')
$twist = 'rotleft';
else
$twist = 'rotright';
$ext = $phototypes[$rr['mimetype']];
$imgalt_e = $rr['filename'];
$desc_e = $rr['description'];
$imagelink = (z_root() . '/photos/' . \App::$profile['channel_address'] . '/image/' . $rr['resource_id']);
$photos[] = array(
'id' => $rr['id'],
'twist' => ' ' . $twist . rand(2,4),
'link' => $imagelink,
'title' => t('View Photo'),
'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . $rr['imgscale'] . '.' .$ext,
'fullsrc' => z_root() . '/photo/' . $rr['resource_id'] . '-' . '1' . '.' .$ext,
'resource_id' => $rr['resource_id'],
'alt' => $imgalt_e,
'desc'=> $desc_e,
'ext' => $ext,
'hash'=> $rr['resource_id'],
'unknown' => t('Unknown')
);
}
}
$tpl = get_markup_template('photo_album_portfolio.tpl');
$o .= replace_macros($tpl, array(
'$photos' => $photos,
'$album' => (($title) ? $title : $album),
'$album_id' => rand(),
'$album_edit' => array(t('Edit Album'), $album_edit),
'$can_post' => false,
'$upload' => array(t('Upload'), z_root() . '/photos/' . \App::$profile['channel_address'] . '/upload/' . bin2hex($album)),
'$order' => false,
'$upload_form' => $upload_form,
'$usage' => $usage_message
));
return $o;
}
}

View File

@@ -79,11 +79,13 @@ class Settings_menu {
'selected' => ''
);
$tabs[] = array(
'label' => t('Connected apps'),
'url' => z_root() . '/settings/oauth',
'selected' => ((argv(1) === 'oauth') ? 'active' : ''),
);
if(get_account_techlevel() > 0) {
$tabs[] = array(
'label' => t('Connected apps'),
'url' => z_root() . '/settings/oauth',
'selected' => ((argv(1) === 'oauth') ? 'active' : ''),
);
}
if(get_account_techlevel() > 2) {
$tabs[] = array(

View File

@@ -8,8 +8,8 @@ class Tasklist {
function widget($arr) {
if (! local_channel())
return;
if (! local_channel())
return;
$o .= '<script>var tasksShowAll = 0; $(document).ready(function() { tasksFetch(); $("#tasklist-new-form").submit(function(event) { event.preventDefault(); $.post( "tasks/new", $("#tasklist-new-form").serialize(), function(data) { tasksFetch(); $("#tasklist-new-summary").val(""); } ); return false; } )});</script>';
$o .= '<script>function taskComplete(id) { $.post("tasks/complete/"+id, function(data) { tasksFetch();}); }

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