aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHaakon Meland Eriksen <haakon.eriksen@far.no>2016-02-25 06:05:12 +0100
committerHaakon Meland Eriksen <haakon.eriksen@far.no>2016-02-25 06:05:12 +0100
commit21f2df399d3e21b6322ece16717efe88bcc21621 (patch)
tree1f6bcf44e803c1ef723b546eb4fcd83dc5f82e87
parentddeab48f9b314eed067c31086945acee33964d37 (diff)
parent43521bb10b71752b5b3fd953056966ba30df50b6 (diff)
downloadvolse-hubzilla-21f2df399d3e21b6322ece16717efe88bcc21621.tar.gz
volse-hubzilla-21f2df399d3e21b6322ece16717efe88bcc21621.tar.bz2
volse-hubzilla-21f2df399d3e21b6322ece16717efe88bcc21621.zip
Merge remote-tracking branch 'upstream/master'
-rw-r--r--Zotlabs/Web/Router.php1
-rwxr-xr-xboot.php2
-rw-r--r--include/conversation.php20
-rwxr-xr-xinclude/items.php74
-rwxr-xr-xinclude/plugin.php19
-rw-r--r--include/security.php18
-rw-r--r--include/session.php23
-rwxr-xr-xindex.php20
-rw-r--r--install/schema_mysql.sql4
-rw-r--r--install/schema_postgres.sql2
-rw-r--r--install/update.php17
-rw-r--r--mod/admin.php2
-rwxr-xr-xmod/cal.php343
-rwxr-xr-xmod/events.php7
-rw-r--r--mod/register.php1
-rw-r--r--mod/webpages.php2
-rw-r--r--mod/xrd.php4
-rw-r--r--version.inc2
-rw-r--r--view/css/bootstrap-red.css2
-rw-r--r--view/en-au/update_fail_eml.tpl2
-rw-r--r--view/nl/hstrings.php6
-rw-r--r--view/nl/register_open_eml.tpl12
-rw-r--r--view/pdl/mod_cal.pdl3
-rw-r--r--view/theme/redbasic/schema/boxy.css6
-rwxr-xr-xview/tpl/admin_plugins_details.tpl3
-rwxr-xr-xview/tpl/event_cal.tpl14
-rwxr-xr-xview/tpl/event_head.tpl13
-rwxr-xr-xview/tpl/events_cal-js.tpl17
28 files changed, 576 insertions, 63 deletions
diff --git a/Zotlabs/Web/Router.php b/Zotlabs/Web/Router.php
index 4ae96b5da..af171437d 100644
--- a/Zotlabs/Web/Router.php
+++ b/Zotlabs/Web/Router.php
@@ -196,5 +196,4 @@ class Router {
}
}
}
-
} \ No newline at end of file
diff --git a/boot.php b/boot.php
index f1c7d8951..7610f16d8 100755
--- a/boot.php
+++ b/boot.php
@@ -50,7 +50,7 @@ define ( 'RED_VERSION', trim(file_get_contents('version.inc')));
define ( 'STD_VERSION', '1.2.4' );
define ( 'ZOT_REVISION', 1 );
-define ( 'DB_UPDATE_VERSION', 1163 );
+define ( 'DB_UPDATE_VERSION', 1164 );
/**
diff --git a/include/conversation.php b/include/conversation.php
index 1ade8ed3a..e2dfccac9 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -1595,8 +1595,17 @@ function profile_tabs($a, $is_owner = false, $nickname = null){
if (is_null($nickname))
$nickname = $channel['channel_address'];
+
$uid = (($a->profile['profile_uid']) ? $a->profile['profile_uid'] : local_channel());
+ if($uid == local_channel()) {
+ $cal_link = '/events';
+ }
+ else {
+ $cal_link = '/cal/' . $nickname;
+ }
+
+
if (get_pconfig($uid, 'system', 'noprofiletabs'))
return;
@@ -1644,6 +1653,17 @@ function profile_tabs($a, $is_owner = false, $nickname = null){
);
}
+ if($p['view_stream']) {
+ $tabs[] = array(
+ 'label' => t('Events'),
+ 'url' => $a->get_baseurl() . $cal_link,
+ 'sel' => ((argv(0) == 'cal' || argv(0) == 'events') ? 'active' : ''),
+ 'title' => t('Events'),
+ 'id' => 'event-tab',
+ );
+ }
+
+
if ($p['chat']) {
require_once('include/chat.php');
$has_chats = chatroom_list_count($uid);
diff --git a/include/items.php b/include/items.php
index 363563278..bb4d1108e 100755
--- a/include/items.php
+++ b/include/items.php
@@ -3724,10 +3724,6 @@ function mail_store($arr) {
/**
* @brief Process atom feed and update anything/everything we might need to update.
*
- * $hub = should we find a hub declation in the feed, pass it back to our calling process, who might (or
- * might not) try and subscribe to it.
- * $datedir sorts in reverse order
- *
* @param array $xml
* The (atom) feed to consume - RSS isn't as fully supported but may work for simple feeds.
* @param $importer
@@ -3766,7 +3762,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
if(($chn_expire != 0) && ($chn_expire < $sys_expire))
$expire_days = $chn_expire;
-logger('expire_days: ' . $expire_days);
+ // logger('expire_days: ' . $expire_days);
$feed = new SimplePie();
$feed->set_raw_data($xml);
@@ -3987,6 +3983,72 @@ logger('expire_days: ' . $expire_days);
}
}
+
+/**
+ * @brief Process atom feed and return the first post and structure
+ *
+ * @param array $xml
+ * The (atom) feed to consume - RSS isn't as fully supported but may work for simple feeds.
+ * @param $importer
+ * The contact_record (joined to user_record) of the local user who owns this
+ * relationship. It is this person's stuff that is going to be updated.
+ */
+
+function process_salmon_feed($xml, $importer) {
+
+ $ret = array();
+
+ require_once('library/simplepie/simplepie.inc');
+
+ if(! strlen($xml)) {
+ logger('process_feed: empty input');
+ return;
+ }
+
+ $feed = new SimplePie();
+ $feed->set_raw_data($xml);
+ $feed->init();
+
+ if($feed->error())
+ logger('Error parsing XML: ' . $feed->error());
+
+ $permalink = $feed->get_permalink();
+
+ if($feed->get_item_quantity()) {
+
+ // this should be exactly one
+
+ logger('feed item count = ' . $feed->get_item_quantity(), LOGGER_DEBUG);
+
+ $items = $feed->get_items();
+
+ foreach($items as $item) {
+
+ $item_id = base64url_encode($item->get_id());
+
+ logger('processing ' . $item_id, LOGGER_DEBUG);
+
+ $rawthread = $item->get_item_tags( NAMESPACE_THREAD,'in-reply-to');
+ if(isset($rawthread[0]['attribs']['']['ref'])) {
+ $is_reply = true;
+ $parent_mid = base64url_encode($rawthread[0]['attribs']['']['ref']);
+ }
+
+ if($is_reply)
+ $ret['is_reply'] = true;
+
+ $ret['author'] = array();
+
+ $datarray = get_atom_elements($feed,$item,$ret['author']);
+
+ $ret['item'] = $datarray;
+ }
+ }
+
+ return $ret;
+}
+
+
function update_feed_item($uid,$datarray) {
logger('update_feed_item: not implemented! ' . $uid . ' ' . print_r($datarray,true), LOGGER_DATA);
}
@@ -4070,7 +4132,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
$o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($item['plink']) . '" />' . "\r\n";
}
- if(activity_compare($item['obj_type'],ACTIVITY_OBJ_EVENT) && activity_compare($item['verb'],ACTIVITY_POST)) {
+ if(activity_match($item['obj_type'],ACTIVITY_OBJ_EVENT) && activity_match($item['verb'],ACTIVITY_POST)) {
$obj = ((is_array($item['obj'])) ? $item['object'] : json_decode($item['object'],true));
$o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";
diff --git a/include/plugin.php b/include/plugin.php
index 5afded542..bd844442f 100755
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -325,7 +325,8 @@ function get_plugin_info($plugin){
'description' => '',
'author' => array(),
'maintainer' => array(),
- 'version' => ''
+ 'version' => '',
+ 'requires' => ''
);
if (!is_file("addon/$plugin/$plugin.php"))
@@ -383,6 +384,22 @@ function check_plugin_versions($info) {
}
}
+ if(array_key_exists('requires',$info)) {
+ $arr = explode(',',$info['requires']);
+ $found = true;
+ if($arr) {
+ foreach($arr as $test) {
+ $test = trim($test);
+ if(! $test)
+ continue;
+ if(! in_array($test,get_app()->plugins))
+ $found = false;
+ }
+ }
+ if(! $found)
+ return false;
+ }
+
return true;
}
diff --git a/include/security.php b/include/security.php
index ee94dba82..215cc92cb 100644
--- a/include/security.php
+++ b/include/security.php
@@ -148,7 +148,7 @@ function change_channel($change_channel) {
* @return string additional SQL where statement
*/
-function permissions_sql($owner_id, $remote_observer = null) {
+function permissions_sql($owner_id, $remote_observer = null, $table = '') {
$local_channel = local_channel();
@@ -158,10 +158,14 @@ function permissions_sql($owner_id, $remote_observer = null) {
* default permissions - anonymous user
*/
- $sql = " AND allow_cid = ''
- AND allow_gid = ''
- AND deny_cid = ''
- AND deny_gid = ''
+ if($table)
+ $table .= '.';
+
+
+ $sql = " AND {$table}allow_cid = ''
+ AND {$table}allow_gid = ''
+ AND {$table}deny_cid = ''
+ AND {$table}deny_gid = ''
";
/**
@@ -193,8 +197,8 @@ function permissions_sql($owner_id, $remote_observer = null) {
}
$regexop = db_getfunc('REGEXP');
$sql = sprintf(
- " AND ( NOT (deny_cid like '%s' OR deny_gid $regexop '%s')
- AND ( allow_cid like '%s' OR allow_gid $regexop '%s' OR ( allow_cid = '' AND allow_gid = '') )
+ " AND ( NOT ({$table}deny_cid like '%s' OR {$table}deny_gid $regexop '%s')
+ AND ( {$table}allow_cid like '%s' OR {$table}allow_gid $regexop '%s' OR ( {$table}allow_cid = '' AND {$table}allow_gid = '') )
)
",
dbesc(protect_sprintf( '%<' . $observer . '>%')),
diff --git a/include/session.php b/include/session.php
index 92004bc18..182805980 100644
--- a/include/session.php
+++ b/include/session.php
@@ -1,4 +1,5 @@
<?php
+
/**
* @file include/session.php
*
@@ -14,8 +15,8 @@ $session_expire = 180000;
function new_cookie($time) {
$old_sid = session_id();
-// ??? This shouldn't have any effect if called after session_start()
-// We probably need to set the session expiration and change the PHPSESSID cookie.
+ // ??? This shouldn't have any effect if called after session_start()
+ // We probably need to set the session expiration and change the PHPSESSID cookie.
session_set_cookie_params($time);
session_regenerate_id(false);
@@ -108,8 +109,9 @@ ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_httponly', 1);
/*
- * PHP function which sets our user-level session storage functions.
+ * Set our session storage functions.
*/
+
session_set_save_handler(
'ref_session_open',
'ref_session_close',
@@ -117,4 +119,17 @@ session_set_save_handler(
'ref_session_write',
'ref_session_destroy',
'ref_session_gc'
-); \ No newline at end of file
+);
+
+
+ // Force cookies to be secure (https only) if this site is SSL enabled. Must be done before session_start().
+
+ if(intval($a->config['system']['ssl_cookie_protection'])) {
+ $arr = session_get_cookie_params();
+ session_set_cookie_params(
+ ((isset($arr['lifetime'])) ? $arr['lifetime'] : 0),
+ ((isset($arr['path'])) ? $arr['path'] : '/'),
+ ((isset($arr['domain'])) ? $arr['domain'] : $a->get_hostname()),
+ ((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false),
+ ((isset($arr['httponly'])) ? $arr['httponly'] : true));
+ } \ No newline at end of file
diff --git a/index.php b/index.php
index 4ae2ebe36..bccb270d8 100755
--- a/index.php
+++ b/index.php
@@ -61,25 +61,11 @@ if(! $a->install) {
load_hooks();
call_hooks('init_1');
- $a->language = get_best_language();
- load_translation_table($a->language);
- // Force the cookie to be secure (https only) if this site is SSL enabled. Must be done before session_start().
-
- if(intval($a->config['system']['ssl_cookie_protection'])) {
- $arr = session_get_cookie_params();
- session_set_cookie_params(
- ((isset($arr['lifetime'])) ? $arr['lifetime'] : 0),
- ((isset($arr['path'])) ? $arr['path'] : '/'),
- ((isset($arr['domain'])) ? $arr['domain'] : $a->get_hostname()),
- ((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') ? true : false),
- ((isset($arr['httponly'])) ? $arr['httponly'] : true));
- }
}
-else {
- // load translations but do not check plugins as we have no database
+
+
$a->language = get_best_language();
- load_translation_table($a->language,true);
-}
+ load_translation_table($a->language,$a->install);
/**
diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql
index 161c174e5..07a88cf0a 100644
--- a/install/schema_mysql.sql
+++ b/install/schema_mysql.sql
@@ -230,6 +230,7 @@ CREATE TABLE IF NOT EXISTS `channel` (
`channel_w_like` int(10) unsigned NOT NULL DEFAULT '0',
`channel_removed` tinyint(1) NOT NULL DEFAULT '0',
`channel_system` tinyint(1) NOT NULL DEFAULT '0',
+ `channel_moved` char(255) NOT NULL DEFAULT '',
PRIMARY KEY (`channel_id`),
UNIQUE KEY `channel_address_unique` (`channel_address`),
KEY `channel_account_id` (`channel_account_id`),
@@ -268,7 +269,8 @@ CREATE TABLE IF NOT EXISTS `channel` (
KEY `channel_w_like` (`channel_w_like`),
KEY `channel_removed` (`channel_removed`),
KEY `channel_system` (`channel_system`),
- KEY `channel_lastpost` (`channel_lastpost`)
+ KEY `channel_lastpost` (`channel_lastpost`),
+ KEY `channel_moved` (`channel_moved`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `chat` (
diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql
index 964ca5966..3302ef6c0 100644
--- a/install/schema_postgres.sql
+++ b/install/schema_postgres.sql
@@ -225,6 +225,7 @@ CREATE TABLE "channel" (
"channel_w_like" bigint NOT NULL DEFAULT '128',
"channel_removed" smallint NOT NULL DEFAULT '0',
"channel_system" smallint NOT NULL DEFAULT '0',
+ "channel_moved" text NOT NULL DEFAULT '',
PRIMARY KEY ("channel_id"),
UNIQUE ("channel_address")
);
@@ -265,6 +266,7 @@ create index "channel_dirdate" on channel ("channel_dirdate");
create index "channel_lastpost" on channel ("channel_lastpost");
create index "channel_removed" on channel ("channel_removed");
create index "channel_system" on channel ("channel_system");
+create index "channel_moved" on channel ("channel_moved");
CREATE TABLE "chat" (
"chat_id" serial NOT NULL,
"chat_room" bigint NOT NULL DEFAULT '0',
diff --git a/install/update.php b/install/update.php
index d21295be7..0f9b3ab28 100644
--- a/install/update.php
+++ b/install/update.php
@@ -1,6 +1,6 @@
<?php
-define( 'UPDATE_VERSION' , 1163 );
+define( 'UPDATE_VERSION' , 1164 );
/**
*
@@ -2003,4 +2003,19 @@ function update_r1162() {
if($r1 && $r2)
return UPDATE_SUCCESS;
return UPDATE_FAILED;
+}
+
+function update_r1163() {
+
+ if(ACTIVE_DBTYPE == DBTYPE_POSTGRES) {
+ $r1 = q("alter table channel add channel_moved text not null default '' ");
+ $r2 = q("create index \"channel_channel_moved\" on channel (\"channel_moved\") ");
+ }
+ else {
+ $r1 = q("alter table channel add channel_moved char(255) not null default '' ");
+ $r2 = q("alter table channel add index ( channel_moved ) ");
+ }
+ if($r1 && $r2)
+ return UPDATE_SUCCESS;
+ return UPDATE_FAILED;
} \ No newline at end of file
diff --git a/mod/admin.php b/mod/admin.php
index 5195db320..292a4e66a 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -1275,7 +1275,7 @@ function admin_page_plugins(&$a){
'$str_minversion' => t('Minimum project version: '),
'$str_maxversion' => t('Maximum project version: '),
'$str_minphpversion' => t('Minimum PHP version: '),
-
+ '$str_requires' => t('Requires: '),
'$disabled' => t('Disabled - version incompatibility'),
'$admin_form' => $admin_form,
diff --git a/mod/cal.php b/mod/cal.php
new file mode 100755
index 000000000..9899b33b0
--- /dev/null
+++ b/mod/cal.php
@@ -0,0 +1,343 @@
+<?php
+
+require_once('include/conversation.php');
+require_once('include/bbcode.php');
+require_once('include/datetime.php');
+require_once('include/event.php');
+require_once('include/items.php');
+require_once('Contact.php');
+
+
+function cal_init(&$a) {
+ if((get_config('system','block_public')) && (! local_channel()) && (! remote_channel())) {
+ return;
+ }
+
+ $o = '';
+
+ if(argc() > 1) {
+ $nick = argv(1);
+
+ profile_load($a,$nick);
+
+ $channelx = channelx_by_nick($nick);
+
+ if(! $channelx)
+ return;
+
+ $a->data['channel'] = $channelx;
+
+ $observer = $a->get_observer();
+ $a->data['observer'] = $observer;
+
+ $observer_xchan = (($observer) ? $observer['xchan_hash'] : '');
+
+ head_set_icon($a->data['channel']['xchan_photo_s']);
+
+ $a->page['htmlhead'] .= "<script> var ispublic = '" . t('everybody') . "'; var profile_uid = " . (($a->data['channel']) ? $a->data['channel']['channel_id'] : 0) . "; </script>" ;
+
+ }
+
+ return;
+}
+
+
+
+function cal_content(&$a) {
+
+ $channel = null;
+
+ if(argc() > 1) {
+ $channel = channelx_by_nick(argv(1));
+ }
+
+
+ if(! $channel) {
+ notice( t('Channel not found.') . EOL);
+ return;
+ }
+
+ // since we don't currently have an event permission - use the stream permission
+
+ if(! perm_is_allowed($channel['channel_id'], get_observer_hash(), 'view_stream')) {
+ notice( t('Permissions denied.') . EOL);
+ return;
+ }
+
+ $sql_extra = permissions_sql($channel['channel_id'],get_observer_hash(),'event');
+
+ $first_day = get_pconfig(local_channel(),'system','cal_first_day');
+ $first_day = (($first_day) ? $first_day : 0);
+
+ $htpl = get_markup_template('event_head.tpl');
+ $a->page['htmlhead'] .= replace_macros($htpl,array(
+ '$baseurl' => $a->get_baseurl(),
+ '$module_url' => '/cal/' . $channel['channel_address'],
+ '$modparams' => 2,
+ '$lang' => $a->language,
+ '$first_day' => $first_day
+ ));
+
+ $o = '';
+
+ $mode = 'view';
+ $y = 0;
+ $m = 0;
+ $ignored = ((x($_REQUEST,'ignored')) ? " and ignored = " . intval($_REQUEST['ignored']) . " " : '');
+
+logger('args: ' . print_r($a->argv,true));
+
+ if(argc() > 3 && intval(argv(2)) && intval(argv(3))) {
+ $mode = 'view';
+ $y = intval(argv(2));
+ $m = intval(argv(3));
+ }
+ if(argc() <= 3) {
+ $mode = 'view';
+ $event_id = argv(2);
+ }
+
+ if($mode == 'view') {
+
+ /* edit/create form */
+ if($event_id) {
+ $r = q("SELECT * FROM `event` WHERE event_hash = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($event_id),
+ intval($channel['channel_id'])
+ );
+ if(count($r))
+ $orig_event = $r[0];
+ }
+
+
+ // Passed parameters overrides anything found in the DB
+ if(!x($orig_event))
+ $orig_event = array();
+
+
+
+ $tz = date_default_timezone_get();
+ if(x($orig_event))
+ $tz = (($orig_event['adjust']) ? date_default_timezone_get() : 'UTC');
+
+ $syear = datetime_convert('UTC', $tz, $sdt, 'Y');
+ $smonth = datetime_convert('UTC', $tz, $sdt, 'm');
+ $sday = datetime_convert('UTC', $tz, $sdt, 'd');
+ $shour = datetime_convert('UTC', $tz, $sdt, 'H');
+ $sminute = datetime_convert('UTC', $tz, $sdt, 'i');
+
+ $stext = datetime_convert('UTC',$tz,$sdt);
+ $stext = substr($stext,0,14) . "00:00";
+
+ $fyear = datetime_convert('UTC', $tz, $fdt, 'Y');
+ $fmonth = datetime_convert('UTC', $tz, $fdt, 'm');
+ $fday = datetime_convert('UTC', $tz, $fdt, 'd');
+ $fhour = datetime_convert('UTC', $tz, $fdt, 'H');
+ $fminute = datetime_convert('UTC', $tz, $fdt, 'i');
+
+ $ftext = datetime_convert('UTC',$tz,$fdt);
+ $ftext = substr($ftext,0,14) . "00:00";
+
+ $type = ((x($orig_event)) ? $orig_event['type'] : 'event');
+
+ $f = get_config('system','event_input_format');
+ if(! $f)
+ $f = 'ymd';
+
+ $catsenabled = feature_enabled($channel['channel_id'],'categories');
+
+
+ $show_bd = perm_is_allowed($channel['channel_id'], get_observer_hash(), 'view_contacts');
+ if(! $show_bd) {
+ $sql_extra .= " and event.type != 'birthday' ";
+ }
+
+
+ $category = '';
+
+ $thisyear = datetime_convert('UTC',date_default_timezone_get(),'now','Y');
+ $thismonth = datetime_convert('UTC',date_default_timezone_get(),'now','m');
+ if(! $y)
+ $y = intval($thisyear);
+ if(! $m)
+ $m = intval($thismonth);
+
+ // Put some limits on dates. The PHP date functions don't seem to do so well before 1900.
+ // An upper limit was chosen to keep search engines from exploring links millions of years in the future.
+
+ if($y < 1901)
+ $y = 1900;
+ if($y > 2099)
+ $y = 2100;
+
+ $nextyear = $y;
+ $nextmonth = $m + 1;
+ if($nextmonth > 12) {
+ $nextmonth = 1;
+ $nextyear ++;
+ }
+
+ $prevyear = $y;
+ if($m > 1)
+ $prevmonth = $m - 1;
+ else {
+ $prevmonth = 12;
+ $prevyear --;
+ }
+
+ $dim = get_dim($y,$m);
+ $start = sprintf('%d-%d-%d %d:%d:%d',$y,$m,1,0,0,0);
+ $finish = sprintf('%d-%d-%d %d:%d:%d',$y,$m,$dim,23,59,59);
+
+
+ if (argv(2) === 'json'){
+ if (x($_GET,'start')) $start = $_GET['start'];
+ if (x($_GET,'end')) $finish = $_GET['end'];
+ }
+
+ $start = datetime_convert('UTC','UTC',$start);
+ $finish = datetime_convert('UTC','UTC',$finish);
+
+ $adjust_start = datetime_convert('UTC', date_default_timezone_get(), $start);
+ $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish);
+
+ if (x($_GET,'id')){
+ $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan
+ from event left join item on resource_id = event_hash where resource_type = 'event' and event.uid = %d and event.id = %d $sql_extra limit 1",
+ intval($channel['channel_id']),
+ intval($_GET['id'])
+ );
+ }
+ else {
+ // fixed an issue with "nofinish" events not showing up in the calendar.
+ // There's still an issue if the finish date crosses the end of month.
+ // Noting this for now - it will need to be fixed here and in Friendica.
+ // Ultimately the finish date shouldn't be involved in the query.
+
+ $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan
+ from event left join item on event_hash = resource_id
+ where resource_type = 'event' and event.uid = %d $ignored
+ AND (( adjust = 0 AND ( finish >= '%s' or nofinish = 1 ) AND start <= '%s' )
+ OR ( adjust = 1 AND ( finish >= '%s' or nofinish = 1 ) AND start <= '%s' )) $sql_extra ",
+ intval($channel['channel_id']),
+ dbesc($start),
+ dbesc($finish),
+ dbesc($adjust_start),
+ dbesc($adjust_finish)
+ );
+
+ }
+
+ $links = array();
+
+ if($r) {
+ xchan_query($r);
+ $r = fetch_post_tags($r,true);
+
+ $r = sort_by_date($r);
+ }
+
+ if($r) {
+ foreach($r as $rr) {
+ $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'j') : datetime_convert('UTC','UTC',$rr['start'],'j'));
+ if(! x($links,$j))
+ $links[$j] = $a->get_baseurl() . '/' . $a->cmd . '#link-' . $j;
+ }
+ }
+
+ $events=array();
+
+ $last_date = '';
+ $fmt = t('l, F j');
+
+ if($r) {
+
+ foreach($r as $rr) {
+
+ $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'j') : datetime_convert('UTC','UTC',$rr['start'],'j'));
+ $d = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], $fmt) : datetime_convert('UTC','UTC',$rr['start'],$fmt));
+ $d = day_translate($d);
+
+ $start = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'c') : datetime_convert('UTC','UTC',$rr['start'],'c'));
+ if ($rr['nofinish']){
+ $end = null;
+ } else {
+ $end = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['finish'], 'c') : datetime_convert('UTC','UTC',$rr['finish'],'c'));
+ }
+
+
+ $is_first = ($d !== $last_date);
+
+ $last_date = $d;
+
+ $edit = false;
+
+ $drop = false;
+
+ $title = strip_tags(html_entity_decode(bbcode($rr['summary']),ENT_QUOTES,'UTF-8'));
+ if(! $title) {
+ list($title, $_trash) = explode("<br",bbcode($rr['desc']),2);
+ $title = strip_tags(html_entity_decode($title,ENT_QUOTES,'UTF-8'));
+ }
+ $html = format_event_html($rr);
+ $rr['desc'] = bbcode($rr['desc']);
+ $rr['location'] = bbcode($rr['location']);
+ $events[] = array(
+ 'id'=>$rr['id'],
+ 'hash' => $rr['event_hash'],
+ 'start'=> $start,
+ 'end' => $end,
+ 'drop' => $drop,
+ 'allDay' => false,
+ 'title' => $title,
+
+ 'j' => $j,
+ 'd' => $d,
+ 'edit' => $edit,
+ 'is_first'=>$is_first,
+ 'item'=>$rr,
+ 'html'=>$html,
+ 'plink' => array($rr['plink'],t('Link to Source'),'',''),
+ );
+
+
+ }
+ }
+
+ if (argv(2) === 'json'){
+ echo json_encode($events); killme();
+ }
+
+ // links: array('href', 'text', 'extra css classes', 'title')
+ if (x($_GET,'id')){
+ $tpl = get_markup_template("event_cal.tpl");
+ }
+ else {
+ $tpl = get_markup_template("events_cal-js.tpl");
+ }
+
+ $nick = $channel['channel_address'];
+
+ $o = replace_macros($tpl, array(
+ '$baseurl' => $a->get_baseurl(),
+ '$new_event' => array($a->get_baseurl().'/cal',(($event_id) ? t('Edit Event') : t('Create Event')),'',''),
+ '$previus' => array($a->get_baseurl()."/cal/$nick/$prevyear/$prevmonth",t('Previous'),'',''),
+ '$next' => array($a->get_baseurl()."/cal/$nick/$nextyear/$nextmonth",t('Next'),'',''),
+ '$export' => array($a->get_baseurl()."/cal/$nick/$y/$m/export",t('Export'),'',''),
+ '$calendar' => cal($y,$m,$links, ' eventcal'),
+ '$events' => $events,
+ '$upload' => t('Import'),
+ '$submit' => t('Submit'),
+ '$prev' => t('Previous'),
+ '$next' => t('Next'),
+ '$today' => t('Today'),
+ '$form' => $form,
+ '$expandform' => ((x($_GET,'expandform')) ? true : false),
+ ));
+
+ if (x($_GET,'id')){ echo $o; killme(); }
+
+ return $o;
+ }
+
+}
diff --git a/mod/events.php b/mod/events.php
index b07ffa184..be39902aa 100755
--- a/mod/events.php
+++ b/mod/events.php
@@ -283,6 +283,8 @@ function events_content(&$a) {
$htpl = get_markup_template('event_head.tpl');
$a->page['htmlhead'] .= replace_macros($htpl,array(
'$baseurl' => $a->get_baseurl(),
+ '$module_url' => '/events',
+ '$modparams' => 1,
'$lang' => $a->language,
'$first_day' => $first_day
));
@@ -296,6 +298,11 @@ function events_content(&$a) {
$m = 0;
$ignored = ((x($_REQUEST,'ignored')) ? " and ignored = " . intval($_REQUEST['ignored']) . " " : '');
+
+logger('args: ' . print_r($a->argv,true));
+
+
+
if(argc() > 1) {
if(argc() > 2 && argv(1) === 'add') {
$mode = 'add';
diff --git a/mod/register.php b/mod/register.php
index 2de13feae..b533483f7 100644
--- a/mod/register.php
+++ b/mod/register.php
@@ -250,6 +250,7 @@ function register_content(&$a) {
'$role' => $role,
'$default_role' => $default_role,
'$nickname' => $nickname,
+ '$enable_tos' => $enable_tos,
'$tos' => $tos,
'$email' => $email,
'$pass1' => $password,
diff --git a/mod/webpages.php b/mod/webpages.php
index 8e12b5910..6b157073e 100644
--- a/mod/webpages.php
+++ b/mod/webpages.php
@@ -128,6 +128,8 @@ function webpages_content(&$a) {
// Get a list of webpages. We can't display all them because endless scroll makes that unusable,
// so just list titles and an edit link.
+
+
/** @TODO - this should be replaced with pagelist_widget */
$sql_extra = item_permissions_sql($owner);
diff --git a/mod/xrd.php b/mod/xrd.php
index 34ed47149..da4ab51a4 100644
--- a/mod/xrd.php
+++ b/mod/xrd.php
@@ -35,8 +35,6 @@ function xrd_init(&$a) {
header("Content-type: application/xrd+xml");
- $tpl = get_markup_template('view/xrd_person.tpl');
-
$o = replace_macros(get_markup_template('xrd_person.tpl'), array(
'$nick' => $r[0]['channel_address'],
'$accturi' => $uri,
@@ -51,7 +49,7 @@ function xrd_init(&$a) {
// '$salmen' => $a->get_baseurl() . '/salmon/' . $r[0]['channel_address'] . '/mention',
'$modexp' => 'data:application/magic-public-key,' . $salmon_key,
'$subscribe' => $a->get_baseurl() . '/follow?url={uri}',
-// '$bigkey' => salmon_key($r[0]['pubkey'])
+ '$bigkey' => salmon_key($r[0]['channel_pubkey'])
));
diff --git a/version.inc b/version.inc
index 06b5d04b1..2d59eb514 100644
--- a/version.inc
+++ b/version.inc
@@ -1 +1 @@
-2016-02-22.1315H
+2016-02-24.1317H
diff --git a/view/css/bootstrap-red.css b/view/css/bootstrap-red.css
index 29164c7ad..777bf69eb 100644
--- a/view/css/bootstrap-red.css
+++ b/view/css/bootstrap-red.css
@@ -37,7 +37,7 @@ nav .navbar-header img {
nav .dropdown-menu {
max-height: 450px;
- max-width: 300px;
+ width: 270px;
overflow-y: auto;
margin-top: 0px;
}
diff --git a/view/en-au/update_fail_eml.tpl b/view/en-au/update_fail_eml.tpl
index 61f44b1e6..86bb61aaa 100644
--- a/view/en-au/update_fail_eml.tpl
+++ b/view/en-au/update_fail_eml.tpl
@@ -4,7 +4,7 @@ I'm the web server at {{$sitename}};
The Hubzilla developers released update {{$update}} recently,
but when I tried to install it, something went terribly wrong.
This needs to be fixed soon and it requires human intervention.
-Please contact a Red developer if you can not figure out how to
+Please contact a project developer if you can not figure out how to
fix it on your own. My database might be invalid.
The error message is '{{$error}}'.
diff --git a/view/nl/hstrings.php b/view/nl/hstrings.php
index 6bac66a1e..37212e1ab 100644
--- a/view/nl/hstrings.php
+++ b/view/nl/hstrings.php
@@ -1847,8 +1847,8 @@ $a->strings["Public Sites"] = "Openbare hubs";
$a->strings["The listed sites allow public registration for the \$Projectname network. All sites in the network are interlinked so membership on any of them conveys membership in the network as a whole. Some sites may require subscription or provide tiered service plans. The provider links <strong>may</strong> provide additional details."] = "Op de hier weergegeven hubs kan iedereen zich voor het \$Projectname-netwerk aanmelden. Alle hubs in het \$Projectname-netwerk zijn met elkaar verbonden, dus maakt het qua lidmaatschap niet uit waar je je aanmeldt. Op sommige hubs heb je eerst goedkeuring nodig en sommige hubs vereisen betaalde abonnementen voor uitbreidingen. <strong>Mogelijk</strong> wordt hierover op de hub zelf meer informatie gegeven.";
$a->strings["Rate this hub"] = "Beoordeel deze hub";
$a->strings["Site URL"] = "URL hub";
-$a->strings["Access Type"] = "Toegangstype";
-$a->strings["Registration Policy"] = "Registratiebeleid";
+$a->strings["Access Type"] = "Toegangs-<br/>&nbsp;type";
+$a->strings["Registration Policy"] = "Registratie-<br/>&nbsp;beleid";
$a->strings["Project"] = "Project";
$a->strings["View hub ratings"] = "Beoordelingen";
$a->strings["Rate"] = "Beoordeel";
@@ -1877,7 +1877,7 @@ $a->strings["<a href=\"pubsites\">Register at another affiliated site/hub</a>"]
$a->strings["This site has exceeded the number of allowed daily account registrations. Please try again tomorrow."] = "Deze \$Projectname-hub heeft het maximum aantal dagelijks toegestane registraties bereikt. Probeer het morgen (UTC) nogmaals.";
$a->strings["Terms of Service"] = "Gebruiksvoorwaarden";
$a->strings["I accept the %s for this website"] = "Ik accepteer de %s van deze \$Projectname-hub";
-$a->strings["I am over 13 years of age and accept the %s for this website"] = "Ik accepteer de %s van deze \$Projectname-hub";
+$a->strings["I am over 13 years of age and accept the %s for this website"] = "Ik ben 13 jaar of ouder en accepteer de %s van deze \$Projectname-hub";
$a->strings["Membership on this site is by invitation only."] = "Registreren op deze \$Projectname-hub kan alleen op uitnodiging.";
$a->strings["Please enter your invitation code"] = "Vul jouw uitnodigingscode in";
$a->strings["Enter your name"] = "Vul jouw naam in";
diff --git a/view/nl/register_open_eml.tpl b/view/nl/register_open_eml.tpl
index 411bd00be..4ee6756ef 100644
--- a/view/nl/register_open_eml.tpl
+++ b/view/nl/register_open_eml.tpl
@@ -1,19 +1,19 @@
-
-Er is met dit e-mailadres een account aangemaakt op {{$sitename}}.
+s met dit e-mailadres een account aangemaakt op {{$sitename}}.
De inloggegevens zijn als volgt:
Hub: {{$siteurl}}
Inlognaam: {{$email}}
Wachtwoord: (het wachtwoord dat je tijdens de registratie hebt opgegeven)
-Wanneer dit account was aangemaakt zonder jouw medeweten en tevens niet gewenst, dan kan je {{$siteurl}}
-bezoeken en een nieuwe wachtwoord aanvragen. Je kan daarna inloggen, een kanaal aanmaken en
-meteen via 'instellingen > account' (linksboven) het account verwijderen (onderaan).
+Wanneer dit account was aangemaakt zonder jouw medeweten en tevens niet gewenst, dan kan je {{$siteurl
+}}/lostpass bezoeken en het wachtwoord opnieuw instellen. Je kan daarna inloggen, een kanaal aanmaken en meteen via 'instellingen > account' (linksboven) het account verwijderen (rechtsboven).
Excuses voor het eventuele ongemak.
-Wanneer dit account wel door jou is aangemaakt: Dank je en welkom op {{$sitename}}.
+Wanneer dit account wel door jou is aangemaakt: Dank je en van harte welkom op {{$sitename}}.
Vriendelijke groet,
+
Beheerder {{$sitename}} ({{$siteurl}})
+
diff --git a/view/pdl/mod_cal.pdl b/view/pdl/mod_cal.pdl
new file mode 100644
index 000000000..f12bf39c3
--- /dev/null
+++ b/view/pdl/mod_cal.pdl
@@ -0,0 +1,3 @@
+[region=aside]
+[widget=fullprofile][/widget]
+[/region]
diff --git a/view/theme/redbasic/schema/boxy.css b/view/theme/redbasic/schema/boxy.css
index ad3e587f0..43ef3e34e 100644
--- a/view/theme/redbasic/schema/boxy.css
+++ b/view/theme/redbasic/schema/boxy.css
@@ -3,9 +3,5 @@
}
.wall-item-content-wrapper.comment {
- border-width: 0px 0px 1px 0px;
-}
-
-.hide-comments-outer {
- border-width: 1px 0px 1px 0px;
+ border-bottom: 1px solid #ccc;
}
diff --git a/view/tpl/admin_plugins_details.tpl b/view/tpl/admin_plugins_details.tpl
index 721bd3573..5d9e233f9 100755
--- a/view/tpl/admin_plugins_details.tpl
+++ b/view/tpl/admin_plugins_details.tpl
@@ -24,6 +24,9 @@
{{if $info.minphpversion}}
<p class="versionlimit">{{$str_minphpversion}}{{$info.minphpversion}}</p>
{{/if}}
+ {{if $info.requires}}
+ <p class="versionlimit">{{$str_requires}}{{$info.requires}}</p>
+ {{/if}}
{{foreach $info.maintainer as $a}}
diff --git a/view/tpl/event_cal.tpl b/view/tpl/event_cal.tpl
new file mode 100755
index 000000000..61458b263
--- /dev/null
+++ b/view/tpl/event_cal.tpl
@@ -0,0 +1,14 @@
+{{foreach $events as $event}}
+ <div class="event-wrapper">
+ <div class="event">
+ <div class="event-owner">
+ {{if $event.item.author.xchan_name}}<a href="{{$event.item.author.xchan_url}}" ><img src="{{$event.item.author.xchan_photo_s}}">{{$event.item.author.xchan_name}}</a>{{/if}}
+ </div>
+ {{$event.html}}
+ <div class="event-buttons">
+ {{if $event.item.plink}}<a href="{{$event.plink.0}}" title="{{$event.plink.1}}" class="plink-event-link"><i class="icon-external-link btn btn-default" ></i></a>{{/if}}
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+{{/foreach}}
diff --git a/view/tpl/event_head.tpl b/view/tpl/event_head.tpl
index dc98d14b3..5083c5835 100755
--- a/view/tpl/event_head.tpl
+++ b/view/tpl/event_head.tpl
@@ -6,7 +6,7 @@
<script>
function showEvent(eventid) {
$.get(
- '{{$baseurl}}/events/?id='+eventid,
+ '{{$baseurl}}{{$module_url}}/?id='+eventid,
function(data){
$.colorbox({ scrolling: false, html: data, onComplete: function() { $.colorbox.resize(); }});
}
@@ -36,7 +36,7 @@
$(document).ready(function() {
$('#events-calendar').fullCalendar({
- events: '{{$baseurl}}/events/json',
+ events: '{{$baseurl}}{{$module_url}}/json',
header: false,
lang: '{{$lang}}',
firstDay: {{$first_day}},
@@ -109,10 +109,17 @@
});
// center on date
+ // @fixme does not work for cal/$nick module_url
var args=location.href.replace(baseurl,"").split("/");
+ {{if $modparams == 2}}
+ if (args.length>=5) {
+ $("#events-calendar").fullCalendar('gotoDate',args[3] , args[4]-1);
+ }
+ {{else}}
if (args.length>=4) {
$("#events-calendar").fullCalendar('gotoDate',args[2] , args[3]-1);
- }
+ }
+ {{/if}}
// show event popup
var hash = location.hash.split("-")
diff --git a/view/tpl/events_cal-js.tpl b/view/tpl/events_cal-js.tpl
new file mode 100755
index 000000000..b3c7ff03b
--- /dev/null
+++ b/view/tpl/events_cal-js.tpl
@@ -0,0 +1,17 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <div class="btn-group">
+ <button class="btn btn-default btn-xs" onclick="changeView('prev', false);" title="{{$prev}}"><i class="icon-backward"></i></button>
+ <button id="events-spinner" class="btn btn-default btn-xs" onclick="changeView('today', false);" title="{{$today}}"><i class="icon-bullseye"></i></button>
+ <button class="btn btn-default btn-xs" onclick="changeView('next', false);" title="{{$next}}"><i class="icon-forward"></i></button>
+ </div>
+ </div>
+ <h2 id="title"></h2>
+ <div class="clear"></div>
+ </div>
+ <div class="clear"></div>
+ <div class="section-content-wrapper-np">
+ <div id="events-calendar"></div>
+ </div>
+</div>