commit
e16360f6d2
2
boot.php
2
boot.php
|
@ -19,7 +19,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica');
|
|||
define ( 'FRIENDICA_CODENAME', 'Lily of the valley');
|
||||
define ( 'FRIENDICA_VERSION', '3.4.3-dev' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
|
||||
define ( 'DB_UPDATE_VERSION', 1190 );
|
||||
define ( 'DB_UPDATE_VERSION', 1191 );
|
||||
define ( 'EOL', "<br />\r\n" );
|
||||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ Friendica Documentation and Resources
|
|||
* [Install](help/Install)
|
||||
* [Settings](help/Settings)
|
||||
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
|
||||
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
|
||||
* [Message Flow](help/Message-Flow)
|
||||
* [Using SSL with Friendica](help/SSL)
|
||||
* [Twitter/GNU Social API Functions](help/api)
|
||||
|
|
|
@ -32,6 +32,7 @@ Friendica - Dokumentation und Ressourcen
|
|||
* [Konfigurationen](help/Settings)
|
||||
* [Plugins](help/Plugins)
|
||||
* [Konnektoren (Connectors) installieren (Twitter/GNU Social)](help/Installing-Connectors)
|
||||
* [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN)
|
||||
* [Nachrichtenfluss](help/Message-Flow)
|
||||
* [Betreibe deine Seite mit einem SSL-Zertifikat](help/SSL)
|
||||
* [Entwickler](help/Developers)
|
||||
|
|
|
@ -53,9 +53,21 @@ In the descirption and location field you can use BBCode to format the text.
|
|||
When you *Share* the event it will be posted to your wall with the access permissions you've selected.
|
||||
But before you do, you can also *preview* the event in a pop-up box.
|
||||
|
||||
### Interaction with Events
|
||||
|
||||
When you publish an event, you can choose who shall receive it, as with a regular new posting.
|
||||
The recipients will see the posting about the event in their network-stream.
|
||||
Additionally it will be added to their calendar and thus be shown in their events overview page.
|
||||
|
||||
Recipients of the event-posting can comment or dis-/like the event, as with a regular posting, but also announce that they will attend, not attend or may-be attend the event with a single click.
|
||||
|
||||
### Addons
|
||||
|
||||
#### OpenStreetMap
|
||||
|
||||
If this addon is activated on you friendica node, the content of the location field will be mathced with the identification service of OSM when you submit the event.
|
||||
Should OSM find anything matching, a map for the location will be embedded automatically at the end of the events view.
|
||||
|
||||
#### Calendar Export
|
||||
|
||||
If this addon is activated the public events you have created will be published in ical or csv file. The URL of the published file is ``example.com/cal/nickname/export/format`` (where format is either ical of csv).
|
45
doc/install-ejabberd.md
Normal file
45
doc/install-ejabberd.md
Normal file
|
@ -0,0 +1,45 @@
|
|||
Install an ejabberd with synchronized credentials
|
||||
=================================================
|
||||
|
||||
* [Home](help)
|
||||
|
||||
[Ejabberd](https://www.ejabberd.im/) is a chat server that uses XMPP as messaging protocol that you can use with a large amount of clients. In conjunction
|
||||
with the "xmpp" addon it can be used for a web based chat solution for your users.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
- Change it's owner to whichever user is running the server, ie. ejabberd
|
||||
|
||||
$ chown ejabberd:ejabberd /path/to/friendica/include/auth_ejabberd.php
|
||||
|
||||
- Change the access mode so it is readable only to the user ejabberd and has exec
|
||||
|
||||
$ chmod 700 /path/to/friendica/include/auth_ejabberd.php
|
||||
|
||||
- Edit your ejabberd.cfg file, comment out your auth_method and add:
|
||||
|
||||
{auth_method, external}.
|
||||
{extauth_program, "/path/to/friendica/include/auth_ejabberd.php"}.
|
||||
|
||||
- Disable the module "mod_register" and disable the registration:
|
||||
|
||||
{access, register, [{deny, all}]}.
|
||||
|
||||
- Enable BOSH:
|
||||
- Enable the module "mod_http_bind"
|
||||
- Edit this line:
|
||||
|
||||
{5280, ejabberd_http, [captcha, http_poll, http_bind]}
|
||||
|
||||
- In your apache configuration for your site add this line:
|
||||
|
||||
ProxyPass /http-bind http://127.0.0.1:5280/http-bind retry=0
|
||||
|
||||
- Restart your ejabberd service, you should be able to login with your friendica credentials
|
||||
|
||||
Other hints
|
||||
-----------
|
||||
- if a user has a space or a @ in the nickname, the user has to replace these characters:
|
||||
- " " (space) is replaced with "%20"
|
||||
- "@" is replaced with "(a)"
|
|
@ -30,6 +30,7 @@ Friendica Documentation and Resources
|
|||
* [Settings](help/Settings)
|
||||
* [Plugins](help/Plugins)
|
||||
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
|
||||
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
|
||||
* [Message Flow](help/Message-Flow)
|
||||
* [Using SSL with Friendica](help/SSL)
|
||||
* [Developers](help/Developers)
|
||||
|
|
|
@ -285,7 +285,7 @@
|
|||
* Unique contact to contact url.
|
||||
*/
|
||||
function api_unique_id_to_url($id){
|
||||
$r = q("SELECT url FROM unique_contacts WHERE id=%d LIMIT 1",
|
||||
$r = q("SELECT `url` FROM `unique_contacts` WHERE `id`=%d LIMIT 1",
|
||||
intval($id));
|
||||
if ($r)
|
||||
return ($r[0]["url"]);
|
||||
|
@ -390,9 +390,9 @@
|
|||
$r = array();
|
||||
|
||||
if ($url != "")
|
||||
$r = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1", $url);
|
||||
$r = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", $url);
|
||||
elseif ($nick != "")
|
||||
$r = q("SELECT * FROM unique_contacts WHERE nick='%s' LIMIT 1", $nick);
|
||||
$r = q("SELECT * FROM `unique_contacts` WHERE `nick`='%s' LIMIT 1", $nick);
|
||||
|
||||
if ($r) {
|
||||
// If no nick where given, extract it from the address
|
||||
|
@ -505,14 +505,14 @@
|
|||
}
|
||||
|
||||
// Fetching unique id
|
||||
$r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
|
||||
$r = q("SELECT id FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
|
||||
|
||||
// If not there, then add it
|
||||
if (count($r) == 0) {
|
||||
q("INSERT INTO unique_contacts (url, name, nick, avatar) VALUES ('%s', '%s', '%s', '%s')",
|
||||
q("INSERT INTO `unique_contacts` (`url`, `name`, `nick`, `avatar`) VALUES ('%s', '%s', '%s', '%s')",
|
||||
dbesc(normalise_link($uinfo[0]['url'])), dbesc($uinfo[0]['name']),dbesc($uinfo[0]['nick']), dbesc($uinfo[0]['micro']));
|
||||
|
||||
$r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
|
||||
$r = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
|
||||
}
|
||||
|
||||
$network_name = network_to_name($uinfo[0]['network'], $uinfo[0]['url']);
|
||||
|
@ -539,7 +539,8 @@
|
|||
'verified' => true,
|
||||
'statusnet_blocking' => false,
|
||||
'notifications' => false,
|
||||
'statusnet_profile_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'],
|
||||
//'statusnet_profile_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'],
|
||||
'statusnet_profile_url' => $uinfo[0]['url'],
|
||||
'uid' => intval($uinfo[0]['uid']),
|
||||
'cid' => intval($uinfo[0]['cid']),
|
||||
'self' => $uinfo[0]['self'],
|
||||
|
@ -552,34 +553,42 @@
|
|||
|
||||
function api_item_get_user(&$a, $item) {
|
||||
|
||||
$author = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1",
|
||||
$author = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
|
||||
dbesc(normalise_link($item['author-link'])));
|
||||
|
||||
if (count($author) == 0) {
|
||||
q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')",
|
||||
q("INSERT INTO `unique_contacts` (`url`, `name`, `avatar`) VALUES ('%s', '%s', '%s')",
|
||||
dbesc(normalise_link($item["author-link"])), dbesc($item["author-name"]), dbesc($item["author-avatar"]));
|
||||
|
||||
$author = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
|
||||
$author = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
|
||||
dbesc(normalise_link($item['author-link'])));
|
||||
} else if ($item["author-link"].$item["author-name"] != $author[0]["url"].$author[0]["name"]) {
|
||||
q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE (`name` != '%s' OR `avatar` != '%s') AND url = '%s'",
|
||||
$r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'",
|
||||
dbesc($item["author-name"]), dbesc($item["author-avatar"]),
|
||||
dbesc(normalise_link($item["author-link"])));
|
||||
|
||||
if (!$r)
|
||||
q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'",
|
||||
dbesc($item["author-name"]), dbesc($item["author-avatar"]),
|
||||
dbesc(normalise_link($item["author-link"])));
|
||||
}
|
||||
|
||||
$owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
|
||||
$owner = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
|
||||
dbesc(normalise_link($item['owner-link'])));
|
||||
|
||||
if (count($owner) == 0) {
|
||||
q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')",
|
||||
q("INSERT INTO `unique_contacts` (`url`, `name`, `avatar`) VALUES ('%s', '%s', '%s')",
|
||||
dbesc(normalise_link($item["owner-link"])), dbesc($item["owner-name"]), dbesc($item["owner-avatar"]));
|
||||
|
||||
$owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
|
||||
$owner = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
|
||||
dbesc(normalise_link($item['owner-link'])));
|
||||
} else if ($item["owner-link"].$item["owner-name"] != $owner[0]["url"].$owner[0]["name"]) {
|
||||
q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE (`name` != '%s' OR `avatar` != '%s') AND url = '%s'",
|
||||
$r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'",
|
||||
dbesc($item["owner-name"]), dbesc($item["owner-avatar"]),
|
||||
dbesc(normalise_link($item["owner-link"])));
|
||||
|
||||
if (!$r)
|
||||
q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'",
|
||||
dbesc($item["owner-name"]), dbesc($item["owner-avatar"]),
|
||||
dbesc(normalise_link($item["owner-link"])));
|
||||
}
|
||||
|
@ -952,7 +961,7 @@
|
|||
$in_reply_to_status_id= intval($lastwall['parent']);
|
||||
$in_reply_to_status_id_str = (string) intval($lastwall['parent']);
|
||||
|
||||
$r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author'])));
|
||||
$r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author'])));
|
||||
if ($r) {
|
||||
if ($r[0]['nick'] == "")
|
||||
$r[0]['nick'] = api_get_nick($r[0]["url"]);
|
||||
|
@ -1074,7 +1083,7 @@
|
|||
$in_reply_to_status_id = intval($lastwall['parent']);
|
||||
$in_reply_to_status_id_str = (string) intval($lastwall['parent']);
|
||||
|
||||
$r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author'])));
|
||||
$r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author'])));
|
||||
if ($r) {
|
||||
if ($r[0]['nick'] == "")
|
||||
$r[0]['nick'] = api_get_nick($r[0]["url"]);
|
||||
|
@ -1135,9 +1144,9 @@
|
|||
$userlist = array();
|
||||
|
||||
if (isset($_GET["q"])) {
|
||||
$r = q("SELECT id FROM unique_contacts WHERE name='%s'", dbesc($_GET["q"]));
|
||||
$r = q("SELECT id FROM `unique_contacts` WHERE `name`='%s'", dbesc($_GET["q"]));
|
||||
if (!count($r))
|
||||
$r = q("SELECT id FROM unique_contacts WHERE nick='%s'", dbesc($_GET["q"]));
|
||||
$r = q("SELECT `id` FROM `unique_contacts` WHERE `nick`='%s'", dbesc($_GET["q"]));
|
||||
|
||||
if (count($r)) {
|
||||
foreach ($r AS $user) {
|
||||
|
@ -2180,7 +2189,7 @@
|
|||
intval(api_user()),
|
||||
intval($in_reply_to_status_id));
|
||||
if ($r) {
|
||||
$r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link'])));
|
||||
$r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link'])));
|
||||
|
||||
if ($r) {
|
||||
if ($r[0]['nick'] == "")
|
||||
|
@ -2439,7 +2448,7 @@
|
|||
|
||||
$stringify_ids = (x($_REQUEST,'stringify_ids')?$_REQUEST['stringify_ids']:false);
|
||||
|
||||
$r = q("SELECT unique_contacts.id FROM contact, unique_contacts WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
|
||||
$r = q("SELECT `unique_contact`.`id` FROM contact, `unique_contacts` WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
|
||||
intval(api_user())
|
||||
);
|
||||
|
||||
|
@ -2841,15 +2850,29 @@ function api_share_as_retweet(&$item) {
|
|||
|
||||
function api_get_nick($profile) {
|
||||
/* To-Do:
|
||||
- remove trailing jung from profile url
|
||||
- remove trailing junk from profile url
|
||||
- pump.io check has to check the website
|
||||
*/
|
||||
|
||||
$nick = "";
|
||||
|
||||
$r = q("SELECT `nick` FROM `gcontact` WHERE `nurl` = '%s'",
|
||||
dbesc(normalise_link($profile)));
|
||||
if ($r)
|
||||
$nick = $r[0]["nick"];
|
||||
|
||||
if (!$nick == "") {
|
||||
$r = q("SELECT `nick` FROM `contact` WHERE `uid` = 0 AND `nurl` = '%s'",
|
||||
dbesc(normalise_link($profile)));
|
||||
if ($r)
|
||||
$nick = $r[0]["nick"];
|
||||
}
|
||||
|
||||
if (!$nick == "") {
|
||||
$friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2", $profile);
|
||||
if ($friendica != $profile)
|
||||
$nick = $friendica;
|
||||
}
|
||||
|
||||
if (!$nick == "") {
|
||||
$diaspora = preg_replace("=https?://(.*)/u/(.*)=ism", "$2", $profile);
|
||||
|
@ -2887,7 +2910,7 @@ function api_get_nick($profile) {
|
|||
//}
|
||||
|
||||
if ($nick != "") {
|
||||
q("UPDATE unique_contacts SET nick = '%s' WHERE `nick` != '%s' AND url = '%s'",
|
||||
q("UPDATE `unique_contacts` SET `nick` = '%s' WHERE `nick` != '%s' AND url = '%s'",
|
||||
dbesc($nick), dbesc($nick), dbesc(normalise_link($profile)));
|
||||
return($nick);
|
||||
}
|
||||
|
|
|
@ -1291,6 +1291,15 @@ function conv_sort($arr,$order) {
|
|||
|
||||
$parents = array();
|
||||
$children = array();
|
||||
$newarr = array();
|
||||
|
||||
// This is a preparation for having two different items with the same uri in one thread
|
||||
// This will otherwise lead to an endless loop.
|
||||
foreach($arr as $x)
|
||||
if (!isset($newarr[$x['uri']]))
|
||||
$newarr[$x['uri']] = $x;
|
||||
|
||||
$arr = $newarr;
|
||||
|
||||
foreach($arr as $x)
|
||||
if($x['id'] == $x['parent'])
|
||||
|
|
|
@ -340,9 +340,9 @@ function delivery_run(&$argv, &$argc){
|
|||
$ssl_policy = get_config('system','ssl_policy');
|
||||
fix_contact_ssl_policy($x[0],$ssl_policy);
|
||||
|
||||
// If we are setup as a soapbox we aren't accepting input from this person
|
||||
// If we are setup as a soapbox we aren't accepting top level posts from this person
|
||||
|
||||
if($x[0]['page-flags'] == PAGE_SOAPBOX)
|
||||
if (($x[0]['page-flags'] == PAGE_SOAPBOX) AND $top_level)
|
||||
break;
|
||||
|
||||
require_once('library/simplepie/simplepie.inc');
|
||||
|
|
|
@ -1,19 +1,54 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Features management
|
||||
/**
|
||||
* @file include/features.php *
|
||||
* @brief Features management
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief check if feature is enabled
|
||||
*
|
||||
* return boolean
|
||||
*/
|
||||
function feature_enabled($uid,$feature) {
|
||||
//return true;
|
||||
|
||||
$x = get_pconfig($uid,'feature',$feature);
|
||||
if($x === false) {
|
||||
$x = get_config('feature',$feature);
|
||||
if($x === false)
|
||||
$x = get_feature_default($feature);
|
||||
}
|
||||
$arr = array('uid' => $uid, 'feature' => $feature, 'enabled' => $x);
|
||||
call_hooks('feature_enabled',$arr);
|
||||
return($arr['enabled']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief check if feature is enabled or disabled by default
|
||||
*
|
||||
* @param string $feature
|
||||
* @return boolean
|
||||
*/
|
||||
function get_feature_default($feature) {
|
||||
$f = get_features();
|
||||
foreach($f as $cat) {
|
||||
foreach($cat as $feat) {
|
||||
if(is_array($feat) && $feat[0] === $feature)
|
||||
return $feat[3];
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ brief get a list of all available features
|
||||
* The array includes the setting group, the setting name,
|
||||
* explainations for the setting and if it's enabled or disabled
|
||||
* by default
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function get_features() {
|
||||
|
||||
$arr = array(
|
||||
|
@ -22,46 +57,53 @@ function get_features() {
|
|||
'general' => array(
|
||||
t('General Features'),
|
||||
//array('expire', t('Content Expiration'), t('Remove old posts/comments after a period of time')),
|
||||
array('multi_profiles', t('Multiple Profiles'), t('Ability to create multiple profiles')),
|
||||
array('multi_profiles', t('Multiple Profiles'), t('Ability to create multiple profiles'),false),
|
||||
array('photo_location', t('Photo Location'), t('Photo metadata is normally stripped. This extracts the location (if present) prior to stripping metadata and links it to a map.'),false),
|
||||
),
|
||||
|
||||
// Post composition
|
||||
'composition' => array(
|
||||
t('Post Composition Features'),
|
||||
array('richtext', t('Richtext Editor'), t('Enable richtext editor')),
|
||||
array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them')),
|
||||
array('aclautomention', t('Auto-mention Forums'), t('Add/remove mention when a fourm page is selected/deselected in ACL window.')),
|
||||
array('richtext', t('Richtext Editor'), t('Enable richtext editor'),false),
|
||||
array('preview', t('Post Preview'), t('Allow previewing posts and comments before publishing them'),false),
|
||||
array('aclautomention', t('Auto-mention Forums'), t('Add/remove mention when a fourm page is selected/deselected in ACL window.'),false),
|
||||
),
|
||||
|
||||
// Network sidebar widgets
|
||||
'widgets' => array(
|
||||
t('Network Sidebar Widgets'),
|
||||
array('archives', t('Search by Date'), t('Ability to select posts by date ranges')),
|
||||
array('groups', t('Group Filter'), t('Enable widget to display Network posts only from selected group')),
|
||||
array('networks', t('Network Filter'), t('Enable widget to display Network posts only from selected network')),
|
||||
array('savedsearch', t('Saved Searches'), t('Save search terms for re-use')),
|
||||
array('archives', t('Search by Date'), t('Ability to select posts by date ranges'),false),
|
||||
array('forumlist_widget', t('List Forums'), t('Enable widget to display the forums your are connected with'),true),
|
||||
array('groups', t('Group Filter'), t('Enable widget to display Network posts only from selected group'),false),
|
||||
array('networks', t('Network Filter'), t('Enable widget to display Network posts only from selected network'),false),
|
||||
array('savedsearch', t('Saved Searches'), t('Save search terms for re-use'),false),
|
||||
),
|
||||
|
||||
// Network tabs
|
||||
'net_tabs' => array(
|
||||
t('Network Tabs'),
|
||||
array('personal_tab', t('Network Personal Tab'), t('Enable tab to display only Network posts that you\'ve interacted on')),
|
||||
array('new_tab', t('Network New Tab'), t('Enable tab to display only new Network posts (from the last 12 hours)')),
|
||||
array('link_tab', t('Network Shared Links Tab'), t('Enable tab to display only Network posts with links in them')),
|
||||
array('personal_tab', t('Network Personal Tab'), t('Enable tab to display only Network posts that you\'ve interacted on'),false),
|
||||
array('new_tab', t('Network New Tab'), t('Enable tab to display only new Network posts (from the last 12 hours)'),false),
|
||||
array('link_tab', t('Network Shared Links Tab'), t('Enable tab to display only Network posts with links in them'),false),
|
||||
),
|
||||
|
||||
// Item tools
|
||||
'tools' => array(
|
||||
t('Post/Comment Tools'),
|
||||
array('multi_delete', t('Multiple Deletion'), t('Select and delete multiple posts/comments at once')),
|
||||
array('edit_posts', t('Edit Sent Posts'), t('Edit and correct posts and comments after sending')),
|
||||
array('commtag', t('Tagging'), t('Ability to tag existing posts')),
|
||||
array('categories', t('Post Categories'), t('Add categories to your posts')),
|
||||
array('filing', t('Saved Folders'), t('Ability to file posts under folders')),
|
||||
array('multi_delete', t('Multiple Deletion'), t('Select and delete multiple posts/comments at once'),false),
|
||||
array('edit_posts', t('Edit Sent Posts'), t('Edit and correct posts and comments after sending'),false),
|
||||
array('commtag', t('Tagging'), t('Ability to tag existing posts'),false),
|
||||
array('categories', t('Post Categories'), t('Add categories to your posts'),false),
|
||||
array('filing', t('Saved Folders'), t('Ability to file posts under folders'),false),
|
||||
array('dislike', t('Dislike Posts'), t('Ability to dislike posts/comments')),
|
||||
array('star_posts', t('Star Posts'), t('Ability to mark special posts with a star indicator')),
|
||||
array('ignore_posts', t('Mute Post Notifications'), t('Ability to mute notifications for a thread')),
|
||||
array('star_posts', t('Star Posts'), t('Ability to mark special posts with a star indicator'),false),
|
||||
array('ignore_posts', t('Mute Post Notifications'), t('Ability to mute notifications for a thread'),false),
|
||||
),
|
||||
|
||||
// Advanced Profile Settings
|
||||
'advanced_profile' => array(
|
||||
t('Advanced Profile Settings'),
|
||||
array('forumlist_profile', t('List Forums'), t('Show visitors public community forums at the Advanced Profile Page'),false),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
149
include/forums.php
Normal file
149
include/forums.php
Normal file
|
@ -0,0 +1,149 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file include/forums.php
|
||||
* @brief Functions related to forum functionality *
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @brief Function to list all forums a user is connected with
|
||||
*
|
||||
* @param int $uid of the profile owner
|
||||
* @param boolean $showhidden
|
||||
* Show frorums which are not hidden
|
||||
* @param boolean $lastitem
|
||||
* Sort by lastitem
|
||||
* @param boolean $showprivate
|
||||
* Show private groups
|
||||
*
|
||||
* @returns array
|
||||
* 'url' => forum url
|
||||
* 'name' => forum name
|
||||
* 'id' => number of the key from the array
|
||||
* 'micro' => contact photo in format micro
|
||||
*/
|
||||
function get_forumlist($uid, $showhidden = true, $lastitem, $showprivate = false) {
|
||||
|
||||
$forumlist = array();
|
||||
|
||||
$order = (($showhidden) ? '' : ' AND NOT `hidden` ');
|
||||
$order .= (($lastitem) ? ' ORDER BY `last-item` DESC ' : ' ORDER BY `name` ASC ');
|
||||
$select = '`forum` ';
|
||||
if ($showprivate) {
|
||||
$select = '(`forum` OR `prv`)';
|
||||
}
|
||||
|
||||
$contacts = q("SELECT `contact`.`id`, `contact`.`url`, `contact`.`name`, `contact`.`micro` FROM `contact`
|
||||
WHERE `network`= 'dfrn' AND $select AND `uid` = %d
|
||||
AND NOT `blocked` AND NOT `hidden` AND NOT `pending` AND NOT `archive`
|
||||
AND `success_update` > `failure_update`
|
||||
$order ",
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
foreach($contacts as $contact) {
|
||||
$forumlist[] = array(
|
||||
'url' => $contact['url'],
|
||||
'name' => $contact['name'],
|
||||
'id' => $contact['id'],
|
||||
'micro' => $contact['micro'],
|
||||
);
|
||||
}
|
||||
return($forumlist);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Forumlist widget
|
||||
*
|
||||
* Sidebar widget to show subcribed friendica forums. If activated
|
||||
* in the settings, it appears at the notwork page sidebar
|
||||
*
|
||||
* @param App $a
|
||||
* @return string
|
||||
*/
|
||||
function widget_forumlist($a) {
|
||||
|
||||
if(! intval(feature_enabled(local_user(),'forumlist_widget')))
|
||||
return;
|
||||
|
||||
$o = '';
|
||||
|
||||
//sort by last updated item
|
||||
$lastitem = true;
|
||||
|
||||
$contacts = get_forumlist($a->user['uid'],true,$lastitem, true);
|
||||
$total = count($contacts);
|
||||
$visible_forums = 10;
|
||||
|
||||
if(count($contacts)) {
|
||||
|
||||
$id = 0;
|
||||
|
||||
foreach($contacts as $contact) {
|
||||
|
||||
$entry = array(
|
||||
'url' => $a->get_baseurl() . '/network?f=&cid=' . $contact['id'],
|
||||
'external_url' => $a->get_baseurl() . '/redir/' . $contact['id'],
|
||||
'name' => $contact['name'],
|
||||
'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO),
|
||||
'id' => ++$id,
|
||||
);
|
||||
$entries[] = $entry;
|
||||
}
|
||||
|
||||
$tpl = get_markup_template('widget_forumlist.tpl');
|
||||
|
||||
$o .= replace_macros($tpl,array(
|
||||
'$title' => t('Forums'),
|
||||
'$forums' => $entries,
|
||||
'$link_desc' => t('External link to forum'),
|
||||
'$total' => $total,
|
||||
'$visible_forums' => $visible_forums,
|
||||
'$showmore' => t('show more'),
|
||||
));
|
||||
}
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Format forumlist as contact block
|
||||
*
|
||||
* This function is used to show the forumlist in
|
||||
* the advanced profile.
|
||||
*
|
||||
* @param int $uid
|
||||
* @return string
|
||||
*
|
||||
*/
|
||||
function forumlist_profile_advanced($uid) {
|
||||
|
||||
$profile = intval(feature_enabled($uid,'forumlist_profile'));
|
||||
if(! $profile)
|
||||
return;
|
||||
|
||||
$o = '';
|
||||
|
||||
// place holder in case somebody wants configurability
|
||||
$show_total = 9999;
|
||||
|
||||
//don't sort by last updated item
|
||||
$lastitem = false;
|
||||
|
||||
$contacts = get_forumlist($uid,false,$lastitem,false);
|
||||
|
||||
$total_shown = 0;
|
||||
|
||||
foreach($contacts as $contact) {
|
||||
$forumlist .= micropro($contact,false,'forumlist-profile-advanced');
|
||||
$total_shown ++;
|
||||
if($total_shown == $show_total)
|
||||
break;
|
||||
}
|
||||
|
||||
if(count($contacts) > 0)
|
||||
$o .= $forumlist;
|
||||
return $o;
|
||||
}
|
|
@ -85,14 +85,16 @@ function deletenode(&$doc, $node)
|
|||
$child->parentNode->removeChild($child);
|
||||
}}
|
||||
|
||||
function _replace_code_cb($m){
|
||||
return "<code>".str_replace("\n","<br>\n",$m[1]). "</code>";
|
||||
}
|
||||
|
||||
function html2bbcode($message)
|
||||
{
|
||||
|
||||
$message = str_replace("\r", "", $message);
|
||||
|
||||
$message = preg_replace_callback("|<pre><code>([^<]*)</code></pre>|ism", function($m) {
|
||||
return "<code>".str_replace("\n","<br>\n",$m[1]). "</code>";
|
||||
}, $message);
|
||||
$message = preg_replace_callback("|<pre><code>([^<]*)</code></pre>|ism", "_replace_code_cb", $message);
|
||||
|
||||
$message = str_replace(array(
|
||||
"<li><p>",
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
<?php
|
||||
/**
|
||||
* @file include/identity.php
|
||||
*/
|
||||
|
||||
require_once('include/forums.php');
|
||||
|
||||
|
||||
/**
|
||||
|
@ -59,15 +64,15 @@ if(! function_exists('profile_load')) {
|
|||
$profile_int = intval($profile);
|
||||
$r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `user`.* FROM `profile`
|
||||
INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid`
|
||||
WHERE `user`.`nickname` = '%s' AND `profile`.`id` = %d and `contact`.`self` = 1 LIMIT 1",
|
||||
WHERE `user`.`nickname` = '%s' AND `profile`.`id` = %d AND `contact`.`self` = 1 LIMIT 1",
|
||||
dbesc($nickname),
|
||||
intval($profile_int)
|
||||
);
|
||||
}
|
||||
if((!$r) && (!count($r))) {
|
||||
$r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `user`.* FROM `profile`
|
||||
INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid`
|
||||
WHERE `user`.`nickname` = '%s' AND `profile`.`is-default` = 1 and `contact`.`self` = 1 LIMIT 1",
|
||||
INNER JOIN `contact` ON `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid`
|
||||
WHERE `user`.`nickname` = '%s' AND `profile`.`is-default` = 1 AND `contact`.`self` = 1 LIMIT 1",
|
||||
dbesc($nickname)
|
||||
);
|
||||
}
|
||||
|
@ -82,7 +87,7 @@ if(! function_exists('profile_load')) {
|
|||
// fetch user tags if this isn't the default profile
|
||||
|
||||
if(!$r[0]['is-default']) {
|
||||
$x = q("select `pub_keywords` from `profile` where uid = %d and `is-default` = 1 limit 1",
|
||||
$x = q("SELECT `pub_keywords` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1",
|
||||
intval($r[0]['profile_uid'])
|
||||
);
|
||||
if($x && count($x))
|
||||
|
@ -306,7 +311,7 @@ if(! function_exists('profile_sidebar')) {
|
|||
if(count($r))
|
||||
$updated = date("c", strtotime($r[0]['updated']));
|
||||
|
||||
$r = q("SELECT COUNT(*) AS `total` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 and `pending` = 0 AND `hidden` = 0 AND `archive` = 0
|
||||
$r = q("SELECT COUNT(*) AS `total` FROM `contact` WHERE `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 AND `archive` = 0
|
||||
AND `network` IN ('%s', '%s', '%s', '')",
|
||||
intval($profile['uid']),
|
||||
dbesc(NETWORK_DFRN),
|
||||
|
@ -525,8 +530,9 @@ if(! function_exists('get_events')) {
|
|||
function advanced_profile(&$a) {
|
||||
|
||||
$o = '';
|
||||
$uid = $a->profile['uid'];
|
||||
|
||||
$o .= replace_macros(get_markup_template("section_title.tpl"),array(
|
||||
$o .= replace_macros(get_markup_template('section_title.tpl'),array(
|
||||
'$title' => t('Profile')
|
||||
));
|
||||
|
||||
|
@ -604,6 +610,11 @@ function advanced_profile(&$a) {
|
|||
|
||||
if($txt = prepare_text($a->profile['education'])) $profile['education'] = array( t('School/education:'), $txt );
|
||||
|
||||
//show subcribed forum if it is enabled in the usersettings
|
||||
if (feature_enabled($uid,'forumlist_profile')) {
|
||||
$profile['forumlist'] = array( t('Forums:'), forumlist_profile_advanced($uid));
|
||||
}
|
||||
|
||||
if ($a->profile['uid'] == local_user())
|
||||
$profile['edit'] = array($a->get_baseurl(). '/profiles/'.$a->profile['id'], t('Edit profile'),"", t('Edit profile'));
|
||||
|
||||
|
|
|
@ -2381,85 +2381,45 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
$contact_updated = $photo_timestamp;
|
||||
|
||||
require_once("include/Photo.php");
|
||||
$photo_failure = false;
|
||||
$have_photo = false;
|
||||
|
||||
$r = q("SELECT `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($contact['id']),
|
||||
intval($contact['uid'])
|
||||
);
|
||||
if(count($r)) {
|
||||
$resource_id = $r[0]['resource-id'];
|
||||
$have_photo = true;
|
||||
}
|
||||
else {
|
||||
$resource_id = photo_new_resource();
|
||||
}
|
||||
|
||||
$img_str = fetch_url($photo_url,true);
|
||||
// guess mimetype from headers or filename
|
||||
$type = guess_image_type($photo_url,true);
|
||||
|
||||
|
||||
$img = new Photo($img_str, $type);
|
||||
if($img->is_valid()) {
|
||||
if($have_photo) {
|
||||
q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `contact-id` = %d AND `uid` = %d",
|
||||
dbesc($resource_id),
|
||||
intval($contact['id']),
|
||||
intval($contact['uid'])
|
||||
);
|
||||
}
|
||||
|
||||
$img->scaleImageSquare(175);
|
||||
|
||||
$hash = $resource_id;
|
||||
$r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), 'Contact Photos', 4);
|
||||
|
||||
$img->scaleImage(80);
|
||||
$r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), 'Contact Photos', 5);
|
||||
|
||||
$img->scaleImage(48);
|
||||
$r = $img->store($contact['uid'], $contact['id'], $hash, basename($photo_url), 'Contact Photos', 6);
|
||||
|
||||
$a = get_app();
|
||||
$photos = import_profile_photo($photo_url,$contact['uid'],$contact['id']);
|
||||
|
||||
q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s'
|
||||
WHERE `uid` = %d AND `id` = %d",
|
||||
WHERE `uid` = %d AND `id` = %d AND NOT `self`",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.'.$img->getExt()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.'.$img->getExt()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.'.$img->getExt()),
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
intval($contact['uid']),
|
||||
intval($contact['id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
|
||||
if ($name_updated > $contact_updated)
|
||||
$contact_updated = $name_updated;
|
||||
|
||||
$r = q("select * from contact where uid = %d and id = %d limit 1",
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `id` = %d LIMIT 1",
|
||||
intval($contact['uid']),
|
||||
intval($contact['id'])
|
||||
);
|
||||
|
||||
$x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d",
|
||||
$x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d AND `name` != '%s' AND NOT `self`",
|
||||
dbesc(notags(trim($new_name))),
|
||||
dbesc(datetime_convert()),
|
||||
intval($contact['uid']),
|
||||
intval($contact['id'])
|
||||
intval($contact['id']),
|
||||
dbesc(notags(trim($new_name)))
|
||||
);
|
||||
|
||||
// do our best to update the name on content items
|
||||
|
||||
if(count($r)) {
|
||||
q("update item set `author-name` = '%s' where `author-name` = '%s' and `author-link` = '%s' and uid = %d",
|
||||
if(count($r) AND (notags(trim($new_name)) != $r[0]['name'])) {
|
||||
q("UPDATE `item` SET `author-name` = '%s' WHERE `author-name` = '%s' AND `author-link` = '%s' AND `uid` = %d AND `author-name` != '%s'",
|
||||
dbesc(notags(trim($new_name))),
|
||||
dbesc($r[0]['name']),
|
||||
dbesc($r[0]['url']),
|
||||
intval($contact['uid'])
|
||||
intval($contact['uid']),
|
||||
dbesc(notags(trim($new_name)))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -3119,85 +3079,46 @@ function local_delivery($importer,$data) {
|
|||
|
||||
logger('local_delivery: Updating photo for ' . $importer['name']);
|
||||
require_once("include/Photo.php");
|
||||
$photo_failure = false;
|
||||
$have_photo = false;
|
||||
|
||||
$r = q("SELECT `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($importer['id']),
|
||||
intval($importer['importer_uid'])
|
||||
);
|
||||
if(count($r)) {
|
||||
$resource_id = $r[0]['resource-id'];
|
||||
$have_photo = true;
|
||||
}
|
||||
else {
|
||||
$resource_id = photo_new_resource();
|
||||
}
|
||||
|
||||
$img_str = fetch_url($photo_url,true);
|
||||
// guess mimetype from headers or filename
|
||||
$type = guess_image_type($photo_url,true);
|
||||
|
||||
|
||||
$img = new Photo($img_str, $type);
|
||||
if($img->is_valid()) {
|
||||
if($have_photo) {
|
||||
q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `contact-id` = %d AND `uid` = %d",
|
||||
dbesc($resource_id),
|
||||
intval($importer['id']),
|
||||
intval($importer['importer_uid'])
|
||||
);
|
||||
}
|
||||
|
||||
$img->scaleImageSquare(175);
|
||||
|
||||
$hash = $resource_id;
|
||||
$r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 4);
|
||||
|
||||
$img->scaleImage(80);
|
||||
$r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 5);
|
||||
|
||||
$img->scaleImage(48);
|
||||
$r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 6);
|
||||
|
||||
$a = get_app();
|
||||
$photos = import_profile_photo($photo_url,$importer['importer_uid'],$importer['id']);
|
||||
|
||||
q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s'
|
||||
WHERE `uid` = %d AND `id` = %d",
|
||||
WHERE `uid` = %d AND `id` = %d AND NOT `self`",
|
||||
dbesc(datetime_convert()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.'.$img->getExt()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.'.$img->getExt()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.'.$img->getExt()),
|
||||
dbesc($photos[0]),
|
||||
dbesc($photos[1]),
|
||||
dbesc($photos[2]),
|
||||
intval($importer['importer_uid']),
|
||||
intval($importer['id'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if(($name_updated) && (strlen($new_name)) && ($name_updated > $importer['name-date'])) {
|
||||
if ($name_updated > $contact_updated)
|
||||
$contact_updated = $name_updated;
|
||||
|
||||
$r = q("select * from contact where uid = %d and id = %d limit 1",
|
||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `id` = %d LIMIT 1",
|
||||
intval($importer['importer_uid']),
|
||||
intval($importer['id'])
|
||||
);
|
||||
|
||||
$x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d",
|
||||
$x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d AND `name` != '%s' AND NOT `self`",
|
||||
dbesc(notags(trim($new_name))),
|
||||
dbesc(datetime_convert()),
|
||||
intval($importer['importer_uid']),
|
||||
intval($importer['id'])
|
||||
intval($importer['id']),
|
||||
dbesc(notags(trim($new_name)))
|
||||
);
|
||||
|
||||
// do our best to update the name on content items
|
||||
|
||||
if(count($r)) {
|
||||
q("update item set `author-name` = '%s' where `author-name` = '%s' and `author-link` = '%s' and uid = %d",
|
||||
if(count($r) AND (notags(trim($new_name)) != $r[0]['name'])) {
|
||||
q("UPDATE `item` SET `author-name` = '%s' WHERE `author-name` = '%s' AND `author-link` = '%s' AND `uid` = %d AND `author-name` != '%s'",
|
||||
dbesc(notags(trim($new_name))),
|
||||
dbesc($r[0]['name']),
|
||||
dbesc($r[0]['url']),
|
||||
intval($importer['importer_uid'])
|
||||
intval($importer['importer_uid']),
|
||||
dbesc(notags(trim($new_name)))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -734,9 +734,9 @@ function notifier_run(&$argv, &$argc){
|
|||
$ssl_policy = get_config('system','ssl_policy');
|
||||
fix_contact_ssl_policy($x[0],$ssl_policy);
|
||||
|
||||
// If we are setup as a soapbox we aren't accepting input from this person
|
||||
// If we are setup as a soapbox we aren't accepting top level posts from this person
|
||||
|
||||
if($x[0]['page-flags'] == PAGE_SOAPBOX)
|
||||
if (($x[0]['page-flags'] == PAGE_SOAPBOX) AND $top_level)
|
||||
break;
|
||||
|
||||
require_once('library/simplepie/simplepie.inc');
|
||||
|
|
|
@ -1,7 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file include/identity.php
|
||||
*
|
||||
* @brief Some functions to handle addons and themes.
|
||||
*/
|
||||
|
||||
|
||||
// install and uninstall plugin
|
||||
/**
|
||||
* @brief uninstalls an addon.
|
||||
*
|
||||
* @param string $plugin name of the addon
|
||||
* @return boolean
|
||||
*/
|
||||
if (! function_exists('uninstall_plugin')){
|
||||
function uninstall_plugin($plugin){
|
||||
logger("Addons: uninstalling " . $plugin);
|
||||
|
@ -16,6 +26,12 @@ function uninstall_plugin($plugin){
|
|||
}
|
||||
}}
|
||||
|
||||
/**
|
||||
* @brief installs an addon.
|
||||
*
|
||||
* @param string $plugin name of the addon
|
||||
* @return bool
|
||||
*/
|
||||
if (! function_exists('install_plugin')){
|
||||
function install_plugin($plugin) {
|
||||
// silently fail if plugin was removed
|
||||
|
@ -42,7 +58,7 @@ function install_plugin($plugin) {
|
|||
// This way the system won't fall over dead during the update.
|
||||
|
||||
if(file_exists('addon/' . $plugin . '/.hidden')) {
|
||||
q("update addon set hidden = 1 where name = '%s'",
|
||||
q("UPDATE `addon` SET `hidden` = 1 WHERE `name` = '%s'",
|
||||
dbesc($plugin)
|
||||
);
|
||||
}
|
||||
|
@ -105,10 +121,27 @@ function reload_plugins() {
|
|||
|
||||
}}
|
||||
|
||||
/**
|
||||
* @brief check if addon is enabled
|
||||
*
|
||||
* @param string $plugin
|
||||
* @return boolean
|
||||
*/
|
||||
function plugin_enabled($plugin) {
|
||||
$r = q("SELECT * FROM `addon` WHERE `installed` = 1 AND `name` = '%s'", $plugin);
|
||||
return((bool)(count($r) > 0));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief registers a hook.
|
||||
*
|
||||
* @param string $hook the name of the hook
|
||||
* @param string $file the name of the file that hooks into
|
||||
* @param string $function the name of the function that the hook will call
|
||||
* @param int $priority A priority (defaults to 0)
|
||||
* @return mixed|bool
|
||||
*/
|
||||
if(! function_exists('register_hook')) {
|
||||
function register_hook($hook,$file,$function,$priority=0) {
|
||||
|
||||
|
@ -129,6 +162,14 @@ function register_hook($hook,$file,$function,$priority=0) {
|
|||
return $r;
|
||||
}}
|
||||
|
||||
/**
|
||||
* @brief unregisters a hook.
|
||||
*
|
||||
* @param string $hook the name of the hook
|
||||
* @param string $file the name of the file that hooks into
|
||||
* @param string $function the name of the function that the hook called
|
||||
* @return array
|
||||
*/
|
||||
if(! function_exists('unregister_hook')) {
|
||||
function unregister_hook($hook,$file,$function) {
|
||||
|
||||
|
@ -155,7 +196,15 @@ function load_hooks() {
|
|||
}
|
||||
}}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Calls a hook.
|
||||
*
|
||||
* Use this function when you want to be able to allow a hook to manipulate
|
||||
* the provided data.
|
||||
*
|
||||
* @param string $name of the hook to call
|
||||
* @param string|array &$data to transmit to the callback handler
|
||||
*/
|
||||
if(! function_exists('call_hooks')) {
|
||||
function call_hooks($name, &$data = null) {
|
||||
$stamp1 = microtime(true);
|
||||
|
@ -178,7 +227,7 @@ function call_hooks($name, &$data = null) {
|
|||
}
|
||||
else {
|
||||
// remove orphan hooks
|
||||
q("delete from hook where hook = '%s' and file = '%s' and function = '%s'",
|
||||
q("DELETE FROM `hook` WHERE `hook` = '%s' AND `file` = '%s' AND `function` = '%s'",
|
||||
dbesc($name),
|
||||
dbesc($hook[0]),
|
||||
dbesc($hook[1])
|
||||
|
@ -204,16 +253,20 @@ function plugin_is_app($name) {
|
|||
return false;
|
||||
}}
|
||||
|
||||
/*
|
||||
* parse plugin comment in search of plugin infos.
|
||||
* like
|
||||
/**
|
||||
* @brief Parse plugin comment in search of plugin infos.
|
||||
*
|
||||
* * Name: Plugin
|
||||
* like
|
||||
* \code
|
||||
*...* Name: Plugin
|
||||
* * Description: A plugin which plugs in
|
||||
* * Version: 1.2.3
|
||||
* . * Version: 1.2.3
|
||||
* * Author: John <profile url>
|
||||
* * Author: Jane <email>
|
||||
* *
|
||||
* *\endcode
|
||||
* @param string $plugin the name of the plugin
|
||||
* @return array with the plugin information
|
||||
*/
|
||||
|
||||
if (! function_exists('get_plugin_info')){
|
||||
|
@ -265,16 +318,20 @@ function get_plugin_info($plugin){
|
|||
}}
|
||||
|
||||
|
||||
/*
|
||||
* parse theme comment in search of theme infos.
|
||||
* like
|
||||
/**
|
||||
* @brief Parse theme comment in search of theme infos.
|
||||
*
|
||||
* * Name: My Theme
|
||||
* like
|
||||
* \code
|
||||
* ..* Name: My Theme
|
||||
* * Description: My Cool Theme
|
||||
* * Version: 1.2.3
|
||||
* . * Version: 1.2.3
|
||||
* * Author: John <profile url>
|
||||
* * Maintainer: Jane <profile url>
|
||||
* *
|
||||
* \endcode
|
||||
* @param string $theme the name of the theme
|
||||
* @return array
|
||||
*/
|
||||
|
||||
if (! function_exists('get_theme_info')){
|
||||
|
@ -340,7 +397,14 @@ function get_theme_info($theme){
|
|||
return $info;
|
||||
}}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Returns the theme's screenshot.
|
||||
*
|
||||
* The screenshot is expected as view/theme/$theme/screenshot.[png|jpg].
|
||||
*
|
||||
* @param sring $theme The name of the theme
|
||||
* @return string
|
||||
*/
|
||||
function get_theme_screenshot($theme) {
|
||||
$a = get_app();
|
||||
$exts = array('.png','.jpg');
|
||||
|
@ -402,7 +466,7 @@ function service_class_allows($uid,$property,$usage = false) {
|
|||
$service_class = $a->user['service_class'];
|
||||
}
|
||||
else {
|
||||
$r = q("select service_class from user where uid = %d limit 1",
|
||||
$r = q("SELECT `service_class` FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
intval($uid)
|
||||
);
|
||||
if($r !== false and count($r)) {
|
||||
|
@ -432,7 +496,7 @@ function service_class_fetch($uid,$property) {
|
|||
$service_class = $a->user['service_class'];
|
||||
}
|
||||
else {
|
||||
$r = q("select service_class from user where uid = %d limit 1",
|
||||
$r = q("SELECT `service_class` FROM `user` WHERE `uid` = %d LIMIT 1",
|
||||
intval($uid)
|
||||
);
|
||||
if($r !== false and count($r)) {
|
||||
|
|
|
@ -21,6 +21,10 @@ function replace_macros($s,$r) {
|
|||
|
||||
$a = get_app();
|
||||
|
||||
// pass $baseurl to all templates
|
||||
$r['$baseurl'] = $a->get_baseurl();
|
||||
|
||||
|
||||
$t = $a->template_engine();
|
||||
try {
|
||||
$output = $t->replace_macros($s,$r);
|
||||
|
|
|
@ -135,7 +135,7 @@ function admin_content(&$a) {
|
|||
|
||||
/* get plugins admin page */
|
||||
|
||||
$r = q("SELECT name FROM `addon` WHERE `plugin_admin`=1");
|
||||
$r = q("SELECT `name` FROM `addon` WHERE `plugin_admin`=1 ORDER BY `name`");
|
||||
$aside['plugins_admin']=Array();
|
||||
foreach ($r as $h){
|
||||
$plugin =$h['name'];
|
||||
|
|
|
@ -564,5 +564,3 @@ function dfrn_poll_content(&$a) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -11,6 +11,14 @@ function install_init(&$a){
|
|||
echo "ok";
|
||||
killme();
|
||||
}
|
||||
|
||||
// We overwrite current theme css, because during install we could not have a working mod_rewrite
|
||||
// so we could not have a css at all. Here we set a static css file for the install procedure pages
|
||||
$a->config['system']['theme'] = "../install";
|
||||
$a->theme['stylesheet'] = $a->get_baseurl()."/view/install/style.css";
|
||||
|
||||
|
||||
|
||||
global $install_wizard_pass;
|
||||
if (x($_POST,'pass'))
|
||||
$install_wizard_pass = intval($_POST['pass']);
|
||||
|
|
|
@ -112,6 +112,7 @@ function network_init(&$a) {
|
|||
require_once('include/group.php');
|
||||
require_once('include/contact_widgets.php');
|
||||
require_once('include/items.php');
|
||||
require_once('include/forums.php');
|
||||
|
||||
if(! x($a->page,'aside'))
|
||||
$a->page['aside'] = '';
|
||||
|
@ -145,6 +146,7 @@ function network_init(&$a) {
|
|||
}
|
||||
|
||||
$a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network',true,$group_id) : '');
|
||||
$a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? widget_forumlist($a) : '');
|
||||
$a->page['aside'] .= posted_date_widget($a->get_baseurl() . '/network',local_user(),false);
|
||||
$a->page['aside'] .= networks_widget($a->get_baseurl(true) . '/network',(x($_GET, 'nets') ? $_GET['nets'] : ''));
|
||||
$a->page['aside'] .= saved_searches($search);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
/*
|
||||
Documentation: http://nodeinfo.diaspora.software/schema.html
|
||||
/**
|
||||
* @file mod/nodeinfo.php
|
||||
*
|
||||
* Documentation: http://nodeinfo.diaspora.software/schema.html
|
||||
*/
|
||||
|
||||
require_once("include/plugin.php");
|
||||
|
@ -67,48 +69,48 @@ function nodeinfo_init(&$a){
|
|||
|
||||
$nodeinfo["metadata"] = array("nodeName" => $a->config["sitename"]);
|
||||
|
||||
if (nodeinfo_plugin_enabled("appnet"))
|
||||
if (plugin_enabled("appnet"))
|
||||
$nodeinfo["services"]["inbound"][] = "appnet";
|
||||
|
||||
if (nodeinfo_plugin_enabled("appnet") OR nodeinfo_plugin_enabled("buffer"))
|
||||
if (plugin_enabled("appnet") OR plugin_enabled("buffer"))
|
||||
$nodeinfo["services"]["outbound"][] = "appnet";
|
||||
|
||||
if (nodeinfo_plugin_enabled("blogger"))
|
||||
if (plugin_enabled("blogger"))
|
||||
$nodeinfo["services"]["outbound"][] = "blogger";
|
||||
|
||||
if (nodeinfo_plugin_enabled("dwpost"))
|
||||
if (plugin_enabled("dwpost"))
|
||||
$nodeinfo["services"]["outbound"][] = "dreamwidth";
|
||||
|
||||
if (nodeinfo_plugin_enabled("fbpost") OR nodeinfo_plugin_enabled("buffer"))
|
||||
if (plugin_enabled("fbpost") OR plugin_enabled("buffer"))
|
||||
$nodeinfo["services"]["outbound"][] = "facebook";
|
||||
|
||||
if (nodeinfo_plugin_enabled("statusnet")) {
|
||||
if (plugin_enabled("statusnet")) {
|
||||
$nodeinfo["services"]["inbound"][] = "gnusocial";
|
||||
$nodeinfo["services"]["outbound"][] = "gnusocial";
|
||||
}
|
||||
|
||||
if (nodeinfo_plugin_enabled("gpluspost") OR nodeinfo_plugin_enabled("buffer"))
|
||||
if (plugin_enabled("gpluspost") OR plugin_enabled("buffer"))
|
||||
$nodeinfo["services"]["outbound"][] = "google";
|
||||
|
||||
if (nodeinfo_plugin_enabled("ijpost"))
|
||||
if (plugin_enabled("ijpost"))
|
||||
$nodeinfo["services"]["outbound"][] = "insanejournal";
|
||||
|
||||
if (nodeinfo_plugin_enabled("libertree"))
|
||||
if (plugin_enabled("libertree"))
|
||||
$nodeinfo["services"]["outbound"][] = "libertree";
|
||||
|
||||
if (nodeinfo_plugin_enabled("buffer"))
|
||||
if (plugin_enabled("buffer"))
|
||||
$nodeinfo["services"]["outbound"][] = "linkedin";
|
||||
|
||||
if (nodeinfo_plugin_enabled("ljpost"))
|
||||
if (plugin_enabled("ljpost"))
|
||||
$nodeinfo["services"]["outbound"][] = "livejournal";
|
||||
|
||||
if (nodeinfo_plugin_enabled("buffer"))
|
||||
if (plugin_enabled("buffer"))
|
||||
$nodeinfo["services"]["outbound"][] = "pinterest";
|
||||
|
||||
if (nodeinfo_plugin_enabled("posterous"))
|
||||
if (plugin_enabled("posterous"))
|
||||
$nodeinfo["services"]["outbound"][] = "posterous";
|
||||
|
||||
if (nodeinfo_plugin_enabled("pumpio")) {
|
||||
if (plugin_enabled("pumpio")) {
|
||||
$nodeinfo["services"]["inbound"][] = "pumpio";
|
||||
$nodeinfo["services"]["outbound"][] = "pumpio";
|
||||
}
|
||||
|
@ -118,13 +120,13 @@ function nodeinfo_init(&$a){
|
|||
if ($smtp)
|
||||
$nodeinfo["services"]["outbound"][] = "smtp";
|
||||
|
||||
if (nodeinfo_plugin_enabled("tumblr"))
|
||||
if (plugin_enabled("tumblr"))
|
||||
$nodeinfo["services"]["outbound"][] = "tumblr";
|
||||
|
||||
if (nodeinfo_plugin_enabled("twitter") OR nodeinfo_plugin_enabled("buffer"))
|
||||
if (plugin_enabled("twitter") OR plugin_enabled("buffer"))
|
||||
$nodeinfo["services"]["outbound"][] = "twitter";
|
||||
|
||||
if (nodeinfo_plugin_enabled("wppost"))
|
||||
if (plugin_enabled("wppost"))
|
||||
$nodeinfo["services"]["outbound"][] = "wordpress";
|
||||
|
||||
$nodeinfo["metadata"]["protocols"] = $nodeinfo["protocols"];
|
||||
|
@ -134,7 +136,7 @@ function nodeinfo_init(&$a){
|
|||
|
||||
$nodeinfo["metadata"]["services"] = $nodeinfo["services"];
|
||||
|
||||
if (nodeinfo_plugin_enabled("twitter"))
|
||||
if (plugin_enabled("twitter"))
|
||||
$nodeinfo["metadata"]["services"]["inbound"][] = "twitter";
|
||||
|
||||
header('Content-type: application/json; charset=utf-8');
|
||||
|
@ -142,17 +144,14 @@ function nodeinfo_init(&$a){
|
|||
exit;
|
||||
}
|
||||
|
||||
function nodeinfo_plugin_enabled($plugin) {
|
||||
$r = q("SELECT * FROM `addon` WHERE `installed` = 1 AND `name` = '%s'", $plugin);
|
||||
return((bool)(count($r) > 0));
|
||||
}
|
||||
|
||||
|
||||
function nodeinfo_cron() {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
// If the plugin "statistics_json" is enabled then disable it and actrivate nodeinfo.
|
||||
if (nodeinfo_plugin_enabled("statistics_json")) {
|
||||
if (plugin_enabled("statistics_json")) {
|
||||
set_config("system", "nodeinfo", true);
|
||||
|
||||
$plugin = "statistics_json";
|
||||
|
|
|
@ -41,8 +41,9 @@ function ping_init(&$a) {
|
|||
FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent`
|
||||
WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
|
||||
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `pitem`.`parent` != 0
|
||||
AND `item`.`contact-id` != %d
|
||||
ORDER BY `item`.`created` DESC",
|
||||
intval(local_user())
|
||||
intval(local_user()), intval(local_user())
|
||||
);
|
||||
|
||||
if(count($r)) {
|
||||
|
|
|
@ -97,11 +97,17 @@ function profile_photo_post(&$a) {
|
|||
dbesc($base_image['resource-id']),
|
||||
intval(local_user())
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
||||
$r = q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s' WHERE `self` AND `uid` = %d",
|
||||
dbesc($a->get_baseurl() . '/photo/' . $base_image['resource-id'] . '-4.' . $im->getExt()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $base_image['resource-id'] . '-5.' . $im->getExt()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $base_image['resource-id'] . '-6.' . $im->getExt()),
|
||||
intval(local_user())
|
||||
);
|
||||
} else {
|
||||
$r = q("update profile set photo = '%s', thumb = '%s' where id = %d and uid = %d",
|
||||
dbesc($a->get_baseurl() . '/photo/' . $base_image['resource-id'] . '-4'),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $base_image['resource-id'] . '-5'),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $base_image['resource-id'] . '-4.' . $im->getExt()),
|
||||
dbesc($a->get_baseurl() . '/photo/' . $base_image['resource-id'] . '-5.' . $im->getExt()),
|
||||
intval($_REQUEST['profile']),
|
||||
intval(local_user())
|
||||
);
|
||||
|
|
|
@ -100,6 +100,9 @@ function register_post(&$a) {
|
|||
). EOL
|
||||
);
|
||||
}
|
||||
} else {
|
||||
info( t('Registration successful.') . EOL ) ;
|
||||
goaway(z_root());
|
||||
}
|
||||
}
|
||||
elseif($a->config['register_policy'] == REGISTER_APPROVE) {
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
<?php
|
||||
require_once("mod/nodeinfo.php");
|
||||
/**
|
||||
* @file mod/statistics_json.php
|
||||
*/
|
||||
|
||||
require_once("include/plugin.php");
|
||||
|
||||
function statistics_json_init(&$a) {
|
||||
|
||||
|
@ -20,19 +24,19 @@ function statistics_json_init(&$a) {
|
|||
);
|
||||
|
||||
$statistics["services"] = array();
|
||||
$statistics["services"]["appnet"] = nodeinfo_plugin_enabled("appnet");
|
||||
$statistics["services"]["blogger"] = nodeinfo_plugin_enabled("blogger");
|
||||
$statistics["services"]["buffer"] = nodeinfo_plugin_enabled("buffer");
|
||||
$statistics["services"]["dreamwidth"] = nodeinfo_plugin_enabled("dwpost");
|
||||
$statistics["services"]["facebook"] = nodeinfo_plugin_enabled("fbpost");
|
||||
$statistics["services"]["gnusocial"] = nodeinfo_plugin_enabled("statusnet");
|
||||
$statistics["services"]["googleplus"] = nodeinfo_plugin_enabled("gpluspost");
|
||||
$statistics["services"]["libertree"] = nodeinfo_plugin_enabled("libertree");
|
||||
$statistics["services"]["livejournal"] = nodeinfo_plugin_enabled("ljpost");
|
||||
$statistics["services"]["pumpio"] = nodeinfo_plugin_enabled("pumpio");
|
||||
$statistics["services"]["twitter"] = nodeinfo_plugin_enabled("twitter");
|
||||
$statistics["services"]["tumblr"] = nodeinfo_plugin_enabled("tumblr");
|
||||
$statistics["services"]["wordpress"] = nodeinfo_plugin_enabled("wppost");
|
||||
$statistics["services"]["appnet"] = plugin_enabled("appnet");
|
||||
$statistics["services"]["blogger"] = plugin_enabled("blogger");
|
||||
$statistics["services"]["buffer"] = plugin_enabled("buffer");
|
||||
$statistics["services"]["dreamwidth"] = plugin_enabled("dwpost");
|
||||
$statistics["services"]["facebook"] = plugin_enabled("fbpost");
|
||||
$statistics["services"]["gnusocial"] = plugin_enabled("statusnet");
|
||||
$statistics["services"]["googleplus"] = plugin_enabled("gpluspost");
|
||||
$statistics["services"]["libertree"] = plugin_enabled("libertree");
|
||||
$statistics["services"]["livejournal"] = plugin_enabled("ljpost");
|
||||
$statistics["services"]["pumpio"] = plugin_enabled("pumpio");
|
||||
$statistics["services"]["twitter"] = plugin_enabled("twitter");
|
||||
$statistics["services"]["tumblr"] = plugin_enabled("tumblr");
|
||||
$statistics["services"]["wordpress"] = plugin_enabled("wppost");
|
||||
|
||||
$statistics["appnet"] = $statistics["services"]["appnet"];
|
||||
$statistics["blogger"] = $statistics["services"]["blogger"];
|
||||
|
|
66
update.php
66
update.php
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
define( 'UPDATE_VERSION' , 1190 );
|
||||
define( 'UPDATE_VERSION' , 1191 );
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -1659,3 +1659,67 @@ function update_1188() {
|
|||
|
||||
return UPDATE_SUCCESS;
|
||||
}
|
||||
|
||||
function update_1190() {
|
||||
|
||||
require_once('include/plugin.php');
|
||||
|
||||
set_config('system', 'maintenance', 1);
|
||||
|
||||
if (plugin_enabled('forumlist')) {
|
||||
$plugin = 'forumlist';
|
||||
$plugins = get_config('system','addon');
|
||||
$plugins_arr = array();
|
||||
|
||||
if($plugins) {
|
||||
$plugins_arr = explode(",",str_replace(" ", "",$plugins));
|
||||
|
||||
$idx = array_search($plugin, $plugins_arr);
|
||||
if ($idx !== false){
|
||||
unset($plugins_arr[$idx]);
|
||||
//delete forumlist manually from addon and hook table
|
||||
// since uninstall_plugin() don't work here
|
||||
q("DELETE FROM `addon` WHERE `name` = 'forumlist' ");
|
||||
q("DELETE FROM `hook` WHERE `file` = 'addon/forumlist/forumlist.php' ");
|
||||
set_config('system','addon', implode(", ",$plugins_arr));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// select old formlist addon entries
|
||||
$r = q("SELECT `uid`, `cat`, `k`, `v` FROM `pconfig` WHERE `cat` = '%s' ",
|
||||
dbesc('forumlist')
|
||||
);
|
||||
|
||||
// convert old forumlist addon entries in new config entries
|
||||
if (count($r)) {
|
||||
foreach ($r as $rr) {
|
||||
$uid = $rr['uid'];
|
||||
$family = $rr['cat'];
|
||||
$key = $rr['k'];
|
||||
$value = $rr['v'];
|
||||
|
||||
if ($key === 'randomise')
|
||||
del_pconfig($uid,$family,$key);
|
||||
|
||||
if ($key === 'show_on_profile') {
|
||||
if ($value)
|
||||
set_pconfig($uid,feature,forumlist_profile,$value);
|
||||
|
||||
del_pconfig($uid,$family,$key);
|
||||
}
|
||||
|
||||
if ($key === 'show_on_network') {
|
||||
if ($value)
|
||||
set_pconfig($uid,feature,forumlist_widget,$value);
|
||||
|
||||
del_pconfig($uid,$family,$key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_config('system', 'maintenance', 0);
|
||||
|
||||
return UPDATE_SUCCESS;
|
||||
|
||||
}
|
||||
|
|
|
@ -286,3 +286,30 @@ ul.credits li {
|
|||
max-width: 80px;
|
||||
max-height: 80px;
|
||||
}
|
||||
|
||||
/* forumlist widget */
|
||||
#hide-forum-list {
|
||||
opacity: 0.3;
|
||||
filter:alpha(opacity=30);
|
||||
}
|
||||
|
||||
#hide-forum-list:hover {
|
||||
opacity: 1.0;
|
||||
filter:alpha(opacity=100);
|
||||
}
|
||||
|
||||
|
||||
#forumlist-settings-label, #forumlist-random-label, #forumlist-profile-label, #forumlist-network-label {
|
||||
float: left;
|
||||
width: 200px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
#forumlist-max-forumlists, #forumlist-random, #forumlist-profile, #forumlist-network {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.forumlist-img {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
|
|
BIN
view/install/green.png
Normal file
BIN
view/install/green.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 323 B |
BIN
view/install/info.png
Normal file
BIN
view/install/info.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
view/install/red.png
Normal file
BIN
view/install/red.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 316 B |
58
view/install/style.css
Normal file
58
view/install/style.css
Normal file
|
@ -0,0 +1,58 @@
|
|||
/***
|
||||
* Friendica Communcation Server
|
||||
*
|
||||
* This is the static css for the install procedure
|
||||
*/
|
||||
|
||||
body {
|
||||
background-color: #FFF;
|
||||
max-width: 750px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
section {
|
||||
background-color: rgb(252, 252, 252);
|
||||
padding: 0.5em 2em;
|
||||
}
|
||||
|
||||
h1 img {
|
||||
vertical-align: sub;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 0.2em;
|
||||
border-bottom: 1px solid rgb(238, 238, 238);
|
||||
}
|
||||
td.help {
|
||||
border-width: 0px 0px 2px 2px;
|
||||
border-style: solid;
|
||||
border-color: #000;
|
||||
background: transparent url("/friendica/view/install/info.png") no-repeat scroll 5px 5px;
|
||||
}
|
||||
td.help blockquote {
|
||||
margin-left: 60px;
|
||||
}
|
||||
input[type="submit"] {
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
tt {
|
||||
background-color: rgb(238, 238, 238);
|
||||
padding: 0.1em 0.2em;
|
||||
}
|
||||
|
||||
.field {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
.field label,
|
||||
.field input, .field select, .field textarea {
|
||||
width: 100%;
|
||||
display: block;
|
||||
}
|
||||
.field .field_help {
|
||||
color: #999;
|
||||
text-align: right;
|
||||
width: 100%;
|
||||
display: block;
|
||||
font-size: 0.8em;
|
||||
}
|
BIN
view/install/yellow.png
Normal file
BIN
view/install/yellow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 280 B |
14089
view/nl/messages.po
14089
view/nl/messages.po
File diff suppressed because it is too large
Load diff
2524
view/nl/strings.php
2524
view/nl/strings.php
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
|||
|
||||
|
||||
<h1>{{$title}}</h1>
|
||||
<h1><img src="{{$baseurl}}/images/friendica-32.png"> {{$title}}</h1>
|
||||
<h2>{{$pass}}</h2>
|
||||
|
||||
|
||||
|
|
|
@ -1,12 +1,22 @@
|
|||
|
||||
<h1>{{$title}}</h1>
|
||||
<h1><img src="{{$baseurl}}/images/friendica-32.png"> {{$title}}</h1>
|
||||
<h2>{{$pass}}</h2>
|
||||
<form action="{{$baseurl}}/index.php?q=install" method="post">
|
||||
<table>
|
||||
{{foreach $checks as $check}}
|
||||
<tr><td>{{$check.title}} </td><td><span class="icon s22 {{if $check.status}}on{{else}}{{if $check.required}}off{{else}}yellow{{/if}}{{/if}}"></td><td>{{if $check.required}}(required){{/if}}</td></tr>
|
||||
<tr><td>{{$check.title}} </td><td>
|
||||
{{if $check.status}}
|
||||
<img src="{{$baseurl}}/view/install/green.png" alt="Ok">
|
||||
{{else}}
|
||||
{{if $check.required}}
|
||||
<img src="{{$baseurl}}/view/install/red.png" alt="Requirement not satisfied">
|
||||
{{else}}
|
||||
<img src="{{$baseurl}}/view/install/yellow.png" alt="Optional requirement not satisfied">
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</td><td>{{if $check.required}}(required){{/if}}</td></tr>
|
||||
{{if $check.help}}
|
||||
<tr><td colspan="3"><blockquote>{{$check.help}}</blockquote></td></tr>
|
||||
<tr><td class="help" colspan="3"><blockquote>{{$check.help}}</blockquote></td></tr>
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
</table>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
|
||||
<h1>{{$title}}</h1>
|
||||
<h1><img src="{{$baseurl}}/images/friendica-32.png"> {{$title}}</h1>
|
||||
<h2>{{$pass}}</h2>
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
|
||||
<h1>{{$title}}</h1>
|
||||
<h1><img src="{{$baseurl}}/images/friendica-32.png"> {{$title}}</h1>
|
||||
<h2>{{$pass}}</h2>
|
||||
|
||||
|
||||
|
|
|
@ -167,5 +167,11 @@
|
|||
{{/if}}
|
||||
|
||||
|
||||
{{if $profile.forumlist}}
|
||||
<dl id="aprofile-forumlist" class="aprofile">
|
||||
<dt>{{$profile.forumlist.0}}</dt>
|
||||
<dd>{{$profile.forumlist.1}}</dd>
|
||||
</dl>
|
||||
{{/if}}
|
||||
|
||||
|
||||
|
|
45
view/templates/widget_forumlist.tpl
Normal file
45
view/templates/widget_forumlist.tpl
Normal file
|
@ -0,0 +1,45 @@
|
|||
<script>
|
||||
|
||||
function showHideForumlist() {
|
||||
if( $("div[id^='forum-widget-entry-extended-']").is(':visible')) {
|
||||
$("div[id^='forum-widget-entry-extended-']").hide();
|
||||
$('#forum-widget-collapse').html(window.showMore);
|
||||
|
||||
}
|
||||
else {
|
||||
$("div[id^='forum-widget-entry-extended-']").show();
|
||||
$('#forum-widget-collapse').html(window.showFewer);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="forumlist-sidebar" class="widget">
|
||||
<h3 id="forumlist">{{$title}}</h3>
|
||||
|
||||
{{foreach $forums as $forum}}
|
||||
{{if $forum.id <= $visible_forums}}
|
||||
<div class="forum-widget-entry" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
|
||||
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
|
||||
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
|
||||
</a>
|
||||
<a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{if $forum.id > $visible_forums}}
|
||||
<div class="forum-widget-entry" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
|
||||
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
|
||||
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
|
||||
</a>
|
||||
<a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
|
||||
{{if $total > $visible_forums }}
|
||||
<div id="forum-widget-showmore" class="forum-widget-entry" role="menuitem">
|
||||
<a onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link">{{$showmore}}</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
|
@ -401,7 +401,7 @@ code {
|
|||
}
|
||||
|
||||
.sidebar-group-li:hover, #sidebar-new-group:hover, #hide-forum-list:hover,
|
||||
#sidebar-ungrouped:hover, .side-link:hover, .nets-ul li:hover, #forum-list div:hover, #forum-list-right div:hover,
|
||||
#sidebar-ungrouped:hover, .side-link:hover, .nets-ul li:hover, #forumlist-sidebar div:hover, #forum-list-right div:hover,
|
||||
.nets-all:hover, .saved-search-li:hover, li.tool:hover, .admin.link:hover, aside h4 a:hover, right_aside h4 a:hover, #message-new:hover {
|
||||
/* background-color: #ddd; */
|
||||
/* background-color: #e5e5e5; */
|
||||
|
@ -420,7 +420,7 @@ code {
|
|||
font-weight: bold;
|
||||
}
|
||||
|
||||
#sidebar-new-group, #hide-forum-list, #forum-list, #forum-list-right, #sidebar-ungrouped,
|
||||
#forum-widget-showmore, #sidebar-new-group, #hide-forum-list, #forum-list-right, #sidebar-ungrouped,
|
||||
.side-link, #peoplefind-desc, #connect-desc, .nets-all, .admin.link, #message-new {
|
||||
padding-left: 10px;
|
||||
padding-top: 3px;
|
||||
|
@ -429,6 +429,17 @@ code {
|
|||
display: block;
|
||||
}
|
||||
|
||||
#forumlist-sidebar {
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.forum-widget-entry {
|
||||
padding-left: 10px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
a.nets-link, .side-link a, #sidebar-new-group a, a.savedsearchterm, a.fileas-link, aside h4 a, right_aside h4 a {
|
||||
display: block;
|
||||
color: #737373;
|
||||
|
@ -456,11 +467,11 @@ a.sidebar-group-element {
|
|||
color: black;
|
||||
}
|
||||
|
||||
#forum-list a, #forum-list-right a, .tool a, .admin.link a {
|
||||
#forumlist-sidebar a, #forum-list-right a, .tool a, .admin.link a {
|
||||
color: #737373;
|
||||
}
|
||||
|
||||
#forum-list, #forum-list-right {
|
||||
#forumlist-sidebar, #forum-list-right {
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
* Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/
|
||||
*/
|
||||
|
||||
require_once("mod/nodeinfo.php");
|
||||
require_once("mod/proxy.php");
|
||||
require_once("include/plugin.php");
|
||||
require_once("include/socgraph.php");
|
||||
require_once("mod/proxy.php");
|
||||
|
||||
function vier_init(&$a) {
|
||||
|
||||
|
@ -33,7 +33,8 @@ function vier_init(&$a) {
|
|||
$a->page['htmlhead'] .= '<meta name=viewport content="width=device-width, initial-scale=1">'."\n";
|
||||
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="view/theme/vier/mobile.css" media="screen"/>'."\n";
|
||||
}
|
||||
#$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="view/theme/vier/mobile.css" media="screen and (max-width: 1000px)"/>'."\n";
|
||||
// deactivated since it doesn't work with desktop browsers at the moment (To-Do)
|
||||
//$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="view/theme/vier/mobile.css" media="screen and (max-width: 1000px)"/>'."\n";
|
||||
|
||||
$a->page['htmlhead'] .= <<< EOT
|
||||
<link rel='stylesheet' type='text/css' href='view/theme/vier/narrow.css' media='screen and (max-width: 1100px)' />
|
||||
|
@ -305,49 +306,49 @@ function vier_community_info() {
|
|||
|
||||
$r = array();
|
||||
|
||||
if (nodeinfo_plugin_enabled("appnet"))
|
||||
if (plugin_enabled("appnet"))
|
||||
$r[] = array("photo" => "images/appnet.png", "name" => "App.net");
|
||||
|
||||
if (nodeinfo_plugin_enabled("buffer"))
|
||||
if (plugin_enabled("buffer"))
|
||||
$r[] = array("photo" => "images/buffer.png", "name" => "Buffer");
|
||||
|
||||
if (nodeinfo_plugin_enabled("blogger"))
|
||||
if (plugin_enabled("blogger"))
|
||||
$r[] = array("photo" => "images/blogger.png", "name" => "Blogger");
|
||||
|
||||
if (nodeinfo_plugin_enabled("dwpost"))
|
||||
if (plugin_enabled("dwpost"))
|
||||
$r[] = array("photo" => "images/dreamwidth.png", "name" => "Dreamwidth");
|
||||
|
||||
if (nodeinfo_plugin_enabled("fbpost"))
|
||||
if (plugin_enabled("fbpost"))
|
||||
$r[] = array("photo" => "images/facebook.png", "name" => "Facebook");
|
||||
|
||||
if (nodeinfo_plugin_enabled("ifttt"))
|
||||
if (plugin_enabled("ifttt"))
|
||||
$r[] = array("photo" => "addon/ifttt/ifttt.png", "name" => "IFTTT");
|
||||
|
||||
if (nodeinfo_plugin_enabled("statusnet"))
|
||||
if (plugin_enabled("statusnet"))
|
||||
$r[] = array("photo" => "images/gnusocial.png", "name" => "GNU Social");
|
||||
|
||||
if (nodeinfo_plugin_enabled("gpluspost"))
|
||||
if (plugin_enabled("gpluspost"))
|
||||
$r[] = array("photo" => "images/googleplus.png", "name" => "Google+");
|
||||
|
||||
//if (nodeinfo_plugin_enabled("ijpost"))
|
||||
//if (plugin_enabled("ijpost"))
|
||||
// $r[] = array("photo" => "images/", "name" => "");
|
||||
|
||||
if (nodeinfo_plugin_enabled("libertree"))
|
||||
if (plugin_enabled("libertree"))
|
||||
$r[] = array("photo" => "images/libertree.png", "name" => "Libertree");
|
||||
|
||||
//if (nodeinfo_plugin_enabled("ljpost"))
|
||||
//if (plugin_enabled("ljpost"))
|
||||
// $r[] = array("photo" => "images/", "name" => "");
|
||||
|
||||
if (nodeinfo_plugin_enabled("pumpio"))
|
||||
if (plugin_enabled("pumpio"))
|
||||
$r[] = array("photo" => "images/pumpio.png", "name" => "pump.io");
|
||||
|
||||
if (nodeinfo_plugin_enabled("tumblr"))
|
||||
if (plugin_enabled("tumblr"))
|
||||
$r[] = array("photo" => "images/tumblr.png", "name" => "Tumblr");
|
||||
|
||||
if (nodeinfo_plugin_enabled("twitter"))
|
||||
if (plugin_enabled("twitter"))
|
||||
$r[] = array("photo" => "images/twitter.png", "name" => "Twitter");
|
||||
|
||||
if (nodeinfo_plugin_enabled("wppost"))
|
||||
if (plugin_enabled("wppost"))
|
||||
$r[] = array("photo" => "images/wordpress", "name" => "Wordpress");
|
||||
|
||||
if(function_exists("imap_open") AND !get_config("system","imap_disabled") AND !get_config("system","dfrn_only"))
|
||||
|
|
Loading…
Reference in a new issue