commit
909bca90e8
|
@ -0,0 +1,190 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file include/forum.php
|
||||
* @brief Functions related to forum functionality *
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief This class handles functions related to the forum functionality
|
||||
*/
|
||||
class ForumManager {
|
||||
|
||||
/**
|
||||
* @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
|
||||
*/
|
||||
public static function get_list($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)
|
||||
);
|
||||
|
||||
if (!$contacts)
|
||||
return($forumlist);
|
||||
|
||||
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 int $uid The ID of the User
|
||||
* @param int $cid
|
||||
* The contact id which is used to mark a forum as "selected"
|
||||
* @return string
|
||||
*/
|
||||
public static function widget($uid,$cid = 0) {
|
||||
|
||||
if(! intval(feature_enabled(local_user(),'forumlist_widget')))
|
||||
return;
|
||||
|
||||
$o = '';
|
||||
|
||||
//sort by last updated item
|
||||
$lastitem = true;
|
||||
|
||||
$contacts = self::get_list($uid,true,$lastitem, true);
|
||||
$total = count($contacts);
|
||||
$visible_forums = 10;
|
||||
|
||||
if(count($contacts)) {
|
||||
|
||||
$id = 0;
|
||||
|
||||
foreach($contacts as $contact) {
|
||||
|
||||
$selected = (($cid == $contact['id']) ? ' forum-selected' : '');
|
||||
|
||||
$entry = array(
|
||||
'url' => z_root() . '/network?f=&cid=' . $contact['id'],
|
||||
'external_url' => z_root() . '/redir/' . $contact['id'],
|
||||
'name' => $contact['name'],
|
||||
'cid' => $contact['id'],
|
||||
'selected' => $selected,
|
||||
'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 The ID of the User
|
||||
* @return string
|
||||
*
|
||||
*/
|
||||
public static function 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 = self::get_list($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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief count unread forum items
|
||||
*
|
||||
* Count unread items of connected forums and private groups
|
||||
*
|
||||
* @return array
|
||||
* 'id' => contact id
|
||||
* 'name' => contact/forum name
|
||||
* 'count' => counted unseen forum items
|
||||
*
|
||||
*/
|
||||
public static function count_unseen_items() {
|
||||
$r = q("SELECT `contact`.`id`, `contact`.`name`, COUNT(*) AS `count` FROM `item`
|
||||
INNER JOIN `contact` ON `item`.`contact-id` = `contact`.`id`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` AND `item`.`unseen`
|
||||
AND `contact`.`network`= 'dfrn' AND (`contact`.`forum` OR `contact`.`prv`)
|
||||
AND NOT `contact`.`blocked` AND NOT `contact`.`hidden`
|
||||
AND NOT `contact`.`pending` AND NOT `contact`.`archive`
|
||||
AND `contact`.`success_update` > `failure_update`
|
||||
GROUP BY `contact`.`id` ",
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
}
|
|
@ -726,10 +726,11 @@ function guess_image_type($filename, $fromcurl=false) {
|
|||
* @param string $avatar Link to avatar picture
|
||||
* @param int $uid User id of contact owner
|
||||
* @param int $cid Contact id
|
||||
* @param bool $force force picture update
|
||||
*
|
||||
* @return array Returns array of the different avatar sizes
|
||||
*/
|
||||
function update_contact_avatar($avatar,$uid,$cid) {
|
||||
function update_contact_avatar($avatar,$uid,$cid, $force = false) {
|
||||
|
||||
$r = q("SELECT `avatar`, `photo`, `thumb`, `micro` FROM `contact` WHERE `id` = %d LIMIT 1", intval($cid));
|
||||
if (!$r)
|
||||
|
@ -737,7 +738,7 @@ function update_contact_avatar($avatar,$uid,$cid) {
|
|||
else
|
||||
$data = array($r[0]["photo"], $r[0]["thumb"], $r[0]["micro"]);
|
||||
|
||||
if ($r[0]["avatar"] != $avatar) {
|
||||
if (($r[0]["avatar"] != $avatar) OR $force) {
|
||||
$photos = import_profile_photo($avatar,$uid,$cid, true);
|
||||
|
||||
if ($photos) {
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file include/datetime.php
|
||||
* @brief Some functions for date and time related tasks.
|
||||
*/
|
||||
|
||||
// two-level sort for timezones.
|
||||
|
||||
if(! function_exists('timezone_cmp')) {
|
||||
/**
|
||||
* @brief Two-level sort for timezones.
|
||||
*
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
* @return int
|
||||
*/
|
||||
function timezone_cmp($a, $b) {
|
||||
if(strstr($a,'/') && strstr($b,'/')) {
|
||||
if ( t($a) == t($b)) return 0;
|
||||
|
@ -11,11 +20,16 @@ function timezone_cmp($a, $b) {
|
|||
if(strstr($a,'/')) return -1;
|
||||
if(strstr($b,'/')) return 1;
|
||||
if ( t($a) == t($b)) return 0;
|
||||
return ( t($a) < t($b)) ? -1 : 1;
|
||||
}}
|
||||
|
||||
// emit a timezone selector grouped (primarily) by continent
|
||||
if(! function_exists('select_timezone')) {
|
||||
return ( t($a) < t($b)) ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Emit a timezone selector grouped (primarily) by continent
|
||||
*
|
||||
* @param string $current Timezone
|
||||
* @return string Parsed HTML output
|
||||
*/
|
||||
function select_timezone($current = 'America/Los_Angeles') {
|
||||
|
||||
$timezone_identifiers = DateTimeZone::listIdentifiers();
|
||||
|
@ -52,13 +66,25 @@ function select_timezone($current = 'America/Los_Angeles') {
|
|||
}
|
||||
$o .= '</optgroup></select>';
|
||||
return $o;
|
||||
}}
|
||||
}
|
||||
|
||||
// return a select using 'field_select_raw' template, with timezones
|
||||
// groupped (primarily) by continent
|
||||
// arguments follow convetion as other field_* template array:
|
||||
// 'name', 'label', $value, 'help'
|
||||
if (!function_exists('field_timezone')){
|
||||
|
||||
|
||||
/**
|
||||
* @brief Generating a Timezone selector
|
||||
*
|
||||
* Return a select using 'field_select_raw' template, with timezones
|
||||
* groupped (primarily) by continent
|
||||
* arguments follow convetion as other field_* template array:
|
||||
* 'name', 'label', $value, 'help'
|
||||
*
|
||||
* @param string $name Name of the selector
|
||||
* @param string $label Label for the selector
|
||||
* @param string $current Timezone
|
||||
* @param string $help Help text
|
||||
*
|
||||
* @return string Parsed HTML
|
||||
*/
|
||||
function field_timezone($name='timezone', $label='', $current = 'America/Los_Angeles', $help){
|
||||
$options = select_timezone($current);
|
||||
$options = str_replace('<select id="timezone_select" name="timezone">','', $options);
|
||||
|
@ -69,15 +95,19 @@ function field_timezone($name='timezone', $label='', $current = 'America/Los_Ang
|
|||
'$field' => array($name, $label, $current, $help, $options),
|
||||
));
|
||||
|
||||
}}
|
||||
}
|
||||
|
||||
// General purpose date parse/convert function.
|
||||
// $from = source timezone
|
||||
// $to = dest timezone
|
||||
// $s = some parseable date/time string
|
||||
// $fmt = output format
|
||||
|
||||
if(! function_exists('datetime_convert')) {
|
||||
/**
|
||||
* @brief General purpose date parse/convert function.
|
||||
*
|
||||
* @param string $from Source timezone
|
||||
* @param string $to Dest timezone
|
||||
* @param string $s Some parseable date/time string
|
||||
* @param string $fmt Output format recognised from php's DateTime class
|
||||
* http://www.php.net/manual/en/datetime.format.php
|
||||
*
|
||||
* @return string Formatted date according to given format
|
||||
*/
|
||||
function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") {
|
||||
|
||||
// Defaults to UTC if nothing is set, but throws an exception if set to empty string.
|
||||
|
@ -123,14 +153,20 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d
|
|||
}
|
||||
|
||||
$d->setTimeZone($to_obj);
|
||||
|
||||
return($d->format($fmt));
|
||||
}}
|
||||
}
|
||||
|
||||
|
||||
// wrapper for date selector, tailored for use in birthday fields
|
||||
|
||||
/**
|
||||
* @brief Wrapper for date selector, tailored for use in birthday fields.
|
||||
*
|
||||
* @param string $dob Date of Birth
|
||||
* @return string
|
||||
*/
|
||||
function dob($dob) {
|
||||
list($year,$month,$day) = sscanf($dob,'%4d-%2d-%2d');
|
||||
|
||||
$f = get_config('system','birthday_input_format');
|
||||
if(! $f)
|
||||
$f = 'ymd';
|
||||
|
@ -138,62 +174,69 @@ function dob($dob) {
|
|||
$value = '';
|
||||
else
|
||||
$value = (($year) ? datetime_convert('UTC','UTC',$dob,'Y-m-d') : datetime_convert('UTC','UTC',$dob,'m-d'));
|
||||
|
||||
$o = '<input type="text" name="dob" value="' . $value . '" placeholder="' . t('YYYY-MM-DD or MM-DD') . '" />';
|
||||
|
||||
// if ($dob && $dob != '0000-00-00')
|
||||
// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year),'dob');
|
||||
// else
|
||||
// $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),false,'dob');
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a date selector
|
||||
* @param $format
|
||||
* format string, e.g. 'ymd' or 'mdy'. Not currently supported
|
||||
* @param $min
|
||||
* unix timestamp of minimum date
|
||||
* @param $max
|
||||
* unix timestap of maximum date
|
||||
* @param $default
|
||||
* unix timestamp of default date
|
||||
* @param $id
|
||||
* id and name of datetimepicker (defaults to "datetimepicker")
|
||||
* @brief Returns a date selector
|
||||
*
|
||||
* @param string $format
|
||||
* Format string, e.g. 'ymd' or 'mdy'. Not currently supported
|
||||
* @param string $min
|
||||
* Unix timestamp of minimum date
|
||||
* @param string $max
|
||||
* Unix timestap of maximum date
|
||||
* @param string $default
|
||||
* Unix timestamp of default date
|
||||
* @param string $id
|
||||
* ID and name of datetimepicker (defaults to "datetimepicker")
|
||||
*
|
||||
* @return string Parsed HTML output.
|
||||
*/
|
||||
if(! function_exists('datesel')) {
|
||||
function datesel($format, $min, $max, $default, $id = 'datepicker') {
|
||||
return datetimesel($format,$min,$max,$default,$id,true,false, '','');
|
||||
}}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a time selector
|
||||
* @param $format
|
||||
* format string, e.g. 'ymd' or 'mdy'. Not currently supported
|
||||
* @brief Returns a time selector
|
||||
*
|
||||
* @param string $format
|
||||
* Format string, e.g. 'ymd' or 'mdy'. Not currently supported
|
||||
* @param $h
|
||||
* already selected hour
|
||||
* Already selected hour
|
||||
* @param $m
|
||||
* already selected minute
|
||||
* @param $id
|
||||
* id and name of datetimepicker (defaults to "timepicker")
|
||||
* Already selected minute
|
||||
* @param string $id
|
||||
* ID and name of datetimepicker (defaults to "timepicker")
|
||||
*
|
||||
* @return string Parsed HTML output.
|
||||
*/
|
||||
if(! function_exists('timesel')) {
|
||||
function timesel($format, $h, $m, $id='timepicker') {
|
||||
return datetimesel($format,new DateTime(),new DateTime(),new DateTime("$h:$m"),$id,false,true);
|
||||
}}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns a datetime selector.
|
||||
*
|
||||
* @param $format
|
||||
* @param string $format
|
||||
* format string, e.g. 'ymd' or 'mdy'. Not currently supported
|
||||
* @param $min
|
||||
* @param string $min
|
||||
* unix timestamp of minimum date
|
||||
* @param $max
|
||||
* @param string $max
|
||||
* unix timestap of maximum date
|
||||
* @param $default
|
||||
* @param string $default
|
||||
* unix timestamp of default date
|
||||
* @param string $id
|
||||
* id and name of datetimepicker (defaults to "datetimepicker")
|
||||
* @param boolean $pickdate
|
||||
* @param bool $pickdate
|
||||
* true to show date picker (default)
|
||||
* @param boolean $picktime
|
||||
* true to show time picker (default)
|
||||
|
@ -201,17 +244,15 @@ function timesel($format, $h, $m, $id='timepicker') {
|
|||
* set minimum date from picker with id $minfrom (none by default)
|
||||
* @param $maxfrom
|
||||
* set maximum date from picker with id $maxfrom (none by default)
|
||||
* @param boolean $required default false
|
||||
* @param bool $required default false
|
||||
*
|
||||
* @return string Parsed HTML output.
|
||||
*
|
||||
* @todo Once browser support is better this could probably be replaced with
|
||||
* native HTML5 date picker.
|
||||
*/
|
||||
if(! function_exists('datetimesel')) {
|
||||
function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '', $required = false) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
// First day of the week (0 = Sunday)
|
||||
$firstDay = get_pconfig(local_user(),'system','first_day_of_week');
|
||||
if ($firstDay === false) $firstDay=0;
|
||||
|
@ -224,43 +265,58 @@ function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pic
|
|||
|
||||
$o = '';
|
||||
$dateformat = '';
|
||||
|
||||
if($pickdate) $dateformat .= 'Y-m-d';
|
||||
if($pickdate && $picktime) $dateformat .= ' ';
|
||||
if($picktime) $dateformat .= 'H:i';
|
||||
|
||||
$minjs = $min ? ",minDate: new Date({$min->getTimestamp()}*1000), yearStart: " . $min->format('Y') : '';
|
||||
$maxjs = $max ? ",maxDate: new Date({$max->getTimestamp()}*1000), yearEnd: " . $max->format('Y') : '';
|
||||
|
||||
$input_text = $default ? 'value="' . date($dateformat, $default->getTimestamp()) . '"' : '';
|
||||
$defaultdatejs = $default ? ",defaultDate: new Date({$default->getTimestamp()}*1000)" : '';
|
||||
|
||||
$pickers = '';
|
||||
if(!$pickdate) $pickers .= ',datepicker: false';
|
||||
if(!$picktime) $pickers .= ',timepicker: false';
|
||||
|
||||
$extra_js = '';
|
||||
$pickers .= ",dayOfWeekStart: ".$firstDay.",lang:'".$lang."'";
|
||||
if($minfrom != '')
|
||||
$extra_js .= "\$('#$minfrom').data('xdsoft_datetimepicker').setOptions({onChangeDateTime: function (currentDateTime) { \$('#$id').data('xdsoft_datetimepicker').setOptions({minDate: currentDateTime})}})";
|
||||
if($maxfrom != '')
|
||||
$extra_js .= "\$('#$maxfrom').data('xdsoft_datetimepicker').setOptions({onChangeDateTime: function (currentDateTime) { \$('#$id').data('xdsoft_datetimepicker').setOptions({maxDate: currentDateTime})}})";
|
||||
|
||||
$readable_format = $dateformat;
|
||||
$readable_format = str_replace('Y','yyyy',$readable_format);
|
||||
$readable_format = str_replace('m','mm',$readable_format);
|
||||
$readable_format = str_replace('d','dd',$readable_format);
|
||||
$readable_format = str_replace('H','HH',$readable_format);
|
||||
$readable_format = str_replace('i','MM',$readable_format);
|
||||
|
||||
$o .= "<div class='date'><input type='text' placeholder='$readable_format' name='$id' id='$id' $input_text />";
|
||||
$o .= '</div>';
|
||||
$o .= "<script type='text/javascript'>";
|
||||
$o .= "\$(function () {var picker = \$('#$id').datetimepicker({step:5,format:'$dateformat' $minjs $maxjs $pickers $defaultdatejs}); $extra_js})";
|
||||
$o .= "</script>";
|
||||
|
||||
return $o;
|
||||
}}
|
||||
}
|
||||
|
||||
// implements "3 seconds ago" etc.
|
||||
// based on $posted_date, (UTC).
|
||||
// Results relative to current timezone
|
||||
// Limited to range of timestamps
|
||||
|
||||
if(! function_exists('relative_date')) {
|
||||
/**
|
||||
* @brief Returns a relative date string.
|
||||
*
|
||||
* Implements "3 seconds ago" etc.
|
||||
* Based on $posted_date, (UTC).
|
||||
* Results relative to current timezone.
|
||||
* Limited to range of timestamps.
|
||||
*
|
||||
* @param string $posted_date
|
||||
* @param string $format (optional) Parsed with sprintf()
|
||||
* <tt>%1$d %2$s ago</tt>, e.g. 22 hours ago, 1 minute ago
|
||||
*
|
||||
* @return string with relative date
|
||||
*/
|
||||
function relative_date($posted_date,$format = null) {
|
||||
|
||||
$localtime = datetime_convert('UTC',date_default_timezone_get(),$posted_date);
|
||||
|
@ -300,23 +356,33 @@ function relative_date($posted_date,$format = null) {
|
|||
// translators - e.g. 22 hours ago, 1 minute ago
|
||||
if(! $format)
|
||||
$format = t('%1$d %2$s ago');
|
||||
|
||||
return sprintf( $format,$r, (($r == 1) ? $str[0] : $str[1]));
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
||||
|
||||
|
||||
// Returns age in years, given a date of birth,
|
||||
// the timezone of the person whose date of birth is provided,
|
||||
// and the timezone of the person viewing the result.
|
||||
// Why? Bear with me. Let's say I live in Mittagong, Australia, and my
|
||||
// birthday is on New Year's. You live in San Bruno, California.
|
||||
// When exactly are you going to see my age increase?
|
||||
// A: 5:00 AM Dec 31 San Bruno time. That's precisely when I start
|
||||
// celebrating and become a year older. If you wish me happy birthday
|
||||
// on January 1 (San Bruno time), you'll be a day late.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns timezone correct age in years.
|
||||
*
|
||||
* Returns the age in years, given a date of birth, the timezone of the person
|
||||
* whose date of birth is provided, and the timezone of the person viewing the
|
||||
* result.
|
||||
*
|
||||
* Why? Bear with me. Let's say I live in Mittagong, Australia, and my birthday
|
||||
* is on New Year's. You live in San Bruno, California.
|
||||
* When exactly are you going to see my age increase?
|
||||
*
|
||||
* A: 5:00 AM Dec 31 San Bruno time. That's precisely when I start celebrating
|
||||
* and become a year older. If you wish me happy birthday on January 1
|
||||
* (San Bruno time), you'll be a day late.
|
||||
*
|
||||
* @param string $dob Date of Birth
|
||||
* @param string $owner_tz (optional) Timezone of the person of interest
|
||||
* @param string $viewer_tz (optional) Timezone of the person viewing
|
||||
*
|
||||
* @return int Age in years
|
||||
*/
|
||||
function age($dob,$owner_tz = '',$viewer_tz = '') {
|
||||
if(! intval($dob))
|
||||
return 0;
|
||||
|
@ -333,64 +399,79 @@ function age($dob,$owner_tz = '',$viewer_tz = '') {
|
|||
|
||||
if(($curr_month < $month) || (($curr_month == $month) && ($curr_day < $day)))
|
||||
$year_diff--;
|
||||
|
||||
return $year_diff;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Get days in month
|
||||
// get_dim($year, $month);
|
||||
// returns number of days.
|
||||
// $month[1] = 'January';
|
||||
// to match human usage.
|
||||
|
||||
if(! function_exists('get_dim')) {
|
||||
/**
|
||||
* @brief Get days of a month in a given year.
|
||||
*
|
||||
* Returns number of days in the month of the given year.
|
||||
* $m = 1 is 'January' to match human usage.
|
||||
*
|
||||
* @param int $y Year
|
||||
* @param int $m Month (1=January, 12=December)
|
||||
*
|
||||
* @return int Number of days in the given month
|
||||
*/
|
||||
function get_dim($y,$m) {
|
||||
|
||||
$dim = array( 0,
|
||||
31, 28, 31, 30, 31, 30,
|
||||
31, 31, 30, 31, 30, 31);
|
||||
|
||||
if($m != 2)
|
||||
return $dim[$m];
|
||||
if(((($y % 4) == 0) && (($y % 100) != 0)) || (($y % 400) == 0))
|
||||
return 29;
|
||||
return $dim[2];
|
||||
}}
|
||||
$dim = array( 0,
|
||||
31, 28, 31, 30, 31, 30,
|
||||
31, 31, 30, 31, 30, 31);
|
||||
|
||||
if($m != 2)
|
||||
return $dim[$m];
|
||||
|
||||
// Returns the first day in month for a given month, year
|
||||
// get_first_dim($year,$month)
|
||||
// returns 0 = Sunday through 6 = Saturday
|
||||
// Months start at 1.
|
||||
if(((($y % 4) == 0) && (($y % 100) != 0)) || (($y % 400) == 0))
|
||||
return 29;
|
||||
|
||||
if(! function_exists('get_first_dim')) {
|
||||
return $dim[2];
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns the first day in month for a given month, year.
|
||||
*
|
||||
* Months start at 1.
|
||||
*
|
||||
* @param int $y Year
|
||||
* @param int $m Month (1=January, 12=December)
|
||||
*
|
||||
* @return string day 0 = Sunday through 6 = Saturday
|
||||
*/
|
||||
function get_first_dim($y,$m) {
|
||||
$d = sprintf('%04d-%02d-01 00:00', intval($y), intval($m));
|
||||
return datetime_convert('UTC','UTC',$d,'w');
|
||||
}}
|
||||
$d = sprintf('%04d-%02d-01 00:00', intval($y), intval($m));
|
||||
|
||||
// output a calendar for the given month, year.
|
||||
// if $links are provided (array), e.g. $links[12] => 'http://mylink' ,
|
||||
// date 12 will be linked appropriately. Today's date is also noted by
|
||||
// altering td class.
|
||||
// Months count from 1.
|
||||
return datetime_convert('UTC','UTC',$d,'w');
|
||||
}
|
||||
|
||||
|
||||
/// @TODO Provide (prev,next) links, define class variations for different size calendars
|
||||
|
||||
|
||||
if(! function_exists('cal')) {
|
||||
/**
|
||||
* @brief Output a calendar for the given month, year.
|
||||
*
|
||||
* If $links are provided (array), e.g. $links[12] => 'http://mylink' ,
|
||||
* date 12 will be linked appropriately. Today's date is also noted by
|
||||
* altering td class.
|
||||
* Months count from 1.
|
||||
*
|
||||
* @param int $y Year
|
||||
* @param int $m Month
|
||||
* @param bool $links (default false)
|
||||
* @param string $class
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @todo Provide (prev,next) links, define class variations for different size calendars
|
||||
*/
|
||||
function cal($y = 0,$m = 0, $links = false, $class='') {
|
||||
|
||||
|
||||
// month table - start at 1 to match human usage.
|
||||
|
||||
$mtab = array(' ',
|
||||
'January','February','March',
|
||||
'April','May','June',
|
||||
'July','August','September',
|
||||
'October','November','December'
|
||||
'January','February','March',
|
||||
'April','May','June',
|
||||
'July','August','September',
|
||||
'October','November','December'
|
||||
);
|
||||
|
||||
$thisyear = datetime_convert('UTC',date_default_timezone_get(),'now','Y');
|
||||
|
@ -400,54 +481,63 @@ function cal($y = 0,$m = 0, $links = false, $class='') {
|
|||
if(! $m)
|
||||
$m = intval($thismonth);
|
||||
|
||||
$dn = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
|
||||
$f = get_first_dim($y,$m);
|
||||
$l = get_dim($y,$m);
|
||||
$d = 1;
|
||||
$dow = 0;
|
||||
$started = false;
|
||||
$dn = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
|
||||
$f = get_first_dim($y,$m);
|
||||
$l = get_dim($y,$m);
|
||||
$d = 1;
|
||||
$dow = 0;
|
||||
$started = false;
|
||||
|
||||
if(($y == $thisyear) && ($m == $thismonth))
|
||||
$tddate = intval(datetime_convert('UTC',date_default_timezone_get(),'now','j'));
|
||||
if(($y == $thisyear) && ($m == $thismonth))
|
||||
$tddate = intval(datetime_convert('UTC',date_default_timezone_get(),'now','j'));
|
||||
|
||||
$str_month = day_translate($mtab[$m]);
|
||||
$o = '<table class="calendar' . $class . '">';
|
||||
$o .= "<caption>$str_month $y</caption><tr>";
|
||||
for($a = 0; $a < 7; $a ++)
|
||||
$o .= '<th>' . mb_substr(day_translate($dn[$a]),0,3,'UTF-8') . '</th>';
|
||||
$o .= '</tr><tr>';
|
||||
$o = '<table class="calendar' . $class . '">';
|
||||
$o .= "<caption>$str_month $y</caption><tr>";
|
||||
for($a = 0; $a < 7; $a ++)
|
||||
$o .= '<th>' . mb_substr(day_translate($dn[$a]),0,3,'UTF-8') . '</th>';
|
||||
|
||||
while($d <= $l) {
|
||||
if(($dow == $f) && (! $started))
|
||||
$started = true;
|
||||
$today = (((isset($tddate)) && ($tddate == $d)) ? "class=\"today\" " : '');
|
||||
$o .= "<td $today>";
|
||||
$day = str_replace(' ',' ',sprintf('%2.2d', $d));
|
||||
if($started) {
|
||||
if(is_array($links) && isset($links[$d]))
|
||||
$o .= "<a href=\"{$links[$d]}\">$day</a>";
|
||||
else
|
||||
$o .= $day;
|
||||
$d ++;
|
||||
}
|
||||
else
|
||||
$o .= ' ';
|
||||
$o .= '</td>';
|
||||
$dow ++;
|
||||
if(($dow == 7) && ($d <= $l)) {
|
||||
$dow = 0;
|
||||
$o .= '</tr><tr>';
|
||||
}
|
||||
}
|
||||
if($dow)
|
||||
for($a = $dow; $a < 7; $a ++)
|
||||
$o .= '<td> </td>';
|
||||
$o .= '</tr></table>'."\r\n";
|
||||
$o .= '</tr><tr>';
|
||||
|
||||
return $o;
|
||||
}}
|
||||
while($d <= $l) {
|
||||
if(($dow == $f) && (! $started))
|
||||
$started = true;
|
||||
|
||||
$today = (((isset($tddate)) && ($tddate == $d)) ? "class=\"today\" " : '');
|
||||
$o .= "<td $today>";
|
||||
$day = str_replace(' ',' ',sprintf('%2.2d', $d));
|
||||
if($started) {
|
||||
if(is_array($links) && isset($links[$d]))
|
||||
$o .= "<a href=\"{$links[$d]}\">$day</a>";
|
||||
else
|
||||
$o .= $day;
|
||||
|
||||
$d ++;
|
||||
} else {
|
||||
$o .= ' ';
|
||||
}
|
||||
|
||||
$o .= '</td>';
|
||||
$dow ++;
|
||||
if(($dow == 7) && ($d <= $l)) {
|
||||
$dow = 0;
|
||||
$o .= '</tr><tr>';
|
||||
}
|
||||
}
|
||||
if($dow)
|
||||
for($a = $dow; $a < 7; $a ++)
|
||||
$o .= '<td> </td>';
|
||||
|
||||
$o .= '</tr></table>'."\r\n";
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a birthday event.
|
||||
*
|
||||
* Update the year and the birthday.
|
||||
*/
|
||||
function update_contact_birthdays() {
|
||||
|
||||
// This only handles foreign or alien networks where a birthday has been provided.
|
||||
|
@ -474,8 +564,6 @@ function update_contact_birthdays() {
|
|||
$bdtext = sprintf( t('%s\'s birthday'), $rr['name']);
|
||||
$bdtext2 = sprintf( t('Happy Birthday %s'), ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]') ;
|
||||
|
||||
|
||||
|
||||
$r = q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`summary`,`desc`,`type`,`adjust`)
|
||||
VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d' ) ",
|
||||
intval($rr['uid']),
|
||||
|
|
|
@ -374,7 +374,7 @@ function delivery_run(&$argv, &$argc){
|
|||
break;
|
||||
|
||||
logger('mod-delivery: local delivery');
|
||||
local_delivery($x[0],$atom);
|
||||
dfrn::import($atom, $x[0]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
1403
include/dfrn.php
1403
include/dfrn.php
File diff suppressed because it is too large
Load Diff
|
@ -1,185 +0,0 @@
|
|||
<?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)
|
||||
);
|
||||
|
||||
if (!$contacts)
|
||||
return($forumlist);
|
||||
|
||||
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 int $uid
|
||||
* @param int $cid
|
||||
* The contact id which is used to mark a forum as "selected"
|
||||
* @return string
|
||||
*/
|
||||
function widget_forumlist($uid,$cid = 0) {
|
||||
|
||||
if(! intval(feature_enabled(local_user(),'forumlist_widget')))
|
||||
return;
|
||||
|
||||
$o = '';
|
||||
|
||||
//sort by last updated item
|
||||
$lastitem = true;
|
||||
|
||||
$contacts = get_forumlist($uid,true,$lastitem, true);
|
||||
$total = count($contacts);
|
||||
$visible_forums = 10;
|
||||
|
||||
if(count($contacts)) {
|
||||
|
||||
$id = 0;
|
||||
|
||||
foreach($contacts as $contact) {
|
||||
|
||||
$selected = (($cid == $contact['id']) ? ' forum-selected' : '');
|
||||
|
||||
$entry = array(
|
||||
'url' => z_root() . '/network?f=&cid=' . $contact['id'],
|
||||
'external_url' => z_root() . '/redir/' . $contact['id'],
|
||||
'name' => $contact['name'],
|
||||
'cid' => $contact['id'],
|
||||
'selected' => $selected,
|
||||
'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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief count unread forum items
|
||||
*
|
||||
* Count unread items of connected forums and private groups
|
||||
*
|
||||
* @return array
|
||||
* 'id' => contact id
|
||||
* 'name' => contact/forum name
|
||||
* 'count' => counted unseen forum items
|
||||
*
|
||||
*/
|
||||
|
||||
function forums_count_unseen() {
|
||||
$r = q("SELECT `contact`.`id`, `contact`.`name`, COUNT(*) AS `count` FROM `item`
|
||||
INNER JOIN `contact` ON `item`.`contact-id` = `contact`.`id`
|
||||
WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` AND `item`.`unseen`
|
||||
AND `contact`.`network`= 'dfrn' AND (`contact`.`forum` OR `contact`.`prv`)
|
||||
AND NOT `contact`.`blocked` AND NOT `contact`.`hidden`
|
||||
AND NOT `contact`.`pending` AND NOT `contact`.`archive`
|
||||
AND `contact`.`success_update` > `failure_update`
|
||||
GROUP BY `contact`.`id` ",
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
return $r;
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
* @file include/identity.php
|
||||
*/
|
||||
|
||||
require_once('include/forums.php');
|
||||
require_once('include/ForumManager.php');
|
||||
require_once('include/bbcode.php');
|
||||
require_once("mod/proxy.php");
|
||||
|
||||
|
@ -655,7 +655,7 @@ function advanced_profile(&$a) {
|
|||
|
||||
//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));
|
||||
$profile['forumlist'] = array( t('Forums:'), ForumManager::profile_advanced($uid));
|
||||
}
|
||||
|
||||
if ($a->profile['uid'] == local_user())
|
||||
|
|
2147
include/items.php
2147
include/items.php
File diff suppressed because it is too large
Load Diff
|
@ -17,15 +17,6 @@ define('OSTATUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
|
|||
define('OSTATUS_DEFAULT_POLL_TIMEFRAME', 1440); // given in minutes
|
||||
define('OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS', 14400); // given in minutes
|
||||
|
||||
define("NS_ATOM", "http://www.w3.org/2005/Atom");
|
||||
define("NS_THR", "http://purl.org/syndication/thread/1.0");
|
||||
define("NS_GEORSS", "http://www.georss.org/georss");
|
||||
define("NS_ACTIVITY", "http://activitystrea.ms/spec/1.0/");
|
||||
define("NS_MEDIA", "http://purl.org/syndication/atommedia");
|
||||
define("NS_POCO", "http://portablecontacts.net/spec/1.0");
|
||||
define("NS_OSTATUS", "http://ostatus.org/schema/1.0");
|
||||
define("NS_STATUSNET", "http://status.net/schema/api/1/");
|
||||
|
||||
function ostatus_check_follow_friends() {
|
||||
$r = q("SELECT `uid`,`v` FROM `pconfig` WHERE `cat`='system' AND `k`='ostatus_legacy_contact' AND `v` != ''");
|
||||
|
||||
|
@ -193,14 +184,14 @@ function ostatus_salmon_author($xml, $importer) {
|
|||
@$doc->loadXML($xml);
|
||||
|
||||
$xpath = new DomXPath($doc);
|
||||
$xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom");
|
||||
$xpath->registerNamespace('thr', "http://purl.org/syndication/thread/1.0");
|
||||
$xpath->registerNamespace('georss', "http://www.georss.org/georss");
|
||||
$xpath->registerNamespace('activity', "http://activitystrea.ms/spec/1.0/");
|
||||
$xpath->registerNamespace('media', "http://purl.org/syndication/atommedia");
|
||||
$xpath->registerNamespace('poco', "http://portablecontacts.net/spec/1.0");
|
||||
$xpath->registerNamespace('ostatus', "http://ostatus.org/schema/1.0");
|
||||
$xpath->registerNamespace('statusnet', "http://status.net/schema/api/1/");
|
||||
$xpath->registerNamespace('atom', NAMESPACE_ATOM1);
|
||||
$xpath->registerNamespace('thr', NAMESPACE_THREAD);
|
||||
$xpath->registerNamespace('georss', NAMESPACE_GEORSS);
|
||||
$xpath->registerNamespace('activity', NAMESPACE_ACTIVITY);
|
||||
$xpath->registerNamespace('media', NAMESPACE_MEDIA);
|
||||
$xpath->registerNamespace('poco', NAMESPACE_POCO);
|
||||
$xpath->registerNamespace('ostatus', NAMESPACE_OSTATUS);
|
||||
$xpath->registerNamespace('statusnet', NAMESPACE_STATUSNET);
|
||||
|
||||
$entries = $xpath->query('/atom:entry');
|
||||
|
||||
|
@ -224,14 +215,14 @@ function ostatus_import($xml,$importer,&$contact, &$hub) {
|
|||
@$doc->loadXML($xml);
|
||||
|
||||
$xpath = new DomXPath($doc);
|
||||
$xpath->registerNamespace('atom', "http://www.w3.org/2005/Atom");
|
||||
$xpath->registerNamespace('thr', "http://purl.org/syndication/thread/1.0");
|
||||
$xpath->registerNamespace('georss', "http://www.georss.org/georss");
|
||||
$xpath->registerNamespace('activity', "http://activitystrea.ms/spec/1.0/");
|
||||
$xpath->registerNamespace('media', "http://purl.org/syndication/atommedia");
|
||||
$xpath->registerNamespace('poco', "http://portablecontacts.net/spec/1.0");
|
||||
$xpath->registerNamespace('ostatus', "http://ostatus.org/schema/1.0");
|
||||
$xpath->registerNamespace('statusnet', "http://status.net/schema/api/1/");
|
||||
$xpath->registerNamespace('atom', NAMESPACE_ATOM1);
|
||||
$xpath->registerNamespace('thr', NAMESPACE_THREAD);
|
||||
$xpath->registerNamespace('georss', NAMESPACE_GEORSS);
|
||||
$xpath->registerNamespace('activity', NAMESPACE_ACTIVITY);
|
||||
$xpath->registerNamespace('media', NAMESPACE_MEDIA);
|
||||
$xpath->registerNamespace('poco', NAMESPACE_POCO);
|
||||
$xpath->registerNamespace('ostatus', NAMESPACE_OSTATUS);
|
||||
$xpath->registerNamespace('statusnet', NAMESPACE_STATUSNET);
|
||||
|
||||
$gub = "";
|
||||
$hub_attributes = $xpath->query("/atom:feed/atom:link[@rel='hub']")->item(0)->attributes;
|
||||
|
@ -1120,16 +1111,16 @@ function ostatus_format_picture_post($body) {
|
|||
function ostatus_add_header($doc, $owner) {
|
||||
$a = get_app();
|
||||
|
||||
$root = $doc->createElementNS(NS_ATOM, 'feed');
|
||||
$root = $doc->createElementNS(NAMESPACE_ATOM1, 'feed');
|
||||
$doc->appendChild($root);
|
||||
|
||||
$root->setAttribute("xmlns:thr", NS_THR);
|
||||
$root->setAttribute("xmlns:georss", NS_GEORSS);
|
||||
$root->setAttribute("xmlns:activity", NS_ACTIVITY);
|
||||
$root->setAttribute("xmlns:media", NS_MEDIA);
|
||||
$root->setAttribute("xmlns:poco", NS_POCO);
|
||||
$root->setAttribute("xmlns:ostatus", NS_OSTATUS);
|
||||
$root->setAttribute("xmlns:statusnet", NS_STATUSNET);
|
||||
$root->setAttribute("xmlns:thr", NAMESPACE_THREAD);
|
||||
$root->setAttribute("xmlns:georss", NAMESPACE_GEORSS);
|
||||
$root->setAttribute("xmlns:activity", NAMESPACE_ACTIVITY);
|
||||
$root->setAttribute("xmlns:media", NAMESPACE_MEDIA);
|
||||
$root->setAttribute("xmlns:poco", NAMESPACE_POCO);
|
||||
$root->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS);
|
||||
$root->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET);
|
||||
|
||||
$attributes = array("uri" => "https://friendi.ca", "version" => FRIENDICA_VERSION."-".DB_UPDATE_VERSION);
|
||||
xml_add_element($doc, $root, "generator", FRIENDICA_PLATFORM, $attributes);
|
||||
|
@ -1321,6 +1312,10 @@ function ostatus_add_author($doc, $owner) {
|
|||
function ostatus_entry($doc, $item, $owner, $toplevel = false, $repeat = false) {
|
||||
$a = get_app();
|
||||
|
||||
if (($item["id"] != $item["parent"]) AND (normalise_link($item["author-link"]) != normalise_link($owner["url"]))) {
|
||||
logger("OStatus entry is from author ".$owner["url"]." - not from ".$item["author-link"].". Quitting.", LOGGER_DEBUG);
|
||||
}
|
||||
|
||||
$is_repeat = false;
|
||||
|
||||
/* if (!$repeat) {
|
||||
|
@ -1343,15 +1338,15 @@ function ostatus_entry($doc, $item, $owner, $toplevel = false, $repeat = false)
|
|||
$entry = $doc->createElement("activity:object");
|
||||
$title = sprintf("New note by %s", $owner["nick"]);
|
||||
} else {
|
||||
$entry = $doc->createElementNS(NS_ATOM, "entry");
|
||||
$entry = $doc->createElementNS(NAMESPACE_ATOM1, "entry");
|
||||
|
||||
$entry->setAttribute("xmlns:thr", NS_THR);
|
||||
$entry->setAttribute("xmlns:georss", NS_GEORSS);
|
||||
$entry->setAttribute("xmlns:activity", NS_ACTIVITY);
|
||||
$entry->setAttribute("xmlns:media", NS_MEDIA);
|
||||
$entry->setAttribute("xmlns:poco", NS_POCO);
|
||||
$entry->setAttribute("xmlns:ostatus", NS_OSTATUS);
|
||||
$entry->setAttribute("xmlns:statusnet", NS_STATUSNET);
|
||||
$entry->setAttribute("xmlns:thr", NAMESPACE_THREAD);
|
||||
$entry->setAttribute("xmlns:georss", NAMESPACE_GEORSS);
|
||||
$entry->setAttribute("xmlns:activity", NAMESPACE_ACTIVITY);
|
||||
$entry->setAttribute("xmlns:media", NAMESPACE_MEDIA);
|
||||
$entry->setAttribute("xmlns:poco", NAMESPACE_POCO);
|
||||
$entry->setAttribute("xmlns:ostatus", NAMESPACE_OSTATUS);
|
||||
$entry->setAttribute("xmlns:statusnet", NAMESPACE_STATUSNET);
|
||||
|
||||
$author = ostatus_add_author($doc, $owner);
|
||||
$entry->appendChild($author);
|
||||
|
|
18
js/acl.js
18
js/acl.js
|
@ -28,7 +28,7 @@ function ACL(backend_url, preset, automention, is_mobile){
|
|||
if (preset.length==0) this.showall.addClass("selected");
|
||||
|
||||
/*events*/
|
||||
this.showall.click(this.on_showall);
|
||||
this.showall.click(this.on_showall.bind(this));
|
||||
$(document).on("click", ".acl-button-show", this.on_button_show.bind(this));
|
||||
$(document).on("click", ".acl-button-hide", this.on_button_hide.bind(this));
|
||||
$("#acl-search").keypress(this.on_search.bind(this));
|
||||
|
@ -123,12 +123,8 @@ ACL.prototype.on_button_show = function(event){
|
|||
event.preventDefault()
|
||||
event.stopImmediatePropagation()
|
||||
event.stopPropagation();
|
||||
|
||||
/*this.showall.removeClass("selected");
|
||||
$(this).siblings(".acl-button-hide").removeClass("selected");
|
||||
$(this).toggleClass("selected");*/
|
||||
|
||||
this.set_allow($(this).parent().attr('id'));
|
||||
|
||||
this.set_allow($(event.target).parent().attr('id'));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -137,11 +133,7 @@ ACL.prototype.on_button_hide = function(event){
|
|||
event.stopImmediatePropagation()
|
||||
event.stopPropagation();
|
||||
|
||||
/*this.showall.removeClass("selected");
|
||||
$(this).siblings(".acl-button-show").removeClass("selected");
|
||||
$(this).toggleClass("selected");*/
|
||||
|
||||
this.set_deny($(this).parent().attr('id'));
|
||||
this.set_deny($(event.target).parent().attr('id'));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -303,7 +295,7 @@ ACL.prototype.populate = function(data){
|
|||
html = "<div class='acl-list-item {4} {5} type{2}' title='{6}' id='{2}{3}'>"+this.item_tpl+"</div>";
|
||||
html = html.format(item.photo, item.name, item.type, item.id, (item.forum=='1'?'forum':''), item.network, item.link);
|
||||
if (item.uids!=undefined) this.group_uids[item.id] = item.uids;
|
||||
//console.log(html);
|
||||
|
||||
this.list_content.append(html);
|
||||
this.data[item.id] = item;
|
||||
}.bind(this));
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
|
||||
require_once('include/items.php');
|
||||
require_once('include/dfrn.php');
|
||||
require_once('include/event.php');
|
||||
|
||||
require_once('library/defuse/php-encryption-1.2.1/Crypto.php');
|
||||
|
@ -209,7 +210,7 @@ function dfrn_notify_post(&$a) {
|
|||
logger('rino: decrypted data: ' . $data, LOGGER_DATA);
|
||||
}
|
||||
|
||||
$ret = local_delivery($importer,$data);
|
||||
$ret = dfrn::import($data, $importer);
|
||||
xml_status($ret);
|
||||
|
||||
// NOTREACHED
|
||||
|
|
|
@ -116,7 +116,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');
|
||||
require_once('include/ForumManager.php');
|
||||
|
||||
if(! x($a->page,'aside'))
|
||||
$a->page['aside'] = '';
|
||||
|
@ -150,7 +150,7 @@ function network_init(&$a) {
|
|||
}
|
||||
|
||||
$a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network','standard',$group_id) : '');
|
||||
$a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? widget_forumlist(local_user(),$cid) : '');
|
||||
$a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? ForumManager::widget(local_user(),$cid) : '');
|
||||
$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);
|
||||
|
|
10
mod/ping.php
10
mod/ping.php
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
require_once("include/datetime.php");
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/forums.php');
|
||||
require_once('include/ForumManager.php');
|
||||
require_once('include/group.php');
|
||||
require_once("mod/proxy.php");
|
||||
|
||||
|
@ -97,7 +97,7 @@ function ping_init(&$a) {
|
|||
}
|
||||
|
||||
if(intval(feature_enabled(local_user(),'forumlist_widget'))) {
|
||||
$forums_unseen = forums_count_unseen();
|
||||
$forums_unseen = ForumManager::count_unseen_items();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -392,7 +392,11 @@ function ping_get_notifications($uid) {
|
|||
// Replace the name with {0} but ensure to make that only once
|
||||
// The {0} is used later and prints the name in bold.
|
||||
|
||||
$pos = strpos($notification["message"],$notification['name']);
|
||||
if ($notification['name'] != "")
|
||||
$pos = strpos($notification["message"],$notification['name']);
|
||||
else
|
||||
$pos = false;
|
||||
|
||||
if ($pos !== false)
|
||||
$notification["message"] = substr_replace($notification["message"],"{0}",$pos,strlen($notification["name"]));
|
||||
|
||||
|
|
|
@ -35,6 +35,11 @@ body, section, blockquote, blockquote.shared_content, #profile-jot-form,
|
|||
background-color: #171B1F !important;
|
||||
}
|
||||
|
||||
#profile-jot-acl-wrapper, #event-notice, #event-wrapper,
|
||||
#cboxLoadedContent, .contact-photo-menu {
|
||||
background-color: #252C33 !important;
|
||||
}
|
||||
|
||||
div.rte, .mceContentBody {
|
||||
background:none repeat scroll 0 0 #333333!important;
|
||||
color:#FFF!important;
|
||||
|
@ -63,3 +68,35 @@ li :hover {
|
|||
#viewcontact_wrapper-network {
|
||||
background-color: #343434;
|
||||
}
|
||||
|
||||
table.smiley-preview{
|
||||
background-color: #252C33 !important;
|
||||
}
|
||||
|
||||
/* ACL permission popup */
|
||||
.acl-list-item.groupshow {
|
||||
border-color: #9ade00 !important;
|
||||
}
|
||||
|
||||
.acl-list-item.grouphide {
|
||||
border-color: #ff4141 !important;
|
||||
}
|
||||
|
||||
/* Notifications */
|
||||
li.notify-unseen {
|
||||
background-color: #252C33;
|
||||
}
|
||||
|
||||
li.notify-seen {
|
||||
background-color: #1C2126;
|
||||
}
|
||||
|
||||
.photo-top-album-name {
|
||||
background-color: #252C33;
|
||||
}
|
||||
|
||||
#panel {
|
||||
background-color: #252C33;
|
||||
border: 3px solid #364e59;
|
||||
color: #989898;
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ nav .nav-notify {
|
|||
padding: 1px 3px;
|
||||
border-radius: 5px 5px 5px 5px;
|
||||
}
|
||||
// -----
|
||||
|
||||
nav .nav-menu-icon .nav-notify {
|
||||
top: 0px;
|
||||
}
|
||||
|
|
|
@ -269,7 +269,7 @@ div.pager {
|
|||
/* global */
|
||||
body {
|
||||
/* font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; */
|
||||
font-family: system,-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Helvetica,Arial,sans-serif;
|
||||
font-family: -apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Helvetica,Arial,sans-serif;
|
||||
font-size: 14px;
|
||||
/* font-size: 13px;
|
||||
line-height: 19.5px; */
|
||||
|
@ -1042,6 +1042,9 @@ aside {
|
|||
box-shadow: 1px 2px 0px 0px #D8D8D8;
|
||||
color: #737373;
|
||||
}
|
||||
aside .vcard .tool {
|
||||
clear: both;
|
||||
}
|
||||
aside .vcard .fn {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
|
@ -1050,7 +1053,6 @@ aside .vcard .fn {
|
|||
}
|
||||
aside .vcard .title {
|
||||
margin-bottom: 5px;
|
||||
float: left;
|
||||
}
|
||||
aside .vcard dl {
|
||||
height: auto;
|
||||
|
@ -1583,63 +1585,34 @@ section.minimal {
|
|||
width: calc(100% - 165px);
|
||||
}
|
||||
|
||||
.wall-item-container.comment .wall-item-content {
|
||||
max-width: 585px;
|
||||
}
|
||||
.wall-item-container.thread_level_3 .wall-item-content {
|
||||
max-width: 570px;
|
||||
}
|
||||
.wall-item-container.thread_level_4 .wall-item-content {
|
||||
max-width: 555px;
|
||||
}
|
||||
.wall-item-container.thread_level_5 .wall-item-content {
|
||||
max-width: 540px;
|
||||
}
|
||||
.wall-item-container.thread_level_6 .wall-item-content {
|
||||
max-width: 525px;
|
||||
}
|
||||
.wall-item-container.comment .wall-item-content,
|
||||
.wall-item-container.thread_level_3 .wall-item-content,
|
||||
.wall-item-container.thread_level_4 .wall-item-content,
|
||||
.wall-item-container.thread_level_5 .wall-item-content,
|
||||
.wall-item-container.thread_level_6 .wall-item-content,
|
||||
.wall-item-container.thread_level_7 .wall-item-content {
|
||||
max-width: 510px;
|
||||
max-width: calc(100% - 1px);
|
||||
}
|
||||
|
||||
.children .wall-item-comment-wrapper textarea {
|
||||
width: 570px;
|
||||
}
|
||||
.wall-item-container.thread_level_3 .wall-item-comment-wrapper textarea {
|
||||
width: 555px;
|
||||
}
|
||||
.wall-item-container.thread_level_4 .wall-item-comment-wrapper textarea {
|
||||
width: 540px;
|
||||
}
|
||||
.wall-item-container.thread_level_5 .wall-item-comment-wrapper textarea {
|
||||
width: 525px;
|
||||
}
|
||||
.wall-item-container.thread_level_6 .wall-item-comment-wrapper textarea {
|
||||
width: 510px;
|
||||
}
|
||||
.children .wall-item-comment-wrapper textarea,
|
||||
.wall-item-container.thread_level_3 .wall-item-comment-wrapper textarea,
|
||||
.wall-item-container.thread_level_4 .wall-item-comment-wrapper textarea,
|
||||
.wall-item-container.thread_level_5 .wall-item-comment-wrapper textarea,
|
||||
.wall-item-container.thread_level_6 .wall-item-comment-wrapper textarea,
|
||||
.wall-item-container.thread_level_7 .wall-item-comment-wrapper textarea {
|
||||
width: 495px;
|
||||
width: calc(100% - 11px);
|
||||
}
|
||||
|
||||
.children .wall-item-bottom .comment-edit-preview {
|
||||
width: 575px;
|
||||
}
|
||||
.wall-item-container.thread_level_3 .wall-item-bottom .comment-edit-preview {
|
||||
width: 560px;
|
||||
}
|
||||
.wall-item-container.thread_level_4 .wall-item-bottom .comment-edit-preview {
|
||||
width: 545px;
|
||||
}
|
||||
.wall-item-container.thread_level_5 .wall-item-bottom .comment-edit-preview {
|
||||
width: 530px;
|
||||
}
|
||||
.wall-item-container.thread_level_6 .wall-item-bottom .comment-edit-preview {
|
||||
width: 515px;
|
||||
}
|
||||
.children .wall-item-bottom .comment-edit-preview,
|
||||
.wall-item-container.thread_level_3 .wall-item-bottom .comment-edit-preview,
|
||||
.wall-item-container.thread_level_4 .wall-item-bottom .comment-edit-preview,
|
||||
.wall-item-container.thread_level_5 .wall-item-bottom .comment-edit-preview,
|
||||
.wall-item-container.thread_level_6 .wall-item-bottom .comment-edit-preview,
|
||||
.wall-item-container.thread_level_7 .wall-item-bottom .comment-edit-preview {
|
||||
width: 500px;
|
||||
width: calc(100% - 6px);
|
||||
}
|
||||
|
||||
|
||||
.wall-item-container.comment .contact-photo {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
|
@ -2051,6 +2024,15 @@ section.minimal {
|
|||
cursor: pointer;
|
||||
margin-top: 3px;
|
||||
height: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
#smileybutton {
|
||||
position: absolute;
|
||||
z-index: 99;
|
||||
}
|
||||
table.smiley-preview{
|
||||
background-color: #FFF;
|
||||
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
#jot-perms-icon {
|
||||
float: right;
|
||||
|
|
|
@ -220,7 +220,7 @@ function vier_community_info() {
|
|||
//Community_Pages at right_aside
|
||||
if($show_pages AND local_user()) {
|
||||
|
||||
require_once('include/forums.php');
|
||||
require_once('include/ForumManager.php');
|
||||
|
||||
if(x($_GET['cid']) && intval($_GET['cid']) != 0)
|
||||
$cid = $_GET['cid'];
|
||||
|
@ -228,7 +228,7 @@ function vier_community_info() {
|
|||
//sort by last updated item
|
||||
$lastitem = true;
|
||||
|
||||
$contacts = get_forumlist($a->user['uid'],true,$lastitem, true);
|
||||
$contacts = ForumManager::get_list($a->user['uid'],true,$lastitem, true);
|
||||
$total = count($contacts);
|
||||
$visible_forums = 10;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user