Merge remote-tracking branch 'upstream/develop' into 1704-mastodon

Conflicts:
	include/bbcode.php
This commit is contained in:
Michael 2017-04-20 05:44:31 +00:00
commit 3592f90910
83 changed files with 2859 additions and 2177 deletions

View File

@ -38,7 +38,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica');
define ( 'FRIENDICA_CODENAME', 'Asparagus'); define ( 'FRIENDICA_CODENAME', 'Asparagus');
define ( 'FRIENDICA_VERSION', '3.5.2-dev' ); define ( 'FRIENDICA_VERSION', '3.5.2-dev' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1218 ); define ( 'DB_UPDATE_VERSION', 1219 );
/** /**
* @brief Constant with a HTML line break. * @brief Constant with a HTML line break.
@ -1367,11 +1367,15 @@ class App {
$cmdline = implode($args, " "); $cmdline = implode($args, " ");
if (get_config('system', 'proc_windows')) { if (get_config('system', 'proc_windows')) {
proc_close(proc_open('cmd /c start /b ' . $cmdline, array(), $foo, dirname(__FILE__))); $resource = proc_open('cmd /c start /b ' . $cmdline, array(), $foo, dirname(__FILE__));
} else { } else {
proc_close(proc_open($cmdline . " &", array(), $foo, dirname(__FILE__))); $resource = proc_open($cmdline . " &", array(), $foo, dirname(__FILE__));
} }
if (!is_resource($resource)) {
logger('We got no resource for command '.$cmdline, LOGGER_DEBUG);
return;
}
proc_close($resource);
} }
/** /**

View File

@ -1,6 +1,6 @@
-- ------------------------------------------ -- ------------------------------------------
-- Friendica 3.5.2-dev (Asparagus) -- Friendica 3.5.2-dev (Asparagus)
-- DB_UPDATE_VERSION 1218 -- DB_UPDATE_VERSION 1219
-- ------------------------------------------ -- ------------------------------------------
@ -169,7 +169,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
`info` mediumtext, `info` mediumtext,
`profile-id` int(11) NOT NULL DEFAULT 0, `profile-id` int(11) NOT NULL DEFAULT 0,
`bdyear` varchar(4) NOT NULL DEFAULT '', `bdyear` varchar(4) NOT NULL DEFAULT '',
`bd` date NOT NULL DEFAULT '0000-00-00', `bd` date NOT NULL DEFAULT '0001-01-01',
`notify_new_posts` tinyint(1) NOT NULL DEFAULT 0, `notify_new_posts` tinyint(1) NOT NULL DEFAULT 0,
`fetch_further_information` tinyint(1) NOT NULL DEFAULT 0, `fetch_further_information` tinyint(1) NOT NULL DEFAULT 0,
`ffi_keyword_blacklist` text, `ffi_keyword_blacklist` text,
@ -328,7 +328,7 @@ CREATE TABLE IF NOT EXISTS `gcontact` (
`about` text, `about` text,
`keywords` text, `keywords` text,
`gender` varchar(32) NOT NULL DEFAULT '', `gender` varchar(32) NOT NULL DEFAULT '',
`birthday` varchar(32) NOT NULL DEFAULT '0000-00-00', `birthday` varchar(32) NOT NULL DEFAULT '0001-01-01',
`community` tinyint(1) NOT NULL DEFAULT 0, `community` tinyint(1) NOT NULL DEFAULT 0,
`contact-type` tinyint(1) NOT NULL DEFAULT -1, `contact-type` tinyint(1) NOT NULL DEFAULT -1,
`hide` tinyint(1) NOT NULL DEFAULT 0, `hide` tinyint(1) NOT NULL DEFAULT 0,
@ -792,7 +792,7 @@ CREATE TABLE IF NOT EXISTS `profile` (
`hide-friends` tinyint(1) NOT NULL DEFAULT 0, `hide-friends` tinyint(1) NOT NULL DEFAULT 0,
`name` varchar(255) NOT NULL DEFAULT '', `name` varchar(255) NOT NULL DEFAULT '',
`pdesc` varchar(255) NOT NULL DEFAULT '', `pdesc` varchar(255) NOT NULL DEFAULT '',
`dob` varchar(32) NOT NULL DEFAULT '0000-00-00', `dob` varchar(32) NOT NULL DEFAULT '0001-01-01',
`address` varchar(255) NOT NULL DEFAULT '', `address` varchar(255) NOT NULL DEFAULT '',
`locality` varchar(255) NOT NULL DEFAULT '', `locality` varchar(255) NOT NULL DEFAULT '',
`region` varchar(255) NOT NULL DEFAULT '', `region` varchar(255) NOT NULL DEFAULT '',

View File

@ -133,6 +133,9 @@ By default, any (valid) email address is allowed in registrations.
If you enable the `Allow Users to set remote_self` users can select Atom feeds from their contact list being their *remote self* in die advanced contact settings. If you enable the `Allow Users to set remote_self` users can select Atom feeds from their contact list being their *remote self* in die advanced contact settings.
Which means that postings by the remote self are automatically reposted by Friendica in their names. Which means that postings by the remote self are automatically reposted by Friendica in their names.
This feature can be used to let the user mirror e.g. blog postings into their Friendica postings.
It is disabled by default, as it causes additional load on the server and may be misused to distribute SPAM.
As admin of the node you can also set this flag directly in the database. As admin of the node you can also set this flag directly in the database.
Before doing so, you should be sure you know what you do and have a backup of the database. Before doing so, you should be sure you know what you do and have a backup of the database.
@ -167,6 +170,19 @@ This will mean you cannot connect (at all) to self-signed SSL sites.
### Worker ### Worker
This section allows you to configure the background process that is triggered by the `cron` job that was created during the installation.
The process does check the available system resources before creating a new worker for a task.
Because of this, it may happen that the maximum number of worker processes you allow will not be reached.
If your server setup does not allow you to use the `proc_open` function of PHP, please disable it in this section.
The tasks for the background process have priorities.
To guarantee that important tasks are executed even though the system has a lot of work to do, it is useful to enable the *fastlane*.
Should you not be able to run a cron job on your server, you can also activate the *frontend* worker.
If you have done so, you can call `example.com/worker` (replace example.com with your actual domain name) on a regular basis from an external servie.
This will then trigger the execution of the background process.
### Relocate ### Relocate
## Users ## Users

View File

@ -10,8 +10,8 @@ Table attach
| filetype | mimetype | varchar(64) | NO | | | | | filetype | mimetype | varchar(64) | NO | | | |
| filesize | size in bytes | int(11) | NO | | 0 | | | filesize | size in bytes | int(11) | NO | | 0 | |
| data | file data | longblob | NO | | NULL | | | data | file data | longblob | NO | | NULL | |
| created | creation time | datetime | NO | | 0000-00-00 00:00:00 | | | created | creation time | datetime | NO | | 0001-01-01 00:00:00 | |
| edited | last edit time | datetime | NO | | 0000-00-00 00:00:00 | | | edited | last edit time | datetime | NO | | 0001-01-01 00:00:00 | |
| allow_cid | Access Control - list of allowed contact.id '<19><78> | mediumtext | NO | | NULL | | | allow_cid | Access Control - list of allowed contact.id '<19><78> | mediumtext | NO | | NULL | |
| allow_gid | Access Control - list of allowed groups | mediumtext | NO | | NULL | | | allow_gid | Access Control - list of allowed groups | mediumtext | NO | | NULL | |
| deny_cid | Access Control - list of denied contact.id | mediumtext | NO | | NULL | | | deny_cid | Access Control - list of denied contact.id | mediumtext | NO | | NULL | |

View File

@ -5,7 +5,7 @@ Table cache
| ------------ | ---------------------------------- | ------------ | ---- | --- | ------------------- | ----- | | ------------ | ---------------------------------- | ------------ | ---- | --- | ------------------- | ----- |
| k | horizontal width + url or resource | varchar(255) | NO | PRI | NULL | | | k | horizontal width + url or resource | varchar(255) | NO | PRI | NULL | |
| v | OEmbed response from site | text | NO | | NULL | | | v | OEmbed response from site | text | NO | | NULL | |
| updated | datetime of cache insertion | datetime | NO | MUL | 0000-00-00 00:00:00 | | | updated | datetime of cache insertion | datetime | NO | MUL | 0001-01-01 00:00:00 | |
| expire_mode | | int(11) | NO | | 0 | | | expire_mode | | int(11) | NO | | 0 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -5,7 +5,7 @@ Table contact
|---------------------------|-----------------------------------------------------------|--------------|------|-----|---------------------|----------------| |---------------------------|-----------------------------------------------------------|--------------|------|-----|---------------------|----------------|
| id | sequential ID | int(11) | NO | PRI | NULL | auto_increment | | id | sequential ID | int(11) | NO | PRI | NULL | auto_increment |
| uid | user.id of the owner of this data | int(11) | NO | MUL | 0 | | | uid | user.id of the owner of this data | int(11) | NO | MUL | 0 | |
| created | | datetime | NO | | 0000-00-00 00:00:00 | | | created | | datetime | NO | | 0001-01-01 00:00:00 | |
| self | 1 if the contact is the user him/her self | tinyint(1) | NO | | 0 | | | self | 1 if the contact is the user him/her self | tinyint(1) | NO | | 0 | |
| remote_self | | tinyint(1) | NO | | 0 | | | remote_self | | tinyint(1) | NO | | 0 | |
| rel | The kind of the relation between the user and the contact | tinyint(1) | NO | | 0 | | | rel | The kind of the relation between the user and the contact | tinyint(1) | NO | | 0 | |
@ -41,14 +41,14 @@ Table contact
| usehub | | tinyint(1) | NO | | 0 | | | usehub | | tinyint(1) | NO | | 0 | |
| subhub | | tinyint(1) | NO | | 0 | | | subhub | | tinyint(1) | NO | | 0 | |
| hub-verify | | varchar(255) | NO | | | | | hub-verify | | varchar(255) | NO | | | |
| last-update | Date of the last try to update the contact info | datetime | NO | | 0000-00-00 00:00:00 | | | last-update | Date of the last try to update the contact info | datetime | NO | | 0001-01-01 00:00:00 | |
| success_update | Date of the last successful contact update | datetime | NO | | 0000-00-00 00:00:00 | | | success_update | Date of the last successful contact update | datetime | NO | | 0001-01-01 00:00:00 | |
| failure_update | Date of the last failed update | datetime | NO | | 0000-00-00 00:00:00 | | | failure_update | Date of the last failed update | datetime | NO | | 0001-01-01 00:00:00 | |
| name-date | | datetime | NO | | 0000-00-00 00:00:00 | | | name-date | | datetime | NO | | 0001-01-01 00:00:00 | |
| uri-date | | datetime | NO | | 0000-00-00 00:00:00 | | | uri-date | | datetime | NO | | 0001-01-01 00:00:00 | |
| avatar-date | | datetime | NO | | 0000-00-00 00:00:00 | | | avatar-date | | datetime | NO | | 0001-01-01 00:00:00 | |
| term-date | | datetime | NO | | 0000-00-00 00:00:00 | | | term-date | | datetime | NO | | 0001-01-01 00:00:00 | |
| last-item | date of the last post | datetime | NO | | 0000-00-00 00:00:00 | | | last-item | date of the last post | datetime | NO | | 0001-01-01 00:00:00 | |
| priority | | tinyint(3) | NO | | 0 | | | priority | | tinyint(3) | NO | | 0 | |
| blocked | | tinyint(1) | NO | | 1 | | | blocked | | tinyint(1) | NO | | 1 | |
| readonly | posts of the contact are readonly | tinyint(1) | NO | | 0 | | | readonly | posts of the contact are readonly | tinyint(1) | NO | | 0 | |
@ -64,7 +64,7 @@ Table contact
| info | | mediumtext | NO | | NULL | | | info | | mediumtext | NO | | NULL | |
| profile-id | | int(11) | NO | | 0 | | | profile-id | | int(11) | NO | | 0 | |
| bdyear | | varchar(4) | NO | | | | | bdyear | | varchar(4) | NO | | | |
| bd | | date | NO | | 0000-00-00 | | | bd | | date | NO | | 0001-01-01 | |
| notify_new_posts | | tinyint(1) | NO | | 0 | | | notify_new_posts | | tinyint(1) | NO | | 0 | |
| fetch_further_information | | tinyint(1) | NO | | 0 | | | fetch_further_information | | tinyint(1) | NO | | 0 | |
| ffi_keyword_blacklist | | mediumtext | NO | | NULL | | | ffi_keyword_blacklist | | mediumtext | NO | | NULL | |

View File

@ -8,8 +8,8 @@ Table conv
| recips | sender_handle;recipient_handle | mediumtext | NO | | NULL | | | recips | sender_handle;recipient_handle | mediumtext | NO | | NULL | |
| uid | user_id of the owner of this data | int(11) | NO | MUL | 0 | | | uid | user_id of the owner of this data | int(11) | NO | MUL | 0 | |
| creator | handle of creator | varchar(255) | NO | | | | | creator | handle of creator | varchar(255) | NO | | | |
| created | creation timestamp | datetime | NO | | 0000-00-00 00:00:00 | | | created | creation timestamp | datetime | NO | | 0001-01-01 00:00:00 | |
| updated | edited timestamp | datetime | NO | | 0000-00-00 00:00:00 | | | updated | edited timestamp | datetime | NO | | 0001-01-01 00:00:00 | |
| subject | subject of initial message | mediumtext | NO | | NULL | | | subject | subject of initial message | mediumtext | NO | | NULL | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -7,10 +7,10 @@ Table event
| uid | user_id of the owner of this data | int(11) | NO | MUL | 0 | | | uid | user_id of the owner of this data | int(11) | NO | MUL | 0 | |
| cid | contact_id (ID of the contact in contact table) | int(11) | NO | | 0 | | | cid | contact_id (ID of the contact in contact table) | int(11) | NO | | 0 | |
| uri | | varchar(255) | NO | | | | | uri | | varchar(255) | NO | | | |
| created | creation time | datetime | NO | | 0000-00-00 00:00:00 | | | created | creation time | datetime | NO | | 0001-01-01 00:00:00 | |
| edited | last edit time | datetime | NO | | 0000-00-00 00:00:00 | | | edited | last edit time | datetime | NO | | 0001-01-01 00:00:00 | |
| start | event start time | datetime | NO | | 0000-00-00 00:00:00 | | | start | event start time | datetime | NO | | 0001-01-01 00:00:00 | |
| finish | event end time | datetime | NO | | 0000-00-00 00:00:00 | | | finish | event end time | datetime | NO | | 0001-01-01 00:00:00 | |
| summary | short description or title of the event | text | NO | | NULL | | | summary | short description or title of the event | text | NO | | NULL | |
| desc | event description | text | NO | | NULL | | | desc | event description | text | NO | | NULL | |
| location | event location | text | NO | | NULL | | | location | event location | text | NO | | NULL | |

View File

@ -19,6 +19,6 @@ Table fcontact
| network | | varchar(32) | NO | | | | | network | | varchar(32) | NO | | | |
| alias | | varchar(255) | NO | | | | | alias | | varchar(255) | NO | | | |
| pubkey | | text | NO | | NULL | | | pubkey | | text | NO | | NULL | |
| updated | | datetime | NO | | 0000-00-00 00:00:00 | | | updated | | datetime | NO | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -11,6 +11,6 @@ Table fsuggest
| request | | varchar(255) | NO | | | | | request | | varchar(255) | NO | | | |
| photo | | varchar(255) | NO | | | | | photo | | varchar(255) | NO | | | |
| note | | text | NO | | NULL | | | note | | text | NO | | NULL | |
| created | | datetime | NO | | 0000-00-00 00:00:00 | | | created | | datetime | NO | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -10,15 +10,15 @@ Table gcontact
| nurl | | varchar(255) | NO | MUL | | | | nurl | | varchar(255) | NO | MUL | | |
| photo | Link to the profile photo | varchar(255) | NO | | | | | photo | Link to the profile photo | varchar(255) | NO | | | |
| connect | | varchar(255) | NO | | | | | connect | | varchar(255) | NO | | | |
| created | | datetime | NO | | 0000-00-00 00:00:00 | | | created | | datetime | NO | | 0001-01-01 00:00:00 | |
| updated | | datetime | YES | MUL | 0000-00-00 00:00:00 | | | updated | | datetime | YES | MUL | 0001-01-01 00:00:00 | |
| last_contact | | datetime | YES | | 0000-00-00 00:00:00 | | | last_contact | | datetime | YES | | 0001-01-01 00:00:00 | |
| last_failure | | datetime | YES | | 0000-00-00 00:00:00 | | | last_failure | | datetime | YES | | 0001-01-01 00:00:00 | |
| location | | varchar(255) | NO | | | | | location | | varchar(255) | NO | | | |
| about | | text | NO | | NULL | | | about | | text | NO | | NULL | |
| keywords | puplic keywords (interests) | text | NO | | NULL | | | keywords | puplic keywords (interests) | text | NO | | NULL | |
| gender | | varchar(32) | NO | | | | | gender | | varchar(32) | NO | | | |
| birthday | | varchar(32) | NO | | 0000-00-00 | | | birthday | | varchar(32) | NO | | 0001-01-01 | |
| community | 1 if contact is forum account | tinyint(1) | NO | | 0 | | | community | 1 if contact is forum account | tinyint(1) | NO | | 0 | |
| hide | 1 = should be hidden from search | tinyint(1) | NO | | 0 | | | hide | 1 = should be hidden from search | tinyint(1) | NO | | 0 | |
| nsfw | 1 = contact posts nsfw content | tinyint(1) | NO | | 0 | | | nsfw | 1 = contact posts nsfw content | tinyint(1) | NO | | 0 | |

View File

@ -8,6 +8,6 @@ Table glink
| uid | | int(11) | NO | | 0 | | | uid | | int(11) | NO | | 0 | |
| gcid | | int(11) | NO | MUL | 0 | | | gcid | | int(11) | NO | MUL | 0 | |
| zcid | | int(11) | NO | MUL | 0 | | | zcid | | int(11) | NO | MUL | 0 | |
| updated | | datetime | NO | | 0000-00-00 00:00:00 | | | updated | | datetime | NO | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -14,10 +14,10 @@ Table gserver
| noscrape | | varchar(255) | NO | | | | | noscrape | | varchar(255) | NO | | | |
| network | | varchar(32) | NO | | | | | network | | varchar(32) | NO | | | |
| platform | | varchar(255) | NO | | | | | platform | | varchar(255) | NO | | | |
| created | | datetime | NO | | 0000-00-00 00:00:00 | | | created | | datetime | NO | | 0001-01-01 00:00:00 | |
| last_poco_query | | datetime | YES | | 0000-00-00 00:00:00 | | | last_poco_query | | datetime | YES | | 0001-01-01 00:00:00 | |
| last_contact | | datetime | YES | | 0000-00-00 00:00:00 | | | last_contact | | datetime | YES | | 0001-01-01 00:00:00 | |
| last_failure | | datetime | YES | | 0000-00-00 00:00:00 | | | last_failure | | datetime | YES | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -11,7 +11,7 @@ Table intro
| duplex | | tinyint(1) | NO | | 0 | | | duplex | | tinyint(1) | NO | | 0 | |
| note | | text | NO | | NULL | | | note | | text | NO | | NULL | |
| hash | | varchar(255) | NO | | | | | hash | | varchar(255) | NO | | | |
| datetime | | datetime | NO | | 0000-00-00 00:00:00 | | | datetime | | datetime | NO | | 0001-01-01 00:00:00 | |
| blocked | | tinyint(1) | NO | | 1 | | | blocked | | tinyint(1) | NO | | 1 | |
| ignore | | tinyint(1) | NO | | 0 | | | ignore | | tinyint(1) | NO | | 0 | |

View File

@ -16,11 +16,11 @@ Table item
| parent-uri | uri of the parent to this item | varchar(255) | NO | MUL | | | | parent-uri | uri of the parent to this item | varchar(255) | NO | MUL | | |
| extid | | varchar(255 | NO | MUL | | | | extid | | varchar(255 | NO | MUL | | |
| thr-parent | If the parent of this item is not the top-level item in the conversation, the uri of the immediate parent; otherwise set to parent-uri | varchar(255) | NO | | | | | thr-parent | If the parent of this item is not the top-level item in the conversation, the uri of the immediate parent; otherwise set to parent-uri | varchar(255) | NO | | | |
| created | Creation timestamp. | datetime | NO | | 0000-00-00 00:00:00 | | | created | Creation timestamp. | datetime | NO | | 0001-01-01 00:00:00 | |
| edited | Date of last edit (default is created) | datetime | NO | | 0000-00-00 00:00:00 | | | edited | Date of last edit (default is created) | datetime | NO | | 0001-01-01 00:00:00 | |
| commented | Date of last comment/reply to this item | datetime | NO | | 0000-00-00 00:00:00 | | | commented | Date of last comment/reply to this item | datetime | NO | | 0001-01-01 00:00:00 | |
| received | datetime | datetime | NO | | 0000-00-00 00:00:00 | | | received | datetime | datetime | NO | | 0001-01-01 00:00:00 | |
| changed | Date that something in the conversation changed, indicating clients should fetch the conversation again | datetime | NO | | 0000-00-00 00:00:00 | | | changed | Date that something in the conversation changed, indicating clients should fetch the conversation again | datetime | NO | | 0001-01-01 00:00:00 | |
| owner-name | Name of the owner of this item | varchar(255) | NO | | | | | owner-name | Name of the owner of this item | varchar(255) | NO | | | |
| owner-link | Link to the profile page of the owner of this item | varchar(255) | NO | | | | | owner-link | Link to the profile page of the owner of this item | varchar(255) | NO | | | |
| owner-avatar | Link to the avatar picture of the owner of this item | varchar(255) | NO | | | | | owner-avatar | Link to the avatar picture of the owner of this item | varchar(255) | NO | | | |

View File

@ -6,6 +6,6 @@ Table locks
| id | sequential ID | int(11) | NO | PRI | NULL | auto_increment | | id | sequential ID | int(11) | NO | PRI | NULL | auto_increment |
| name | | varchar(128) | NO | | | | | name | | varchar(128) | NO | | | |
| locked | | tinyint(1) | NO | | 0 | | | locked | | tinyint(1) | NO | | 0 | |
| created | | datetime | YES | | 0000-00-00 00:00:00 | | | created | | datetime | YES | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -19,6 +19,6 @@ Table mail
| unknown | if sender not in the contact table this is 1 | varchar(255) | NO | | 0 | | | unknown | if sender not in the contact table this is 1 | varchar(255) | NO | | 0 | |
| uri | | varchar(255) | NO | MUL | | | | uri | | varchar(255) | NO | MUL | | |
| parent-uri | | varchar(255) | NO | MUL | | | | parent-uri | | varchar(255) | NO | MUL | | |
| created | creation time of the private message | datetime | NO | | 0000-00-00 00:00:00 | | | created | creation time of the private message | datetime | NO | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -15,6 +15,6 @@ Table mailacct
| action | | int(11) | NO | | 0 | | | action | | int(11) | NO | | 0 | |
| movetofolder | | varchar(255) | NO | | | | | movetofolder | | varchar(255) | NO | | | |
| pubmail | | tinyint(1) | NO | | 0 | | | pubmail | | tinyint(1) | NO | | 0 | |
| last_check | | datetime | NO | | 0000-00-00 00:00:00 | | | last_check | | datetime | NO | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -9,7 +9,7 @@ Table notify
| name | | varchar(255) | NO | | | | | name | | varchar(255) | NO | | | |
| url | | varchar(255) | NO | | | | | url | | varchar(255) | NO | | | |
| photo | | varchar(255) | NO | | | | | photo | | varchar(255) | NO | | | |
| date | | datetime | NO | | 0000-00-00 00:00:00 | | | date | | datetime | NO | | 0001-01-01 00:00:00 | |
| msg | | mediumtext | YES | | NULL | | | msg | | mediumtext | YES | | NULL | |
| uid | user.id of the owner of this data | int(11) | NO | MUL | 0 | | | uid | user.id of the owner of this data | int(11) | NO | MUL | 0 | |
| link | | varchar(255) | NO | | | | | link | | varchar(255) | NO | | | |

View File

@ -5,6 +5,6 @@ Table oembed
| ------------ | ---------------------------------- | ------------ | ---- | --- | ------------------- | ----- | | ------------ | ---------------------------------- | ------------ | ---- | --- | ------------------- | ----- |
| url | page url | varchar(255) | NO | PRI | NULL | | | url | page url | varchar(255) | NO | PRI | NULL | |
| content | OEmbed data of the page | text | NO | | NULL | | | content | OEmbed data of the page | text | NO | | NULL | |
| created | datetime of creation | datetime | NO | MUL | 0000-00-00 00:00:00 | | | created | datetime of creation | datetime | NO | MUL | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -7,6 +7,6 @@ Table parsed_url
| guessing | is the "guessing" mode active? | tinyint(1) | NO | PRI | 0 | | | guessing | is the "guessing" mode active? | tinyint(1) | NO | PRI | 0 | |
| oembed | is the data the result of oembed? | tinyint(1) | NO | PRI | 0 | | | oembed | is the data the result of oembed? | tinyint(1) | NO | PRI | 0 | |
| content | page data | text | NO | | NULL | | | content | page data | text | NO | | NULL | |
| created | datetime of creation | datetime | NO | MUL | 0000-00-00 00:00:00 | | | created | datetime of creation | datetime | NO | MUL | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -8,8 +8,8 @@ Table photo
| contact-id | contact.id | int(10) unsigned | NO | | 0 | | | contact-id | contact.id | int(10) unsigned | NO | | 0 | |
| guid | A unique identifier for this photo | varchar(64) | NO | MUL | | | | guid | A unique identifier for this photo | varchar(64) | NO | MUL | | |
| resource-id | | varchar(255) | NO | MUL | | | | resource-id | | varchar(255) | NO | MUL | | |
| created | creation date | datetime | NO | | 0000-00-00 00:00:00 | | | created | creation date | datetime | NO | | 0001-01-01 00:00:00 | |
| edited | last edited date | datetime | NO | | 0000-00-00 00:00:00 | | | edited | last edited date | datetime | NO | | 0001-01-01 00:00:00 | |
| title | | varchar(255) | NO | | | | | title | | varchar(255) | NO | | | |
| desc | | text | NO | | NULL | | | desc | | text | NO | | NULL | |
| album | The name of the album to which the photo belongs | varchar(255) | NO | | | | | album | The name of the album to which the photo belongs | varchar(255) | NO | | | |

View File

@ -10,7 +10,7 @@ Table profile
| hide-friends | Hide friend list from viewers of this profile | tinyint(1) | NO | | 0 | | | hide-friends | Hide friend list from viewers of this profile | tinyint(1) | NO | | 0 | |
| name | | varchar(255) | NO | | | | | name | | varchar(255) | NO | | | |
| pdesc | Title or description | varchar(255) | NO | | | | | pdesc | Title or description | varchar(255) | NO | | | |
| dob | Day of birth | varchar(32) | NO | | 0000-00-00 | | | dob | Day of birth | varchar(32) | NO | | 0001-01-01 | |
| address | | varchar(255) | NO | | | | | address | | varchar(255) | NO | | | |
| locality | | varchar(255) | NO | | | | | locality | | varchar(255) | NO | | | |
| region | | varchar(255) | NO | | | | | region | | varchar(255) | NO | | | |
@ -20,7 +20,7 @@ Table profile
| gender | | varchar(32) | NO | | | | | gender | | varchar(32) | NO | | | |
| marital | | varchar(255) | NO | | | | | marital | | varchar(255) | NO | | | |
| with | | text | NO | | NULL | | | with | | text | NO | | NULL | |
| howlong | | datetime | NO | | 0000-00-00 00:00:00 | | | howlong | | datetime | NO | | 0001-01-01 00:00:00 | |
| sexual | | varchar(255) | NO | | | | | sexual | | varchar(255) | NO | | | |
| politic | | varchar(255) | NO | | | | | politic | | varchar(255) | NO | | | |
| religion | | varchar(255) | NO | | | | | religion | | varchar(255) | NO | | | |

View File

@ -6,8 +6,8 @@ Table queue
| id | sequential ID | int(11) | NO | PRI | NULL | auto_increment | | id | sequential ID | int(11) | NO | PRI | NULL | auto_increment |
| cid | | int(11) | NO | MUL | 0 | | | cid | | int(11) | NO | MUL | 0 | |
| network | | varchar(32) | NO | MUL | | | | network | | varchar(32) | NO | MUL | | |
| created | | datetime | NO | MUL | 0000-00-00 00:00:00 | | | created | | datetime | NO | MUL | 0001-01-01 00:00:00 | |
| last | | datetime | NO | MUL | 0000-00-00 00:00:00 | | | last | | datetime | NO | MUL | 0001-01-01 00:00:00 | |
| content | | mediumtext | NO | | NULL | | | content | | mediumtext | NO | | NULL | |
| batch | | tinyint(1) | NO | MUL | 0 | | | batch | | tinyint(1) | NO | MUL | 0 | |

View File

@ -5,7 +5,7 @@ Table register
| -------- | ------------- | ---------------- | ---- | --- | ------------------- | --------------- | | -------- | ------------- | ---------------- | ---- | --- | ------------------- | --------------- |
| id | sequential ID | int(11) unsigned | NO | PRI | NULL | auto_increment | | id | sequential ID | int(11) unsigned | NO | PRI | NULL | auto_increment |
| hash | | varchar(255) | NO | | | | | hash | | varchar(255) | NO | | | |
| created | | datetime | NO | | 0000-00-00 00:00:00 | | | created | | datetime | NO | | 0001-01-01 00:00:00 | |
| uid | user.id | int(11) unsigned | NO | | | | | uid | user.id | int(11) unsigned | NO | | | |
| password | | varchar(255) | NO | | | | | password | | varchar(255) | NO | | | |
| language | | varchar(16) | NO | | | | | language | | varchar(16) | NO | | | |

View File

@ -8,6 +8,6 @@ Table spam
| spam | | int(11) | NO | MUL | 0 | | | spam | | int(11) | NO | MUL | 0 | |
| ham | | int(11) | NO | MUL | 0 | | | ham | | int(11) | NO | MUL | 0 | |
| term | | varchar(255) | NO | MUL | | | | term | | varchar(255) | NO | MUL | | |
| date | | datetime | NO | | 0000-00-00 00:00:00 | | | date | | datetime | NO | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -12,8 +12,8 @@ Table term
| aid | | int(10) unsigned | NO | | 0 | | | aid | | int(10) unsigned | NO | | 0 | |
| uid | | int(10) unsigned | NO | MUL | 0 | | | uid | | int(10) unsigned | NO | MUL | 0 | |
| guid | | varchar(255) | NO | MUL | | | | guid | | varchar(255) | NO | MUL | | |
| created | | datetime | NO | | 0000-00-00 00:00:00 | | | created | | datetime | NO | | 0001-01-01 00:00:00 | |
| received | | datetime | NO | | 0000-00-00 00:00:00 | | | received | | datetime | NO | | 0001-01-01 00:00:00 | |
| global | | tinyint(1) | NO | | 0 | | | global | | tinyint(1) | NO | | 0 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -9,11 +9,11 @@ Table thread
| gcontact-id | Global Contact | int(11) unsigned | NO | | 0 | | | gcontact-id | Global Contact | int(11) unsigned | NO | | 0 | |
| owner-id | Item owner | int(11) unsigned | NO | MUL | 0 | | | owner-id | Item owner | int(11) unsigned | NO | MUL | 0 | |
| author-id | Item author | int(11) unsigned | NO | MUL | 0 | | | author-id | Item author | int(11) unsigned | NO | MUL | 0 | |
| created | | datetime | NO | MUL | 0000-00-00 00:00:00 | | | created | | datetime | NO | MUL | 0001-01-01 00:00:00 | |
| edited | | datetime | NO | | 0000-00-00 00:00:00 | | | edited | | datetime | NO | | 0001-01-01 00:00:00 | |
| commented | | datetime | NO | MUL | 0000-00-00 00:00:00 | | | commented | | datetime | NO | MUL | 0001-01-01 00:00:00 | |
| received | | datetime | NO | | 0000-00-00 00:00:00 | | | received | | datetime | NO | | 0001-01-01 00:00:00 | |
| changed | | datetime | NO | | 0000-00-00 00:00:00 | | | changed | | datetime | NO | | 0001-01-01 00:00:00 | |
| wall | | tinyint(1) | NO | MUL | 0 | | | wall | | tinyint(1) | NO | MUL | 0 | |
| private | | tinyint(1) | NO | | 0 | | | private | | tinyint(1) | NO | | 0 | |
| pubmail | | tinyint(1) | NO | | 0 | | | pubmail | | tinyint(1) | NO | | 0 | |

View File

@ -12,8 +12,8 @@ Table user
| openid | | varchar(255) | NO | | | | | openid | | varchar(255) | NO | | | |
| timezone | PHP-legal timezone | varchar(128) | NO | | | | | timezone | PHP-legal timezone | varchar(128) | NO | | | |
| language | default language | varchar(32) | NO | | en | | | language | default language | varchar(32) | NO | | en | |
| register_date | timestamp of registration | datetime | NO | | 0000-00-00 00:00:00 | | | register_date | timestamp of registration | datetime | NO | | 0001-01-01 00:00:00 | |
| login_date | timestamp of last login | datetime | NO | | 0000-00-00 00:00:00 | | | login_date | timestamp of last login | datetime | NO | | 0001-01-01 00:00:00 | |
| default-location | Default for item.location | varchar(255) | NO | | | | | default-location | Default for item.location | varchar(255) | NO | | | |
| allow_location | 1 allows to display the location | tinyint(1) | NO | | 0 | | | allow_location | 1 allows to display the location | tinyint(1) | NO | | 0 | |
| theme | user theme preference | varchar(255) | NO | | | | | theme | user theme preference | varchar(255) | NO | | | |
@ -36,8 +36,8 @@ Table user
| expire | | int(11) unsigned | NO | | 0 | | | expire | | int(11) unsigned | NO | | 0 | |
| account_removed | if 1 the account is removed | tinyint(1) | NO | | 0 | | | account_removed | if 1 the account is removed | tinyint(1) | NO | | 0 | |
| account_expired | | tinyint(1) | NO | | 0 | | | account_expired | | tinyint(1) | NO | | 0 | |
| account_expires_on | timestamp when account expires and will be deleted | datetime | NO | | 0000-00-00 00:00:00 | | | account_expires_on | timestamp when account expires and will be deleted | datetime | NO | | 0001-01-01 00:00:00 | |
| expire_notification_sent | timestamp of last warning of account expiration | datetime | NO | | 0000-00-00 00:00:00 | | | expire_notification_sent | timestamp of last warning of account expiration | datetime | NO | | 0001-01-01 00:00:00 | |
| service_class | service class for this account, determines what if any limits/restrictions are in place | varchar(32) | NO | | | | | service_class | service class for this account, determines what if any limits/restrictions are in place | varchar(32) | NO | | | |
| def_gid | | int(11) | NO | | 0 | | | def_gid | | int(11) | NO | | 0 | |
| allow_cid | default permission for this user | mediumtext | NO | | NULL | | | allow_cid | default permission for this user | mediumtext | NO | | NULL | |

View File

@ -6,8 +6,8 @@ Table workerqueue
| id | sequential ID | int(11) | NO | PRI | NULL | auto_increment | | id | sequential ID | int(11) | NO | PRI | NULL | auto_increment |
| parameter | | text | NO | | NULL | | | parameter | | text | NO | | NULL | |
| priority | | tinyint(3) unsigned | NO | | 0 | | | priority | | tinyint(3) unsigned | NO | | 0 | |
| created | | datetime | NO | MUL | 0000-00-00 00:00:00 | | | created | | datetime | NO | MUL | 0001-01-01 00:00:00 | |
| pid | | int(11) | NO | | 0 | | | pid | | int(11) | NO | | 0 | |
| executed | | datetime | NO | | 0000-00-00 00:00:00 | | | executed | | datetime | NO | | 0001-01-01 00:00:00 | |
Return to [database documentation](help/database) Return to [database documentation](help/database)

View File

@ -126,6 +126,10 @@ Wildcards werden akzeptiert (Wildcard-Unterstützung unter Windows benötigt PHP
Webb du die Option `Nutzern erlauben das remote_self Flag zu setzen` aktivierst, können alle Nutzer Atom Feeds in den erweiterten Einstellungen des Kontakts als "Entferntes Konto" markieren. Webb du die Option `Nutzern erlauben das remote_self Flag zu setzen` aktivierst, können alle Nutzer Atom Feeds in den erweiterten Einstellungen des Kontakts als "Entferntes Konto" markieren.
Dadurch werden automatisch alle Beiträge dieser Feeds für diesen Nutzer gespiegelt und an die Kontakte bei Friendica verteilt. Dadurch werden automatisch alle Beiträge dieser Feeds für diesen Nutzer gespiegelt und an die Kontakte bei Friendica verteilt.
Dieses Feature kann z.B. dafür genutzt werden Blogbeiträge zu spiegeln.
In der Grundeinstellung ist es nicht aktiviert, da es zusätzliche Last auf dem Server verursachen kann.
Außerdem könnte es durch Nutzer als Spam Verteiler missbraucht werden.
Als Administrator der Friendica Instanz kannst du diese Einstellungen ansonsten nur direkt in der Datenbank vornehmen. Als Administrator der Friendica Instanz kannst du diese Einstellungen ansonsten nur direkt in der Datenbank vornehmen.
Bevor du das tust solltest du sicherstellen, dass du ein Backup der Datenbank hast und genau weißt was die Änderungen an der Datenbank bewirken, die du vornehmen willst. Bevor du das tust solltest du sicherstellen, dass du ein Backup der Datenbank hast und genau weißt was die Änderungen an der Datenbank bewirken, die du vornehmen willst.
@ -162,6 +166,19 @@ Das führt dazu, dass du keinerlei Verbindung zu einer selbst unterzeichneten SS
### Worker ### Worker
In diesem Abschnitt kann der Hintergrund-Prozess konfiguriert werden.
Bevor ein neuer *Worker* Prozess gestartet wird, überprüft das System, dass die vorhandenen Resourchen ausrechend sind,
Aus diesem Grund kann es sein, dass die maximale Zahl der Hintergrungprozesse nicht erreicht wird.
Sollte die PHP Funktion `proc_open` auf dem Server nicht verfügbar sein, kann die Verwendung durch Friendica hier unterbunden werden.
Die Aufgaben die im Hintergrund erledigt werden, haben Prioritäten zugeteilt.
Um garantieren zu können, das wichtige Prozesse schnellst möglich abgearbeitet werden können, selbst wenn das System gerade stark belastet ist, sollte die *fastlane* aktiviert sein.
Wenn es auf deinem Server nicht möglich ist, einen cron Job zu starten, kannst du den *frontend* Worker einschalten.
Nachdem dies geschehen ist, kannst du `example.com/worker` (tausche example.com mit dem echten Domainnamen aus) aufrufen werden.
Dadurch werden dann die Aufgaben aktiviert, die der cron Job sonst aktivieren würde.
### Umsiedeln ### Umsiedeln
## Nutzer ## Nutzer

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,7 @@ $db_user = 'mysqlusername';
$db_pass = 'mysqlpassword'; $db_pass = 'mysqlpassword';
$db_data = 'mysqldatabasename'; $db_data = 'mysqldatabasename';
// Set the database connection charset to UTF8. // Set the database connection charset to full Unicode (utf8mb4).
// Changing this value will likely corrupt the special characters. // Changing this value will likely corrupt the special characters.
// You have been warned. // You have been warned.
$a->config['system']['db_charset'] = "utf8mb4"; $a->config['system']['db_charset'] = "utf8mb4";
@ -87,7 +87,7 @@ $a->config['system']['no_regfullname'] = true;
//$a->config['system']['block_local_dir'] = false; //$a->config['system']['block_local_dir'] = false;
// Location of the global directory // Location of the global directory
$a->config['system']['directory'] = 'http://dir.friendi.ca'; $a->config['system']['directory'] = 'https://dir.friendica.social';
// Allowed protocols in link URLs; HTTP protocols always are accepted // Allowed protocols in link URLs; HTTP protocols always are accepted
$a->config['system']['allowed_link_protocols'] = array('ftp', 'ftps', 'mailto', 'cid', 'gopher'); $a->config['system']['allowed_link_protocols'] = array('ftp', 'ftps', 'mailto', 'cid', 'gopher');

View File

@ -212,6 +212,10 @@ function unmark_for_death($contact) {
function get_contact_details_by_url($url, $uid = -1, $default = array()) { function get_contact_details_by_url($url, $uid = -1, $default = array()) {
static $cache = array(); static $cache = array();
if ($url == '') {
return $default;
}
if ($uid == -1) { if ($uid == -1) {
$uid = local_user(); $uid = local_user();
} }
@ -254,7 +258,7 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
// "bd" always contains the upcoming birthday of a contact. // "bd" always contains the upcoming birthday of a contact.
// "birthday" might contain the birthday including the year of birth. // "birthday" might contain the birthday including the year of birth.
if ($profile["birthday"] != "0000-00-00") { if ($profile["birthday"] > '0001-01-01') {
$bd_timestamp = strtotime($profile["birthday"]); $bd_timestamp = strtotime($profile["birthday"]);
$month = date("m", $bd_timestamp); $month = date("m", $bd_timestamp);
$day = date("d", $bd_timestamp); $day = date("d", $bd_timestamp);
@ -271,7 +275,7 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
$profile["bd"] = (++$current_year)."-".$month."-".$day; $profile["bd"] = (++$current_year)."-".$month."-".$day;
} }
} else { } else {
$profile["bd"] = "0000-00-00"; $profile["bd"] = '0001-01-01';
} }
} else { } else {
$profile = $default; $profile = $default;
@ -307,7 +311,7 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
$profile["location"] = ""; $profile["location"] = "";
$profile["about"] = ""; $profile["about"] = "";
$profile["gender"] = ""; $profile["gender"] = "";
$profile["birthday"] = "0000-00-00"; $profile["birthday"] = '0001-01-01';
} }
$cache[$url][$uid] = $profile; $cache[$url][$uid] = $profile;
@ -328,6 +332,10 @@ function get_contact_details_by_url($url, $uid = -1, $default = array()) {
function get_contact_details_by_addr($addr, $uid = -1) { function get_contact_details_by_addr($addr, $uid = -1) {
static $cache = array(); static $cache = array();
if ($addr == '') {
return array();
}
if ($uid == -1) { if ($uid == -1) {
$uid = local_user(); $uid = local_user();
} }
@ -534,6 +542,10 @@ function get_contact($url, $uid = 0, $no_update = false) {
$data = array(); $data = array();
$contact_id = 0; $contact_id = 0;
if ($url == '') {
return 0;
}
// We first try the nurl (http://server.tld/nick), most common case // We first try the nurl (http://server.tld/nick), most common case
$contacts = q("SELECT `id`, `avatar-date` FROM `contact` $contacts = q("SELECT `id`, `avatar-date` FROM `contact`
WHERE `nurl` = '%s' WHERE `nurl` = '%s'

View File

@ -4,11 +4,11 @@
* @file include/acl_selectors.php * @file include/acl_selectors.php
*/ */
require_once("include/contact_selectors.php"); require_once "include/contact_selectors.php";
require_once("include/contact_widgets.php"); require_once "include/contact_widgets.php";
require_once("include/DirSearch.php"); require_once "include/DirSearch.php";
require_once("include/features.php"); require_once "include/features.php";
require_once("mod/proxy.php"); require_once "mod/proxy.php";
/** /**
@ -35,10 +35,11 @@ function group_select($selname,$selclass,$preselected = false,$size = 4) {
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
if((is_array($preselected)) && in_array($rr['id'], $preselected)) if ((is_array($preselected)) && in_array($rr['id'], $preselected)) {
$selected = " selected=\"selected\" "; $selected = " selected=\"selected\" ";
else } else {
$selected = ''; $selected = '';
}
$trimmed = mb_substr($rr['name'],0,12); $trimmed = mb_substr($rr['name'],0,12);
@ -54,7 +55,8 @@ function group_select($selname,$selclass,$preselected = false,$size = 4) {
return $o; return $o;
} }
/// @TODO after an optional parameter, no mandadory parameter can follow
/// @TODO find proper type-hints
function contact_selector($selname, $selclass, $preselected = false, $options) { function contact_selector($selname, $selclass, $preselected = false, $options) {
$a = get_app(); $a = get_app();
@ -66,40 +68,42 @@ function contact_selector($selname, $selclass, $preselected = false, $options) {
$size = 4; $size = 4;
if (is_array($options)) { if (is_array($options)) {
if (x($options,'size')) if (x($options, 'size'))
$size = $options['size']; $size = $options['size'];
if (x($options,'mutual_friends')) { if (x($options, 'mutual_friends')) {
$mutual = true; $mutual = true;
} }
if (x($options,'single')) { if (x($options, 'single')) {
$single = true; $single = true;
} }
if (x($options,'multiple')) { if (x($options, 'multiple')) {
$single = false; $single = false;
} }
if (x($options,'exclude')) { if (x($options, 'exclude')) {
$exclude = $options['exclude']; $exclude = $options['exclude'];
} }
if (x($options,'networks')) { if (x($options, 'networks')) {
switch($options['networks']) { switch ($options['networks']) {
case 'DFRN_ONLY': case 'DFRN_ONLY':
$networks = array(NETWORK_DFRN); $networks = array(NETWORK_DFRN);
break; break;
case 'PRIVATE': case 'PRIVATE':
if(is_array($a->user) && $a->user['prvnets']) if (is_array($a->user) && $a->user['prvnets']) {
$networks = array(NETWORK_DFRN,NETWORK_MAIL,NETWORK_DIASPORA); $networks = array(NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA);
else } else {
$networks = array(NETWORK_DFRN,NETWORK_FACEBOOK,NETWORK_MAIL, NETWORK_DIASPORA); $networks = array(NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA);
}
break; break;
case 'TWO_WAY': case 'TWO_WAY':
if(is_array($a->user) && $a->user['prvnets']) if (is_array($a->user) && $a->user['prvnets']) {
$networks = array(NETWORK_DFRN,NETWORK_MAIL,NETWORK_DIASPORA); $networks = array(NETWORK_DFRN, NETWORK_MAIL, NETWORK_DIASPORA);
else } else {
$networks = array(NETWORK_DFRN,NETWORK_FACEBOOK,NETWORK_MAIL,NETWORK_DIASPORA,NETWORK_OSTATUS); $networks = array(NETWORK_DFRN, NETWORK_FACEBOOK, NETWORK_MAIL, NETWORK_DIASPORA, NETWORK_OSTATUS);
}
break; break;
default: default: /// @TODO Maybe log this call?
break; break;
} }
} }
@ -113,26 +117,30 @@ function contact_selector($selname, $selclass, $preselected = false, $options) {
$sql_extra = ''; $sql_extra = '';
if($x['mutual']) { if (x($x, 'mutual')) {
$sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND));
} }
if(intval($x['exclude'])) if (x($x, 'exclude')) {
$sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude'])); $sql_extra .= sprintf(" AND `id` != %d ", intval($x['exclude']));
}
if(is_array($x['networks']) && count($x['networks'])) { if (is_array($x['networks']) && count($x['networks'])) {
for($y = 0; $y < count($x['networks']) ; $y ++) /// @TODO rewrite to foreach()
for ($y = 0; $y < count($x['networks']) ; $y ++) {
$x['networks'][$y] = "'" . dbesc($x['networks'][$y]) . "'"; $x['networks'][$y] = "'" . dbesc($x['networks'][$y]) . "'";
$str_nets = implode(',',$x['networks']); }
$str_nets = implode(',', $x['networks']);
$sql_extra .= " AND `network` IN ( $str_nets ) "; $sql_extra .= " AND `network` IN ( $str_nets ) ";
} }
$tabindex = (x($options, 'tabindex') ? "tabindex=\"" . $options["tabindex"] . "\"" : ""); $tabindex = (x($options, 'tabindex') ? "tabindex=\"" . $options["tabindex"] . "\"" : "");
if($x['single']) if ($x['single']) {
$o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"" . $x['size'] . "\" $tabindex >\r\n"; $o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"" . $x['size'] . "\" $tabindex >\r\n";
else } else {
$o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"" . $x['size'] . "$\" $tabindex >\r\n"; $o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"" . $x['size'] . "$\" $tabindex >\r\n";
}
$r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
@ -174,7 +182,7 @@ function contact_selector($selname, $selclass, $preselected = false, $options) {
function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) { function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false, $tabindex = null) {
require_once("include/bbcode.php"); require_once "include/bbcode.php";
$a = get_app(); $a = get_app();
@ -185,29 +193,32 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
$sql_extra = ''; $sql_extra = '';
if($privmail || $celeb) { if ($privmail || $celeb) {
$sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND));
} }
if($privmail) if ($privmail) {
$sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ",
NETWORK_DFRN, NETWORK_DIASPORA); NETWORK_DFRN, NETWORK_DIASPORA);
elseif($privatenet) } elseif ($privatenet) {
$sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ",
NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA); NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA);
}
$tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : ""); $tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : "");
if ($privmail AND $preselected) { if ($privmail AND $preselected) {
$sql_extra .= " AND `id` IN (".implode(",", $preselected).")"; $sql_extra .= " AND `id` IN (".implode(",", $preselected).")";
$hidepreselected = ' style="display: none;"'; $hidepreselected = ' style="display: none;"';
} else } else {
$hidepreselected = ""; $hidepreselected = "";
}
if($privmail) if ($privmail) {
$o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"$size\" $tabindex $hidepreselected>\r\n"; $o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"$size\" $tabindex $hidepreselected>\r\n";
else } else {
$o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"$size\" $tabindex >\r\n"; $o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"$size\" $tabindex >\r\n";
}
$r = q("SELECT `id`, `name`, `url`, `network` FROM `contact` $r = q("SELECT `id`, `name`, `url`, `network` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
@ -229,8 +240,7 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
foreach ($r as $rr) { foreach ($r as $rr) {
if ((is_array($preselected)) && in_array($rr['id'], $preselected)) { if ((is_array($preselected)) && in_array($rr['id'], $preselected)) {
$selected = " selected=\"selected\" "; $selected = " selected=\"selected\" ";
} } else {
else {
$selected = ''; $selected = '';
} }
@ -249,8 +259,9 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
$o .= "</select>\r\n"; $o .= "</select>\r\n";
if ($privmail AND $preselected) if ($privmail AND $preselected) {
$o .= implode(", ", $receiverlist); $o .= implode(", ", $receiverlist);
}
call_hooks($a->module . '_post_' . $selname, $o); call_hooks($a->module . '_post_' . $selname, $o);
@ -259,7 +270,7 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
function fixacl(&$item) { function fixacl(&$item) {
$item = intval(str_replace(array('<','>'),array('',''),$item)); $item = intval(str_replace(array('<', '>'), array('', ''), $item));
} }
function prune_deadguys($arr) { function prune_deadguys($arr) {
@ -268,7 +279,7 @@ function prune_deadguys($arr) {
return $arr; return $arr;
} }
$str = dbesc(implode(',',$arr)); $str = dbesc(implode(',', $arr));
$r = q("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 "); $r = q("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0 ");
@ -287,7 +298,7 @@ function prune_deadguys($arr) {
function get_acl_permissions($user = null) { function get_acl_permissions($user = null) {
$allow_cid = $allow_gid = $deny_cid = $deny_gid = false; $allow_cid = $allow_gid = $deny_cid = $deny_gid = false;
if(is_array($user)) { if (is_array($user)) {
$allow_cid = ((strlen($user['allow_cid'])) $allow_cid = ((strlen($user['allow_cid']))
? explode('><', $user['allow_cid']) : array() ); ? explode('><', $user['allow_cid']) : array() );
$allow_gid = ((strlen($user['allow_gid'])) $allow_gid = ((strlen($user['allow_gid']))
@ -318,34 +329,36 @@ function populate_acl($user = null, $show_jotnets = false) {
$perms = get_acl_permissions($user); $perms = get_acl_permissions($user);
$jotnets = ''; $jotnets = '';
if($show_jotnets) { if ($show_jotnets) {
$mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
$mail_enabled = false; $mail_enabled = false;
$pubmail_enabled = false; $pubmail_enabled = false;
if(! $mail_disabled) { if (! $mail_disabled) {
$r = q("SELECT `pubmail` FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", $r = q("SELECT `pubmail` FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1",
intval(local_user()) intval(local_user())
); );
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
$mail_enabled = true; $mail_enabled = true;
if(intval($r[0]['pubmail'])) if (intval($r[0]['pubmail'])) {
$pubmail_enabled = true; $pubmail_enabled = true;
}
} }
} }
if (!$user['hidewall']) { if (!$user['hidewall']) {
if($mail_enabled) { if ($mail_enabled) {
$selected = (($pubmail_enabled) ? ' checked="checked" ' : ''); $selected = (($pubmail_enabled) ? ' checked="checked" ' : '');
$jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . ' value="1" /> ' . t("Post to Email") . '</div>'; $jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . ' value="1" /> ' . t("Post to Email") . '</div>';
} }
call_hooks('jot_networks', $jotnets); call_hooks('jot_networks', $jotnets);
} else } else {
$jotnets .= sprintf(t('Connectors disabled, since "%s" is enabled.'), $jotnets .= sprintf(t('Connectors disabled, since "%s" is enabled.'),
t('Hide your profile details from unknown viewers?')); t('Hide your profile details from unknown viewers?'));
} }
}
$tpl = get_markup_template("acl_selector.tpl"); $tpl = get_markup_template("acl_selector.tpl");
$o = replace_macros($tpl, array( $o = replace_macros($tpl, array(
@ -363,7 +376,7 @@ function populate_acl($user = null, $show_jotnets = false) {
'$aclModalTitle' => t('Permissions'), '$aclModalTitle' => t('Permissions'),
'$aclModalDismiss' => t('Close'), '$aclModalDismiss' => t('Close'),
'$features' => array( '$features' => array(
"aclautomention"=>(feature_enabled($user['uid'],"aclautomention")?"true":"false") 'aclautomention' => (feature_enabled($user['uid'], "aclautomention") ? "true" : "false")
), ),
)); ));
@ -379,24 +392,26 @@ function construct_acl_data(App $a, $user) {
$user_defaults = get_acl_permissions($user); $user_defaults = get_acl_permissions($user);
if($acl_data['groups']) { if ($acl_data['groups']) {
foreach($acl_data['groups'] as $key=>$group) { foreach ($acl_data['groups'] as $key => $group) {
// Add a "selected" flag to groups that are posted to by default // Add a "selected" flag to groups that are posted to by default
if($user_defaults['allow_gid'] && if ($user_defaults['allow_gid'] &&
in_array($group['id'], $user_defaults['allow_gid']) && !in_array($group['id'], $user_defaults['deny_gid']) ) in_array($group['id'], $user_defaults['allow_gid']) && !in_array($group['id'], $user_defaults['deny_gid']) ) {
$acl_data['groups'][$key]['selected'] = 1; $acl_data['groups'][$key]['selected'] = 1;
else } else {
$acl_data['groups'][$key]['selected'] = 0; $acl_data['groups'][$key]['selected'] = 0;
}
} }
} }
if($acl_data['contacts']) { if ($acl_data['contacts']) {
foreach($acl_data['contacts'] as $key=>$contact) { foreach ($acl_data['contacts'] as $key => $contact) {
// Add a "selected" flag to groups that are posted to by default // Add a "selected" flag to groups that are posted to by default
if($user_defaults['allow_cid'] && if ($user_defaults['allow_cid'] &&
in_array($contact['id'], $user_defaults['allow_cid']) && !in_array($contact['id'], $user_defaults['deny_cid']) ) in_array($contact['id'], $user_defaults['allow_cid']) && !in_array($contact['id'], $user_defaults['deny_cid']) ) {
$acl_data['contacts'][$key]['selected'] = 1; $acl_data['contacts'][$key]['selected'] = 1;
else } else {
$acl_data['contacts'][$key]['selected'] = 0; $acl_data['contacts'][$key]['selected'] = 0;
}
} }
} }
@ -419,23 +434,25 @@ function acl_lookup(App $a, $out_type = 'json') {
// For use with jquery.textcomplete for private mail completion // For use with jquery.textcomplete for private mail completion
if(x($_REQUEST,'query') && strlen($_REQUEST['query'])) { if (x($_REQUEST, 'query') && strlen($_REQUEST['query'])) {
if(! $type) if (! $type) {
$type = 'm'; $type = 'm';
}
$search = $_REQUEST['query']; $search = $_REQUEST['query'];
} }
logger("Searching for ".$search." - type ".$type, LOGGER_DEBUG); logger("Searching for ".$search." - type ".$type, LOGGER_DEBUG);
if ($search!=""){ if ($search != "") {
$sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'"; $sql_extra = "AND `name` LIKE '%%".dbesc($search)."%%'";
$sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')"; $sql_extra2 = "AND (`attag` LIKE '%%".dbesc($search)."%%' OR `name` LIKE '%%".dbesc($search)."%%' OR `nick` LIKE '%%".dbesc($search)."%%')";
} else { } else {
/// @TODO Avoid these needless else blocks by putting variable-initialization atop of if()
$sql_extra = $sql_extra2 = ""; $sql_extra = $sql_extra2 = "";
} }
// count groups and contacts // count groups and contacts
if ($type=='' || $type=='g'){ if ($type == '' || $type == 'g') {
$r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra", $r = q("SELECT COUNT(*) AS g FROM `group` WHERE `deleted` = 0 AND `uid` = %d $sql_extra",
intval(local_user()) intval(local_user())
); );
@ -446,8 +463,8 @@ function acl_lookup(App $a, $out_type = 'json') {
$sql_extra2 .= " ".unavailable_networks(); $sql_extra2 .= " ".unavailable_networks();
// autocomplete for editor mentions if ($type == '' || $type == 'c') {
if ($type=='' || $type=='c'){ // autocomplete for editor mentions
$r = q("SELECT COUNT(*) AS c FROM `contact` $r = q("SELECT COUNT(*) AS c FROM `contact`
WHERE `uid` = %d AND NOT `self` WHERE `uid` = %d AND NOT `self`
AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND NOT `blocked` AND NOT `pending` AND NOT `archive`
@ -493,7 +510,7 @@ function acl_lookup(App $a, $out_type = 'json') {
$groups = array(); $groups = array();
$contacts = array(); $contacts = array();
if ($type=='' || $type=='g'){ if ($type == '' || $type == 'g') {
/// @todo We should cache this query. /// @todo We should cache this query.
// This can be done when we can delete cache entries via wildcard // This can be done when we can delete cache entries via wildcard
@ -502,7 +519,7 @@ function acl_lookup(App $a, $out_type = 'json') {
INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` AND `group_member`.`uid` = `group`.`uid` INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id` AND `group_member`.`uid` = `group`.`uid`
WHERE NOT `group`.`deleted` AND `group`.`uid` = %d WHERE NOT `group`.`deleted` AND `group`.`uid` = %d
$sql_extra $sql_extra
GROUP BY `group`.`name` GROUP BY `group`.`name`, `group`.`id`
ORDER BY `group`.`name` ORDER BY `group`.`name`
LIMIT %d,%d", LIMIT %d,%d",
intval(local_user()), intval(local_user()),
@ -510,7 +527,7 @@ function acl_lookup(App $a, $out_type = 'json') {
intval($count) intval($count)
); );
foreach($r as $g){ foreach ($r as $g) {
// logger('acl: group: ' . $g['name'] . ' members: ' . $g['uids']); // logger('acl: group: ' . $g['name'] . ' members: ' . $g['uids']);
$groups[] = array( $groups[] = array(
"type" => "g", "type" => "g",
@ -524,7 +541,7 @@ function acl_lookup(App $a, $out_type = 'json') {
} }
} }
if ($type==''){ if ($type == '') {
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact` $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
@ -534,9 +551,7 @@ function acl_lookup(App $a, $out_type = 'json') {
intval(local_user()), intval(local_user()),
dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET) dbesc(NETWORK_OSTATUS), dbesc(NETWORK_STATUSNET)
); );
} } elseif ($type == 'c') {
elseif ($type=='c'){
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact` $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `forum`, `prv` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != '' WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
AND NOT (`network` IN ('%s')) AND NOT (`network` IN ('%s'))
@ -546,7 +561,7 @@ function acl_lookup(App $a, $out_type = 'json') {
dbesc(NETWORK_STATUSNET) dbesc(NETWORK_STATUSNET)
); );
} }
elseif($type == 'm') { elseif ($type == 'm') {
$r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact` $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive`
AND `network` IN ('%s','%s','%s') AND `network` IN ('%s','%s','%s')
@ -593,7 +608,7 @@ function acl_lookup(App $a, $out_type = 'json') {
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r as $g){ foreach ($r as $g) {
$contacts[] = array( $contacts[] = array(
'type' => 'c', 'type' => 'c',
'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO), 'photo' => proxy_url($g['micro'], false, PROXY_SIZE_MICRO),
@ -602,7 +617,7 @@ function acl_lookup(App $a, $out_type = 'json') {
'network' => $g['network'], 'network' => $g['network'],
'link' => $g['url'], 'link' => $g['url'],
'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']), 'nick' => htmlentities(($g['attag']) ? $g['attag'] : $g['nick']),
'forum' => ((x($g['forum']) || x($g['prv'])) ? 1 : 0), 'forum' => ((x($g, 'forum') || x($g, 'prv')) ? 1 : 0),
); );
} }
} }
@ -625,7 +640,7 @@ function acl_lookup(App $a, $out_type = 'json') {
FROM `item` WHERE `parent` = %d FROM `item` WHERE `parent` = %d
AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%') AND (`author-name` LIKE '%%%s%%' OR `author-link` LIKE '%%%s%%')
AND `author-link` NOT IN ('%s') AND `author-link` NOT IN ('%s')
GROUP BY `author-link` GROUP BY `author-link`, `author-avatar`, `author-name`
ORDER BY `author-name` ASC ORDER BY `author-name` ASC
", ",
intval($conv_id), intval($conv_id),
@ -669,7 +684,7 @@ function acl_lookup(App $a, $out_type = 'json') {
call_hooks('acl_lookup_end', $results); call_hooks('acl_lookup_end', $results);
if($out_type === 'html') { if ($out_type === 'html') {
$o = array( $o = array(
'tot' => $results['tot'], 'tot' => $results['tot'],
'start' => $results['start'], 'start' => $results['start'],

File diff suppressed because it is too large Load Diff

View File

@ -1060,13 +1060,14 @@ function z_mime_content_type($filename) {
'zsh' => 'text/x-script.zsh', 'zsh' => 'text/x-script.zsh',
); );
$dot = strpos($filename,'.'); $dot = strpos($filename, '.');
if($dot !== false) { if ($dot !== false) {
$ext = strtolower(substr($filename,$dot+1)); $ext = strtolower(substr($filename, $dot + 1));
if (array_key_exists($ext, $mime_types)) { if (array_key_exists($ext, $mime_types)) {
return $mime_types[$ext]; return $mime_types[$ext];
} }
} }
/// @TODO Then let's get rid of it?
// can't use this because we're just passing a name, e.g. not a file that can be opened // can't use this because we're just passing a name, e.g. not a file that can be opened
// elseif (function_exists('finfo_open')) { // elseif (function_exists('finfo_open')) {
// $finfo = @finfo_open(FILEINFO_MIME); // $finfo = @finfo_open(FILEINFO_MIME);

View File

@ -27,14 +27,15 @@ function diaspora_mention2bb($match) {
$name = $data['name']; $name = $data['name'];
} }
return '@[url='.$data['url'].']'.$name.'[/url]'; return '@[url=' . $data['url'] . ']' . $name . '[/url]';
} }
// we don't want to support a bbcode specific markdown interpreter /*
// and the markdown library we have is pretty good, but provides HTML output. * we don't want to support a bbcode specific markdown interpreter
// So we'll use that to convert to HTML, then convert the HTML back to bbcode, * and the markdown library we have is pretty good, but provides HTML output.
// and then clean up a few Diaspora specific constructs. * So we'll use that to convert to HTML, then convert the HTML back to bbcode,
* and then clean up a few Diaspora specific constructs.
*/
function diaspora2bb($s) { function diaspora2bb($s) {
$s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8');
@ -93,15 +94,15 @@ function diaspora_mentions($match) {
$contact = get_contact_details_by_url($match[3]); $contact = get_contact_details_by_url($match[3]);
if (!isset($contact['addr'])) { if (!x($contact, 'addr')) {
$contact = Probe::uri($match[3]); $contact = Probe::uri($match[3]);
} }
if (!isset($contact['addr'])) { if (!x($contact, 'addr')) {
return $match[0]; return $match[0];
} }
$mention = '@{'.$match[2].'; '.$contact['addr'].'}'; $mention = '@{' . $match[2] . '; ' . $contact['addr'] . '}';
return $mention; return $mention;
} }
@ -222,9 +223,9 @@ function unescape_underscores_in_links($m) {
} }
function format_event_diaspora($ev) { function format_event_diaspora($ev) {
if (! ((is_array($ev)) && count($ev))) {
if(! ((is_array($ev)) && count($ev)))
return ''; return '';
}
$bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM $bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM
@ -239,17 +240,19 @@ function format_event_diaspora($ev) {
$ev['start'] , $bd_format))) $ev['start'] , $bd_format)))
. '](' . App::get_baseurl() . '/localtime/?f=&time=' . urlencode(datetime_convert('UTC','UTC',$ev['start'])) . ")\n"; . '](' . App::get_baseurl() . '/localtime/?f=&time=' . urlencode(datetime_convert('UTC','UTC',$ev['start'])) . ")\n";
if(! $ev['nofinish']) if (! $ev['nofinish']) {
$o .= t('Finishes:') . ' ' . '[' $o .= t('Finishes:') . ' ' . '['
. (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC', . (($ev['adjust']) ? day_translate(datetime_convert('UTC', 'UTC',
$ev['finish'] , $bd_format )) $ev['finish'] , $bd_format ))
: day_translate(datetime_convert('UTC', 'UTC', : day_translate(datetime_convert('UTC', 'UTC',
$ev['finish'] , $bd_format ))) $ev['finish'] , $bd_format )))
. '](' . App::get_baseurl() . '/localtime/?f=&time=' . urlencode(datetime_convert('UTC','UTC',$ev['finish'])) . ")\n"; . '](' . App::get_baseurl() . '/localtime/?f=&time=' . urlencode(datetime_convert('UTC','UTC',$ev['finish'])) . ")\n";
}
if(strlen($ev['location'])) if (strlen($ev['location'])) {
$o .= t('Location:') . bb2diaspora($ev['location']) $o .= t('Location:') . bb2diaspora($ev['location'])
. "\n"; . "\n";
}
$o .= "\n"; $o .= "\n";
return $o; return $o;

View File

@ -9,35 +9,38 @@ require_once 'include/Contact.php';
require_once 'include/plaintext.php'; require_once 'include/plaintext.php';
function bb_PictureCacheExt($matches) { function bb_PictureCacheExt($matches) {
if (strpos($matches[3], "data:image/") === 0) if (strpos($matches[3], "data:image/") === 0) {
return ($matches[0]); return $matches[0];
}
$matches[3] = proxy_url($matches[3]); $matches[3] = proxy_url($matches[3]);
return "[img=".$matches[1]."x".$matches[2]."]".$matches[3]."[/img]"; return "[img=" . $matches[1] . "x" . $matches[2] . "]" . $matches[3] . "[/img]";
} }
function bb_PictureCache($matches) { function bb_PictureCache($matches) {
if (strpos($matches[1], "data:image/") === 0) if (strpos($matches[1], "data:image/") === 0) {
return ($matches[0]); return $matches[0];
}
$matches[1] = proxy_url($matches[1]); $matches[1] = proxy_url($matches[1]);
return "[img]".$matches[1]."[/img]"; return "[img]" . $matches[1] . "[/img]";
} }
function bb_map_coords($match) { function bb_map_coords($match) {
// the extra space in the following line is intentional // the extra space in the following line is intentional
return str_replace($match[0],'<div class="map" >' . generate_map(str_replace('/',' ',$match[1])) . '</div>', $match[0]); return str_replace($match[0], '<div class="map" >' . generate_map(str_replace('/', ' ', $match[1])) . '</div>', $match[0]);
} }
function bb_map_location($match) { function bb_map_location($match) {
// the extra space in the following line is intentional // the extra space in the following line is intentional
return str_replace($match[0],'<div class="map" >' . generate_named_map($match[1]) . '</div>', $match[0]); return str_replace($match[0], '<div class="map" >' . generate_named_map($match[1]) . '</div>', $match[0]);
} }
function bb_attachment($Text, $simplehtml = false, $tryoembed = true) { function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
$data = get_attachment_data($Text); $data = get_attachment_data($Text);
if (!$data) if (!$data) {
return $Text; return $Text;
}
if (isset($data["title"])) { if (isset($data["title"])) {
$data["title"] = strip_tags($data["title"]); $data["title"] = strip_tags($data["title"]);
@ -57,8 +60,9 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
// If the link description is similar to the text above then don't add the link description // If the link description is similar to the text above then don't add the link description
if (($data["title"] != "") AND ((strpos($test1,$test2) !== false) OR if (($data["title"] != "") AND ((strpos($test1,$test2) !== false) OR
(similar_text($test1,$test2) / strlen($data["title"])) > 0.9)) (similar_text($test1,$test2) / strlen($data["title"])) > 0.9)) {
$title2 = $data["url"]; $title2 = $data["url"];
}
$text = sprintf('<a href="%s" title="%s" class="attachment" rel="nofollow external">%s</a><br />', $text = sprintf('<a href="%s" title="%s" class="attachment" rel="nofollow external">%s</a><br />',
$data["url"], $data["title"], $title2); $data["url"], $data["title"], $title2);
} elseif (($simplehtml != 4) AND ($simplehtml != 0)) { } elseif (($simplehtml != 4) AND ($simplehtml != 0)) {
@ -67,26 +71,30 @@ function bb_attachment($Text, $simplehtml = false, $tryoembed = true) {
$text = sprintf('<span class="type-%s">', $data["type"]); $text = sprintf('<span class="type-%s">', $data["type"]);
$bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $data["url"], $data["title"]), $data["url"], $data["title"]); $bookmark = array(sprintf('[bookmark=%s]%s[/bookmark]', $data["url"], $data["title"]), $data["url"], $data["title"]);
if ($tryoembed) if ($tryoembed) {
$oembed = tryoembed($bookmark); $oembed = tryoembed($bookmark);
else } else {
$oembed = $bookmark[0]; $oembed = $bookmark[0];
}
if (strstr(strtolower($oembed), "<iframe ")) if (strstr(strtolower($oembed), "<iframe ")) {
$text = $oembed; $text = $oembed;
else { } else {
if (($data["image"] != "") AND !strstr(strtolower($oembed), "<img ")) if (($data["image"] != "") AND !strstr(strtolower($oembed), "<img ")) {
$text .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-image" /></a><br />', $data["url"], proxy_url($data["image"]), $data["title"]); $text .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-image" /></a><br />', $data["url"], proxy_url($data["image"]), $data["title"]);
elseif (($data["preview"] != "") AND !strstr(strtolower($oembed), "<img ")) } elseif (($data["preview"] != "") AND !strstr(strtolower($oembed), "<img ")) {
$text .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-preview" /></a><br />', $data["url"], proxy_url($data["preview"]), $data["title"]); $text .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-preview" /></a><br />', $data["url"], proxy_url($data["preview"]), $data["title"]);
}
if (($data["type"] == "photo") AND ($data["url"] != "") AND ($data["image"] != "")) if (($data["type"] == "photo") AND ($data["url"] != "") AND ($data["image"] != "")) {
$text .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-image" /></a>', $data["url"], proxy_url($data["image"]), $data["title"]); $text .= sprintf('<a href="%s" target="_blank"><img src="%s" alt="" title="%s" class="attachment-image" /></a>', $data["url"], proxy_url($data["image"]), $data["title"]);
else } else {
$text .= $oembed; $text .= $oembed;
}
if (trim($data["description"]) != "") if (trim($data["description"]) != "") {
$text .= sprintf('<blockquote>%s</blockquote></span>', trim(bbcode($data["description"]))); $text .= sprintf('<blockquote>%s</blockquote></span>', trim(bbcode($data["description"])));
}
} }
} }
return trim($data["text"].' '.$text.' '.$data["after"]); return trim($data["text"].' '.$text.' '.$data["after"]);
@ -96,44 +104,47 @@ function bb_remove_share_information($Text, $plaintext = false, $nolink = false)
$data = get_attachment_data($Text); $data = get_attachment_data($Text);
if (!$data) if (!$data) {
return $Text; return $Text;
} elseif ($nolink) {
if ($nolink) return $data["text"] . $data["after"];
return $data["text"].$data["after"]; }
$title = htmlentities($data["title"], ENT_QUOTES, 'UTF-8', false); $title = htmlentities($data["title"], ENT_QUOTES, 'UTF-8', false);
$text = htmlentities($data["text"], ENT_QUOTES, 'UTF-8', false); $text = htmlentities($data["text"], ENT_QUOTES, 'UTF-8', false);
if ($plaintext OR (($title != "") AND strstr($text, $title))) if ($plaintext OR (($title != "") AND strstr($text, $title))) {
$data["title"] = $data["url"]; $data["title"] = $data["url"];
elseif (($text != "") AND strstr($title, $text)) { } elseif (($text != "") AND strstr($title, $text)) {
$data["text"] = $data["title"]; $data["text"] = $data["title"];
$data["title"] = $data["url"]; $data["title"] = $data["url"];
} }
if (($data["text"] == "") AND ($data["title"] != "") AND ($data["url"] == "")) if (($data["text"] == "") AND ($data["title"] != "") AND ($data["url"] == "")) {
return $data["title"].$data["after"]; return $data["title"] . $data["after"];
}
// If the link already is included in the post, don't add it again // If the link already is included in the post, don't add it again
if (($data["url"] != "") AND strpos($data["text"], $data["url"])) if (($data["url"] != "") AND strpos($data["text"], $data["url"])) {
return $data["text"].$data["after"]; return $data["text"] . $data["after"];
}
$text = $data["text"]; $text = $data["text"];
if (($data["url"] != "") AND ($data["title"] != "")) if (($data["url"] != "") AND ($data["title"] != "")) {
$text .= "\n[url=".$data["url"]."]".$data["title"]."[/url]"; $text .= "\n[url=" . $data["url"] . "]" . $data["title"] . "[/url]";
elseif (($data["url"] != "")) } elseif (($data["url"] != "")) {
$text .= "\n".$data["url"]; $text .= "\n" . $data["url"];
}
return $text."\n".$data["after"]; return $text . "\n" . $data["after"];
} }
function bb_cleanstyle($st) { function bb_cleanstyle($st) {
return "<span style=\"".cleancss($st[1]).";\">".$st[2]."</span>"; return "<span style=\"" . cleancss($st[1]) . ";\">" . $st[2] . "</span>";
} }
function bb_cleanclass($st) { function bb_cleanclass($st) {
return "<span class=\"".cleancss($st[1])."\">".$st[2]."</span>"; return "<span class=\"" . cleancss($st[1]) . "\">" . $st[2] . "</span>";
} }
function cleancss($input) { function cleancss($input) {
@ -145,14 +156,16 @@ function cleancss($input) {
for ($i = 0; $i < strlen($input); $i++) { for ($i = 0; $i < strlen($input); $i++) {
$char = substr($input, $i, 1); $char = substr($input, $i, 1);
if (($char >= "a") and ($char <= "z")) if (($char >= "a") and ($char <= "z")) {
$cleaned .= $char; $cleaned .= $char;
}
if (!(strpos(" #;:0123456789-_.%", $char) === false)) if (!(strpos(" #;:0123456789-_.%", $char) === false)) {
$cleaned .= $char; $cleaned .= $char;
}
} }
return($cleaned); return $cleaned;
} }
function stripcode_br_cb($s) { function stripcode_br_cb($s) {
@ -166,25 +179,30 @@ function tryoembed($match) {
$url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"), $url = str_replace(array("http://www.youtube.com/", "http://player.vimeo.com/"),
array("https://www.youtube.com/", "https://player.vimeo.com/"), $url); array("https://www.youtube.com/", "https://player.vimeo.com/"), $url);
$o = oembed_fetch_url($url); $o = oembed_fetch_url($url);
if (!is_object($o)) if (!is_object($o)) {
return $match[0]; return $match[0];
}
if (isset($match[2])) if (isset($match[2])) {
$o->title = $match[2]; $o->title = $match[2];
}
if ($o->type=="error") return $match[0]; if ($o->type == "error") {
return $match[0];
}
$html = oembed_format_object($o); $html = oembed_format_object($o);
return $html; return $html;
} }
// [noparse][i]italic[/i][/noparse] turns into /*
// [noparse][ i ]italic[ /i ][/noparse], * [noparse][i]italic[/i][/noparse] turns into
// to hide them from parser. * [noparse][ i ]italic[ /i ][/noparse],
* to hide them from parser.
*/
function bb_spacefy($st) { function bb_spacefy($st) {
$whole_match = $st[0]; $whole_match = $st[0];
$captured = $st[1]; $captured = $st[1];
@ -193,10 +211,11 @@ function bb_spacefy($st) {
return $new_str; return $new_str;
} }
// The previously spacefied [noparse][ i ]italic[ /i ][/noparse], /*
// now turns back and the [noparse] tags are trimed * The previously spacefied [noparse][ i ]italic[ /i ][/noparse],
// returning [i]italic[/i] * now turns back and the [noparse] tags are trimed
* returning [i]italic[/i]
*/
function bb_unspacefy_and_trim($st) { function bb_unspacefy_and_trim($st) {
$whole_match = $st[0]; $whole_match = $st[0];
$captured = $st[1]; $captured = $st[1];
@ -205,23 +224,26 @@ function bb_unspacefy_and_trim($st) {
} }
function bb_find_open_close($s, $open, $close, $occurence = 1) { function bb_find_open_close($s, $open, $close, $occurence = 1) {
if ($occurence < 1) {
if($occurence < 1)
$occurence = 1; $occurence = 1;
$start_pos = -1;
for($i = 1; $i <= $occurence; $i++) {
if( $start_pos !== false)
$start_pos = strpos($s, $open, $start_pos + 1);
} }
if( $start_pos === false) $start_pos = -1;
for ($i = 1; $i <= $occurence; $i++) {
if ($start_pos !== false) {
$start_pos = strpos($s, $open, $start_pos + 1);
}
}
if ($start_pos === false) {
return false; return false;
}
$end_pos = strpos($s, $close, $start_pos); $end_pos = strpos($s, $close, $start_pos);
if( $end_pos === false) if ($end_pos === false) {
return false; return false;
}
$res = array( 'start' => $start_pos, 'end' => $end_pos ); $res = array( 'start' => $start_pos, 'end' => $end_pos );
@ -229,36 +251,50 @@ function bb_find_open_close($s, $open, $close, $occurence = 1) {
} }
function get_bb_tag_pos($s, $name, $occurence = 1) { function get_bb_tag_pos($s, $name, $occurence = 1) {
if ($occurence < 1) {
if($occurence < 1)
$occurence = 1; $occurence = 1;
$start_open = -1;
for($i = 1; $i <= $occurence; $i++) {
if( $start_open !== false)
$start_open = strpos($s, '[' . $name, $start_open + 1); // allow [name= type tags
} }
if( $start_open === false) $start_open = -1;
for ($i = 1; $i <= $occurence; $i++) {
if ($start_open !== false) {
$start_open = strpos($s, '[' . $name, $start_open + 1); // allow [name= type tags
}
}
if ($start_open === false) {
return false; return false;
}
$start_equal = strpos($s, '=', $start_open); $start_equal = strpos($s, '=', $start_open);
$start_close = strpos($s, ']', $start_open); $start_close = strpos($s, ']', $start_open);
if( $start_close === false) if ($start_close === false) {
return false; return false;
}
$start_close++; $start_close++;
$end_open = strpos($s, '[/' . $name . ']', $start_close); $end_open = strpos($s, '[/' . $name . ']', $start_close);
if( $end_open === false) if ($end_open === false) {
return false; return false;
}
$res = array( 'start' => array('open' => $start_open, 'close' => $start_close), $res = array(
'end' => array('open' => $end_open, 'close' => $end_open + strlen('[/' . $name . ']')) ); 'start' => array(
if( $start_equal !== false) 'open' => $start_open,
'close' => $start_close
),
'end' => array(
'open' => $end_open,
'close' => $end_open + strlen('[/' . $name . ']')
),
);
if ($start_equal !== false) {
$res['start']['equal'] = $start_equal + 1; $res['start']['equal'] = $start_equal + 1;
}
return $res; return $res;
} }
@ -269,13 +305,13 @@ function bb_tag_preg_replace($pattern, $replace, $name, $s) {
$occurence = 1; $occurence = 1;
$pos = get_bb_tag_pos($string, $name, $occurence); $pos = get_bb_tag_pos($string, $name, $occurence);
while($pos !== false && $occurence < 1000) { while ($pos !== false && $occurence < 1000) {
$start = substr($string, 0, $pos['start']['open']); $start = substr($string, 0, $pos['start']['open']);
$subject = substr($string, $pos['start']['open'], $pos['end']['close'] - $pos['start']['open']); $subject = substr($string, $pos['start']['open'], $pos['end']['close'] - $pos['start']['open']);
$end = substr($string, $pos['end']['close']); $end = substr($string, $pos['end']['close']);
if($end === false) if ($end === false) {
$end = ''; $end = '';
}
$subject = preg_replace($pattern, $replace, $subject); $subject = preg_replace($pattern, $replace, $subject);
$string = $start . $subject . $end; $string = $start . $subject . $end;
@ -287,7 +323,7 @@ function bb_tag_preg_replace($pattern, $replace, $name, $s) {
return $string; return $string;
} }
if(! function_exists('bb_extract_images')) { if (! function_exists('bb_extract_images')) {
function bb_extract_images($body) { function bb_extract_images($body) {
$saved_image = array(); $saved_image = array();
@ -298,26 +334,28 @@ function bb_extract_images($body) {
$img_start = strpos($orig_body, '[img'); $img_start = strpos($orig_body, '[img');
$img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false); $img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false);
$img_end = ($img_start !== false ? strpos(substr($orig_body, $img_start), '[/img]') : false); $img_end = ($img_start !== false ? strpos(substr($orig_body, $img_start), '[/img]') : false);
while(($img_st_close !== false) && ($img_end !== false)) { while (($img_st_close !== false) && ($img_end !== false)) {
$img_st_close++; // make it point to AFTER the closing bracket $img_st_close++; // make it point to AFTER the closing bracket
$img_end += $img_start; $img_end += $img_start;
if(! strcmp(substr($orig_body, $img_start + $img_st_close, 5), 'data:')) { if (! strcmp(substr($orig_body, $img_start + $img_st_close, 5), 'data:')) {
// This is an embedded image // This is an embedded image
$saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - ($img_start + $img_st_close)); $saved_image[$cnt] = substr($orig_body, $img_start + $img_st_close, $img_end - ($img_start + $img_st_close));
$new_body = $new_body . substr($orig_body, 0, $img_start) . '[$#saved_image' . $cnt . '#$]'; $new_body = $new_body . substr($orig_body, 0, $img_start) . '[$#saved_image' . $cnt . '#$]';
$cnt++; $cnt++;
} } else {
else
$new_body = $new_body . substr($orig_body, 0, $img_end + strlen('[/img]')); $new_body = $new_body . substr($orig_body, 0, $img_end + strlen('[/img]'));
}
$orig_body = substr($orig_body, $img_end + strlen('[/img]')); $orig_body = substr($orig_body, $img_end + strlen('[/img]'));
if($orig_body === false) // in case the body ends on a closing image tag if ($orig_body === false) {
// in case the body ends on a closing image tag
$orig_body = ''; $orig_body = '';
}
$img_start = strpos($orig_body, '[img'); $img_start = strpos($orig_body, '[img');
$img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false); $img_st_close = ($img_start !== false ? strpos(substr($orig_body, $img_start), ']') : false);
@ -329,7 +367,7 @@ function bb_extract_images($body) {
return array('body' => $new_body, 'images' => $saved_image); return array('body' => $new_body, 'images' => $saved_image);
}} }}
if(! function_exists('bb_replace_images')) { if (! function_exists('bb_replace_images')) {
function bb_replace_images($body, $images) { function bb_replace_images($body, $images) {
$newbody = $body; $newbody = $body;
@ -504,85 +542,94 @@ function bb_ShareAttributes($share, $simplehtml) {
); );
break; break;
} }
return($text);
return $text;
} }
function GetProfileUsername($profile, $username, $compact = false, $getnetwork = false) { function GetProfileUsername($profile, $username, $compact = false, $getnetwork = false) {
$twitter = preg_replace("=https?://twitter.com/(.*)=ism", "$1@twitter.com", $profile); $twitter = preg_replace("=https?://twitter.com/(.*)=ism", "$1@twitter.com", $profile);
if ($twitter != $profile) { if ($twitter != $profile) {
if ($getnetwork) if ($getnetwork) {
return(NETWORK_TWITTER); return NETWORK_TWITTER;
elseif ($compact) } elseif ($compact) {
return($twitter); return $twitter;
else } else {
return($username." (".$twitter.")"); return ($username . " (" . $twitter . ")");
}
} }
$appnet = preg_replace("=https?://alpha.app.net/(.*)=ism", "$1@alpha.app.net", $profile); $appnet = preg_replace("=https?://alpha.app.net/(.*)=ism", "$1@alpha.app.net", $profile);
if ($appnet != $profile) { if ($appnet != $profile) {
if ($getnetwork) if ($getnetwork) {
return(NETWORK_APPNET); return NETWORK_APPNET;
elseif ($compact) } elseif ($compact) {
return($appnet); return $appnet;
else } else {
return($username." (".$appnet.")"); return ($username . " (" . $appnet . ")");
}
} }
$gplus = preg_replace("=https?://plus.google.com/(.*)=ism", "$1@plus.google.com", $profile); $gplus = preg_replace("=https?://plus.google.com/(.*)=ism", "$1@plus.google.com", $profile);
if ($gplus != $profile) { if ($gplus != $profile) {
if ($getnetwork) if ($getnetwork) {
return(NETWORK_GPLUS); return NETWORK_GPLUS;
elseif ($compact) } elseif ($compact) {
return($gplususername." (".$username.")"); return ($gplususername . " (" . $username . ")");
else } else {
return($username." (".$gplus.")"); return ($username . " (" . $gplus . ")");
}
} }
$friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2@$1", $profile); $friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2@$1", $profile);
if ($friendica != $profile) { if ($friendica != $profile) {
if ($getnetwork) if ($getnetwork) {
return(NETWORK_DFRN); return NETWORK_DFRN;
elseif ($compact) } elseif ($compact) {
return($friendica); return $friendica;
else } else {
return($username." (".$friendica.")"); return ($username . " (" . $friendica . ")");
}
} }
$diaspora = preg_replace("=https?://(.*)/u/(.*)=ism", "$2@$1", $profile); $diaspora = preg_replace("=https?://(.*)/u/(.*)=ism", "$2@$1", $profile);
if ($diaspora != $profile) { if ($diaspora != $profile) {
if ($getnetwork) if ($getnetwork) {
return(NETWORK_DIASPORA); return NETWORK_DIASPORA;
elseif ($compact) } elseif ($compact) {
return($diaspora); return $diaspora;
else } else {
return($username." (".$diaspora.")"); return ($username . " (" . $diaspora . ")");
}
} }
$red = preg_replace("=https?://(.*)/channel/(.*)=ism", "$2@$1", $profile); $red = preg_replace("=https?://(.*)/channel/(.*)=ism", "$2@$1", $profile);
if ($red != $profile) { if ($red != $profile) {
if ($getnetwork) if ($getnetwork) {
// red is identified as Diaspora - friendica can't connect directly to it // red is identified as Diaspora - friendica can't connect directly to it
return(NETWORK_DIASPORA); return NETWORK_DIASPORA;
elseif ($compact) } elseif ($compact) {
return($red); return $red;
else } else {
return($username." (".$red.")"); return ($username . " (" . $red . ")");
}
} }
$StatusnetHost = preg_replace("=https?://(.*)/user/(.*)=ism", "$1", $profile); $StatusnetHost = preg_replace("=https?://(.*)/user/(.*)=ism", "$1", $profile);
if ($StatusnetHost != $profile) { if ($StatusnetHost != $profile) {
$StatusnetUser = preg_replace("=https?://(.*)/user/(.*)=ism", "$2", $profile); $StatusnetUser = preg_replace("=https?://(.*)/user/(.*)=ism", "$2", $profile);
if ($StatusnetUser != $profile) { if ($StatusnetUser != $profile) {
/// @TODO Some hosts run on https, not just http and sometimes http is disabled, let's support both here
$UserData = fetch_url("http://".$StatusnetHost."/api/users/show.json?user_id=".$StatusnetUser); $UserData = fetch_url("http://".$StatusnetHost."/api/users/show.json?user_id=".$StatusnetUser);
$user = json_decode($UserData); $user = json_decode($UserData);
if ($user) { if ($user) {
if ($getnetwork) if ($getnetwork) {
return(NETWORK_STATUSNET); return NETWORK_STATUSNET;
elseif ($compact) } elseif ($compact) {
return($user->screen_name."@".$StatusnetHost); return ($user->screen_name . "@" . $StatusnetHost);
else } else {
return($username." (".$user->screen_name."@".$StatusnetHost.")"); return ($username . " (" . $user->screen_name . "@" . $StatusnetHost . ")");
}
} }
} }
} }
@ -592,16 +639,17 @@ function GetProfileUsername($profile, $username, $compact = false, $getnetwork =
if ($rest == "") { if ($rest == "") {
$pumpio = preg_replace("=https?://([\.\w]+)/([\.\w]+)(.*)=ism", "$2@$1", $profile); $pumpio = preg_replace("=https?://([\.\w]+)/([\.\w]+)(.*)=ism", "$2@$1", $profile);
if ($pumpio != $profile) { if ($pumpio != $profile) {
if ($getnetwork) if ($getnetwork) {
return(NETWORK_PUMPIO); return NETWORK_PUMPIO;
elseif ($compact) } elseif ($compact) {
return($pumpio); return $pumpio;
else } else {
return($username." (".$pumpio.")"); return ($username . " (" . $pumpio . ")");
}
} }
} }
return($username); return $username;
} }
function bb_DiasporaLinks($match) { function bb_DiasporaLinks($match) {
@ -611,7 +659,7 @@ function bb_DiasporaLinks($match) {
function bb_RemovePictureLinks($match) { function bb_RemovePictureLinks($match) {
$text = Cache::get($match[1]); $text = Cache::get($match[1]);
if(is_null($text)){ if (is_null($text)) {
$a = get_app(); $a = get_app();
$stamp1 = microtime(true); $stamp1 = microtime(true);
@ -652,20 +700,22 @@ function bb_RemovePictureLinks($match) {
} }
Cache::set($match[1],$text); Cache::set($match[1],$text);
} }
return($text);
return $text;
} }
function bb_expand_links($match) { function bb_expand_links($match) {
if (($match[3] == "") OR ($match[2] == $match[3]) OR stristr($match[2], $match[3])) if (($match[3] == "") OR ($match[2] == $match[3]) OR stristr($match[2], $match[3])) {
return ($match[1]."[url]".$match[2]."[/url]"); return ($match[1] . "[url]" . $match[2] . "[/url]");
else } else {
return ($match[1].$match[3]." [url]".$match[2]."[/url]"); return ($match[1] . $match[3] . " [url]" . $match[2] . "[/url]");
}
} }
function bb_CleanPictureLinksSub($match) { function bb_CleanPictureLinksSub($match) {
$text = Cache::get($match[1]); $text = Cache::get($match[1]);
if(is_null($text)){ if (is_null($text)) {
$a = get_app(); $a = get_app();
$stamp1 = microtime(true); $stamp1 = microtime(true);
@ -707,18 +757,20 @@ function bb_CleanPictureLinksSub($match) {
} }
Cache::set($match[1],$text); Cache::set($match[1],$text);
} }
return($text);
return $text;
} }
function bb_CleanPictureLinks($text) { function bb_CleanPictureLinks($text) {
$text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_CleanPictureLinksSub', $text); $text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_CleanPictureLinksSub', $text);
return ($text); return $text;
} }
function bb_highlight($match) { function bb_highlight($match) {
if(in_array(strtolower($match[1]),['php','css','mysql','sql','abap','diff','html','perl','ruby', if (in_array(strtolower($match[1]), ['php', 'css', 'mysql', 'sql', 'abap', 'diff', 'html', 'perl', 'ruby',
'vbscript','avrc','dtd','java','xml','cpp','python','javascript','js','sh'])) 'vbscript', 'avrc', 'dtd', 'java', 'xml', 'cpp', 'python', 'javascript', 'js', 'sh'])) {
return text_highlight($match[2],strtolower($match[1])); return text_highlight($match[2], strtolower($match[1]));
}
return $match[0]; return $match[0];
} }
@ -827,7 +879,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa
// Handle attached links or videos // Handle attached links or videos
$Text = bb_attachment($Text, $simplehtml, $tryoembed); $Text = bb_attachment($Text, $simplehtml, $tryoembed);
$Text = str_replace(array("\r","\n"), array('<br />','<br />'), $Text); $Text = str_replace(array("\r","\n"), array('<br />', '<br />'), $Text);
if ($preserve_nl) { if ($preserve_nl) {
$Text = str_replace(array("\n", "\r"), array('', ''), $Text); $Text = str_replace(array("\n", "\r"), array('', ''), $Text);
@ -1082,15 +1134,14 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa
// Shared content // Shared content
$Text = preg_replace_callback("/(.*?)\[share(.*?)\](.*?)\[\/share\]/ism", $Text = preg_replace_callback("/(.*?)\[share(.*?)\](.*?)\[\/share\]/ism",
function ($match) use ($simplehtml){ function ($match) use ($simplehtml) {
return(bb_ShareAttributes($match, $simplehtml)); return bb_ShareAttributes($match, $simplehtml);
}, $Text); }, $Text);
$Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism", '<br/><img src="' .App::get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />', $Text); $Text = preg_replace("/\[crypt\](.*?)\[\/crypt\]/ism", '<br/><img src="' .App::get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . t('Encrypted content') . '" /><br />', $Text);
$Text = preg_replace("/\[crypt(.*?)\](.*?)\[\/crypt\]/ism", '<br/><img src="' .App::get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . '$1' . ' ' . t('Encrypted content') . '" /><br />', $Text); $Text = preg_replace("/\[crypt(.*?)\](.*?)\[\/crypt\]/ism", '<br/><img src="' .App::get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . '$1' . ' ' . t('Encrypted content') . '" /><br />', $Text);
//$Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism", '<br/><img src="' .App::get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . '$1' . ' ' . t('Encrypted content') . '" /><br />', $Text); //$Text = preg_replace("/\[crypt=(.*?)\](.*?)\[\/crypt\]/ism", '<br/><img src="' .App::get_baseurl() . '/images/lock_icon.gif" alt="' . t('Encrypted content') . '" title="' . '$1' . ' ' . t('Encrypted content') . '" /><br />', $Text);
// Try to Oembed // Try to Oembed
if ($tryoembed) { if ($tryoembed) {
$Text = preg_replace("/\[video\](.*?\.(ogg|ogv|oga|ogm|webm|mp4))\[\/video\]/ism", '<video src="$1" controls="controls" width="' . $a->videowidth . '" height="' . $a->videoheight . '"><a href="$1">$1</a></video>', $Text); $Text = preg_replace("/\[video\](.*?\.(ogg|ogv|oga|ogm|webm|mp4))\[\/video\]/ism", '<video src="$1" controls="controls" width="' . $a->videowidth . '" height="' . $a->videoheight . '"><a href="$1">$1</a></video>', $Text);
@ -1160,7 +1211,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa
// Summary (e.g. title) is required, earlier revisions only required description (in addition to // Summary (e.g. title) is required, earlier revisions only required description (in addition to
// start which is always required). Allow desc with a missing summary for compatibility. // start which is always required). Allow desc with a missing summary for compatibility.
if((x($ev, 'desc') || x($ev, 'summary')) && x($ev, 'start')) { if ((x($ev, 'desc') || x($ev, 'summary')) && x($ev, 'start')) {
$sub = format_event_html($ev, $simplehtml); $sub = format_event_html($ev, $simplehtml);
$Text = preg_replace("/\[event\-summary\](.*?)\[\/event\-summary\]/ism", '', $Text); $Text = preg_replace("/\[event\-summary\](.*?)\[\/event\-summary\]/ism", '', $Text);
@ -1215,7 +1266,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $simplehtml = fa
$regex = '#<([^>]*?)(href)="(?!' . implode('|', $allowed_link_protocols) . ')(.*?)"(.*?)>#ism'; $regex = '#<([^>]*?)(href)="(?!' . implode('|', $allowed_link_protocols) . ')(.*?)"(.*?)>#ism';
$Text = preg_replace($regex, '<$1$2="javascript:void(0)"$4 class="invalid-href" title="' . t('Invalid link protocol') . '">', $Text); $Text = preg_replace($regex, '<$1$2="javascript:void(0)"$4 class="invalid-href" title="' . t('Invalid link protocol') . '">', $Text);
if($saved_image) { if ($saved_image) {
$Text = bb_replace_images($Text, $saved_image); $Text = bb_replace_images($Text, $saved_image);
} }

View File

@ -19,7 +19,7 @@ function cli_startup() {
require_once("dba.php"); require_once("dba.php");
$db = new dba($db_host, $db_user, $db_pass, $db_data); $db = new dba($db_host, $db_user, $db_pass, $db_data);
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
}; };
require_once('include/session.php'); require_once('include/session.php');

View File

@ -9,12 +9,12 @@ function contact_profile_assign($current,$foreign_net) {
$o .= "<select id=\"contact-profile-selector\" class=\"form-control\" $disabled name=\"profile-assign\" />\r\n"; $o .= "<select id=\"contact-profile-selector\" class=\"form-control\" $disabled name=\"profile-assign\" />\r\n";
$r = q("SELECT `id`, `profile-name` FROM `profile` WHERE `uid` = %d", $r = q("SELECT `id`, `profile-name`, `is-default` FROM `profile` WHERE `uid` = %d",
intval($_SESSION['uid'])); intval($_SESSION['uid']));
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
$selected = (($rr['id'] == $current) ? " selected=\"selected\" " : ""); $selected = (($rr['id'] == $current || ($current == 0 && $rr['is-default'] == 1)) ? " selected=\"selected\" " : "");
$o .= "<option value=\"{$rr['id']}\" $selected >{$rr['profile-name']}</option>\r\n"; $o .= "<option value=\"{$rr['id']}\" $selected >{$rr['profile-name']}</option>\r\n";
} }
} }
@ -37,7 +37,7 @@ function contact_reputation($current) {
5 => t('Reputable, has my trust') 5 => t('Reputable, has my trust')
); );
foreach($rep as $k => $v) { foreach ($rep as $k => $v) {
$selected = (($k == $current) ? " selected=\"selected\" " : ""); $selected = (($k == $current) ? " selected=\"selected\" " : "");
$o .= "<option value=\"$k\" $selected >$v</option>\r\n"; $o .= "<option value=\"$k\" $selected >$v</option>\r\n";
} }
@ -61,7 +61,7 @@ function contact_poll_interval($current, $disabled = false) {
5 => t('Monthly') 5 => t('Monthly')
); );
foreach($rep as $k => $v) { foreach ($rep as $k => $v) {
$selected = (($k == $current) ? " selected=\"selected\" " : ""); $selected = (($k == $current) ? " selected=\"selected\" " : "");
$o .= "<option value=\"$k\" $selected >$v</option>\r\n"; $o .= "<option value=\"$k\" $selected >$v</option>\r\n";
} }

View File

@ -2,7 +2,7 @@
function follow_widget($value = "") { function follow_widget($value = "") {
return replace_macros(get_markup_template('follow.tpl'),array( return replace_macros(get_markup_template('follow.tpl'), array(
'$connect' => t('Add New Contact'), '$connect' => t('Add New Contact'),
'$desc' => t('Enter address or web location'), '$desc' => t('Enter address or web location'),
'$hint' => t('Example: bob@example.com, http://example.com/barbara'), '$hint' => t('Example: bob@example.com, http://example.com/barbara'),
@ -13,20 +13,20 @@ function follow_widget($value = "") {
} }
function findpeople_widget() { function findpeople_widget() {
require_once('include/Contact.php'); require_once 'include/Contact.php';
$a = get_app(); $a = get_app();
if(get_config('system','invitation_only')) { if (get_config('system', 'invitation_only')) {
$x = get_pconfig(local_user(),'system','invites_remaining'); $x = get_pconfig(local_user(), 'system', 'invites_remaining');
if($x || is_site_admin()) { if ($x || is_site_admin()) {
$a->page['aside'] .= '<div class="side-link" id="side-invite-remain">' $a->page['aside'] .= '<div class="side-link" id="side-invite-remain">'
. sprintf( tt('%d invitation available','%d invitations available',$x), $x) . sprintf( tt('%d invitation available', '%d invitations available', $x), $x)
. '</div>' . $inv; . '</div>' . $inv;
} }
} }
return replace_macros(get_markup_template('peoplefind.tpl'),array( return replace_macros(get_markup_template('peoplefind.tpl'), array(
'$findpeople' => t('Find People'), '$findpeople' => t('Find People'),
'$desc' => t('Enter name or interest'), '$desc' => t('Enter name or interest'),
'$label' => t('Connect/Follow'), '$label' => t('Connect/Follow'),
@ -45,32 +45,41 @@ function unavailable_networks() {
$networks = array(); $networks = array();
if (!plugin_enabled("appnet")) if (!plugin_enabled("appnet")) {
$networks[] = NETWORK_APPNET; $networks[] = NETWORK_APPNET;
}
if (!plugin_enabled("fbpost") AND !plugin_enabled("facebook")) if (!plugin_enabled("fbpost") AND !plugin_enabled("facebook")) {
$networks[] = NETWORK_FACEBOOK; $networks[] = NETWORK_FACEBOOK;
}
if (!plugin_enabled("statusnet")) if (!plugin_enabled("statusnet")) {
$networks[] = NETWORK_STATUSNET; $networks[] = NETWORK_STATUSNET;
}
if (!plugin_enabled("pumpio")) if (!plugin_enabled("pumpio")) {
$networks[] = NETWORK_PUMPIO; $networks[] = NETWORK_PUMPIO;
}
if (!plugin_enabled("twitter")) if (!plugin_enabled("twitter")) {
$networks[] = NETWORK_TWITTER; $networks[] = NETWORK_TWITTER;
}
if (get_config("system","ostatus_disabled")) if (get_config("system", "ostatus_disabled")) {
$networks[] = NETWORK_OSTATUS; $networks[] = NETWORK_OSTATUS;
}
if (!get_config("system","diaspora_enabled")) if (!get_config("system", "diaspora_enabled")) {
$networks[] = NETWORK_DIASPORA; $networks[] = NETWORK_DIASPORA;
}
if (!plugin_enabled("pnut")) if (!plugin_enabled("pnut")) {
$networks[] = NETWORK_PNUT; $networks[] = NETWORK_PNUT;
}
if (!sizeof($networks)) if (!sizeof($networks)) {
return ""; return "";
}
$network_filter = implode("','", $networks); $network_filter = implode("','", $networks);
@ -79,7 +88,7 @@ function unavailable_networks() {
return $network_filter; return $network_filter;
} }
function networks_widget($baseurl,$selected = '') { function networks_widget($baseurl, $selected = '') {
$a = get_app(); $a = get_app();
@ -87,7 +96,7 @@ function networks_widget($baseurl,$selected = '') {
return ''; return '';
} }
if (!feature_enabled(local_user(),'networks')) { if (!feature_enabled(local_user(), 'networks')) {
return ''; return '';
} }
@ -99,7 +108,7 @@ function networks_widget($baseurl,$selected = '') {
$nets = array(); $nets = array();
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
require_once('include/contact_selectors.php'); require_once 'include/contact_selectors.php';
foreach ($r as $rr) { foreach ($r as $rr) {
/// @TODO If 'network' is not there, this triggers an E_NOTICE /// @TODO If 'network' is not there, this triggers an E_NOTICE
if ($rr['network']) { if ($rr['network']) {
@ -108,10 +117,11 @@ function networks_widget($baseurl,$selected = '') {
} }
} }
if(count($nets) < 2) if (count($nets) < 2) {
return ''; return '';
}
return replace_macros(get_markup_template('nets.tpl'),array( return replace_macros(get_markup_template('nets.tpl'), array(
'$title' => t('Networks'), '$title' => t('Networks'),
'$desc' => '', '$desc' => '',
'$sel_all' => (($selected == '') ? 'selected' : ''), '$sel_all' => (($selected == '') ? 'selected' : ''),
@ -122,31 +132,31 @@ function networks_widget($baseurl,$selected = '') {
)); ));
} }
function fileas_widget($baseurl,$selected = '') { function fileas_widget($baseurl, $selected = '') {
if (! local_user()) { if (! local_user()) {
return ''; return '';
} }
if (! feature_enabled(local_user(),'filing')) { if (! feature_enabled(local_user(), 'filing')) {
return ''; return '';
} }
$saved = get_pconfig(local_user(),'system','filetags'); $saved = get_pconfig(local_user(), 'system', 'filetags');
if (! strlen($saved)) { if (! strlen($saved)) {
return; return;
} }
$matches = false; $matches = false;
$terms = array(); $terms = array();
$cnt = preg_match_all('/\[(.*?)\]/',$saved,$matches,PREG_SET_ORDER); $cnt = preg_match_all('/\[(.*?)\]/', $saved, $matches, PREG_SET_ORDER);
if ($cnt) { if ($cnt) {
foreach($matches as $mtch) { foreach ($matches as $mtch) {
$unescaped = xmlify(file_tag_decode($mtch[1])); $unescaped = xmlify(file_tag_decode($mtch[1]));
$terms[] = array('name' => $unescaped,'selected' => (($selected == $unescaped) ? 'selected' : '')); $terms[] = array('name' => $unescaped, 'selected' => (($selected == $unescaped) ? 'selected' : ''));
} }
} }
return replace_macros(get_markup_template('fileas_widget.tpl'),array( return replace_macros(get_markup_template('fileas_widget.tpl'), array(
'$title' => t('Saved Folders'), '$title' => t('Saved Folders'),
'$desc' => '', '$desc' => '',
'$sel_all' => (($selected == '') ? 'selected' : ''), '$sel_all' => (($selected == '') ? 'selected' : ''),
@ -157,30 +167,31 @@ function fileas_widget($baseurl,$selected = '') {
)); ));
} }
function categories_widget($baseurl,$selected = '') { function categories_widget($baseurl, $selected = '') {
$a = get_app(); $a = get_app();
if (! feature_enabled($a->profile['profile_uid'],'categories')) { if (! feature_enabled($a->profile['profile_uid'], 'categories')) {
return ''; return '';
} }
$saved = get_pconfig($a->profile['profile_uid'],'system','filetags'); $saved = get_pconfig($a->profile['profile_uid'], 'system', 'filetags');
if (! strlen($saved)) { if (! strlen($saved)) {
return; return;
} }
$matches = false; $matches = false;
$terms = array(); $terms = array();
$cnt = preg_match_all('/<(.*?)>/',$saved,$matches,PREG_SET_ORDER); $cnt = preg_match_all('/<(.*?)>/', $saved, $matches, PREG_SET_ORDER);
if($cnt) {
foreach($matches as $mtch) { if ($cnt) {
$unescaped = xmlify(file_tag_decode($mtch[1])); foreach ($matches as $mtch) {
$terms[] = array('name' => $unescaped,'selected' => (($selected == $unescaped) ? 'selected' : '')); $unescaped = xmlify(file_tag_decode($mtch[1]));
$terms[] = array('name' => $unescaped, 'selected' => (($selected == $unescaped) ? 'selected' : ''));
} }
} }
return replace_macros(get_markup_template('categories_widget.tpl'),array( return replace_macros(get_markup_template('categories_widget.tpl'), array(
'$title' => t('Categories'), '$title' => t('Categories'),
'$desc' => '', '$desc' => '',
'$sel_all' => (($selected == '') ? 'selected' : ''), '$sel_all' => (($selected == '') ? 'selected' : ''),
@ -195,29 +206,30 @@ function common_friends_visitor_widget($profile_uid) {
$a = get_app(); $a = get_app();
if(local_user() == $profile_uid) if (local_user() == $profile_uid) {
return; return;
}
$cid = $zcid = 0; $cid = $zcid = 0;
if(is_array($_SESSION['remote'])) { if (is_array($_SESSION['remote'])) {
foreach($_SESSION['remote'] as $visitor) { foreach ($_SESSION['remote'] as $visitor) {
if($visitor['uid'] == $profile_uid) { if ($visitor['uid'] == $profile_uid) {
$cid = $visitor['cid']; $cid = $visitor['cid'];
break; break;
} }
} }
} }
if(! $cid) { if (! $cid) {
if(get_my_url()) { if (get_my_url()) {
$r = q("select id from contact where nurl = '%s' and uid = %d limit 1", $r = q("select id from contact where nurl = '%s' and uid = %d limit 1",
dbesc(normalise_link(get_my_url())), dbesc(normalise_link(get_my_url())),
intval($profile_uid) intval($profile_uid)
); );
if (dbm::is_result($r)) if (dbm::is_result($r)) {
$cid = $r[0]['id']; $cid = $r[0]['id'];
else { } else {
$r = q("select id from gcontact where nurl = '%s' limit 1", $r = q("select id from gcontact where nurl = '%s' limit 1",
dbesc(normalise_link(get_my_url())) dbesc(normalise_link(get_my_url()))
); );
@ -227,22 +239,26 @@ function common_friends_visitor_widget($profile_uid) {
} }
} }
if($cid == 0 && $zcid == 0) if ($cid == 0 && $zcid == 0) {
return; return;
}
require_once('include/socgraph.php'); require_once 'include/socgraph.php';
if($cid) if ($cid) {
$t = count_common_friends($profile_uid,$cid); $t = count_common_friends($profile_uid, $cid);
else } else {
$t = count_common_friends_zcid($profile_uid,$zcid); $t = count_common_friends_zcid($profile_uid, $zcid);
if(! $t) }
if (! $t) {
return; return;
}
if($cid) if ($cid) {
$r = common_friends($profile_uid,$cid,0,5,true); $r = common_friends($profile_uid, $cid, 0, 5, true);
else } else {
$r = common_friends_zcid($profile_uid,$zcid,0,5,true); $r = common_friends_zcid($profile_uid, $zcid, 0, 5, true);
}
return replace_macros(get_markup_template('remote_friends_common.tpl'), array( return replace_macros(get_markup_template('remote_friends_common.tpl'), array(
'$desc' => sprintf( tt("%d contact in common", "%d contacts in common", $t), $t), '$desc' => sprintf( tt("%d contact in common", "%d contacts in common", $t), $t),

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ use \Friendica\Core\Config;
function cron_run(&$argv, &$argc){ function cron_run(&$argv, &$argc){
global $a; global $a;
require_once('include/datetime.php'); require_once 'include/datetime.php';
// Poll contacts with specific parameters // Poll contacts with specific parameters
if ($argc > 1) { if ($argc > 1) {
@ -12,15 +12,16 @@ function cron_run(&$argv, &$argc){
return; return;
} }
$last = get_config('system','last_cron'); $last = get_config('system', 'last_cron');
$poll_interval = intval(get_config('system','cron_interval')); $poll_interval = intval(get_config('system', 'cron_interval'));
if (! $poll_interval) { if (! $poll_interval) {
$poll_interval = 10; $poll_interval = 10;
} }
if ($last) { if ($last) {
$next = $last + ($poll_interval * 60); $next = $last + ($poll_interval * 60);
if($next > time()) { if ($next > time()) {
logger('cron intervall not reached'); logger('cron intervall not reached');
return; return;
} }
@ -62,10 +63,10 @@ function cron_run(&$argv, &$argc){
proc_run(PRIORITY_LOW, "include/cronjobs.php", "repair_database"); proc_run(PRIORITY_LOW, "include/cronjobs.php", "repair_database");
// once daily run birthday_updates and then expire in background // once daily run birthday_updates and then expire in background
$d1 = get_config('system','last_expire_day'); $d1 = get_config('system', 'last_expire_day');
$d2 = intval(datetime_convert('UTC','UTC','now','d')); $d2 = intval(datetime_convert('UTC', 'UTC', 'now', 'd'));
if($d2 != intval($d1)) { if ($d2 != intval($d1)) {
proc_run(PRIORITY_LOW, "include/cronjobs.php", "update_contact_birthdays"); proc_run(PRIORITY_LOW, "include/cronjobs.php", "update_contact_birthdays");
@ -73,7 +74,7 @@ function cron_run(&$argv, &$argc){
proc_run(PRIORITY_LOW, "include/discover_poco.php", "suggestions"); proc_run(PRIORITY_LOW, "include/discover_poco.php", "suggestions");
set_config('system','last_expire_day',$d2); set_config('system', 'last_expire_day', $d2);
proc_run(PRIORITY_LOW, 'include/expire.php'); proc_run(PRIORITY_LOW, 'include/expire.php');
@ -87,7 +88,7 @@ function cron_run(&$argv, &$argc){
logger('cron: end'); logger('cron: end');
set_config('system','last_cron', time()); set_config('system', 'last_cron', time());
return; return;
} }
@ -130,7 +131,7 @@ function cron_poll_contacts($argc, $argv) {
// and which have a polling address and ignore Diaspora since // and which have a polling address and ignore Diaspora since
// we are unable to match those posts with a Diaspora GUID and prevent duplicates. // we are unable to match those posts with a Diaspora GUID and prevent duplicates.
$abandon_days = intval(get_config('system','account_abandon_days')); $abandon_days = intval(get_config('system', 'account_abandon_days'));
if ($abandon_days < 1) { if ($abandon_days < 1) {
$abandon_days = 0; $abandon_days = 0;
} }
@ -156,7 +157,7 @@ function cron_poll_contacts($argc, $argv) {
dbesc(NETWORK_MAIL2) dbesc(NETWORK_MAIL2)
); );
if (!count($contacts)) { if (!dbm::is_result($contacts)) {
return; return;
} }
@ -170,7 +171,7 @@ function cron_poll_contacts($argc, $argv) {
continue; continue;
} }
foreach($res as $contact) { foreach ($res as $contact) {
$xml = false; $xml = false;
@ -183,49 +184,48 @@ function cron_poll_contacts($argc, $argv) {
} }
if ($contact['subhub'] AND in_array($contact['network'], array(NETWORK_DFRN, NETWORK_ZOT, NETWORK_OSTATUS))) { if ($contact['subhub'] AND in_array($contact['network'], array(NETWORK_DFRN, NETWORK_ZOT, NETWORK_OSTATUS))) {
// We should be getting everything via a hub. But just to be sure, let's check once a day. /*
// (You can make this more or less frequent if desired by setting 'pushpoll_frequency' appropriately) * We should be getting everything via a hub. But just to be sure, let's check once a day.
// This also lets us update our subscription to the hub, and add or replace hubs in case it * (You can make this more or less frequent if desired by setting 'pushpoll_frequency' appropriately)
// changed. We will only update hubs once a day, regardless of 'pushpoll_frequency'. * This also lets us update our subscription to the hub, and add or replace hubs in case it
* changed. We will only update hubs once a day, regardless of 'pushpoll_frequency'.
$poll_interval = get_config('system','pushpoll_frequency'); */
$poll_interval = get_config('system', 'pushpoll_frequency');
$contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3); $contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3);
} }
if($contact['priority'] AND !$force) { if ($contact['priority'] AND !$force) {
$update = false;
$update = false;
$t = $contact['last-update']; $t = $contact['last-update'];
/** /*
* Based on $contact['priority'], should we poll this site now? Or later? * Based on $contact['priority'], should we poll this site now? Or later?
*/ */
switch ($contact['priority']) { switch ($contact['priority']) {
case 5: case 5:
if (datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 month")) { if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 month")) {
$update = true; $update = true;
} }
break; break;
case 4: case 4:
if (datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 week")) { if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 week")) {
$update = true; $update = true;
} }
break; break;
case 3: case 3:
if (datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) { if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 day")) {
$update = true; $update = true;
} }
break; break;
case 2: case 2:
if (datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 12 hour")) { if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 12 hour")) {
$update = true; $update = true;
} }
break; break;
case 1: case 1:
default: default:
if (datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 hour")) { if (datetime_convert('UTC', 'UTC', 'now') > datetime_convert('UTC', 'UTC', $t . " + 1 hour")) {
$update = true; $update = true;
} }
break; break;
@ -235,7 +235,7 @@ function cron_poll_contacts($argc, $argv) {
} }
} }
logger("Polling ".$contact["network"]." ".$contact["id"]." ".$contact["nick"]." ".$contact["name"]); logger("Polling " . $contact["network"] . " " . $contact["id"] . " " . $contact["nick"] . " " . $contact["name"]);
if (($contact['network'] == NETWORK_FEED) AND ($contact['priority'] <= 3)) { if (($contact['network'] == NETWORK_FEED) AND ($contact['priority'] <= 3)) {
proc_run(PRIORITY_MEDIUM, 'include/onepoll.php', intval($contact['id'])); proc_run(PRIORITY_MEDIUM, 'include/onepoll.php', intval($contact['id']));

View File

@ -2,43 +2,45 @@
use \Friendica\Core\Config; use \Friendica\Core\Config;
function cronhooks_run(&$argv, &$argc){ function cronhooks_run(&$argv, &$argc) {
global $a; global $a;
require_once('include/datetime.php'); require_once 'include/datetime.php';
if (($argc == 2) AND is_array($a->hooks) AND array_key_exists("cron", $a->hooks)) { if (($argc == 2) AND is_array($a->hooks) AND array_key_exists("cron", $a->hooks)) {
foreach ($a->hooks["cron"] as $hook) foreach ($a->hooks["cron"] as $hook) {
if ($hook[1] == $argv[1]) { if ($hook[1] == $argv[1]) {
logger("Calling cron hook '".$hook[1]."'", LOGGER_DEBUG); logger("Calling cron hook '" . $hook[1] . "'", LOGGER_DEBUG);
call_single_hook($a, $name, $hook, $data); call_single_hook($a, $name, $hook, $data);
} }
}
return; return;
} }
$last = get_config('system', 'last_cronhook'); $last = get_config('system', 'last_cronhook');
$poll_interval = intval(get_config('system','cronhook_interval')); $poll_interval = intval(get_config('system', 'cronhook_interval'));
if(! $poll_interval) if (! $poll_interval) {
$poll_interval = 9; $poll_interval = 9;
}
if($last) { if ($last) {
$next = $last + ($poll_interval * 60); $next = $last + ($poll_interval * 60);
if($next > time()) { if ($next > time()) {
logger('cronhook intervall not reached'); logger('cronhook intervall not reached');
return; return;
} }
} }
$a->set_baseurl(get_config('system','url')); $a->set_baseurl(get_config('system', 'url'));
logger('cronhooks: start'); logger('cronhooks: start');
$d = datetime_convert(); $d = datetime_convert();
if (is_array($a->hooks) AND array_key_exists("cron", $a->hooks)) { if (is_array($a->hooks) AND array_key_exists("cron", $a->hooks)) {
foreach ($a->hooks["cron"] as $hook) { foreach ($a->hooks["cron"] as $hook) {
logger("Calling cronhooks for '".$hook[1]."'", LOGGER_DEBUG); logger("Calling cronhooks for '" . $hook[1] . "'", LOGGER_DEBUG);
proc_run(PRIORITY_MEDIUM, "include/cronhooks.php", $hook[1]); proc_run(PRIORITY_MEDIUM, "include/cronhooks.php", $hook[1]);
} }
} }

View File

@ -126,7 +126,7 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d
// add 32 days so that we at least get year 00, and then hack around the fact that // add 32 days so that we at least get year 00, and then hack around the fact that
// months and days always start with 1. // months and days always start with 1.
if(substr($s,0,10) == '0000-00-00') { if(substr($s,0,10) <= '0001-01-01') {
$d = new DateTime($s . ' + 32 days', new DateTimeZone('UTC')); $d = new DateTime($s . ' + 32 days', new DateTimeZone('UTC'));
return str_replace('1','0',$d->format($fmt)); return str_replace('1','0',$d->format($fmt));
} }
@ -171,7 +171,7 @@ function dob($dob) {
$f = get_config('system','birthday_input_format'); $f = get_config('system','birthday_input_format');
if(! $f) if(! $f)
$f = 'ymd'; $f = 'ymd';
if($dob === '0000-00-00') if($dob <= '0001-01-01')
$value = ''; $value = '';
else else
$value = (($year) ? datetime_convert('UTC','UTC',$dob,'Y-m-d') : datetime_convert('UTC','UTC',$dob,'m-d')); $value = (($year) ? datetime_convert('UTC','UTC',$dob,'Y-m-d') : datetime_convert('UTC','UTC',$dob,'m-d'));
@ -189,7 +189,7 @@ function dob($dob) {
) )
)); ));
// if ($dob && $dob != '0000-00-00') // if ($dob && $dob > '0001-01-01')
// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year),'dob'); // $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year),'dob');
// else // else
// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),false,'dob'); // $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),false,'dob');
@ -553,7 +553,7 @@ function update_contact_birthdays() {
// This only handles foreign or alien networks where a birthday has been provided. // This only handles foreign or alien networks where a birthday has been provided.
// In-network birthdays are handled within local_delivery // In-network birthdays are handled within local_delivery
$r = q("SELECT * FROM contact WHERE `bd` != '' AND `bd` != '0000-00-00' AND SUBSTRING(`bd`,1,4) != `bdyear` "); $r = q("SELECT * FROM contact WHERE `bd` != '' AND `bd` > '0001-01-01' AND SUBSTRING(`bd`,1,4) != `bdyear` ");
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {

View File

@ -20,6 +20,7 @@ class dba {
private $driver; private $driver;
public $connected = false; public $connected = false;
public $error = false; public $error = false;
private $_server_info = '';
function __construct($server, $user, $pass, $db, $install = false) { function __construct($server, $user, $pass, $db, $install = false) {
$a = get_app(); $a = get_app();
@ -103,18 +104,20 @@ class dba {
* @return string * @return string
*/ */
public function server_info() { public function server_info() {
switch ($this->driver) { if ($this->_server_info == '') {
case 'pdo': switch ($this->driver) {
$version = $this->db->getAttribute(PDO::ATTR_SERVER_VERSION); case 'pdo':
break; $this->_server_info = $this->db->getAttribute(PDO::ATTR_SERVER_VERSION);
case 'mysqli': break;
$version = $this->db->server_info; case 'mysqli':
break; $this->_server_info = $this->db->server_info;
case 'mysql': break;
$version = mysql_get_server_info($this->db); case 'mysql':
break; $this->_server_info = mysql_get_server_info($this->db);
break;
}
} }
return $version; return $this->_server_info;
} }
/** /**
@ -474,6 +477,26 @@ class dba {
} }
} }
} }
/**
* @brief Replaces ANY_VALUE() function by MIN() function,
* if the database server does not support ANY_VALUE().
*
* Considerations for Standard SQL, or MySQL with ONLY_FULL_GROUP_BY (default since 5.7.5).
* ANY_VALUE() is available from MySQL 5.7.5 https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html
* A standard fall-back is to use MIN().
*
* @param string $sql An SQL string without the values
* @return string The input SQL string modified if necessary.
*/
public function any_value_fallback($sql) {
$server_info = $this->server_info();
if (version_compare($server_info, '5.7.5', '<') ||
(stripos($server_info, 'MariaDB') !== false)) {
$sql = str_ireplace('ANY_VALUE(', 'MIN(', $sql);
}
return $sql;
}
} }
function printable($s) { function printable($s) {
@ -514,6 +537,7 @@ function q($sql) {
unset($args[0]); unset($args[0]);
if ($db && $db->connected) { if ($db && $db->connected) {
$sql = $db->any_value_fallback($sql);
$stmt = @vsprintf($sql,$args); // Disabled warnings $stmt = @vsprintf($sql,$args); // Disabled warnings
//logger("dba: q: $stmt", LOGGER_ALL); //logger("dba: q: $stmt", LOGGER_ALL);
if ($stmt === false) if ($stmt === false)
@ -550,6 +574,7 @@ function qu($sql) {
unset($args[0]); unset($args[0]);
if ($db && $db->connected) { if ($db && $db->connected) {
$sql = $db->any_value_fallback($sql);
$stmt = @vsprintf($sql,$args); // Disabled warnings $stmt = @vsprintf($sql,$args); // Disabled warnings
if ($stmt === false) if ($stmt === false)
logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG); logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG);

View File

@ -158,6 +158,21 @@ function print_structure($database) {
} }
} }
/**
* @brief Print out database error messages
*
* @param object $db Database object
* @param string $message Message to be added to the error message
*
* @return string Error message
*/
function print_update_error($db, $message) {
echo sprintf(t("\nError %d occured during database update:\n%s\n"),
$db->errorno, $db->error);
return t('Errors encountered performing database changes: ').$message.EOL;
}
function update_structure($verbose, $action, $tables=null, $definition=null) { function update_structure($verbose, $action, $tables=null, $definition=null) {
global $a, $db; global $a, $db;
@ -207,7 +222,7 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
if (!isset($database[$name])) { if (!isset($database[$name])) {
$r = db_create_table($name, $structure["fields"], $verbose, $action, $structure['indexes']); $r = db_create_table($name, $structure["fields"], $verbose, $action, $structure['indexes']);
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
$errors .= t('Errors encountered creating database tables.').$name.EOL; $errors .= print_update_error($db, $name);
} }
$is_new_table = True; $is_new_table = True;
} else { } else {
@ -364,33 +379,33 @@ function update_structure($verbose, $action, $tables=null, $definition=null) {
} else { } else {
$r = $db->q("CREATE TABLE `".$temp_name."` LIKE `".$name."`;"); $r = $db->q("CREATE TABLE `".$temp_name."` LIKE `".$name."`;");
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
$errors .= t('Errors encountered performing database changes.').$sql3.EOL; $errors .= print_update_error($db, $sql3);
return $errors; return $errors;
} }
} }
} }
$r = @$db->q($sql3); $r = @$db->q($sql3);
if (!dbm::is_result($r)) if (!dbm::is_result($r)) {
$errors .= t('Errors encountered performing database changes.').$sql3.EOL; $errors .= print_update_error($db, $sql3);
}
if ($is_unique) { if ($is_unique) {
if ($ignore != "") { if ($ignore != "") {
$db->q("SET session old_alter_table=0;"); $db->q("SET session old_alter_table=0;");
} else { } else {
$r = $db->q("INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";"); $r = $db->q("INSERT INTO `".$temp_name."` SELECT * FROM `".$name."`".$group_by.";");
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
$errors .= t('Errors encountered performing database changes.').$sql3.EOL; $errors .= print_update_error($db, $sql3);
return $errors; return $errors;
} }
$r = $db->q("DROP TABLE `".$name."`;"); $r = $db->q("DROP TABLE `".$name."`;");
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
$errors .= t('Errors encountered performing database changes.').$sql3.EOL; $errors .= print_update_error($db, $sql3);
return $errors; return $errors;
} }
$r = $db->q("RENAME TABLE `".$temp_name."` TO `".$name."`;"); $r = $db->q("RENAME TABLE `".$temp_name."` TO `".$name."`;");
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
$errors .= t('Errors encountered performing database changes.').$sql3.EOL; $errors .= print_update_error($db, $sql3);
return $errors; return $errors;
} }
} }
@ -708,7 +723,7 @@ function db_definition() {
"info" => array("type" => "mediumtext"), "info" => array("type" => "mediumtext"),
"profile-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "profile-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"),
"bdyear" => array("type" => "varchar(4)", "not null" => "1", "default" => ""), "bdyear" => array("type" => "varchar(4)", "not null" => "1", "default" => ""),
"bd" => array("type" => "date", "not null" => "1", "default" => "0000-00-00"), "bd" => array("type" => "date", "not null" => "1", "default" => "0001-01-01"),
"notify_new_posts" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "notify_new_posts" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"fetch_further_information" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "fetch_further_information" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"ffi_keyword_blacklist" => array("type" => "text"), "ffi_keyword_blacklist" => array("type" => "text"),
@ -867,7 +882,7 @@ function db_definition() {
"about" => array("type" => "text"), "about" => array("type" => "text"),
"keywords" => array("type" => "text"), "keywords" => array("type" => "text"),
"gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""),
"birthday" => array("type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00"), "birthday" => array("type" => "varchar(32)", "not null" => "1", "default" => "0001-01-01"),
"community" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "community" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"contact-type" => array("type" => "tinyint(1)", "not null" => "1", "default" => "-1"), "contact-type" => array("type" => "tinyint(1)", "not null" => "1", "default" => "-1"),
"hide" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "hide" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
@ -1331,7 +1346,7 @@ function db_definition() {
"hide-friends" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "hide-friends" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"),
"name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"pdesc" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "pdesc" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"dob" => array("type" => "varchar(32)", "not null" => "1", "default" => "0000-00-00"), "dob" => array("type" => "varchar(32)", "not null" => "1", "default" => "0001-01-01"),
"address" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "address" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"locality" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "locality" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),
"region" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "region" => array("type" => "varchar(255)", "not null" => "1", "default" => ""),

View File

@ -554,8 +554,9 @@ class dfrn {
xml::add_element($doc, $author, "poco:displayName", $profile["name"]); xml::add_element($doc, $author, "poco:displayName", $profile["name"]);
xml::add_element($doc, $author, "poco:updated", $namdate); xml::add_element($doc, $author, "poco:updated", $namdate);
if (trim($profile["dob"]) != "0000-00-00") if (trim($profile["dob"]) > '0001-01-01') {
xml::add_element($doc, $author, "poco:birthday", "0000-".date("m-d", strtotime($profile["dob"]))); xml::add_element($doc, $author, "poco:birthday", "0000-".date("m-d", strtotime($profile["dob"])));
}
xml::add_element($doc, $author, "poco:note", $profile["about"]); xml::add_element($doc, $author, "poco:note", $profile["about"]);
xml::add_element($doc, $author, "poco:preferredUsername", $profile["nickname"]); xml::add_element($doc, $author, "poco:preferredUsername", $profile["nickname"]);
@ -1402,7 +1403,7 @@ class dfrn {
// "poco:birthday" is the birthday in the format "yyyy-mm-dd" // "poco:birthday" is the birthday in the format "yyyy-mm-dd"
$value = $xpath->evaluate($element . "/poco:birthday/text()", $context)->item(0)->nodeValue; $value = $xpath->evaluate($element . "/poco:birthday/text()", $context)->item(0)->nodeValue;
if (!in_array($value, array("", "0000-00-00"))) { if (!in_array($value, array("", "0000-00-00", "0001-01-01"))) {
$bdyear = date("Y"); $bdyear = date("Y");
$value = str_replace("0000", $bdyear, $value); $value = str_replace("0000", $bdyear, $value);

View File

@ -3591,7 +3591,7 @@ class Diaspora {
if ($searchable === 'true') { if ($searchable === 'true') {
$dob = '1000-00-00'; $dob = '1000-00-00';
if (($profile['dob']) && ($profile['dob'] != '0000-00-00')) if (($profile['dob']) && ($profile['dob'] > '0001-01-01'))
$dob = ((intval($profile['dob'])) ? intval($profile['dob']) : '1000') .'-'. datetime_convert('UTC','UTC',$profile['dob'],'m-d'); $dob = ((intval($profile['dob'])) ? intval($profile['dob']) : '1000') .'-'. datetime_convert('UTC','UTC',$profile['dob'],'m-d');
$about = $profile['about']; $about = $profile['about'];

View File

@ -2,16 +2,17 @@
use \Friendica\Core\Config; use \Friendica\Core\Config;
function directory_run(&$argv, &$argc){ function directory_run(&$argv, &$argc){
if ($argc != 2) {
return;
}
$dir = get_config('system', 'directory'); $dir = get_config('system', 'directory');
if (!strlen($dir)) { if (!strlen($dir)) {
return; return;
} }
if ($argc < 2) {
directory_update_all();
return;
}
$dir .= "/submit"; $dir .= "/submit";
$arr = array('url' => $argv[1]); $arr = array('url' => $argv[1]);
@ -24,3 +25,17 @@ function directory_run(&$argv, &$argc){
} }
return; return;
} }
function directory_update_all() {
$r = q("SELECT `url` FROM `contact`
INNER JOIN `profile` ON `profile`.`uid` = `contact`.`uid`
INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
WHERE `contact`.`self` AND `profile`.`net-publish` AND `profile`.`is-default` AND
NOT `user`.`account_expired` AND `user`.`verified`");
if (dbm::is_result($r)) {
foreach ($r AS $user) {
proc_run(PRIORITY_LOW, 'include/directory.php', $user['url']);
}
}
}

View File

@ -202,6 +202,9 @@ function profile_sidebar($profile, $block = 0) {
$address = false; $address = false;
// $pdesc = true; // $pdesc = true;
// This function can also use contact information in $profile
$is_contact = x($profile, 'cid');
if((! is_array($profile)) && (! count($profile))) if((! is_array($profile)) && (! count($profile)))
return $o; return $o;
@ -281,7 +284,7 @@ function profile_sidebar($profile, $block = 0) {
} }
// show edit profile to yourself // show edit profile to yourself
if ($profile['uid'] == local_user() && feature_enabled(local_user(),'multi_profiles')) { if (!$is_contact && $profile['uid'] == local_user() && feature_enabled(local_user(),'multi_profiles')) {
$profile['edit'] = array(App::get_baseurl(). '/profiles', t('Profiles'),"", t('Manage/edit profiles')); $profile['edit'] = array(App::get_baseurl(). '/profiles', t('Profiles'),"", t('Manage/edit profiles'));
$r = q("SELECT * FROM `profile` WHERE `uid` = %d", $r = q("SELECT * FROM `profile` WHERE `uid` = %d",
local_user()); local_user());
@ -310,7 +313,7 @@ function profile_sidebar($profile, $block = 0) {
} }
} }
if ($profile['uid'] == local_user() && !feature_enabled(local_user(),'multi_profiles')) { if (!$is_contact && $profile['uid'] == local_user() && !feature_enabled(local_user(),'multi_profiles')) {
$profile['edit'] = array(App::get_baseurl(). '/profiles/'.$profile['id'], t('Edit profile'),"", t('Edit profile')); $profile['edit'] = array(App::get_baseurl(). '/profiles/'.$profile['id'], t('Edit profile'),"", t('Edit profile'));
$profile['menu'] = array( $profile['menu'] = array(
'chg_photo' => t('Change profile photo'), 'chg_photo' => t('Change profile photo'),
@ -628,7 +631,7 @@ function advanced_profile(App $a) {
if($a->profile['gender']) $profile['gender'] = array( t('Gender:'), $a->profile['gender'] ); if($a->profile['gender']) $profile['gender'] = array( t('Gender:'), $a->profile['gender'] );
if(($a->profile['dob']) && ($a->profile['dob'] != '0000-00-00')) { if(($a->profile['dob']) && ($a->profile['dob'] > '0001-01-01')) {
$year_bd_format = t('j F, Y'); $year_bd_format = t('j F, Y');
$short_bd_format = t('j F'); $short_bd_format = t('j F');

File diff suppressed because it is too large Load Diff

View File

@ -516,7 +516,8 @@ function notifier_run(&$argv, &$argc){
$r0 = Diaspora::relay_list(); $r0 = Diaspora::relay_list();
} }
$r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s' $r1 = q("SELECT `batch`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`name`) AS `name`, ANY_VALUE(`network`) AS `network`
FROM `contact` WHERE `network` = '%s'
AND `uid` = %d AND `rel` != %d AND NOT `blocked` AND NOT `pending` AND NOT `archive` GROUP BY `batch` ORDER BY rand()", AND `uid` = %d AND `rel` != %d AND NOT `blocked` AND NOT `pending` AND NOT `archive` GROUP BY `batch` ORDER BY rand()",
dbesc(NETWORK_DIASPORA), dbesc(NETWORK_DIASPORA),
intval($owner['uid']), intval($owner['uid']),

View File

@ -720,11 +720,11 @@ class ostatus {
$conversations = q("SELECT `term`.`oid`, `term`.`url`, `term`.`uid` FROM `term` $conversations = q("SELECT `term`.`oid`, `term`.`url`, `term`.`uid` FROM `term`
STRAIGHT_JOIN `thread` ON `thread`.`iid` = `term`.`oid` AND `thread`.`uid` = `term`.`uid` STRAIGHT_JOIN `thread` ON `thread`.`iid` = `term`.`oid` AND `thread`.`uid` = `term`.`uid`
WHERE `term`.`type` = 7 AND `term`.`term` > '%s' AND `thread`.`mention` WHERE `term`.`type` = 7 AND `term`.`term` > '%s' AND `thread`.`mention`
GROUP BY `term`.`url`, `term`.`uid` ORDER BY `term`.`term` DESC", dbesc($start)); GROUP BY `term`.`url`, `term`.`uid`, `term`.`oid`, `term`.`term` ORDER BY `term`.`term` DESC", dbesc($start));
} else { } else {
$conversations = q("SELECT `oid`, `url`, `uid` FROM `term` $conversations = q("SELECT `oid`, `url`, `uid` FROM `term`
WHERE `type` = 7 AND `term` > '%s' WHERE `type` = 7 AND `term` > '%s'
GROUP BY `url`, `uid` ORDER BY `term` DESC", dbesc($start)); GROUP BY `url`, `uid`, `oid`, `term` ORDER BY `term` DESC", dbesc($start));
} }
foreach ($conversations AS $conversation) { foreach ($conversations AS $conversation) {

View File

@ -44,7 +44,7 @@ function get_browser_language() {
// check if we have translations for the preferred languages and pick the 1st that has // check if we have translations for the preferred languages and pick the 1st that has
for ($i=0; $i<count($lang_list); $i++) { for ($i=0; $i<count($lang_list); $i++) {
$lang = $lang_list[$i]; $lang = $lang_list[$i];
if(file_exists("view/lang/$lang") && is_dir("view/lang/$lang")) { if ($lang === 'en' || (file_exists("view/lang/$lang") && is_dir("view/lang/$lang"))) {
$preferred = $lang; $preferred = $lang;
break; break;
} }

View File

@ -48,7 +48,7 @@ function photo_albums($uid, $update = false) {
if (!Config::get('system', 'no_count', false)) { if (!Config::get('system', 'no_count', false)) {
/// @todo This query needs to be renewed. It is really slow /// @todo This query needs to be renewed. It is really slow
// At this time we just store the data in the cache // At this time we just store the data in the cache
$albums = qu("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album` $albums = qu("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created`
FROM `photo` FROM `photo`
WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra
GROUP BY `album` ORDER BY `created` DESC", GROUP BY `album` ORDER BY `created` DESC",

View File

@ -7,6 +7,8 @@
* @todo Detect if it is a forum * @todo Detect if it is a forum
*/ */
use \Friendica\Core\Config;
require_once('include/datetime.php'); require_once('include/datetime.php');
require_once("include/Scrape.php"); require_once("include/Scrape.php");
require_once("include/network.php"); require_once("include/network.php");
@ -1656,6 +1658,20 @@ function poco_discover_federation() {
} }
} }
// Disvover Mastodon servers
if (!Config::get('system','ostatus_disabled')) {
$serverdata = fetch_url("https://instances.mastodon.xyz/instances.json");
if ($serverdata) {
$servers = json_decode($serverdata);
foreach ($servers AS $server) {
$url = (is_null($server->https_score) ? 'http' : 'https').'://'.$server->name;
proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode($url));
}
}
}
// Currently disabled, since the service isn't available anymore. // Currently disabled, since the service isn't available anymore.
// It is not removed since I hope that there will be a successor. // It is not removed since I hope that there will be a successor.
// Discover GNU Social Servers. // Discover GNU Social Servers.

View File

@ -65,7 +65,7 @@ ACL.prototype.add_mention = function(id) {
if (this.element.val().indexOf( searchText) >= 0 ) { if (this.element.val().indexOf( searchText) >= 0 ) {
return; return;
} }
this.element.val(searchText + this.element.val()); this.element.val(searchText + this.element.val()).trigger('change');
} }
ACL.prototype.on_submit = function(){ ACL.prototype.on_submit = function(){

View File

@ -166,7 +166,7 @@ function listNewLineAutocomplete(id) {
if (word != null) { if (word != null) {
var textBefore = text.value.substring(0, caretPos); var textBefore = text.value.substring(0, caretPos);
var textAfter = text.value.substring(caretPos, text.length); var textAfter = text.value.substring(caretPos, text.length);
$('#' + id).val(textBefore + '\r\n[*] ' + textAfter); $('#' + id).val(textBefore + '\r\n[*] ' + textAfter).trigger('change');
setCaretPosition(text, caretPos + 5); setCaretPosition(text, caretPos + 5);
return true; return true;
} }

View File

@ -101,6 +101,7 @@
var start = textarea.selectionStart; var start = textarea.selectionStart;
var end = textarea.selectionEnd; var end = textarea.selectionEnd;
textarea.value = textarea.value.substring(0, start) + bbcode + textarea.value.substring(end, textarea.value.length); textarea.value = textarea.value.substring(0, start) + bbcode + textarea.value.substring(end, textarea.value.length);
$(textarea).trigger('change');
}); });

View File

@ -290,7 +290,8 @@ function admin_page_federation(App $a) {
foreach ($platforms as $p) { foreach ($platforms as $p) {
// get a total count for the platform, the name and version of the // get a total count for the platform, the name and version of the
// highest version and the protocol tpe // highest version and the protocol tpe
$c = qu('SELECT COUNT(*) AS `total`, `platform`, `network`, `version` FROM `gserver` $c = qu('SELECT COUNT(*) AS `total`, ANY_VALUE(`platform`) AS `platform`,
ANY_VALUE(`network`) AS `network`, MAX(`version`) AS `version` FROM `gserver`
WHERE `platform` LIKE "%s" AND `last_contact` >= `last_failure` WHERE `platform` LIKE "%s" AND `last_contact` >= `last_failure`
ORDER BY `version` ASC;', $p); ORDER BY `version` ASC;', $p);
$total = $total + $c[0]['total']; $total = $total + $c[0]['total'];
@ -652,7 +653,6 @@ function admin_page_site_post(App $a) {
$force_ssl = ((x($_POST,'force_ssl')) ? True : False); $force_ssl = ((x($_POST,'force_ssl')) ? True : False);
$hide_help = ((x($_POST,'hide_help')) ? True : False); $hide_help = ((x($_POST,'hide_help')) ? True : False);
$suppress_tags = ((x($_POST,'suppress_tags')) ? True : False); $suppress_tags = ((x($_POST,'suppress_tags')) ? True : False);
$use_fulltext_engine = ((x($_POST,'use_fulltext_engine')) ? True : False);
$itemcache = ((x($_POST,'itemcache')) ? notags(trim($_POST['itemcache'])) : ''); $itemcache = ((x($_POST,'itemcache')) ? notags(trim($_POST['itemcache'])) : '');
$itemcache_duration = ((x($_POST,'itemcache_duration')) ? intval($_POST['itemcache_duration']) : 0); $itemcache_duration = ((x($_POST,'itemcache_duration')) ? intval($_POST['itemcache_duration']) : 0);
$max_comments = ((x($_POST,'max_comments')) ? intval($_POST['max_comments']) : 0); $max_comments = ((x($_POST,'max_comments')) ? intval($_POST['max_comments']) : 0);
@ -667,6 +667,12 @@ function admin_page_site_post(App $a) {
$worker_fastlane = ((x($_POST,'worker_fastlane')) ? True : False); $worker_fastlane = ((x($_POST,'worker_fastlane')) ? True : False);
$worker_frontend = ((x($_POST,'worker_frontend')) ? True : False); $worker_frontend = ((x($_POST,'worker_frontend')) ? True : False);
// Has the directory url changed? If yes, then resubmit the existing profiles there
if ($global_directory != Config::get('system', 'directory') AND ($global_directory != '')) {
Config::set('system', 'directory', $global_directory);
proc_run(PRIORITY_LOW, 'include/directory.php');
}
if ($a->get_path() != "") { if ($a->get_path() != "") {
$diaspora_enabled = false; $diaspora_enabled = false;
} }
@ -770,7 +776,6 @@ function admin_page_site_post(App $a) {
set_config('system', 'allowed_email', $allowed_email); set_config('system', 'allowed_email', $allowed_email);
set_config('system', 'block_public', $block_public); set_config('system', 'block_public', $block_public);
set_config('system', 'publish_all', $force_publish); set_config('system', 'publish_all', $force_publish);
set_config('system', 'directory', $global_directory);
set_config('system', 'thread_allow', $thread_allow); set_config('system', 'thread_allow', $thread_allow);
set_config('system', 'newuser_private', $newuser_private); set_config('system', 'newuser_private', $newuser_private);
set_config('system', 'enotify_no_content', $enotify_no_content); set_config('system', 'enotify_no_content', $enotify_no_content);
@ -796,7 +801,6 @@ function admin_page_site_post(App $a) {
set_config('system', 'force_ssl', $force_ssl); set_config('system', 'force_ssl', $force_ssl);
set_config('system', 'hide_help', $hide_help); set_config('system', 'hide_help', $hide_help);
set_config('system', 'use_fulltext_engine', $use_fulltext_engine);
set_config('system', 'itemcache', $itemcache); set_config('system', 'itemcache', $itemcache);
set_config('system', 'itemcache_duration', $itemcache_duration); set_config('system', 'itemcache_duration', $itemcache_duration);
set_config('system', 'max_comments', $max_comments); set_config('system', 'max_comments', $max_comments);
@ -1025,7 +1029,6 @@ function admin_page_site(App $a) {
'$nodeinfo' => array('nodeinfo', t("Publish server information"), get_config('system','nodeinfo'), t("If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details.")), '$nodeinfo' => array('nodeinfo', t("Publish server information"), get_config('system','nodeinfo'), t("If enabled, general server and usage data will be published. The data contains the name and version of the server, number of users with public profiles, number of posts and the activated protocols and connectors. See <a href='http://the-federation.info/'>the-federation.info</a> for details.")),
'$use_fulltext_engine' => array('use_fulltext_engine', t("Use MySQL full text engine"), get_config('system','use_fulltext_engine'), t("Activates the full text engine. Speeds up search - but can only search for four and more characters.")),
'$suppress_tags' => array('suppress_tags', t("Suppress Tags"), get_config('system','suppress_tags'), t("Suppress showing a list of hashtags at the end of the posting.")), '$suppress_tags' => array('suppress_tags', t("Suppress Tags"), get_config('system','suppress_tags'), t("Suppress showing a list of hashtags at the end of the posting.")),
'$itemcache' => array('itemcache', t("Path to item cache"), get_config('system','itemcache'), t("The item caches buffers generated bbcode and external images.")), '$itemcache' => array('itemcache', t("Path to item cache"), get_config('system','itemcache'), t("The item caches buffers generated bbcode and external images.")),
'$itemcache_duration' => array('itemcache_duration', t("Cache duration in seconds"), get_config('system','itemcache_duration'), t("How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1.")), '$itemcache_duration' => array('itemcache_duration', t("Cache duration in seconds"), get_config('system','itemcache_duration'), t("How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1.")),

View File

@ -75,7 +75,7 @@ function hovercard_content() {
'tags' => $contact["keywords"], 'tags' => $contact["keywords"],
// 'nsfw' => intval($contact["nsfw"]), // 'nsfw' => intval($contact["nsfw"]),
// 'server_url' => $contact["server_url"], // 'server_url' => $contact["server_url"],
'bd' => (($contact["birthday"] == "0000-00-00") ? "" : $contact["birthday"]), 'bd' => (($contact["birthday"] <= '0001-01-01') ? "" : $contact["birthday"]),
// 'generation' => $contact["generation"], // 'generation' => $contact["generation"],
'account_type' => account_type($contact), 'account_type' => account_type($contact),
'actions' => $actions, 'actions' => $actions,

View File

@ -48,7 +48,7 @@ function install_post(App $a) {
$db = new dba($dbhost, $dbuser, $dbpass, '', true); $db = new dba($dbhost, $dbuser, $dbpass, '', true);
if(! get_db_errno()) { if(! get_db_errno()) {
$r = q("CREATE DATABASE '%s'", $r = q("CREATE DATABASE '%s' DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci",
dbesc($dbdata) dbesc($dbdata)
); );
if ($r) { if ($r) {

View File

@ -349,7 +349,7 @@ function message_content(App $a) {
$o .= $header; $o .= $header;
$r = q("SELECT count(*) AS `total` FROM `mail` $r = q("SELECT count(*) AS `total` FROM `mail`, ANY_VALUE(`created`) AS `created`
WHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `created` DESC", WHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `created` DESC",
intval(local_user()) intval(local_user())
); );
@ -528,12 +528,20 @@ function message_content(App $a) {
} }
function get_messages($user, $lstart, $lend) { function get_messages($user, $lstart, $lend) {
//TODO: rewritte with a sub-query to get the first message of each private thread with certainty
return q("SELECT max(`mail`.`created`) AS `mailcreated`, min(`mail`.`seen`) AS `mailseen`, return q("SELECT max(`mail`.`created`) AS `mailcreated`, min(`mail`.`seen`) AS `mailseen`,
`mail`.* , `contact`.`name`, `contact`.`url`, `contact`.`thumb` , `contact`.`network`, ANY_VALUE(`mail`.`id`) AS `id`, ANY_VALUE(`mail`.`uid`) AS `uid`, ANY_VALUE(`mail`.`guid`) AS `guid`,
count( * ) as count ANY_VALUE(`mail`.`from-name`) AS `from-name`, ANY_VALUE(`mail`.`from-photo`) AS `from-photo`,
ANY_VALUE(`mail`.`from-url`) AS `from-url`, ANY_VALUE(`mail`.`contact-id`) AS `contact-id`,
ANY_VALUE(`mail`.`convid`) AS `convid`, ANY_VALUE(`mail`.`title`) AS `title`, ANY_VALUE(`mail`.`body`) AS `body`,
ANY_VALUE(`mail`.`seen`) AS `seen`, ANY_VALUE(`mail`.`reply`) AS `reply`, ANY_VALUE(`mail`.`replied`) AS `replied`,
ANY_VALUE(`mail`.`unknown`) AS `unknown`, ANY_VALUE(`mail`.`uri`) AS `uri`,
`mail`.`parent-uri`,
ANY_VALUE(`mail`.`created`) AS `created`, ANY_VALUE(`contact`.`name`) AS `name`, ANY_VALUE(`contact`.`url`) AS `url`,
ANY_VALUE(`contact`.`thumb`) AS `thumb`, ANY_VALUE(`contact`.`network`) AS `network`,
count( * ) as `count`
FROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id` FROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`
WHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `mailcreated` DESC LIMIT %d , %d ", WHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `mailcreated` DESC LIMIT %d , %d ",
intval($user), intval($lstart), intval($lend) intval($user), intval($lstart), intval($lend)
); );
} }

View File

@ -581,11 +581,7 @@ function network_content(App $a, $update = 0) {
$sql_order = "`item`.`id`"; $sql_order = "`item`.`id`";
$order_mode = "id"; $order_mode = "id";
} else { } else {
// Disabled until final decision what to do with this $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
//if (get_config('system','use_fulltext_engine'))
// $sql_extra = sprintf(" AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) ", dbesc(protect_sprintf($search)));
//else
$sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
$sql_order = "`item`.`id`"; $sql_order = "`item`.`id`";
$order_mode = "id"; $order_mode = "id";
} }

View File

@ -292,7 +292,7 @@ function notifications_content(App $a) {
'$item_link' => $it['link'], '$item_link' => $it['link'],
'$item_image' => $it['image'], '$item_image' => $it['image'],
'$item_url' => $it['url'], '$item_url' => $it['url'],
'$item_text' => htmlentities($it['text']), '$item_text' => $it['text'],
'$item_when' => $it['when'], '$item_when' => $it['when'],
'$item_ago' => $it['ago'], '$item_ago' => $it['ago'],
'$item_seen' => $it['seen'], '$item_seen' => $it['seen'],

View File

@ -1240,7 +1240,9 @@ function photos_content(App $a) {
$order = 'DESC'; $order = 'DESC';
} }
$r = q("SELECT `resource-id`, `id`, `filename`, type, max(`scale`) AS `scale`, `desc` FROM `photo` WHERE `uid` = %d AND `album` = '%s' $r = q("SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`,
ANY_VALUE(`type`) AS `type`, max(`scale`) AS `scale`, ANY_VALUE(`desc`) as `desc`
FROM `photo` WHERE `uid` = %d AND `album` = '%s'
AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT %d , %d", AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT %d , %d",
intval($owner_uid), intval($owner_uid),
dbesc($album), dbesc($album),

View File

@ -199,7 +199,7 @@ function ping_init(App $a)
$cachekey = "ping_init:".local_user(); $cachekey = "ping_init:".local_user();
$ev = Cache::get($cachekey); $ev = Cache::get($cachekey);
if (is_null($ev)) { if (is_null($ev)) {
$ev = qu("SELECT count(`event`.`id`) AS total, type, start, adjust FROM `event` $ev = qu("SELECT type, start, adjust FROM `event`
WHERE `event`.`uid` = %d AND `start` < '%s' AND `finish` > '%s' and `ignore` = 0 WHERE `event`.`uid` = %d AND `start` < '%s' AND `finish` > '%s' and `ignore` = 0
ORDER BY `start` ASC ", ORDER BY `start` ASC ",
intval(local_user()), intval(local_user()),
@ -212,7 +212,7 @@ function ping_init(App $a)
} }
if (dbm::is_result($ev)) { if (dbm::is_result($ev)) {
$all_events = intval($ev[0]['total']); $all_events = count($ev);
if ($all_events) { if ($all_events) {
$str_now = datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d'); $str_now = datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d');

View File

@ -210,7 +210,7 @@ function profile_content(App $a, $update = 0) {
if ($update) { if ($update) {
$r = q("SELECT distinct(parent) AS `item_id`, `item`.`network` AS `item_network` $r = q("SELECT distinct(parent) AS `item_id`, `item`.`network` AS `item_network`, `item`.`created`
FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND

View File

@ -193,7 +193,7 @@ function profiles_post(App $a) {
return; return;
} }
$dob = $_POST['dob'] ? escape_tags(trim($_POST['dob'])) : '0000-00-00'; // FIXME: Needs to be validated? $dob = $_POST['dob'] ? escape_tags(trim($_POST['dob'])) : '0001-01-01'; // FIXME: Needs to be validated?
$y = substr($dob, 0, 4); $y = substr($dob, 0, 4);
if ((! ctype_digit($y)) || ($y < 1900)) { if ((! ctype_digit($y)) || ($y < 1900)) {
@ -201,15 +201,15 @@ function profiles_post(App $a) {
} else { } else {
$ignore_year = false; $ignore_year = false;
} }
if ($dob != '0000-00-00') { if (!in_array($dob, array('0000-00-00', '0001-01-01'))) {
if (strpos($dob, '0000-') === 0) { if (strpos($dob, '0000-') === 0 || strpos($dob, '0001-') === 0) {
$ignore_year = true; $ignore_year = true;
$dob = substr($dob, 5); $dob = substr($dob, 5);
} }
$dob = datetime_convert('UTC', 'UTC', (($ignore_year) ? '1900-' . $dob : $dob), (($ignore_year) ? 'm-d' : 'Y-m-d')); $dob = datetime_convert('UTC', 'UTC', (($ignore_year) ? '1900-' . $dob : $dob), (($ignore_year) ? 'm-d' : 'Y-m-d'));
if ($ignore_year) { if ($ignore_year) {
$dob = '0000-' . $dob; $dob = '0001-' . $dob;
} }
} }

View File

@ -203,18 +203,13 @@ function search_content(App $a) {
} else { } else {
logger("Start fulltext search for '".$search."'", LOGGER_DEBUG); logger("Start fulltext search for '".$search."'", LOGGER_DEBUG);
// Disabled until finally is decided how to proceed with this $sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
//if (get_config('system','use_fulltext_engine')) {
// $sql_extra = sprintf(" AND MATCH (`item`.`body`, `item`.`title`) AGAINST ('%s' in boolean mode) ", dbesc(protect_sprintf($search)));
//} else {
$sql_extra = sprintf(" AND `item`.`body` REGEXP '%s' ", dbesc(protect_sprintf(preg_quote($search))));
//}
$r = q("SELECT %s $r = q("SELECT %s
FROM `item` %s FROM `item` %s
WHERE %s AND (`item`.`uid` = 0 OR (`item`.`uid` = %s AND NOT `item`.`global`)) WHERE %s AND (`item`.`uid` = 0 OR (`item`.`uid` = %s AND NOT `item`.`global`))
$sql_extra $sql_extra
GROUP BY `item`.`uri` ORDER BY `item`.`id` DESC LIMIT %d , %d", GROUP BY `item`.`uri`, `item`.`id` ORDER BY `item`.`id` DESC LIMIT %d , %d",
item_fieldlists(), item_joins(), item_condition(), item_fieldlists(), item_joins(), item_condition(),
intval(local_user()), intval(local_user()),
intval($a->pager['start']), intval($a->pager['itemspage'])); intval($a->pager['start']), intval($a->pager['itemspage']));

View File

@ -356,7 +356,9 @@ function videos_content(App $a) {
$a->set_pager_itemspage(20); $a->set_pager_itemspage(20);
} }
$r = q("SELECT hash, `id`, `filename`, filetype FROM `attach` $r = q("SELECT hash, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`created`) AS `created`,
ANY_VALUE(`filename`) AS `filename`, ANY_VALUE(`filetype`) as `filetype`
FROM `attach`
WHERE `uid` = %d AND filetype LIKE '%%video%%' WHERE `uid` = %d AND filetype LIKE '%%video%%'
$sql_extra GROUP BY hash ORDER BY `created` DESC LIMIT %d , %d", $sql_extra GROUP BY hash ORDER BY `created` DESC LIMIT %d , %d",
intval($a->data['user']['uid']), intval($a->data['user']['uid']),

View File

@ -1,6 +1,6 @@
<?php <?php
define('UPDATE_VERSION' , 1218); define('UPDATE_VERSION' , 1219);
/** /**
* *

View File

@ -100,7 +100,7 @@ sudo ln -fs /vagrant /var/www
cp /vagrant/util/htconfig.vagrant.php /vagrant/.htconfig.php cp /vagrant/util/htconfig.vagrant.php /vagrant/.htconfig.php
# create the friendica database # create the friendica database
echo "create database friendica" | mysql -u root -proot echo "create database friendica DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci" | mysql -u root -proot
# import test database # import test database
$MYSQL -uroot -proot friendica < /vagrant/friendica_test_data.sql $MYSQL -uroot -proot friendica < /vagrant/friendica_test_data.sql

View File

@ -138,7 +138,6 @@
<div class="submit"><input type="submit" name="page_site" value="{{$submit|escape:'html'}}" /></div> <div class="submit"><input type="submit" name="page_site" value="{{$submit|escape:'html'}}" /></div>
<h3>{{$performance}}</h3> <h3>{{$performance}}</h3>
<!-- {{include file="field_checkbox.tpl" field=$use_fulltext_engine}} -->
{{include file="field_checkbox.tpl" field=$only_tag_search}} {{include file="field_checkbox.tpl" field=$only_tag_search}}
{{include file="field_input.tpl" field=$itemcache}} {{include file="field_input.tpl" field=$itemcache}}
{{include file="field_input.tpl" field=$itemcache_duration}} {{include file="field_input.tpl" field=$itemcache_duration}}

View File

@ -15,7 +15,7 @@ $db_user = '{{$dbuser}}';
$db_pass = '{{$dbpass}}'; $db_pass = '{{$dbpass}}';
$db_data = '{{$dbdata}}'; $db_data = '{{$dbdata}}';
// Set the database connection charset to UTF8. // Set the database connection charset to full Unicode (utf8mb4).
// Changing this value will likely corrupt the special characters. // Changing this value will likely corrupt the special characters.
// You have been warned. // You have been warned.
$a->config['system']['db_charset'] = "utf8mb4"; $a->config['system']['db_charset'] = "utf8mb4";

View File

@ -1,55 +0,0 @@
<?php return array (
'components' =>
array (
'db' =>
array (
'class' => 'yii\\db\\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=installer',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
),
'user' =>
array (
),
'mailer' =>
array (
'transport' =>
array (
'class' => 'Swift_MailTransport',
),
),
'view' =>
array (
'theme' =>
array (
'name' => 'HumHub',
),
),
'formatter' =>
array (
'defaultTimeZone' => 'Europe/Berlin',
),
'formatterApp' =>
array (
'defaultTimeZone' => 'Europe/Berlin',
'timeZone' => 'Europe/Berlin',
),
),
'params' =>
array (
'installer' =>
array (
'db' =>
array (
'installer_hostname' => '127.0.0.1',
'installer_database' => 'installer',
),
),
'config_created_at' => 1440430541,
'installed' => true,
),
'name' => 'Installer',
'language' => 'de',
'timeZone' => 'Europe/Berlin',
); ?>

View File

@ -30,6 +30,8 @@ function insertFormatting(BBcode,id) {
} }
} }
$(textarea).trigger('change');
return true; return true;
} }

View File

@ -275,7 +275,46 @@ $(document).ready(function(){
}); });
/*
* This event handler hides all comment UI when the user clicks anywhere on the page
* It ensures that we aren't closing the current comment box
*
* We are making an exception for buttons because of a race condition with the
* comment opening button that results in an already closed comment UI.
*/
$(document).on('click', function(event) {
if (event.target.type === 'button') {
return true;
}
var $dontclosethis = $(event.target).closest('.wall-item-comment-wrapper').find('.comment-edit-form');
$('.wall-item-comment-wrapper .comment-edit-submit-wrapper:visible').each(function() {
var $parent = $(this).parent('.comment-edit-form');
var itemId = $parent.data('itemId');
if ($dontclosethis[0] != $parent[0]) {
var textarea = $parent.find('textarea').get(0)
commentCloseUI(textarea, itemId);
}
});
});
// Customize some elements when the app is used in standalone mode on Android
if (window.matchMedia('(display-mode: standalone)').matches) {
// Open links to source outside of the webview
$('body').on('click', '.plink', function (e) {
$(e.target).attr('target', '_blank');
});
}
/*
* This event listeners ensures that the textarea size is updated event if the
* value is changed externally (textcomplete, insertFormatting, fbrowser...)
*/
$(document).on('change', 'textarea', function(event) {
autosize.update(event.target);
});
}); });
function openClose(theID) { function openClose(theID) {

View File

@ -28,6 +28,28 @@
if(x($page,'htmlhead')) echo $page['htmlhead']; if(x($page,'htmlhead')) echo $page['htmlhead'];
} }
?> ?>
<?php
// Add the theme color meta
// It makes mobile Chrome UI match Frio's top bar color.
$uid = $a->profile_uid;
if (is_null($uid)) {
$uid = get_theme_uid();
}
$schema = get_pconfig($uid, 'frio', 'schema');
if (($schema) && ($schema != '---')) {
if (file_exists('view/theme/frio/schema/'.$schema.'.php')) {
$schemefile = 'view/theme/frio/schema/'.$schema.'.php';
require_once($schemefile);
}
} else {
$nav_bg = get_pconfig($uid, 'frio', 'nav_bg');
}
if (!$nav_bg) {
$nav_bg = "#708fa0";
}
echo '<meta name="theme-color" content="'.$nav_bg.'" />';
?>
</head> </head>
<?php <?php
if(($_SERVER['REQUEST_URI'] != "/register") && ($_SERVER['REQUEST_URI'] != "/lostpass") && ($_SERVER['REQUEST_URI'] != "/login")) if(($_SERVER['REQUEST_URI'] != "/register") && ($_SERVER['REQUEST_URI'] != "/lostpass") && ($_SERVER['REQUEST_URI'] != "/login"))

View File

@ -4,7 +4,7 @@
{{else}} {{else}}
<div class="comment-wwedit-wrapper" id="comment-edit-wrapper-{{$id}}" style="display: block;"> <div class="comment-wwedit-wrapper" id="comment-edit-wrapper-{{$id}}" style="display: block;">
{{/if}} {{/if}}
<form class="comment-edit-form" style="display: block;" id="comment-edit-form-{{$id}}" action="item" method="post" onsubmit="post_comment({{$id}}); return false;"> <form class="comment-edit-form" style="display: block;" data-item-id="{{$id}}" id="comment-edit-form-{{$id}}" action="item" method="post" onsubmit="post_comment({{$id}}); return false;">
<input type="hidden" name="type" value="{{$type}}" /> <input type="hidden" name="type" value="{{$type}}" />
<input type="hidden" name="profile_uid" value="{{$profile_uid}}" /> <input type="hidden" name="profile_uid" value="{{$profile_uid}}" />
<input type="hidden" name="parent" value="{{$parent}}" /> <input type="hidden" name="parent" value="{{$parent}}" />
@ -14,7 +14,7 @@
<input type="hidden" name="post_id_random" value="{{$rand_num}}" /> <input type="hidden" name="post_id_random" value="{{$rand_num}}" />
<div class="bb form-group"> <div class="bb form-group">
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty form-control text-autosize" name="body" placeholder="{{$comment}}" onFocus="commentOpenUI(this,{{$id}});" onBlur="commentCloseUI(this,{{$id}});"></textarea> <textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty form-control text-autosize" name="body" placeholder="{{$comment}}" onFocus="commentOpenUI(this,{{$id}});"></textarea>
</div> </div>
{{if $qcomment}} {{if $qcomment}}
<select id="qcomment-select-{{$id}}" name="qcomment-{{$id}}" class="qcomment" onchange="qCommentInsert(this,{{$id}});"> <select id="qcomment-select-{{$id}}" name="qcomment-{{$id}}" class="qcomment" onchange="qCommentInsert(this,{{$id}});">

View File

@ -65,7 +65,6 @@
{{include file="field_input.tpl" field=$basepath}} {{include file="field_input.tpl" field=$basepath}}
<h3>{{$performance}}</h3> <h3>{{$performance}}</h3>
{{include file="field_checkbox.tpl" field=$use_fulltext_engine}}
{{include file="field_input.tpl" field=$itemcache}} {{include file="field_input.tpl" field=$itemcache}}
{{include file="field_input.tpl" field=$itemcache_duration}} {{include file="field_input.tpl" field=$itemcache_duration}}