aboutsummaryrefslogtreecommitdiffstats
path: root/mod
diff options
context:
space:
mode:
Diffstat (limited to 'mod')
-rw-r--r--mod/api.php11
-rw-r--r--mod/apps.php3
-rw-r--r--mod/contacts.php47
-rw-r--r--mod/crepair.php105
-rw-r--r--mod/dfrn_confirm.php29
-rw-r--r--mod/dfrn_notify.php69
-rw-r--r--mod/dfrn_poll.php148
-rw-r--r--mod/dfrn_request.php52
-rw-r--r--mod/directory.php41
-rw-r--r--mod/display.php199
-rw-r--r--mod/editpost.php120
-rw-r--r--mod/follow.php208
-rw-r--r--mod/friendika.php68
-rw-r--r--mod/group.php127
-rw-r--r--mod/help.php37
-rw-r--r--mod/home.php2
-rw-r--r--mod/install.php76
-rw-r--r--mod/invite.php18
-rw-r--r--mod/item.php185
-rw-r--r--mod/like.php16
-rw-r--r--mod/lostpass.php41
-rw-r--r--mod/manage.php2
-rw-r--r--mod/match.php57
-rw-r--r--mod/message.php23
-rw-r--r--mod/network.php438
-rw-r--r--mod/notes.php129
-rw-r--r--mod/notifications.php31
-rw-r--r--mod/oexchange.php53
-rw-r--r--mod/openid.php11
-rw-r--r--mod/opensearch.php18
-rw-r--r--mod/parse_url.php12
-rw-r--r--mod/photo.php11
-rw-r--r--mod/photos.php176
-rw-r--r--mod/ping.php2
-rw-r--r--mod/profile.php294
-rw-r--r--mod/profile_photo.php37
-rw-r--r--mod/profiles.php78
-rw-r--r--mod/profperm.php141
-rw-r--r--mod/redir.php5
-rw-r--r--mod/register.php52
-rw-r--r--mod/regmod.php11
-rw-r--r--mod/removeme.php2
-rw-r--r--mod/rsd_xml.php24
-rw-r--r--mod/salmon.php2
-rw-r--r--mod/search.php89
-rw-r--r--mod/settings.php175
-rw-r--r--mod/share.php23
-rw-r--r--mod/uexport.php72
-rw-r--r--mod/update_network.php11
-rw-r--r--mod/update_profile.php10
-rw-r--r--mod/viewcontacts.php15
-rw-r--r--mod/wall_upload.php2
-rw-r--r--mod/xrd.php2
53 files changed, 2205 insertions, 1405 deletions
diff --git a/mod/api.php b/mod/api.php
new file mode 100644
index 000000000..fa5e43de9
--- /dev/null
+++ b/mod/api.php
@@ -0,0 +1,11 @@
+<?php
+
+require_once('include/api.php');
+
+function api_content(&$a) {
+ echo api_call($a);
+ killme();
+}
+
+
+
diff --git a/mod/apps.php b/mod/apps.php
index 1d08d2e7f..58752de32 100644
--- a/mod/apps.php
+++ b/mod/apps.php
@@ -5,10 +5,11 @@ function apps_content(&$a) {
$o .= '<h3>' . t('Applications') . '</h3>';
+ $o .= '<div class="app-title"><a href="notes">' . t('Private Notes') . '</a></div>';
+
if($a->apps)
$o .= $a->apps;
-
return $o;
} \ No newline at end of file
diff --git a/mod/contacts.php b/mod/contacts.php
index c2d28dc1f..0ad0d217f 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -9,15 +9,20 @@ function contacts_init(&$a) {
$a->page['aside'] .= group_side();
if($a->config['register_policy'] != REGISTER_CLOSED)
- $a->page['aside'] .= '<div class="side-invite-link-wrapper" id="side-invite-link-wrapper" ><a href="invite" class="side-invite-link" id="side-invite-link">' . t("Invite Friends") . '</a></div>';
+ $a->page['aside'] .= '<div class="side-link" id="side-invite-link" ><a href="invite" >' . t("Invite Friends") . '</a></div>';
- $tpl = load_view_file('view/follow.tpl');
+ if(strlen(get_config('system','directory_submit_url')))
+ $a->page['aside'] .= '<div class="side-link" id="side-match-link"><a href="match" >' . t('Find People With Shared Interests') . '</a></div>';
+
+ $tpl = get_markup_template('follow.tpl');
$a->page['aside'] .= replace_macros($tpl,array(
'$label' => t('Connect/Follow'),
'$hint' => t('Example: bob@example.com, http://example.com/barbara'),
'$follow' => t('Follow')
));
+
+
}
function contacts_post(&$a) {
@@ -137,7 +142,8 @@ function contacts_content(&$a) {
intval(local_user())
);
if($r) {
- notice( t('Contact has been ') . (($blocked) ? t('blocked') : t('unblocked')) . EOL );
+ //notice( t('Contact has been ') . (($blocked) ? t('blocked') : t('unblocked')) . EOL );
+ notice( (($blocked) ? t('Contact has been blocked') : t('Contact has been unblocked')) . EOL );
}
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
return; // NOTREACHED
@@ -151,7 +157,7 @@ function contacts_content(&$a) {
intval(local_user())
);
if($r) {
- notice( t('Contact has been ') . (($readonly) ? t('ignored') : t('unignored')) . EOL );
+ notice( (($readonly) ? t('Contact has been ignored') : t('Contact has been unignored')) . EOL );
}
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
return; // NOTREACHED
@@ -162,7 +168,7 @@ function contacts_content(&$a) {
// create an unfollow slap
if($orig_record[0]['network'] === 'stat') {
- $tpl = load_view_file('view/follow_slap.tpl');
+ $tpl = get_markup_template('follow_slap.tpl');
$slap = replace_macros($tpl, array(
'$name' => $a->user['username'],
'$profile_page' => $a->get_baseurl() . '/profile/' . $a->user['nickname'],
@@ -174,8 +180,8 @@ function contacts_content(&$a) {
'$type' => 'text',
'$content' => t('stopped following'),
'$nick' => $a->user['nickname'],
- '$verb' => ACTIVITY_UNFOLLOW,
- '$ostat_follow' => '<as:verb>http://ostatus.org/schema/1.0/unfollow</as:verb>' . "\r\n"
+ '$verb' => 'http://ostatus.org/schema/1.0/unfollow', // ACTIVITY_UNFOLLOW,
+ '$ostat_follow' => '' // '<as:verb>http://ostatus.org/schema/1.0/unfollow</as:verb>' . "\r\n"
));
if((x($orig_record[0],'notify')) && (strlen($orig_record[0]['notify']))) {
@@ -209,12 +215,12 @@ function contacts_content(&$a) {
return;
}
- $tpl = load_view_file('view/contact_head.tpl');
+ $tpl = get_markup_template('contact_head.tpl');
$a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl()));
require_once('include/contact_selectors.php');
- $tpl = load_view_file("view/contact_edit.tpl");
+ $tpl = get_markup_template("contact_edit.tpl");
switch($r[0]['rel']) {
case REL_BUD:
@@ -243,6 +249,9 @@ function contacts_content(&$a) {
$sparkle = '';
}
+ $insecure = '<div id="profile-edit-insecure"><p><img src="images/unlock_icon.gif" alt="' . t('Privacy Unavailable') . '" />&nbsp;'
+ . t('Private communications are not available for this contact.') . '</p></div>';
+
$last_update = (($r[0]['last-update'] == '0000-00-00 00:00:00')
? t('Never')
: datetime_convert('UTC',date_default_timezone_get(),$r[0]['last-update'],'D, j M Y, g:i A'));
@@ -252,9 +261,20 @@ function contacts_content(&$a) {
$o .= replace_macros($tpl,array(
'$header' => t('Contact Editor'),
+ '$submit' => t('Submit'),
+ '$lbl_vis1' => t('Profile Visibility'),
+ '$lbl_vis2' => sprintf( t('Please choose the profile you would like to display to %s when viewing your profile securely.'), $r[0]['name']),
+ '$lbl_info1' => t('Contact Information / Notes'),
+ '$lbl_rep1' => t('Online Reputation'),
+ '$lbl_rep2' => t('Occasionally your friends may wish to inquire about this person\'s online legitimacy.'),
+ '$lbl_rep3' => t('You may help them choose whether or not to interact with this person by providing a <em>reputation</em> to guide them.'),
+ '$lbl_rep4' => t('Please take a moment to elaborate on this selection if you feel it could be helpful to others.'),
'$visit' => t('Visit $name\'s profile'),
'$blockunblock' => t('Block/Unblock contact'),
'$ignorecont' => t('Ignore contact'),
+ '$altcrepair' => t('Repair contact URL settings'),
+ '$lblcrepair' => t("Repair contact URL settings \x28WARNING: Advanced\x29"),
+ '$lblrecent' => t('View conversations'),
'$delete' => t('Delete contact'),
'$poll_interval' => contact_poll_interval($r[0]['priority']),
'$lastupdtext' => t('Last updated: '),
@@ -265,7 +285,7 @@ function contacts_content(&$a) {
'$contact_id' => $r[0]['id'],
'$block_text' => (($r[0]['blocked']) ? t('Unblock this contact') : t('Block this contact') ),
'$ignore_text' => (($r[0]['readonly']) ? t('Unignore this contact') : t('Ignore this contact') ),
- '$insecure' => (($r[0]['network'] === 'stat') ? load_view_file('view/insecure_net.tpl') : ''),
+ '$insecure' => (($r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_FACEBOOK) ? $insecure : ''),
'$info' => $r[0]['info'],
'$blocked' => (($r[0]['blocked']) ? '<div id="block-message">' . t('Currently blocked') . '</div>' : ''),
'$ignored' => (($r[0]['readonly']) ? '<div id="ignore-message">' . t('Currently ignored') . '</div>' : ''),
@@ -297,7 +317,7 @@ function contacts_content(&$a) {
$search = ((x($_GET,'search')) ? notags(trim($_GET['search'])) : '');
- $tpl = load_view_file("view/contacts-top.tpl");
+ $tpl = get_markup_template("contacts-top.tpl");
$o .= replace_macros($tpl,array(
'$header' => t('Contacts'),
'$hide_url' => ((strlen($sql_extra)) ? 'contacts/all' : 'contacts' ),
@@ -331,7 +351,7 @@ function contacts_content(&$a) {
if(count($r)) {
- $tpl = load_view_file("view/contact_template.tpl");
+ $tpl = get_markup_template("contact_template.tpl");
foreach($r as $rr) {
if($rr['self'])
@@ -364,13 +384,14 @@ function contacts_content(&$a) {
$o .= replace_macros($tpl, array(
- '$img_hover' => t('Visit ') . $rr['name'] . t('\'s profile'),
+ '$img_hover' => t('Visit $username\'s profile'),
'$edit_hover' => t('Edit contact'),
'$id' => $rr['id'],
'$alt_text' => $alt_text,
'$dir_icon' => $dir_icon,
'$thumb' => $rr['thumb'],
'$name' => substr($rr['name'],0,20),
+ '$username' => $rr['name'],
'$sparkle' => $sparkle,
'$url' => $url
));
diff --git a/mod/crepair.php b/mod/crepair.php
new file mode 100644
index 000000000..01b88d37a
--- /dev/null
+++ b/mod/crepair.php
@@ -0,0 +1,105 @@
+<?php
+
+function crepair_post(&$a) {
+ if(! local_user())
+ return;
+
+ $cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
+
+ if($cid) {
+ $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($cid),
+ intval(local_user())
+ );
+ }
+
+ if(! count($r))
+ return;
+
+ $contact = $r[0];
+
+ $nick = ((x($_POST,'nick')) ? $_POST['nick'] : null);
+ $url = ((x($_POST,'url')) ? $_POST['url'] : null);
+ $request = ((x($_POST,'request')) ? $_POST['request'] : null);
+ $confirm = ((x($_POST,'confirm')) ? $_POST['confirm'] : null);
+ $notify = ((x($_POST,'notify')) ? $_POST['notify'] : null);
+ $poll = ((x($_POST,'poll')) ? $_POST['poll'] : null);
+
+
+ $r = q("UPDATE `contact` SET `nick` = '%s', `url` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s'
+ WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ dbesc($nick),
+ dbesc($url),
+ dbesc($request),
+ dbesc($confirm),
+ dbesc($notify),
+ dbesc($poll),
+ intval($contact['id']),
+ local_user()
+ );
+
+ if($r)
+ notice( t('Contact settings applied.') . EOL);
+ else
+ notice( t('Contact update failed.') . EOL);
+
+ return;
+}
+
+
+
+function crepair_content(&$a) {
+
+ if(! local_user()) {
+ notice( t('Permission denied.') . EOL);
+ return;
+ }
+
+ $cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
+
+ if($cid) {
+ $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($cid),
+ intval(local_user())
+ );
+ }
+
+ if(! count($r)) {
+ notice( t('Contact not found.') . EOL);
+ return;
+ }
+
+ $contact = $r[0];
+
+ $msg1 = t('Repair Contact Settings');
+
+ $msg2 = t('<strong>WARNING: This is highly advanced</strong> and if you enter incorrect information your communications with this contact will stop working.');
+ $msg3 = t('Please use your browser \'Back\' button <strong>now</strong> if you are uncertain what to do on this page.');
+
+ $o .= '<h2>' . $msg1 . '</h2>';
+
+ $o .= '<div class="error-message">' . $msg2 . EOL . EOL. $msg3 . '</div>';
+
+ $tpl = get_markup_template('crepair.tpl');
+ $o .= replace_macros($tpl, array(
+ '$label_name' => t('Name'),
+ '$label_nick' => t('Account Nickname'),
+ '$label_url' => t('Account URL'),
+ '$label_request' => t('Friend Request URL'),
+ '$label_confirm' => t('Friend Confirm URL'),
+ '$label_notify' => t('Notification Endpoint URL'),
+ '$label_poll' => t('Poll/Feed URL'),
+ '$contact_name' => $contact['name'],
+ '$contact_nick' => $contact['nick'],
+ '$contact_id' => $contact['id'],
+ '$contact_url' => $contact['url'],
+ '$request' => $contact['request'],
+ '$confirm' => $contact['confirm'],
+ '$notify' => $contact['notify'],
+ '$poll' => $contact['poll'],
+ '$lbl_submit' => t('Submit')
+ ));
+
+ return $o;
+
+} \ No newline at end of file
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 1b42c13b8..4e2a70e04 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -240,7 +240,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
notice( t('Unexpected response from remote site: ') . EOL . $leading_junk . EOL );
}
- $xml = simplexml_load_string($res);
+ $xml = parse_xml_string($res);
$status = (int) $xml->status;
$message = unxmlify($xml->message); // human readable text of what may have gone wrong.
switch($status) {
@@ -423,9 +423,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$arr['author-avatar'] = $arr['owner-avatar'] = $self[0]['thumb'];
$arr['verb'] = ACTIVITY_FRIEND;
$arr['object-type'] = ACTIVITY_OBJ_PERSON;
- $arr['body'] = '[url=' . $self[0]['url'] . ']' . $self[0]['name'] . '[/url] ' . t('is now friends with')
- . ' [url=' . $contact['url'] . ']' . $contact['name'] . '[/url]' . "\n\n\n"
- . ' [url=' . $contact['url'] . ']' . '[img]' . $contact['thumb'] . '[/img][/url]';
+
+ $A = '[url=' . $self[0]['url'] . ']' . $self[0]['name'] . '[/url]';
+ $B = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
+ $BPhoto = '[url=' . $contact['url'] . ']' . '[img]' . $contact['thumb'] . '[/img][/url]';
+ $arr['body'] = sprintf( t('%1$s is now friends with %2$s'), $A, $B)."\n\n\n".$Bphoto;
$arr['object'] = '<object><type>' . ACTIVITY_OBJ_PERSON . '</type><title>' . $contact['name'] . '</title>'
. '<id>' . $contact['url'] . '/' . $contact['name'] . '</id>';
@@ -434,6 +436,11 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$arr['object'] .= '</link></object>' . "\n";
$arr['last-child'] = 1;
+ $arr['allow_cid'] = $user[0]['allow_cid'];
+ $arr['allow_gid'] = $user[0]['allow_gid'];
+ $arr['deny_cid'] = $user[0]['deny_cid'];
+ $arr['deny_gid'] = $user[0]['deny_gid'];
+
$i = item_store($arr);
if($i)
proc_run('php',"include/notifier.php","activity","$i");
@@ -491,7 +498,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
dbesc($node));
if(! count($r)) {
- $message = t('No user record found for ') . '\'' . $node . '\'';
+ $message = sprintf(t('No user record found for \'%s\' '), $node);
xml_status(3,$message); // failure
// NOTREACHED
}
@@ -632,8 +639,8 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if((count($r)) && ($r[0]['notify-flags'] & NOTIFY_CONFIRM)) {
$tpl = (($new_relation == REL_BUD)
- ? load_view_file('view/friend_complete_eml.tpl')
- : load_view_file('view/intro_complete_eml.tpl'));
+ ? get_intltext_template('friend_complete_eml.tpl')
+ : get_intltext_template('intro_complete_eml.tpl'));
$email_tpl = replace_macros($tpl, array(
'$sitename' => $a->config['sitename'],
@@ -645,8 +652,12 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
'$uid' => $newuid )
);
- $res = mail($r[0]['email'], t("Connection accepted at ") . $a->config['sitename'],
- $email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
+ $res = mail($r[0]['email'], sprintf( t("Connection accepted at %s") , $a->config['sitename']),
+ $email_tpl,
+ 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
+
if(!$res) {
// pointless throwing an error here and confusing the person at the other end of the wire.
}
diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php
index 3ceb4b3fc..6709ed275 100644
--- a/mod/dfrn_notify.php
+++ b/mod/dfrn_notify.php
@@ -10,6 +10,12 @@ function dfrn_notify_post(&$a) {
$data = ((x($_POST,'data')) ? $_POST['data'] : '');
$key = ((x($_POST,'key')) ? $_POST['key'] : '');
$dissolve = ((x($_POST,'dissolve')) ? intval($_POST['dissolve']) : 0);
+ $perm = ((x($_POST,'perm')) ? notags(trim($_POST['perm'])) : 'r');
+
+ $writable = (-1);
+ if($dfrn_version >= 2.21) {
+ $writable = (($perm === 'rw') ? 1 : 0);
+ }
$direction = (-1);
if(strpos($dfrn_id,':') == 1) {
@@ -74,6 +80,14 @@ function dfrn_notify_post(&$a) {
$importer = $r[0];
+ if(($writable != (-1)) && ($writable != $importer['writable'])) {
+ q("UPDATE `contact` SET `writable` = %d WHERE `id` = %d LIMIT 1",
+ intval($writable),
+ intval($importer['id'])
+ );
+ $importer['writable'] = $writable;
+ }
+
logger('dfrn_notify: received notify from ' . $importer['name'] . ' for ' . $importer['username']);
logger('dfrn_notify: data: ' . $data, LOGGER_DATA);
@@ -118,8 +132,6 @@ function dfrn_notify_post(&$a) {
}
-
-
if($importer['readonly']) {
// We aren't receiving stuff from this person. But we will quietly ignore them
// rather than a blatant "go away" message.
@@ -198,7 +210,7 @@ function dfrn_notify_post(&$a) {
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$msg['body']))));
// load the template for private message notifications
- $tpl = load_view_file('view/mail_received_html_body_eml.tpl');
+ $tpl = get_intltext_template('mail_received_html_body_eml.tpl');
$email_html_body_tpl = replace_macros($tpl,array(
'$siteName' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
@@ -213,7 +225,7 @@ function dfrn_notify_post(&$a) {
));
// load the template for private message notifications
- $tpl = load_view_file('view/mail_received_text_body_eml.tpl');
+ $tpl = get_intltext_template('mail_received_text_body_eml.tpl');
$email_text_body_tpl = replace_macros($tpl,array(
'$siteName' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
@@ -262,10 +274,13 @@ function dfrn_notify_post(&$a) {
$when = datetime_convert('UTC','UTC','now','Y-m-d H:i:s');
}
if($deleted) {
- $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+
+ $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `contact-id` = %d LIMIT 1",
dbesc($uri),
- intval($importer['importer_uid'])
+ intval($importer['importer_uid']),
+ intval($importer['id'])
);
+
if(count($r)) {
$item = $r[0];
@@ -374,21 +389,7 @@ function dfrn_notify_post(&$a) {
if((! $is_like) && ($importer['notify-flags'] & NOTIFY_COMMENT) && (! $importer['self'])) {
require_once('bbcode.php');
$from = stripslashes($datarray['author-name']);
- /*
- $tpl = load_view_file('view/cmnt_received_eml.tpl');
- $email_tpl = replace_macros($tpl, array(
- '$sitename' => $a->config['sitename'],
- '$siteurl' => $a->get_baseurl(),
- '$username' => $importer['username'],
- '$email' => $importer['email'],
- '$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $posted_id,
- '$from' => $from,
- '$body' => html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8')
- ));
-
- $res = mail($importer['email'], $from . t(' commented on an item at ') . $a->config['sitename'],
- $email_tpl, "From: " . t('Administrator') . '@' . $a->get_hostname() );
- */
+
// name of the automated email sender
$msg['notificationfromname'] = stripslashes($datarray['author-name']);;
// noreply address to send from
@@ -405,7 +406,7 @@ function dfrn_notify_post(&$a) {
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
// load the template for private message notifications
- $tpl = load_view_file('view/cmnt_received_html_body_eml.tpl');
+ $tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
$email_html_body_tpl = replace_macros($tpl,array(
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
@@ -418,7 +419,7 @@ function dfrn_notify_post(&$a) {
));
// load the template for private message notifications
- $tpl = load_view_file('view/cmnt_received_text_body_eml.tpl');
+ $tpl = get_intltext_template('cmnt_received_text_body_eml.tpl');
$email_text_body_tpl = replace_macros($tpl,array(
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
@@ -515,24 +516,6 @@ function dfrn_notify_post(&$a) {
continue;
require_once('bbcode.php');
$from = stripslashes($datarray['author-name']);
- /*
- $tpl = load_view_file('view/cmnt_received_eml.tpl');
- $email_tpl = replace_macros($tpl, array(
- '$sitename' => $a->config['sitename'],
- '$siteurl' => $a->get_baseurl(),
- '$username' => $importer['username'],
- '$email' => $importer['email'],
- '$from' => $from,
- '$display' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $r,
- '$body' => html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8')
- ));
-
- $res = mail($importer['email'], $from . t(" commented on an item at ")
- . $a->config['sitename'],
- $email_tpl,t("From: Administrator@") . $a->get_hostname() );
- */
-
-
// name of the automated email sender
$msg['notificationfromname'] = stripslashes($datarray['author-name']);;
@@ -550,7 +533,7 @@ function dfrn_notify_post(&$a) {
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
// load the template for private message notifications
- $tpl = load_view_file('view/cmnt_received_html_body_eml.tpl');
+ $tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
$email_html_body_tpl = replace_macros($tpl,array(
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
@@ -562,7 +545,7 @@ function dfrn_notify_post(&$a) {
));
// load the template for private message notifications
- $tpl = load_view_file('view/cmnt_received_text_body_eml.tpl');
+ $tpl = get_intltext_template('cmnt_received_text_body_eml.tpl');
$email_text_body_tpl = replace_macros($tpl,array(
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
diff --git a/mod/dfrn_poll.php b/mod/dfrn_poll.php
index 334e10307..718aa165c 100644
--- a/mod/dfrn_poll.php
+++ b/mod/dfrn_poll.php
@@ -16,6 +16,7 @@ function dfrn_poll_init(&$a) {
$challenge = ((x($_GET,'challenge')) ? $_GET['challenge'] : '');
$sec = ((x($_GET,'sec')) ? $_GET['sec'] : '');
$dfrn_version = ((x($_GET,'dfrn_version')) ? (float) $_GET['dfrn_version'] : 2.0);
+ $perm = ((x($_GET,'perm')) ? $_GET['perm'] : 'r');
$direction = (-1);
@@ -26,6 +27,10 @@ function dfrn_poll_init(&$a) {
}
if(($dfrn_id === '') && (! x($_POST,'dfrn_id')) && ($a->argc > 1)) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ killme();
+ }
+
logger('dfrn_poll: public feed request from ' . $_SERVER['REMOTE_ADDR'] );
header("Content-type: application/atom+xml");
$o = get_feed_for($a, '', $a->argv[1],$last_update);
@@ -69,13 +74,14 @@ function dfrn_poll_init(&$a) {
if(strlen($s)) {
- $xml = simplexml_load_string($s);
+ $xml = parse_xml_string($s);
if((int) $xml->status == 1) {
$_SESSION['authenticated'] = 1;
$_SESSION['visitor_id'] = $r[0]['id'];
$_SESSION['visitor_home'] = $r[0]['url'];
- notice( $r[0]['username'] . t(' welcomes ') . $r[0]['name'] . EOL);
+ $_SESSION['visitor_visiting'] = $r[0]['uid'];
+ notice( sprintf(t('%s welcomes %s'), $r[0]['username'] , $r[0]['name']) . EOL);
// Visitors get 1 day session.
$session_id = session_id();
$expire = time() + 86400;
@@ -92,7 +98,7 @@ function dfrn_poll_init(&$a) {
}
- if($type === 'profile-check') {
+ if($type === 'profile-check' && $dfrn_version < 2.2 ) {
if((strlen($challenge)) && (strlen($sec))) {
@@ -182,7 +188,69 @@ function dfrn_poll_post(&$a) {
$dfrn_id = ((x($_POST,'dfrn_id')) ? $_POST['dfrn_id'] : '');
$challenge = ((x($_POST,'challenge')) ? $_POST['challenge'] : '');
$url = ((x($_POST,'url')) ? $_POST['url'] : '');
+ $sec = ((x($_POST,'sec')) ? $_POST['sec'] : '');
+ $ptype = ((x($_POST,'type')) ? $_POST['type'] : '');
$dfrn_version = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
+ $perm = ((x($_POST,'perm')) ? $_POST['perm'] : 'r');
+
+ if($ptype === 'profile-check') {
+
+ if((strlen($challenge)) && (strlen($sec))) {
+
+ logger('dfrn_poll: POST: profile-check');
+
+ q("DELETE FROM `profile_check` WHERE `expire` < " . intval(time()));
+ $r = q("SELECT * FROM `profile_check` WHERE `sec` = '%s' ORDER BY `expire` DESC LIMIT 1",
+ dbesc($sec)
+ );
+ if(! count($r)) {
+ xml_status(3, 'No ticket');
+ // NOTREACHED
+ }
+ $orig_id = $r[0]['dfrn_id'];
+ if(strpos($orig_id, ':'))
+ $orig_id = substr($orig_id,2);
+
+ $c = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
+ intval($r[0]['cid'])
+ );
+ if(! count($c)) {
+ xml_status(3, 'No profile');
+ }
+ $contact = $c[0];
+
+ $sent_dfrn_id = hex2bin($dfrn_id);
+ $challenge = hex2bin($challenge);
+
+ $final_dfrn_id = '';
+
+ if(($contact['duplex']) && strlen($contact['prvkey'])) {
+ openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
+ openssl_private_decrypt($challenge,$decoded_challenge,$contact['prvkey']);
+ }
+ else {
+ openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
+ openssl_public_decrypt($challenge,$decoded_challenge,$contact['pubkey']);
+ }
+
+ $final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
+
+ if(strpos($final_dfrn_id,':') == 1)
+ $final_dfrn_id = substr($final_dfrn_id,2);
+
+ if($final_dfrn_id != $orig_id) {
+ logger('profile_check: ' . $final_dfrn_id . ' != ' . $orig_id, LOGGER_DEBUG);
+ // did not decode properly - cannot trust this site
+ xml_status(3, 'Bad decryption');
+ }
+
+ header("Content-type: text/xml");
+ echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dfrn_poll><status>0</status><challenge>$decoded_challenge</challenge><sec>$sec</sec></dfrn_poll>";
+ killme();
+ // NOTREACHED
+ }
+
+ }
$direction = (-1);
if(strpos($dfrn_id,':') == 1) {
@@ -234,6 +302,7 @@ function dfrn_poll_post(&$a) {
if(! count($r))
killme();
+ $contact = $r[0];
$owner_uid = $r[0]['uid'];
$contact_id = $r[0]['id'];
@@ -267,6 +336,23 @@ function dfrn_poll_post(&$a) {
// NOTREACHED
}
else {
+
+ // Update the writable flag if it changed
+ logger('dfrn_poll: post request feed: ' . print_r($_POST,true),LOGGER_DATA);
+ if($dfrn_version >= 2.21) {
+ if($perm === 'rw')
+ $writable = 1;
+ else
+ $writable = 0;
+
+ if($writable != $contact['writable']) {
+ q("UPDATE `contact` SET `writable` = %d WHERE `id` = %d LIMIT 1",
+ intval($writable),
+ intval($contact_id)
+ );
+ }
+ }
+
header("Content-type: application/atom+xml");
$o = get_feed_for($a,$dfrn_id, $a->argv[1], $last_update, $direction);
echo $o;
@@ -283,6 +369,7 @@ function dfrn_poll_content(&$a) {
$destination_url = ((x($_GET,'destination_url')) ? $_GET['destination_url'] : '');
$sec = ((x($_GET,'sec')) ? $_GET['sec'] : '');
$dfrn_version = ((x($_GET,'dfrn_version')) ? (float) $_GET['dfrn_version'] : 2.0);
+ $perm = ((x($_GET,'perm')) ? $_GET['perm'] : 'r');
$direction = (-1);
if(strpos($dfrn_id,':') == 1) {
@@ -363,21 +450,51 @@ function dfrn_poll_content(&$a) {
}
if(($type === 'profile') && (strlen($sec))) {
+
// URL reply
- $s = fetch_url($r[0]['poll']
- . '?dfrn_id=' . $encrypted_id
- . '&type=profile-check'
- . '&dfrn_version=' . DFRN_PROTOCOL_VERSION
- . '&challenge=' . $challenge
- . '&sec=' . $sec
- );
+ if($dfrn_version < 2.2) {
+ $s = fetch_url($r[0]['poll']
+ . '?dfrn_id=' . $encrypted_id
+ . '&type=profile-check'
+ . '&dfrn_version=' . DFRN_PROTOCOL_VERSION
+ . '&challenge=' . $challenge
+ . '&sec=' . $sec
+ );
+ }
+ else {
+ $s = post_url($r[0]['poll'], array(
+ 'dfrn_id' => $encrypted_id,
+ 'type' => 'profile-check',
+ 'dfrn_version' => DFRN_PROTOCOL_VERSION,
+ 'challenge' => $challenge,
+ 'sec' => $sec
+ ));
+ }
+
+ $profile = $r[0]['nickname'];
+
+ switch($destination_url) {
+ case 'profile':
+ $dest = $a->get_baseurl() . '/profile/' . $profile . '?tab=profile';
+ break;
+ case 'photos':
+ $dest = $a->get_baseurl() . '/photos/' . $profile;
+ break;
+ case 'status':
+ case '':
+ $dest = $a->get_baseurl() . '/profile/' . $profile;
+ break;
+ default:
+ $dest = $destination_url;
+ break;
+ }
logger("dfrn_poll: sec profile: " . $s, LOGGER_DATA);
if(strlen($s) && strstr($s,'<?xml')) {
- $xml = simplexml_load_string($s);
+ $xml = parse_xml_string($s);
logger('dfrn_poll: profile: parsed xml: ' . print_r($xml,true), LOGGER_DATA);
@@ -389,7 +506,8 @@ function dfrn_poll_content(&$a) {
$_SESSION['authenticated'] = 1;
$_SESSION['visitor_id'] = $r[0]['id'];
$_SESSION['visitor_home'] = $r[0]['url'];
- notice( $r[0]['username'] . t(' welcomes ') . $r[0]['name'] . EOL);
+ $_SESSION['visitor_visiting'] = $r[0]['uid'];
+ notice( sprintf(t('%s welcomes %s'), $r[0]['username'] , $r[0]['name']) . EOL);
// Visitors get 1 day session.
$session_id = session_id();
$expire = time() + 86400;
@@ -398,10 +516,10 @@ function dfrn_poll_content(&$a) {
dbesc($session_id)
);
}
- $profile = $r[0]['nickname'];
- goaway((strlen($destination_url)) ? $destination_url : $a->get_baseurl() . '/profile/' . $profile);
+
+ goaway($dest);
}
- goaway($a->get_baseurl());
+ goaway($dest);
// NOTREACHED
}
diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php
index 24c466bba..8b44d22ba 100644
--- a/mod/dfrn_request.php
+++ b/mod/dfrn_request.php
@@ -12,6 +12,10 @@
if(! function_exists('dfrn_request_init')) {
function dfrn_request_init(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return;
+ }
+
if($a->argc > 1)
$which = $a->argv[1];
@@ -123,9 +127,9 @@ function dfrn_request_post(&$a) {
notice( t('Warning: profile location has no profile photo.') . EOL );
$invalid = validate_dfrn($parms);
if($invalid) {
- notice( $invalid . t(' required parameter')
- . (($invalid == 1) ? t(" was ") : t("s were ") )
- . t("not found at the given location.") . EOL ) ;
+ notice( sprintf( tt("%d required parameter was not found at the given location",
+ "%d required parameters were not found at the given location",
+ $invalid), $invalid) . EOL );
return;
}
}
@@ -238,7 +242,7 @@ function dfrn_request_post(&$a) {
intval($uid)
);
if(count($r) > $maxreq) {
- notice( $a->profile['name'] . t(' has received too many connection requests today.') . EOL);
+ notice( sprintf( t('%s has received too many connection requests today.'), $a->profile['name']) . EOL);
notice( t('Spam protection measures have been invoked.') . EOL);
notice( t('Friends are advised to please try again in 24 hours.') . EOL);
return;
@@ -306,7 +310,7 @@ function dfrn_request_post(&$a) {
return;
}
elseif($ret[0]['rel'] == REL_BUD) {
- notice( t('Apparently you are already friends with .') . $a->profile['name'] . EOL);
+ notice( sprintf( t('Apparently you are already friends with %s.'), $a->profile['name']) . EOL);
return;
}
else {
@@ -354,9 +358,9 @@ function dfrn_request_post(&$a) {
notice( t('Warning: profile location has no profile photo.') . EOL );
$invalid = validate_dfrn($parms);
if($invalid) {
- notice( $invalid . t(' required parameter')
- . (($invalid == 1) ? t(" was ") : t("s were ") )
- . t("not found at the given location.") . EOL ) ;
+ notice( sprintf( tt("%d required parameter was not found at the given location",
+ "%d required parameters were not found at the given location",
+ $invalid), $invalid) . EOL );
return;
}
@@ -495,12 +499,14 @@ function dfrn_request_content(&$a) {
$dfrn_url = notags(trim(hex2bin($_GET['dfrn_url'])));
$aes_allow = (((x($_GET,'aes_allow')) && ($_GET['aes_allow'] == 1)) ? 1 : 0);
$confirm_key = (x($_GET,'confirm_key') ? $_GET['confirm_key'] : "");
- $o .= load_view_file("view/dfrn_req_confirm.tpl");
- $o = replace_macros($o,array(
+ $tpl = get_markup_template("dfrn_req_confirm.tpl");
+ $o = replace_macros($tpl,array(
'$dfrn_url' => $dfrn_url,
'$aes_allow' => (($aes_allow) ? '<input type="hidden" name="aes_allow" value="1" />' : "" ),
'$confirm_key' => $confirm_key,
- '$username' => $a->user['username'],
+ '$welcome' => sprintf( t('Welcome home %s.'), $a->user['username']),
+ '$please' => sprintf( t('Please confirm your introduction/connection request to %s.'), $dfrn_url),
+ '$submit' => t('Confirm'),
'$uid' => $_SESSION['uid'],
'$nickname' => $a->user['nickname'],
'dfrn_rawurl' => $_GET['dfrn_url']
@@ -531,7 +537,7 @@ function dfrn_request_content(&$a) {
if($r[0]['page-flags'] != PAGE_NORMAL)
$auto_confirm = true;
if(($r[0]['notify-flags'] & NOTIFY_INTRO) && (! $auto_confirm)) {
- $email_tpl = load_view_file('view/request_notify_eml.tpl');
+ $email_tpl = get_intltext_template('request_notify_eml.tpl');
$email = replace_macros($email_tpl, array(
'$requestor' => ((strlen(stripslashes($r[0]['name']))) ? stripslashes($r[0]['name']) : t('[Name Withheld]')),
'$url' => stripslashes($r[0]['url']),
@@ -540,9 +546,12 @@ function dfrn_request_content(&$a) {
'$sitename' => $a->config['sitename']
));
$res = mail($r[0]['email'],
- t("Introduction received at ") . $a->config['sitename'],
+ t("Introduction received at ") . $a->config['sitename'],
$email,
- 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
+ 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
+
// This is a redundant notification - no point throwing errors if it fails.
}
if($auto_confirm) {
@@ -578,6 +587,12 @@ function dfrn_request_content(&$a) {
* Normal web request. Display our user's introduction form.
*/
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
+
/**
* Try to auto-fill the profile address
*/
@@ -607,23 +622,24 @@ function dfrn_request_content(&$a) {
*/
if($a->profile['page-flags'] == PAGE_NORMAL)
- $tpl = load_view_file('view/dfrn_request.tpl');
+ $tpl = get_markup_template('dfrn_request.tpl');
else
- $tpl = load_view_file('view/auto_request.tpl');
+ $tpl = get_markup_template('auto_request.tpl');
$o .= replace_macros($tpl,array(
'$header' => t('Friend/Connection Request'),
+ '$desc' => t('Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'),
'$pls_answer' => t('Please answer the following:'),
'$does_know' => t('Does $name know you?'),
'$yes' => t('Yes'),
'$no' => t('No'),
'$add_note' => t('Add a personal note:'),
- '$page_desc' => t('Please enter your profile address from one of the following supported social networks:'),
+ '$page_desc' => t("Please enter your 'Identity Address' from one of the following supported social networks:"),
'$friendika' => t('Friendika'),
'$statusnet' => t('StatusNet/Federated Social Web'),
'$private_net' => t("Private \x28secure\x29 network"),
'$public_net' => t("Public \x28insecure\x29 network"),
- '$your_address' => t('Your profile address:'),
+ '$your_address' => t('Your Identity Address:'),
'$submit' => t('Submit Request'),
'$cancel' => t('Cancel'),
'$nickname' => $a->argv[1],
diff --git a/mod/directory.php b/mod/directory.php
index 0504ac321..dfe8ec0d9 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -13,6 +13,14 @@ function directory_post(&$a) {
function directory_content(&$a) {
+
+ $everything = (($a->argc > 1 && $a->argv[1] === 'all' && is_site_admin()) ? true : false);
+
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
$o = '';
$o .= '<script> $(document).ready(function() { $(\'#nav-directory-link\').addClass(\'nav-selected\'); });</script>';
if(x($_SESSION,'theme'))
@@ -23,7 +31,7 @@ function directory_content(&$a) {
else
$search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : '');
- $tpl = load_view_file('view/directory_header.tpl');
+ $tpl = get_markup_template('directory_header.tpl');
$globaldir = '';
$gdirpath = dirname(get_config('system','directory_submit_url'));
@@ -32,32 +40,47 @@ function directory_content(&$a) {
. $gdirpath . '">' . t('Global Directory') . '</a></div></li></ul>';
}
+ $admin = '';
+ if(is_site_admin()) {
+ if($everything)
+ $admin = '<ul><li><div id="directory-admin-link"><a href="' . $a->get_baseurl() . '/directory' . '">' . t('Normal site view') . '</a></div></li></ul>';
+ else
+ $admin = '<ul><li><div id="directory-admin-link"><a href="' . $a->get_baseurl() . '/directory/all' . '">' . t('View all site entries') . '</a></div></li></ul>';
+ }
+
$o .= replace_macros($tpl, array(
'$search' => $search,
'$globaldir' => $globaldir,
- '$finding' => (strlen($search) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : "")
+ '$admin' => $admin,
+ '$finding' => (strlen($search) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : ""),
+ '$sitedir' => t('Site Directory'),
+ '$submit' => t('Find')
));
if($search)
$search = dbesc($search);
- $sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : "");
+ $sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : "");
- $publish = ((get_config('system','publish_all')) ? '' : " AND `publish` = 1 " );
+ $publish = ((get_config('system','publish_all') || $everything) ? '' : " AND `publish` = 1 " );
$r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra ");
if(count($r))
$a->set_pager_total($r[0]['total']);
+ if($everything)
+ $order = " ORDER BY `register_date` DESC ";
+ else
+ $order = " ORDER BY `name` ASC ";
- $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra ORDER BY `name` ASC LIMIT %d , %d ",
+ $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ",
intval($a->pager['start']),
intval($a->pager['itemspage'])
);
if(count($r)) {
- $tpl = load_view_file('view/directory_item.tpl');
+ $tpl = get_markup_template('directory_item.tpl');
if(in_array('small', $a->argv))
$photo = 'thumb';
@@ -86,10 +109,10 @@ function directory_content(&$a) {
}
if(strlen($rr['dob'])) {
if(($years = age($rr['dob'],$rr['timezone'],'')) != 0)
- $details .= "<br />Age: $years" ;
+ $details .= '<br />' . t('Age: ') . $years ;
}
if(strlen($rr['gender']))
- $details .= '<br />Gender: ' . $rr['gender'];
+ $details .= '<br />' . t('Gender: ') . $rr['gender'];
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
@@ -115,7 +138,7 @@ function directory_content(&$a) {
}
else
- notice("No entries (some entries may be hidden).");
+ notice( t("No entries \x28some entries may be hidden\x29.") . EOL);
return $o;
} \ No newline at end of file
diff --git a/mod/display.php b/mod/display.php
index 096ea16c9..fdb93e480 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -3,6 +3,16 @@
function display_content(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
+ require_once("include/bbcode.php");
+ require_once('include/security.php');
+ require_once('include/conversation.php');
+
+
$o = '<div id="live-display"></div>' . "\r\n";
$nick = (($a->argc > 1) ? $a->argv[1] : '');
@@ -16,15 +26,10 @@ function display_content(&$a) {
return;
}
- require_once("include/bbcode.php");
- require_once('include/security.php');
$groups = array();
- $tab = 'posts';
-
-
$contact = null;
$remote_contact = false;
@@ -48,6 +53,11 @@ function display_content(&$a) {
}
}
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
+ intval($a->profile['uid'])
+ );
+ if(count($r))
+ $a->page_contact = $r[0];
$sql_extra = "
AND `allow_cid` = ''
@@ -88,7 +98,7 @@ function display_content(&$a) {
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
- `contact`.`network`, `contact`.`thumb`, `contact`.`self`,
+ `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
@@ -102,17 +112,6 @@ function display_content(&$a) {
);
-
- $cmnt_tpl = load_view_file('view/comment_item.tpl');
- $like_tpl = load_view_file('view/like.tpl');
- $tpl = load_view_file('view/wall_item.tpl');
- $wallwall = load_view_file('view/wallwall_item.tpl');
-
- $return_url = $_SESSION['return_url'] = $a->cmd;
-
- $alike = array();
- $dlike = array();
-
if(count($r)) {
if((local_user()) && (local_user() == $a->profile['uid'])) {
@@ -122,173 +121,9 @@ function display_content(&$a) {
);
}
- foreach($r as $item) {
- like_puller($a,$item,$alike,'like');
- like_puller($a,$item,$dlike,'dislike');
- }
-
- $author_contacts = extract_item_authors($r,$a->profile['uid']);
-
- foreach($r as $item) {
-
- $template = $tpl;
-
- $comment = '';
- $owner_url = '';
- $owner_photo = '';
- $owner_name = '';
-
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
- if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
- && ($item['id'] != $item['parent']))
- continue;
-
- $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
- || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
- ? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
- : '<div class="wall-item-lock"></div>');
-
- if(can_write_wall($a,$a->profile['uid'])) {
- if($item['id'] == $item['parent']) {
- $likebuttons = replace_macros($like_tpl,array(
- '$id' => $item['id'],
- '$likethis' => t("I like this \x28toggle\x29"),
- '$nolike' => t("I don't like this \x28toggle\x29"),
- '$wait' => t('Please wait')
- ));
- }
- if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '',
- '$jsreload' => $_SESSION['return_url'],
- '$type' => 'wall-comment',
- '$id' => $item['item_id'],
- '$parent' => $item['parent'],
- '$profile_uid' => $a->profile['uid'],
- '$mylink' => $contact['url'],
- '$mytitle' => t('This is you'),
- '$myphoto' => $contact['thumb'],
- '$ww' => ''
- ));
- }
- }
-
-
- $profile_url = $item['url'];
- $sparkle = '';
-
-
- // Top-level wall post not written by the wall owner (wall-to-wall)
- // First figure out who owns it.
-
- $osparkle = '';
-
- if(($item['parent'] == $item['item_id']) && (! $item['self'])) {
-
- if($item['type'] === 'wall') {
- // I do. Put me on the left of the wall-to-wall notice.
- $owner_url = $a->contact['url'];
- $owner_photo = $a->contact['thumb'];
- $owner_name = $a->contact['name'];
- $template = $wallwall;
- $commentww = 'ww';
- }
- if($item['type'] === 'remote' && ($item['owner-link'] != $item['author-link'])) {
- // Could be anybody.
- $owner_url = $item['owner-link'];
- $owner_photo = $item['owner-avatar'];
- $owner_name = $item['owner-name'];
- $template = $wallwall;
- $commentww = 'ww';
- // If it is our contact, use a friendly redirect link
- if((link_compare($item['owner-link'],$item['url'])) && ($item['network'] === 'dfrn')) {
- $owner_url = $redirect_url;
- $osparkle = ' sparkle';
- }
-
-
- }
- }
-
- $diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true);
-
- $profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
- $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $item['thumb']);
- // Can we use our special contact URL for this author?
+ $o .= conversation($a,$r,'display', false);
- if(strlen($item['author-link'])) {
- $profile_link = $item['author-link'];
- if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
- $profile_link = $redirect_url;
- $sparkle = ' sparkle';
- }
- elseif(isset($author_contacts[$item['author-link']])) {
- $profile_link = $a->get_baseurl() . '/redir/' . $author_contacts[$item['author-link']];
- $sparkle = ' sparkle';
- }
- }
-
- if(($item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
- $drop = replace_macros(load_view_file('view/wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
- else
- $drop = replace_macros(load_view_file('view/wall_fake_drop.tpl'), array('$id' => $item['id']));
-
- $like = ((isset($alike[$item['id']])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
- $dislike = ((isset($dlike[$item['id']])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
-
- $location = (($item['location']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
- $coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
- if($coord) {
- if($location)
- $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
- else
- $location = '<span class="smalltext">' . $coord . '</span>';
- }
-
- $indent = (($item['parent'] != $item['item_id']) ? ' comment' : '');
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $indent .= ' shiny';
-
-
- $tmp_item = replace_macros($template,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$olinktitle' => t('View $owner_name\'s profile'),
- '$to' => t('to'),
- '$wall' => t('Wall-to-Wall'),
- '$vwall' => t('via Wall-To-Wall:'),
- '$profile_url' => $profile_link,
- '$name' => $profile_name,
- '$sparkle' => $sparkle,
- '$osparkle' => $osparkle,
- '$thumb' => $profile_avatar,
- '$title' => $item['title'],
- '$body' => smilies(bbcode($item['body'])),
- '$ago' => relative_date($item['created']),
- '$lock' => $lock,
- '$location' => $location,
- '$indent' => $indent,
- '$owner_url' => $owner_url,
- '$owner_photo' => $owner_photo,
- '$owner_name' => $owner_name,
- '$plink' => get_plink($item),
- '$drop' => $drop,
- '$vote' => $likebuttons,
- '$like' => $like,
- '$dislike' => $dislike,
- '$comment' => $comment
- ));
-
- $arr = array('item' => $item, 'output' => $tmp_item);
- call_hooks('display_item', $arr);
-
- $o .= $arr['output'];
-
-
- }
}
else {
$r = q("SELECT `id` FROM `item` WHERE `id` = '%s' OR `uri` = '%s' LIMIT 1",
diff --git a/mod/editpost.php b/mod/editpost.php
new file mode 100644
index 000000000..d211074c9
--- /dev/null
+++ b/mod/editpost.php
@@ -0,0 +1,120 @@
+<?php
+
+require_once('acl_selectors.php');
+
+function editpost_content(&$a) {
+
+ $o = '';
+
+ if(! local_user()) {
+ notice( t('Permission denied.') . EOL);
+ return;
+ }
+
+ $post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
+
+ if(! $post_id) {
+ notice( t('Item not found') . EOL);
+ return;
+ }
+
+ $itm = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($post_id),
+ intval(local_user())
+ );
+
+ if(! count($itm)) {
+ notice( t('Item not found') . EOL);
+ return;
+ }
+
+
+ $o .= '<h2>' . t('Edit post') . '</h2>';
+
+ $tpl = get_markup_template('jot-header.tpl');
+
+ $a->page['htmlhead'] .= replace_macros($tpl, array(
+ '$baseurl' => $a->get_baseurl(),
+ '$ispublic' => '&nbsp;', // t('Visible to <strong>everybody</strong>'),
+ '$geotag' => $geotag,
+ '$nickname' => $a->user['nickname']
+ ));
+
+
+ $tpl = get_markup_template("jot.tpl");
+
+ if(($group) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))))
+ $lockstate = 'lock';
+ else
+ $lockstate = 'unlock';
+
+ $celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
+
+ $jotplugins = '';
+ $jotnets = '';
+
+ $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
+
+ $mail_enabled = false;
+ $pubmail_enabled = false;
+
+ if(! $mail_disabled) {
+ $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1",
+ intval(local_user())
+ );
+ if(count($r)) {
+ $mail_enabled = true;
+ if(intval($r[0]['pubmail']))
+ $pubmail_enabled = true;
+ }
+ }
+
+ if($mail_enabled) {
+ $selected = (($pubmail_enabled) ? ' checked="checked" ' : '');
+ $jotnets .= '<div class="profile-jot-net"><input type="checkbox" name="pubmail_enable"' . $selected . 'value="1" /> '
+ . t("Post to Email") . '</div>';
+ }
+
+
+
+ call_hooks('jot_tool', $jotplugins);
+ call_hooks('jot_networks', $jotnets);
+
+ $tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
+
+ $o .= replace_macros($tpl,array(
+ '$return_path' => $_SESSION['return_url'],
+ '$action' => 'item',
+ '$share' => t('Edit'),
+ '$upload' => t('Upload photo'),
+ '$weblink' => t('Insert web link'),
+ '$youtube' => t('Insert YouTube video'),
+ '$video' => t('Insert Vorbis [.ogg] video'),
+ '$audio' => t('Insert Vorbis [.ogg] audio'),
+ '$setloc' => t('Set your location'),
+ '$noloc' => t('Clear browser location'),
+ '$wait' => t('Please wait'),
+ '$permset' => t('Permission settings'),
+ '$ptyp' => $itm[0]['type'],
+ '$content' => $itm[0]['body'],
+ '$post_id' => $post_id,
+ '$baseurl' => $a->get_baseurl(),
+ '$defloc' => $a->user['default-location'],
+ '$visitor' => 'none',
+ '$pvisit' => 'none',
+ '$emailcc' => t('CC: email addresses'),
+ '$public' => t('Public post'),
+ '$jotnets' => $jotnets,
+ '$emtitle' => t('Example: bob@example.com, mary@example.com'),
+ '$lockstate' => $lockstate,
+ '$acl' => '', // populate_acl((($group) ? $group_acl : $a->user), $celeb),
+ '$bang' => (($group) ? '!' : ''),
+ '$profile_uid' => $_SESSION['uid']
+ ));
+
+
+ return $o;
+
+}
+
+
diff --git a/mod/follow.php b/mod/follow.php
index 689ae8232..6786e9039 100644
--- a/mod/follow.php
+++ b/mod/follow.php
@@ -11,178 +11,56 @@ function follow_post(&$a) {
}
$url = $orig_url = notags(trim($_POST['url']));
-
- $email_conversant = false;
-
- if($url) {
- $links = @lrdd($url);
- if(count($links)) {
- foreach($links as $link) {
- if($link['@attributes']['rel'] === NAMESPACE_DFRN)
- $dfrn = unamp($link['@attributes']['href']);
- if($link['@attributes']['rel'] === 'salmon')
- $notify = unamp($link['@attributes']['href']);
- if($link['@attributes']['rel'] === NAMESPACE_FEED)
- $poll = unamp($link['@attributes']['href']);
- if($link['@attributes']['rel'] === 'http://microformats.org/profile/hcard')
- $hcard = unamp($link['@attributes']['href']);
- if($link['@attributes']['rel'] === 'http://webfinger.net/rel/profile-page')
- $profile = unamp($link['@attributes']['href']);
-
- }
-
- // Status.Net can have more than one profile URL. We need to match the profile URL
- // to a contact on incoming messages to prevent spam, and we won't know which one
- // to match. So in case of two, one of them is stored as an alias. Only store URL's
- // and not webfinger user@host aliases. If they've got more than two non-email style
- // aliases, let's hope we're lucky and get one that matches the feed author-uri because
- // otherwise we're screwed.
-
- foreach($links as $link) {
- if($link['@attributes']['rel'] === 'alias') {
- if(strpos($link['@attributes']['href'],'@') === false) {
- if(isset($profile)) {
- if($link['@attributes']['href'] !== $profile)
- $alias = unamp($link['@attributes']['href']);
- }
- else
- $profile = unamp($link['@attributes']['href']);
- }
- }
- }
- }
- else {
- if((strpos($orig_url,'@')) && validate_email($orig_url)) {
- $email_conversant = true;
- }
- }
- }
-
- // If we find a DFRN site, send our subscriber to the other person's
- // dfrn_request page and all the other details will get sorted.
-
- if(strlen($dfrn)) {
- $ret = scrape_dfrn($dfrn);
- if(is_array($ret) && x($ret,'dfrn-request')) {
- if(strlen($a->path))
- $myaddr = bin2hex($a->get_baseurl() . '/profile/' . $a->user['nickname']);
- else
- $myaddr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname());
-
- goaway($ret['dfrn-request'] . "&addr=$myaddr");
-
- // NOTREACHED
- }
- }
-
- $network = 'stat';
- $priority = 0;
- if($hcard) {
- $vcard = scrape_vcard($hcard);
+ // remove ajax junk
- // Google doesn't use absolute url in profile photos
+ $url = str_replace('/#!/','/',$url);
- if((x($vcard,'photo')) && substr($vcard['photo'],0,1) == '/') {
- $h = @parse_url($hcard);
- if($h)
- $vcard['photo'] = $h['scheme'] . '://' . $h['host'] . $vcard['photo'];
- }
+ if(! allowed_url($url)) {
+ notice( t('Disallowed profile URL.') . EOL);
+ goaway($_SESSION['return_url']);
+ // NOTREACHED
}
- if(! $profile)
- $profile = $url;
-
-
- if(! x($vcard,'fn'))
- if(x($vcard,'nick'))
- $vcard['fn'] = $vcard['nick'];
-
- if((! isset($vcard)) && (! $poll)) {
-
- $ret = scrape_feed($url);
-
- if(count($ret) && ($ret['feed_atom'] || $ret['feed_rss'])) {
- $poll = ((x($ret,'feed_atom')) ? unamp($ret['feed_atom']) : unamp($ret['feed_rss']));
- $vcard = array();
- require_once('simplepie/simplepie.inc');
- $feed = new SimplePie();
- $xml = fetch_url($poll);
-
- $feed->set_raw_data($xml);
-
- $feed->init();
-
- $vcard['photo'] = $feed->get_image_url();
- $author = $feed->get_author();
- if($author) {
- $vcard['fn'] = unxmlify(trim($author->get_name()));
- if(! $vcard['fn'])
- $vcard['fn'] = trim(unxmlify($author->get_email()));
- if(strpos($vcard['fn'],'@') !== false)
- $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
- $vcard['nick'] = strtolower(notags(unxmlify($vcard['fn'])));
- if(strpos($vcard['nick'],' '))
- $vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' ')));
- $email = unxmlify($author->get_email());
- }
- else {
- $item = $feed->get_item(0);
- if($item) {
- $author = $item->get_author();
- if($author) {
- $vcard['fn'] = trim(unxmlify($author->get_name()));
- if(! $vcard['fn'])
- $vcard['fn'] = trim(unxmlify($author->get_email()));
- if(strpos($vcard['fn'],'@') !== false)
- $vcard['fn'] = substr($vcard['fn'],0,strpos($vcard['fn'],'@'));
- $vcard['nick'] = strtolower(unxmlify($vcard['fn']));
- if(strpos($vcard['nick'],' '))
- $vcard['nick'] = trim(substr($vcard['nick'],0,strpos($vcard['nick'],' ')));
- $email = unxmlify($author->get_email());
- }
- if(! $vcard['photo']) {
- $rawmedia = $item->get_item_tags('http://search.yahoo.com/mrss/','thumbnail');
- if($rawmedia && $rawmedia[0]['attribs']['']['url'])
- $vcard['photo'] = unxmlify($rawmedia[0]['attribs']['']['url']);
- }
- }
- }
- if((! $vcard['photo']) && strlen($email))
- $vcard['photo'] = gravatar_img($email);
-
- $network = 'feed';
- $priority = 2;
- }
- }
- logger('follow: poll=' . $poll . ' notify=' . $notify . ' profile=' . $profile . ' vcard=' . print_r($vcard,true));
+ $ret = probe_url($url);
+
- $vcard['fn'] = notags($vcard['fn']);
- $vcard['nick'] = notags($vcard['nick']);
+ if($ret['network'] === NETWORK_DFRN) {
+ if(strlen($a->path))
+ $myaddr = bin2hex($a->get_baseurl() . '/profile/' . $a->user['nickname']);
+ else
+ $myaddr = bin2hex($a->user['nickname'] . '@' . $a->get_hostname());
+
+ goaway($ret['request'] . "&addr=$myaddr");
+
+ // NOTREACHED
+ }
// do we have enough information?
- if(! ((x($vcard['fn'])) && ($poll) && ($profile))) {
+ if(! ((x($ret,'name')) && (x($ret,'poll')) && ((x($ret,'url')) || (x($ret,'addr'))))) {
notice( t('The profile address specified does not provide adequate information.') . EOL);
goaway($_SESSION['return_url']);
}
- if(! $notify) {
+ if(! $ret['notify']) {
notice( t('Limited profile. This person will be unable to receive direct/personal notifications from you.') . EOL);
}
- if(! x($vcard,'photo'))
- $vcard['photo'] = $a->get_baseurl() . '/images/default-profile.jpg' ;
-
+ $writeable = ((($ret['network'] === NETWORK_OSTATUS) && ($ret['notify'])) ? 1 : 0);
+ if($ret['network'] === NETWORK_MAIL) {
+ $writeable = 1;
+
+ }
// check if we already have a contact
// the poll url is more reliable than the profile url, as we may have
// indirect links or webfinger links
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` = '%s' LIMIT 1",
intval(local_user()),
- dbesc($poll)
+ dbesc($ret['poll'])
);
if(count($r)) {
@@ -197,26 +75,28 @@ function follow_post(&$a) {
}
else {
// create contact record
- $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
- `blocked`, `readonly`, `pending` )
- VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, 0, 0, 0 ) ",
+ $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`, `name`, `nick`, `photo`, `network`, `rel`, `priority`,
+ `writable`, `blocked`, `readonly`, `pending` )
+ VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
intval(local_user()),
dbesc(datetime_convert()),
- dbesc($profile),
- dbesc($alias),
- dbesc($notify),
- dbesc($poll),
- dbesc($vcard['fn']),
- dbesc($vcard['nick']),
- dbesc($vcard['photo']),
- dbesc($network),
- intval(REL_FAN),
- intval($priority)
+ dbesc($ret['url']),
+ dbesc($ret['addr']),
+ dbesc($ret['alias']),
+ dbesc($ret['notify']),
+ dbesc($ret['poll']),
+ dbesc($ret['name']),
+ dbesc($ret['nick']),
+ dbesc($ret['photo']),
+ dbesc($ret['network']),
+ intval(($ret['network'] === NETWORK_MAIL) ? REL_BUD : REL_FAN),
+ intval($ret['priority']),
+ intval($writeable)
);
}
$r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
- dbesc($profile),
+ dbesc($ret['url']),
intval(local_user())
);
@@ -231,7 +111,7 @@ function follow_post(&$a) {
require_once("Photo.php");
- $photos = import_profile_photo($vcard['photo'],local_user(),$contact_id);
+ $photos = import_profile_photo($ret['photo'],local_user(),$contact_id);
$r = q("UPDATE `contact` SET `photo` = '%s',
`thumb` = '%s',
@@ -257,7 +137,7 @@ function follow_post(&$a) {
// create a follow slap
- $tpl = load_view_file('view/follow_slap.tpl');
+ $tpl = get_markup_template('follow_slap.tpl');
$slap = replace_macros($tpl, array(
'$name' => $a->user['username'],
'$profile_page' => $a->get_baseurl() . '/profile/' . $a->user['nickname'],
diff --git a/mod/friendika.php b/mod/friendika.php
new file mode 100644
index 000000000..c7d8b5b81
--- /dev/null
+++ b/mod/friendika.php
@@ -0,0 +1,68 @@
+<?php
+
+function friendika_init(&$a) {
+ if ($a->argv[1]=="json"){
+ $register_policy = Array('REGISTER_CLOSED', 'REGISTER_APPROVE', 'REGISTER_OPEN');
+
+ if (isset($a->config['admin_email']) && $a->config['admin_email']!=''){
+ $r = q("SELECT username, nickname FROM user WHERE email='%s'", $a->config['admin_email']);
+ $admin = array(
+ 'name' => $r[0]['username'],
+ 'profile'=> $a->get_baseurl().'/profile/'.$r[0]['nickname'],
+ );
+ } else {
+ $admin = false;
+ }
+
+ $data = Array(
+ 'version' => FRIENDIKA_VERSION,
+ 'url' => $a->get_baseurl(),
+ 'plugins' => $a->plugins,
+ 'register_policy' => $register_policy[$a->config['register_policy']],
+ 'admin' => $admin,
+ 'site_name' => $a->config['sitename'],
+
+ );
+
+ echo str_replace('\\/','/',json_encode($data));
+ killme();
+ }
+}
+
+
+
+function friendika_content(&$a) {
+
+ $o = '';
+ $o .= '<h3>Friendika</h3>';
+
+
+ $o .= '<p></p><p>';
+
+ $o .= 'View <a href="LICENSE">License</a>' . '<br /><br />';
+ $o .= t('This is Friendika version') . ' ' . FRIENDIKA_VERSION . ' ';
+ $o .= t('running at web location') . ' ' . $a->get_baseurl() . '</p><p>';
+
+ $o .= t('Shared content within the Friendika network is provided under the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 license</a>') . '</p><p>';
+
+ $o .= t('Please visit <a href="http://project.friendika.com">Project.Friendika.com</a> to learn more about the Friendika project.') . '</p><p>';
+
+ $o .= t('Bug reports and issues: please visit') . ' ' . '<a href="http://bugs.friendika.com">Bugs.Friendika.com</a></p><p>';
+ $o .= t('Suggestions, praise, donations, etc. - please email "Info" at Friendika - dot com') . '</p>';
+
+ $o .= '<p></p>';
+
+ if(count($a->plugins)) {
+ $o .= '<p>' . t('Installed plugins/addons/apps') . '</p>';
+ $o .= '<ul>';
+ foreach($a->plugins as $p)
+ if(strlen($p))
+ $o .= '<li>' . $p . '</li>';
+ $o .= '</ul>';
+ }
+ else
+ $o .= '<p>' . t('No installed plugins/addons/apps');
+
+ return $o;
+
+}
diff --git a/mod/group.php b/mod/group.php
index fcdc6a758..3da633edf 100644
--- a/mod/group.php
+++ b/mod/group.php
@@ -55,28 +55,7 @@ function group_post(&$a) {
if($r)
notice( t('Group name changed.') . EOL );
}
- $members = $_POST['group_members_select'];
- if(is_array($members))
- array_walk($members,'validate_members');
- $r = q("DELETE FROM `group_member` WHERE `gid` = %d AND `uid` = %d",
- intval($a->argv[1]),
- intval(local_user())
- );
- $result = true;
- if(is_array($members) && count($members)) {
- foreach($members as $member) {
- $r = q("INSERT INTO `group_member` ( `uid`, `gid`, `contact-id`)
- VALUES ( %d, %d, %d )",
- intval(local_user()),
- intval($group['id']),
- intval($member)
- );
- if(! $r)
- $result = false;
- }
- }
- if($result)
- notice( t('Membership list updated.') . EOL);
+
$a->page['aside'] = group_side();
}
return;
@@ -90,8 +69,12 @@ function group_content(&$a) {
}
if(($a->argc == 2) && ($a->argv[1] === 'new')) {
- $tpl = load_view_file('view/group_new.tpl');
- $o .= replace_macros($tpl,array());
+ $tpl = get_markup_template('group_new.tpl');
+ $o .= replace_macros($tpl,array(
+ '$desc' => t('Create a group of contacts/friends.'),
+ '$name' => t('Group Name: '),
+ '$submit' => t('Submit')
+ ));
return $o;
}
@@ -109,13 +92,22 @@ function group_content(&$a) {
notice( t('Unable to remove group.') . EOL);
}
goaway($a->get_baseurl() . '/group');
- return; // NOTREACHED
+ // NOTREACHED
+ }
+
+ if(($a->argc > 2) && intval($a->argv[1]) && intval($a->argv[2])) {
+ $r = q("SELECT `id` FROM `contact` WHERE `id` = %d AND `uid` = %d and `self` = 0 and `blocked` = 0 AND `pending` = 0 LIMIT 1",
+ intval($a->argv[2]),
+ intval(local_user())
+ );
+ if(count($r))
+ $change = intval($a->argv[2]);
}
+ if(($a->argc > 1) && (intval($a->argv[1]))) {
- if(($a->argc == 2) && (intval($a->argv[1]))) {
require_once('include/acl_selectors.php');
- $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ $r = q("SELECT * FROM `group` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1",
intval($a->argv[1]),
intval(local_user())
);
@@ -124,14 +116,31 @@ function group_content(&$a) {
goaway($a->get_baseurl() . '/contacts');
}
$group = $r[0];
- $ret = group_get_members($group['id']);
+ $members = group_get_members($group['id']);
$preselected = array();
- if(count($ret)) {
- foreach($ret as $p)
- $preselected[] = $p['id'];
+ if(count($members)) {
+ foreach($members as $member)
+ $preselected[] = $member['id'];
+ }
+
+ if($change) {
+ if(in_array($change,$preselected)) {
+ group_rmv_member(local_user(),$group['name'],$change);
+ }
+ else {
+ group_add_member(local_user(),$group['name'],$change);
+ }
+
+ $members = group_get_members($group['id']);
+ $preselected = array();
+ if(count($members)) {
+ foreach($members as $member)
+ $preselected[] = $member['id'];
+ }
}
- $drop_tpl = load_view_file('view/group_drop.tpl');
+
+ $drop_tpl = get_markup_template('group_drop.tpl');
$drop_txt = replace_macros($drop_tpl, array(
'$id' => $group['id'],
'$delete' => t('Delete')
@@ -139,15 +148,63 @@ function group_content(&$a) {
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
- $tpl = load_view_file('view/group_edit.tpl');
+ $tpl = get_markup_template('group_edit.tpl');
$o .= replace_macros($tpl, array(
'$gid' => $group['id'],
'$name' => $group['name'],
'$drop' => $drop_txt,
- '$selector' => contact_select('group_members_select','group_members_select',$preselected,25,false,$celeb)
+ '$desc' => t('Click on a contact to add or remove.'),
+ '$title' => t('Group Editor'),
+ '$gname' => t('Group Name: '),
+ '$submit' => t('Submit')
));
}
+
+ if(! isset($group))
+ return;
+
+ $o .= '<div id="group-update-wrapper">';
+ if($change)
+ $o = '';
+
+ $o .= '<div id="group-members">';
+ $o .= '<h3>' . t('Members') . '</h3>';
+ foreach($members as $member) {
+ if($member['url']) {
+ $member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . '); return true;';
+ $o .= micropro($member,true,'mpgroup');
+ }
+ else
+ group_rmv_member(local_user(),$group['name'],$member['id']);
+ }
+
+ $o .= '</div><div id="group-members-end"></div>';
+ $o .= '<hr id="group-separator" />';
+ $o .= '<div id="group-all-contacts">';
+
+ $o .= '<h3>' . t('All Contacts') . '</h3>';
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0 ORDER BY `name` ASC",
+ intval(local_user())
+ );
+
+ if(count($r)) {
+ foreach($r as $member) {
+ if(! in_array($member['id'],$preselected)) {
+ $member['click'] = 'groupChangeMember(' . $group['id'] . ',' . $member['id'] . '); return true;';
+ $o .= micropro($member,true,'mpall');
+ }
+ }
+ }
+
+ $o .= '</div><div id="group-all-contacts-end"></div>';
+
+ if($change) {
+ echo $o;
+ killme();
+ }
+ $o .= '</div>';
return $o;
-} \ No newline at end of file
+}
+
diff --git a/mod/help.php b/mod/help.php
new file mode 100644
index 000000000..561f5381f
--- /dev/null
+++ b/mod/help.php
@@ -0,0 +1,37 @@
+<?php
+
+if(! function_exists('load_doc_file')) {
+function load_doc_file($s) {
+ global $lang;
+ if(! isset($lang))
+ $lang = 'en';
+ $b = basename($s);
+ $d = dirname($s);
+ if(file_exists("$d/$lang/$b"))
+ return file_get_contents("$d/$lang/$b");
+ return file_get_contents($s);
+}}
+
+
+
+function help_content(&$a) {
+
+ global $lang;
+
+ require_once('library/markdown.php');
+
+ $text = '';
+
+ if($a->argc > 1) {
+ $text = load_doc_file('doc/' . $a->argv[1] . '.md');
+ $a->page['title'] = t('Help:') . ' ' . str_replace('-',' ',notags($a->argv[1]));
+ }
+ if(! $text) {
+ $text = load_doc_file('doc/Home.md');
+ $a->page['title'] = t('Help');
+ }
+
+
+ return Markdown($text);
+
+} \ No newline at end of file
diff --git a/mod/home.php b/mod/home.php
index 20d38cfca..225bd294d 100644
--- a/mod/home.php
+++ b/mod/home.php
@@ -20,7 +20,7 @@ function home_content(&$a) {
if(x($_SESSION,'theme'))
unset($_SESSION['theme']);
- $o .= '<h1>' . ((x($a->config,'sitename')) ? t("Welcome to ").$a->config['sitename'] : "" ) . '</h1>';
+ $o .= '<h1>' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '</h1>';
if(file_exists('home.html'))
$o .= file_get_contents('home.html');
diff --git a/mod/install.php b/mod/install.php
index dc91f848e..b5f056df7 100644
--- a/mod/install.php
+++ b/mod/install.php
@@ -14,17 +14,20 @@ function install_post(&$a) {
$phpath = notags(trim($_POST['phpath']));
require_once("dba.php");
-
+ unset($db);
$db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true);
if(mysqli_connect_errno()) {
+ unset($db);
$db = new dba($dbhost, $dbuser, $dbpass, '', true);
if(! mysqli_connect_errno()) {
$r = q("CREATE DATABASE '%s'",
dbesc($dbdata)
);
- if($r)
+ if($r) {
+ unset($db);
$db = new dba($dbhost, $dbuser, $dbpass, $dbdata, true);
+ }
}
if(mysqli_connect_errno()) {
notice( t('Could not create/connect to database.') . EOL);
@@ -34,7 +37,7 @@ function install_post(&$a) {
notice( t('Connected to database.') . EOL);
- $tpl = load_view_file('view/htconfig.tpl');
+ $tpl = get_intltext_template('htconfig.tpl');
$txt = replace_macros($tpl,array(
'$dbhost' => $dbhost,
'$dbuser' => $dbuser,
@@ -50,36 +53,47 @@ function install_post(&$a) {
}
$errors = load_database($db);
- if(! $errors) {
- // Our sessions normally are stored in the database. But as we have only managed
- // to get it bootstrapped milliseconds ago, we have to apply a bit of trickery so
- // that you'll see the following important notice (which is stored in the session).
-
- session_write_close();
-
- require_once('session.php');
- session_start();
- session_regenerate_id();
- $_SESSION['sysmsg'] = '';
+ if($errors)
+ $a->data['db_failed'] = true;
+ else
+ $a->data['db_installed'] = true;
- notice( t('Database import succeeded.') . EOL
- . t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.') . EOL
- . t('Please see the file "INSTALL.txt".') . EOL );
- goaway($a->get_baseurl() . '/register' );
- }
- else {
- $db = null; // start fresh
- notice( t('Database import failed.') . EOL
- . t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL
- . t('Please see the file "INSTALL.txt".') . EOL );
- }
+ return;
}
function install_content(&$a) {
+ global $db;
$o = '';
+
+ if(x($a->data,'db_installed')) {
+ $o .= '<h2>' . t('Proceed with Installation') . '</h2>';
+ $o .= '<p style="font-size: 130%;">';
+ $o .= t('Your Friendika site database has been installed.') . EOL;
+ $o .= t('IMPORTANT: You will need to [manually] setup a scheduled task for the poller.') . EOL ;
+ $o .= t('Please see the file "INSTALL.txt".') . EOL ;
+ $o .= '<br />';
+ $o .= '<a href="' . $a->get_baseurl() . '/register' . '">' . t('Proceed to registration') . '</a>' ;
+ $o .= '</p>';
+ return $o;
+ }
+
+ if(x($a->data,'db_failed')) {
+ $o .= t('Database import failed.') . EOL;
+ $o .= t('You may need to import the file "database.sql" manually using phpmyadmin or mysql.') . EOL;
+ $o .= t('Please see the file "INSTALL.txt".') . EOL ;
+ return $o;
+ }
+
+ if($db && $db->connected) {
+ $r = q("SELECT COUNT(*) as `total` FROM `user`");
+ if($r && count($r) && $r[0]['total']) {
+ notice( t('Permission denied.') . EOL);
+ return '';
+ }
+ }
notice( t('Welcome to Friendika.') . EOL);
@@ -102,8 +116,18 @@ function install_content(&$a) {
require_once('datetime.php');
- $tpl = load_view_file('view/install_db.tpl');
+ $tpl = get_markup_template('install_db.tpl');
$o .= replace_macros($tpl, array(
+ '$lbl_01' => t('Friendika Social Network'),
+ '$lbl_02' => t('Installation'),
+ '$lbl_03' => t('In order to install Friendika we need to know how to contact your database.'),
+ '$lbl_04' => t('Please contact your hosting provider or site administrator if you have questions about these settings.'),
+ '$lbl_05' => t('The database you specify below must already exist. If it does not, please create it before continuing.'),
+ '$lbl_06' => t('Database Server Name'),
+ '$lbl_07' => t('Database Login Name'),
+ '$lbl_08' => t('Database Login Password'),
+ '$lbl_09' => t('Database Name'),
+ '$lbl_10' => t('Please select a default timezone for your website'),
'$baseurl' => $a->get_baseurl(),
'$tzselect' => ((x($_POST,'timezone')) ? select_timezone($_POST['timezone']) : select_timezone()),
'$submit' => t('Submit'),
diff --git a/mod/invite.php b/mod/invite.php
index f67432746..b34bb7d74 100644
--- a/mod/invite.php
+++ b/mod/invite.php
@@ -25,21 +25,25 @@ function invite_post(&$a) {
$recip = trim($recip);
if(! valid_email($recip)) {
- notice( $recip . t(' : ') . t('Not a valid email address.') . EOL);
+ notice( sprintf( t('%s : Not a valid email address.'), $recip) . EOL);
continue;
}
- $res = mail($recip, t('Please join my network on ') . $a->config['sitename'],
- $message, "From: " . $a->user['email']);
+ $res = mail($recip, sprintf(t('Please join my network on %s'), $a->config['sitename']),
+ $message,
+ "From: " . $a->user['email'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
+
if($res) {
$total ++;
}
else {
- notice( $recip . t(' : ') . t('Message delivery failed.') . EOL);
+ notice( sprintf( t('%s : Message delivery failed.'), $recip) . EOL);
}
}
- notice( $total . t(' messages sent.') . EOL);
+ notice( sprintf( tt("%d message sent.", "%d messages sent.", $total) , $total) . EOL);
return;
}
@@ -51,13 +55,13 @@ function invite_content(&$a) {
return;
}
- $tpl = load_view_file('view/invite.tpl');
+ $tpl = get_markup_template('invite.tpl');
$o = replace_macros($tpl, array(
'$invite' => t('Send invitations'),
'$addr_text' => t('Enter email addresses, one per line:'),
'$msg_text' => t('Your message:'),
- '$default_message' => t('Please join my social network on ') . $a->config['sitename'] . "\r\n" . "\r\n"
+ '$default_message' => sprintf(t('Please join my social network on %s'), $a->config['sitename']) . "\r\n" . "\r\n"
. t('To accept this invitation, please visit:') . "\r\n" . "\r\n" . $a->get_baseurl()
. "\r\n" . "\r\n" . t('Once you have registered, please connect with me via my profile page at:')
. "\r\n" . "\r\n" . $a->get_baseurl() . '/profile/' . $a->user['nickname'] ,
diff --git a/mod/item.php b/mod/item.php
index ad3298592..0b5e32e88 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -51,7 +51,7 @@ function item_post(&$a) {
}
$profile_uid = ((x($_POST,'profile_uid')) ? intval($_POST['profile_uid']) : 0);
-
+ $post_id = ((x($_POST['post_id'])) ? intval($_POST['post_id']) : 0);
if(! can_write_wall($a,$profile_uid)) {
notice( t('Permission denied.') . EOL) ;
@@ -60,6 +60,21 @@ function item_post(&$a) {
killme();
}
+
+ // is this an edited post?
+
+ $orig_post = null;
+
+ if($post_id) {
+ $i = q("SELECT * FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
+ intval($profile_uid),
+ intval($post_id)
+ );
+ if(! count($i))
+ killme();
+ $orig_post = $i[0];
+ }
+
$user = null;
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
@@ -68,37 +83,53 @@ function item_post(&$a) {
if(count($r))
$user = $r[0];
-
- $str_group_allow = perms2str($_POST['group_allow']);
- $str_contact_allow = perms2str($_POST['contact_allow']);
- $str_group_deny = perms2str($_POST['group_deny']);
- $str_contact_deny = perms2str($_POST['contact_deny']);
-
- $private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
-
- if(($parent_item) &&
- (($parent_item['private'])
- || strlen($parent_item['allow_cid'])
- || strlen($parent_item['allow_gid'])
- || strlen($parent_item['deny_cid'])
- || strlen($parent_item['deny_gid'])
- )
- ) {
- $private = 1;
+ if($orig_post) {
+ $str_group_allow = $orig_post['allow_gid'];
+ $str_contact_allow = $orig_post['allow_cid'];
+ $str_group_deny = $orig_post['deny_gid'];
+ $str_contact_deny = $orig_post['deny_cid'];
+ $title = $orig_post['title'];
+ $location = $orig_post['location'];
+ $coord = $orig_post['coord'];
+ $verb = $orig_post['verb'];
+ $emailcc = $orig_post['emailcc'];
+
+ $body = escape_tags(trim($_POST['body']));
+ $private = $orig_post['private'];
+ $pubmail_enable = $orig_post['pubmail'];
}
+ else {
+ $str_group_allow = perms2str($_POST['group_allow']);
+ $str_contact_allow = perms2str($_POST['contact_allow']);
+ $str_group_deny = perms2str($_POST['group_deny']);
+ $str_contact_deny = perms2str($_POST['contact_deny']);
+ $title = notags(trim($_POST['title']));
+ $location = notags(trim($_POST['location']));
+ $coord = notags(trim($_POST['coord']));
+ $verb = notags(trim($_POST['verb']));
+ $emailcc = notags(trim($_POST['emailcc']));
+
+ $body = escape_tags(trim($_POST['body']));
+ $private = ((strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny)) ? 1 : 0);
+
+ if(($parent_item) &&
+ (($parent_item['private'])
+ || strlen($parent_item['allow_cid'])
+ || strlen($parent_item['allow_gid'])
+ || strlen($parent_item['deny_cid'])
+ || strlen($parent_item['deny_gid'])
+ )) {
+ $private = 1;
+ }
+
+ $pubmail_enable = ((x($_POST,'pubmail_enable') && intval($_POST['pubmail_enable']) && (! $private)) ? 1 : 0);
- $title = notags(trim($_POST['title']));
- $body = escape_tags(trim($_POST['body']));
- $location = notags(trim($_POST['location']));
- $coord = notags(trim($_POST['coord']));
- $verb = notags(trim($_POST['verb']));
- $emailcc = notags(trim($_POST['emailcc']));
-
- if(! strlen($body)) {
- notice( t('Empty post discarded.') . EOL );
- if(x($_POST,'return'))
- goaway($a->get_baseurl() . "/" . $_POST['return'] );
- killme();
+ if(! strlen($body)) {
+ notice( t('Empty post discarded.') . EOL );
+ if(x($_POST,'return'))
+ goaway($a->get_baseurl() . "/" . $_POST['return'] );
+ killme();
+ }
}
// get contact info for poster
@@ -151,7 +182,6 @@ function item_post(&$a) {
}
}
-
/**
*
* When a photo was uploaded into the message using the (profile wall) ajax
@@ -212,6 +242,8 @@ function item_post(&$a) {
if(count($tags)) {
foreach($tags as $tag) {
if(strpos($tag,'#') === 0) {
+ if(strpos($tag,'[url='))
+ continue;
$basetag = str_replace('_',' ',substr($tag,1));
$body = str_replace($tag,'#[url=' . $a->get_baseurl() . '/search?search=' . rawurlencode($basetag) . ']' . $basetag . '[/url]',$body);
if(strlen($str_tags))
@@ -220,6 +252,8 @@ function item_post(&$a) {
continue;
}
if(strpos($tag,'@') === 0) {
+ if(strpos($tag,'[url='))
+ continue;
$stat = false;
$name = substr($tag,1);
if((strpos($name,'@')) || (strpos($name,'http://'))) {
@@ -283,15 +317,13 @@ function item_post(&$a) {
$str_tags .= ',';
$str_tags .= '@[url=' . $alias . ']' . $newname . '[/url]';
}
-
}
}
}
}
-
-
$wall = 0;
+
if($post_type === 'wall' || $post_type === 'wall-comment')
$wall = 1;
@@ -332,6 +364,7 @@ function item_post(&$a) {
$datarray['deny_cid'] = $str_contact_deny;
$datarray['deny_gid'] = $str_group_deny;
$datarray['private'] = $private;
+ $datarray['pubmail'] = $pubmail_enable;
/**
* These fields are for the convenience of plugins...
@@ -342,13 +375,35 @@ function item_post(&$a) {
$datarray['parent'] = $parent;
$datarray['self'] = $self;
+ if($orig_post)
+ $datarray['edit'] = true;
call_hooks('post_local',$datarray);
+
+ if($orig_post) {
+ $r = q("UPDATE `item` SET `body` = '%s', `edited` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ dbesc($body),
+ dbesc(datetime_convert()),
+ intval($post_id),
+ intval($profile_uid)
+ );
+
+ proc_run('php', "include/notifier.php", 'edit_post', "$post_id");
+ if((x($_POST,'return')) && strlen($_POST['return'])) {
+ logger('return: ' . $_POST['return']);
+ goaway($a->get_baseurl() . "/" . $_POST['return'] );
+ }
+ killme();
+ }
+ else
+ $post_id = 0;
+
+
$r = q("INSERT INTO `item` (`uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`,
`author-name`, `author-link`, `author-avatar`, `created`, `edited`, `changed`, `uri`, `title`, `body`, `location`, `coord`,
- `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private` )
- VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d )",
+ `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail` )
+ VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
intval($datarray['uid']),
dbesc($datarray['type']),
intval($datarray['wall']),
@@ -375,7 +430,8 @@ function item_post(&$a) {
dbesc($datarray['allow_gid']),
dbesc($datarray['deny_cid']),
dbesc($datarray['deny_gid']),
- intval($datarray['private'])
+ intval($datarray['private']),
+ intval($datarray['pubmail'])
);
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1",
@@ -408,21 +464,7 @@ function item_post(&$a) {
if(($user['notify-flags'] & NOTIFY_COMMENT) && ($contact_record != $author)) {
require_once('bbcode.php');
$from = $author['name'];
- /*
- $tpl = load_view_file('view/cmnt_received_eml.tpl');
- $email_tpl = replace_macros($tpl, array(
- '$sitename' => $a->config['sitename'],
- '$siteurl' => $a->get_baseurl(),
- '$username' => $user['username'],
- '$email' => $user['email'],
- '$from' => $from,
- '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
- '$body' => strip_tags(bbcode($datarray['body']))
- ));
- $res = mail($user['email'], $from . t(" commented on your item at ") . $a->config['sitename'],
- $email_tpl,t("From: Administrator@") . $a->get_hostname() );
- */
// name of the automated email sender
$msg['notificationfromname'] = stripslashes($datarray['author-name']);;
// noreply address to send from
@@ -439,7 +481,7 @@ function item_post(&$a) {
= html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r","\\n\\n" ,"\\n"), "<br />\n",$datarray['body']))));
// load the template for private message notifications
- $tpl = load_view_file('view/cmnt_received_html_body_eml.tpl');
+ $tpl = get_intltext_template('cmnt_received_html_body_eml.tpl');
$email_html_body_tpl = replace_macros($tpl,array(
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
@@ -452,7 +494,7 @@ function item_post(&$a) {
));
// load the template for private message notifications
- $tpl = load_view_file('view/cmnt_received_text_body_eml.tpl');
+ $tpl = get_intltext_template('cmnt_received_text_body_eml.tpl');
$email_text_body_tpl = replace_macros($tpl,array(
'$sitename' => $a->config['sitename'], // name of this site
'$siteurl' => $a->get_baseurl(), // descriptive url of this site
@@ -485,22 +527,6 @@ function item_post(&$a) {
if(($user['notify-flags'] & NOTIFY_WALL) && ($contact_record != $author)) {
require_once('bbcode.php');
$from = $author['name'];
- /*
- $tpl = load_view_file('view/wall_received_eml.tpl');
- $email_tpl = replace_macros($tpl, array(
- '$sitename' => $a->config['sitename'],
- '$siteurl' => $a->get_baseurl(),
- '$username' => $user['username'],
- '$email' => $user['email'],
- '$from' => $from,
- '$display' => $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id,
- '$body' => strip_tags(bbcode($datarray['body']))
- ));
-
- $res = mail($user['email'], $from . t(" posted on your profile wall at ") . $a->config['sitename'],
- $email_tpl,t("From: Administrator@") . $a->get_hostname() );
- */
-
// name of the automated email sender
$msg['notificationfromname'] = $from;
@@ -583,7 +609,8 @@ function item_post(&$a) {
proc_run('php', "include/notifier.php", $notify_type, "$post_id");
- $datarray['id'] = $post_id;
+ $datarray['id'] = $post_id;
+ $datarray['plink'] = $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id;
call_hooks('post_local_end', $datarray);
@@ -594,13 +621,12 @@ function item_post(&$a) {
$addr = trim($recip);
if(! strlen($addr))
continue;
- $disclaimer = '<hr />' . t('This message was sent to you by ') . $a->user['username']
- . t(', a member of the Friendika social network.') . '<br />';
- $disclaimer .= t('You may visit them online at') . ' '
- . $a->get_baseurl() . '/profile/' . $a->user['nickname'] . '<br />';
- $disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . '<br />';
+ $disclaimer = '<hr />' . sprintf( t('This message was sent to you by %s, a member of the Friendika social network.'),$a->user['username'])
+ . '<br />';
+ $disclaimer .= sprintf( t('You may visit them online at %s'), $a->get_baseurl() . '/profile/' . $a->user['nickname']) . EOL;
+ $disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL;
- $subject = '[Friendika]' . ' ' . $a->user['username'] . ' ' . t('posted an update.');
+ $subject = '[Friendika]' . ' ' . sprintf( t('%s posted an update.'),$a->user['username']);
$headers = 'From: ' . $a->user['username'] . ' <' . $a->user['email'] . '>' . "\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
@@ -640,7 +666,7 @@ function item_content(&$a) {
require_once('include/security.php');
- $uid = $_SESSION['uid'];
+ $uid = local_user();
if(($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
@@ -716,7 +742,8 @@ function item_content(&$a) {
// send the notification upstream/downstream as the case may be
proc_run('php',"include/notifier.php","drop","$drop_id");
-
+// We seem to lose the return url occasionally. Have not been able to reliably duplicate
+// logger('drop_return_url: ' . $_SESSION['return_url']);
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
//NOTREACHED
}
@@ -726,4 +753,4 @@ function item_content(&$a) {
//NOTREACHED
}
}
-} \ No newline at end of file
+}
diff --git a/mod/like.php b/mod/like.php
index 3a8ca4b7d..966fe500b 100644
--- a/mod/like.php
+++ b/mod/like.php
@@ -124,9 +124,9 @@ function like_content(&$a) {
</object>
EOT;
if($verb === 'like')
- $bodyverb = t('likes');
+ $bodyverb = t('%1$s likes %2$s\'s %3$s');
if($verb === 'dislike')
- $bodyverb = t('doesn\'t like');
+ $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
if(! isset($bodyverb))
return;
@@ -147,9 +147,11 @@ EOT;
$arr['author-name'] = $contact['name'];
$arr['author-link'] = $contact['url'];
$arr['author-avatar'] = $contact['thumb'];
- $arr['body'] = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]' . ' ' . $bodyverb . ' '
- . '[url=' . $item['author-link'] . ']' . $item['author-name'] . t('\'s') . '[/url]' . ' '
- . '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]' ;
+
+ $ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
+ $alink = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
+ $plink = '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]';
+ $arr['body'] = sprintf( $bodyverb, $ulink, $alink, $plink );
$arr['verb'] = $activity;
$arr['object-type'] = $objtype;
@@ -171,6 +173,10 @@ EOT;
);
}
+ $arr['id'] = $post_id;
+
+ call_hooks('post_local_end', $arr);
+
proc_run('php',"include/notifier.php","like","$post_id");
return; // NOTREACHED
diff --git a/mod/lostpass.php b/mod/lostpass.php
index 30bdc059c..530619bc4 100644
--- a/mod/lostpass.php
+++ b/mod/lostpass.php
@@ -24,9 +24,9 @@ function lostpass_post(&$a) {
intval($uid)
);
if($r)
- notice("Password reset request issued. Check your email.");
+ notice( t('Password reset request issued. Check your email.') . EOL);
- $email_tpl = load_view_file("view/lostpass_eml.tpl");
+ $email_tpl = get_intltext_template("lostpass_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
@@ -35,8 +35,12 @@ function lostpass_post(&$a) {
'$reset_link' => $a->get_baseurl() . '/lostpass?verify=' . $new_password
));
- $res = mail($email, t('Password reset requested at ') . $a->config['sitename'],
- $email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER[SERVER_NAME]);
+ $res = mail($email, sprintf( t('Password reset requested at %s'),$a->config['sitename']),
+ $email_tpl,
+ 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
+
goaway($a->get_baseurl());
}
@@ -53,7 +57,7 @@ function lostpass_content(&$a) {
dbesc($hash)
);
if(! count($r)) {
- notice("Request could not be verified. (You may have previously submitted it.) Password reset failed." . EOL);
+ notice( t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.") . EOL);
goaway($a->get_baseurl());
return;
}
@@ -69,16 +73,23 @@ function lostpass_content(&$a) {
intval($uid)
);
if($r) {
- $tpl = load_view_file('view/pwdreset.tpl');
+ $tpl = get_markup_template('pwdreset.tpl');
$o .= replace_macros($tpl,array(
+ '$lbl1' => t('Password Reset'),
+ '$lbl2' => t('Your password has been reset as requested.'),
+ '$lbl3' => t('Your new password is'),
+ '$lbl4' => t('Save or copy your new password - and then'),
+ '$lbl5' => '<a href="' . $a->get_baseurl() . '">' . t('click here to login') . '</a>.',
+ '$lbl6' => t('Your password may be changed from the <em>Settings</em> page after successful login.'),
'$newpass' => $new_password,
'$baseurl' => $a->get_baseurl()
+
));
notice("Your password has been reset." . EOL);
- $email_tpl = load_view_file("view/passchanged_eml.tpl");
+ $email_tpl = get_intltext_template("passchanged_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
@@ -87,16 +98,24 @@ function lostpass_content(&$a) {
'$new_password' => $new_password,
'$uid' => $newuid ));
- $res = mail($email,"Your password has changed at {$a->config['sitename']}",$email_tpl,"From: Administrator@{$_SERVER[SERVER_NAME]}");
+ $res = mail($email,"Your password has changed at {$a->config['sitename']}",$email_tpl,
+ 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
return $o;
}
}
else {
- $tpl = load_view_file('view/lostpass.tpl');
-
- $o .= $tpl;
+ $tpl = get_markup_template('lostpass.tpl');
+
+ $o .= replace_macros($tpl,array(
+ '$title' => t('Forgot your Password?'),
+ '$desc' => t('Enter your email address and submit to have your password reset. Then check your email for further instructions.'),
+ '$name' => t('Nickname or Email: '),
+ '$submit' => t('Reset')
+ ));
return $o;
}
diff --git a/mod/manage.php b/mod/manage.php
index 9981a0446..26f7315c3 100644
--- a/mod/manage.php
+++ b/mod/manage.php
@@ -34,7 +34,7 @@ function manage_post(&$a) {
$_SESSION['page_flags'] = $r[0]['page-flags'];
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $r[0]['nickname'];
- notice( t("Welcome back ") . $r[0]['username'] . EOL);
+ notice( sprintf( t("Welcome back %s") , $r[0]['username']) . EOL);
$a->user = $r[0];
if(strlen($a->user['timezone'])) {
diff --git a/mod/match.php b/mod/match.php
new file mode 100644
index 000000000..092595a09
--- /dev/null
+++ b/mod/match.php
@@ -0,0 +1,57 @@
+<?php
+
+
+function match_content(&$a) {
+
+ $o = '';
+ if(! local_user())
+ return;
+
+ $o .= '<h2>' . t('Profile Match') . '</h2>';
+
+ $r = q("SELECT `pub_keywords`, `prv_keywords` FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1",
+ intval(local_user())
+ );
+ if(! count($r))
+ return;
+ if(! $r[0]['pub_keywords'] && (! $r[0]['prv_keywords'])) {
+ notice('No keywords to match. Please add keywords to your default profile.');
+ return;
+
+ }
+
+ $params = array();
+ $tags = trim($r[0]['pub_keywords'] . ' ' . $r[0]['prv_keywords']);
+ if($tags) {
+ $params['s'] = $tags;
+ if($a->pager['page'] != 1)
+ $params['p'] = $a->pager['page'];
+
+ $x = post_url('http://dir.friendika.com/msearch', $params);
+
+ $j = json_decode($x);
+
+ if($j->total) {
+ $a->set_pager_total($j->total);
+ $a->set_pager_itemspage($j->items_page);
+ }
+
+ if(count($j->results)) {
+ foreach($j->results as $jj) {
+ $o .= '<div class="profile-match-wrapper"><div class="profile-match-photo">';
+ $o .= '<a href="' . $jj->url . '">' . '<img src="' . $jj->photo . '" alt="' . $jj->name . '" title="' . $jj->name . '[' . $jj->url . ']' . '" /></a></div>';
+ $o .= '<div class="profile-match-break"></div>';
+ $o .= '<div class="profile-match-name"><a href="' . $jj->url . '" title="' . $jj->name . '[' . $jj->url .']' . '">' . $jj->name . '</a></div>';
+ $o .= '<div class="profile-match-end"></div></div>';
+ }
+ $o .= '<div id="profile-match-wrapper-end"></div>';
+ }
+ else {
+ notice( t('No matches') . EOL);
+ }
+
+ }
+
+ $o .= paginate($a);
+ return $o;
+} \ No newline at end of file
diff --git a/mod/message.php b/mod/message.php
index 4821a45d2..c9ff3bb8e 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -120,7 +120,7 @@ function message_content(&$a) {
$myprofile = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
- $tpl = load_view_file('view/mail_head.tpl');
+ $tpl = get_markup_template('mail_head.tpl');
$header = replace_macros($tpl, array(
'$messages' => t('Messages'),
'$inbox' => t('Inbox'),
@@ -164,15 +164,18 @@ function message_content(&$a) {
if(($a->argc > 1) && ($a->argv[1] === 'new')) {
- $tpl = load_view_file('view/msg-header.tpl');
+ $tpl = get_markup_template('msg-header.tpl');
$a->page['htmlhead'] .= replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
- '$nickname' => $a->user['nickname']
+ '$nickname' => $a->user['nickname'],
+ '$linkurl' => t('Please enter a link URL:')
));
- $select = contact_select('messageto','message-to-select', false, 4, true);
- $tpl = load_view_file('view/prv_message.tpl');
+ $preselect = (isset($a->argv[2])?array($a->argv[2]):false);
+
+ $select = contact_select('messageto','message-to-select', $preselect, 4, true);
+ $tpl = get_markup_template('prv_message.tpl');
$o .= replace_macros($tpl,array(
'$header' => t('Send Private Message'),
'$to' => t('To:'),
@@ -222,7 +225,7 @@ function message_content(&$a) {
return $o;
}
- $tpl = load_view_file('view/mail_list.tpl');
+ $tpl = get_markup_template('mail_list.tpl');
foreach($r as $rr) {
$o .= replace_macros($tpl, array(
'$id' => $rr['id'],
@@ -234,7 +237,7 @@ function message_content(&$a) {
'$delete' => t('Delete conversation'),
'$body' => $rr['body'],
'$to_name' => $rr['name'],
- '$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'],'D, d M Y - g:i A')
+ '$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A'))
));
}
$o .= paginate($a);
@@ -272,7 +275,7 @@ function message_content(&$a) {
require_once("include/bbcode.php");
- $tpl = load_view_file('view/msg-header.tpl');
+ $tpl = get_markup_template('msg-header.tpl');
$a->page['htmlhead'] .= replace_macros($tpl, array(
'$nickname' => $a->user['nickname'],
@@ -280,7 +283,7 @@ function message_content(&$a) {
));
- $tpl = load_view_file('view/mail_conv.tpl');
+ $tpl = get_markup_template('mail_conv.tpl');
foreach($messages as $message) {
if($message['from-url'] == $myprofile) {
$from_url = $myprofile;
@@ -306,7 +309,7 @@ function message_content(&$a) {
}
$select = $message['name'] . '<input type="hidden" name="messageto" value="' . $contact_id . '" />';
$parent = '<input type="hidden" name="replyto" value="' . $message['parent-uri'] . '" />';
- $tpl = load_view_file('view/prv_message.tpl');
+ $tpl = get_markup_template('prv_message.tpl');
$o .= replace_macros($tpl,array(
'$header' => t('Send Reply'),
'$to' => t('To:'),
diff --git a/mod/network.php b/mod/network.php
index 32c7216d4..16739b434 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -15,25 +15,25 @@ function network_init(&$a) {
$a->page['aside'] .= '<div id="network-new-link">';
if(($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new'))
- $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . '">' . t('Normal View') . '</a>';
+ $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' . t('Normal View') . '</a>';
else
- $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . $a->cmd . '/new' . '">' . t('New Item View') . '</a>';
+ $a->page['aside'] .= '<a href="' . $a->get_baseurl() . '/' . $a->cmd . '/new' . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '') . '">' . t('New Item View') . '</a>';
$a->page['aside'] .= '</div>';
- $a->page['aside'] .= group_side('network','network');
+ $a->page['aside'] .= group_side('network','network',true);
}
function network_content(&$a, $update = 0) {
+ require_once('include/conversation.php');
+
if(! local_user())
return login(false);
$o = '';
- require_once("include/bbcode.php");
-
$contact_id = $a->cid;
$group = 0;
@@ -41,6 +41,8 @@ function network_content(&$a, $update = 0) {
$nouveau = false;
require_once('include/acl_selectors.php');
+ $cid = ((x($_GET['cid'])) ? intval($_GET['cid']) : 0);
+
if(($a->argc > 2) && $a->argv[2] === 'new')
$nouveau = true;
@@ -49,67 +51,41 @@ function network_content(&$a, $update = 0) {
$nouveau = true;
else {
$group = intval($a->argv[1]);
- $group_acl = array('allow_gid' => '<' . $group . '>');
+ $def_acl = array('allow_gid' => '<' . $group . '>');
}
}
+ if($cid)
+ $def_acl = array('allow_cid' => '<' . intval($cid) . '>');
+
if(! $update) {
+ if(group) {
+ if(($t = group_public_members($group)) && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
+ $plural_form = sprintf( tt('%d member', '%d members', $t), $t);
+ notice( sprintf( t('Warning: This group contains %s from an insecure network.'), $plural_form ) . EOL);
+ notice( t('Private messages to this group are at risk of public disclosure.') . EOL);
+ }
+ }
+
$o .= '<script> $(document).ready(function() { $(\'#nav-network-link\').addClass(\'nav-selected\'); });</script>';
$_SESSION['return_url'] = $a->cmd;
- $geotag = (($a->user['allow_location']) ? load_view_file('view/jot_geotag.tpl') : '');
-
- $tpl = load_view_file('view/jot-header.tpl');
-
- $a->page['htmlhead'] .= replace_macros($tpl, array(
- '$baseurl' => $a->get_baseurl(),
- '$geotag' => $geotag,
- '$nickname' => $a->user['nickname']
- ));
-
-
- $tpl = load_view_file("view/jot.tpl");
-
- if(($group) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid'])))))
- $lockstate = 'lock';
- else
- $lockstate = 'unlock';
-
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
- $jotplugins = '';
- $jotnets = '';
- call_hooks('jot_tool', $jotplugins);
- call_hooks('jot_networks', $jotnets);
-
- $tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
-
- $o .= replace_macros($tpl,array(
- '$return_path' => $a->cmd,
- '$action' => 'item',
- '$share' => t('Share'),
- '$upload' => t('Upload photo'),
- '$weblink' => t('Insert web link'),
- '$youtube' => t('Insert YouTube video'),
- '$setloc' => t('Set your location'),
- '$noloc' => t('Clear browser location'),
- '$wait' => t('Please wait'),
- '$permset' => t('Permission settings'),
- '$content' => '',
- '$post_id' => '',
- '$baseurl' => $a->get_baseurl(),
- '$defloc' => $a->user['default-location'],
- '$visitor' => 'block',
- '$emailcc' => t('CC: email addresses'),
- '$jotnets' => $jotnets,
- '$emtitle' => t('Example: bob@example.com, mary@example.com'),
- '$lockstate' => $lockstate,
- '$acl' => populate_acl((($group) ? $group_acl : $a->user), $celeb),
- '$bang' => (($group) ? '!' : ''),
- '$profile_uid' => $_SESSION['uid']
- ));
+ $x = array(
+ 'is_owner' => true,
+ 'allow_location' => $a->user['allow_location'],
+ 'default_location' => $a->user['default_location'],
+ 'nickname' => $a->user['nickname'],
+ 'lockstate' => ((($group) || (is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'),
+ 'acl' => populate_acl((($group || $cid) ? $def_acl : $a->user), $celeb),
+ 'bang' => (($group || $cid) ? '!' : ''),
+ 'visitor' => 'block',
+ 'profile_uid' => local_user()
+ );
+ $o .= status_editor($a,$x);
// The special div is needed for liveUpdate to kick in for this page.
// We only launch liveUpdate if you are on the front page, you aren't
@@ -119,18 +95,21 @@ function network_content(&$a, $update = 0) {
$o .= '<div id="live-network"></div>' . "\r\n";
$o .= "<script> var profile_uid = " . $_SESSION['uid']
. "; var netargs = '" . substr($a->cmd,8)
+ . ((x($_GET,'cid')) ? '/?cid=' . $_GET['cid'] : '')
. "'; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
}
- // We aren't going to try and figure out at the item, group, and page level
- // which items you've seen and which you haven't. You're looking at some
- // subset of items, so just mark everything seen.
+ // We aren't going to try and figure out at the item, group, and page
+ // level which items you've seen and which you haven't. If you're looking
+ // at the top level network page just mark everything seen.
- $r = q("UPDATE `item` SET `unseen` = 0
- WHERE `unseen` = 1 AND `uid` = %d",
- intval($_SESSION['uid'])
- );
+ if((! $group) && (! $cid)) {
+ $r = q("UPDATE `item` SET `unseen` = 0
+ WHERE `unseen` = 1 AND `uid` = %d",
+ intval($_SESSION['uid'])
+ );
+ }
// We don't have to deal with ACL's on this page. You're looking at everything
// that belongs to you, hence you can see all of it. We will filter by group if
@@ -148,7 +127,7 @@ function network_content(&$a, $update = 0) {
killme();
notice( t('No such group') . EOL );
goaway($a->get_baseurl() . '/network');
- return; // NOTREACHED
+ // NOTREACHED
}
$contacts = expand_groups(array($group));
@@ -160,28 +139,56 @@ function network_content(&$a, $update = 0) {
notice( t('Group is empty'));
}
- $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( $contact_str )) ";
+ $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' )) ";
$o = '<h2>' . t('Group: ') . $r[0]['name'] . '</h2>' . $o;
}
+ elseif($cid) {
+
+ $r = q("SELECT `id`,`name`,`network`,`writable` FROM `contact` WHERE `id` = %d
+ AND `blocked` = 0 AND `pending` = 0 LIMIT 1",
+ intval($cid)
+ );
+ if(count($r)) {
+ $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( " . intval($cid) . " )) ";
+ $o = '<h2>' . t('Contact: ') . $r[0]['name'] . '</h2>' . $o;
+ if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
+ notice( t('Private messages to this person are at risk of public disclosure.') . EOL);
+ }
+
+ }
+ else {
+ notice( t('Invalid contact.') . EOL);
+ goaway($a->get_baseurl() . '/network');
+ // NOTREACHED
+ }
+ }
- if((! $group) && (! $update))
+ if((! $group) && (! $cid) && (! $update))
$o .= get_birthdays();
+ $sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` ");
$r = q("SELECT COUNT(*) AS `total`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ $sql_extra2
$sql_extra ",
intval($_SESSION['uid'])
);
- if(count($r))
+ if(count($r)) {
$a->set_pager_total($r[0]['total']);
+ $a->set_pager_itemspage(40);
+ }
+
if($nouveau) {
+
+ // "New Item View" - show all items unthreaded in reverse created date order
+
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
`contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
FROM `item`, `contact`
@@ -194,282 +201,65 @@ function network_content(&$a, $update = 0) {
intval($a->pager['start']),
intval($a->pager['itemspage'])
);
+
}
else {
- $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
- `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
- `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
- FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact`
+
+ // Normal conversation view
+ // First fetch a known number of parent items
+
+ $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid`
+ FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
- AND `contact`.`id` = `item`.`contact-id`
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
- AND `item`.`parent` = `parentitem`.`id`
+ AND `item`.`parent` = `item`.`id`
$sql_extra
- ORDER BY `parentitem`.`created` DESC, `item`.`gravity` ASC, `item`.`created` ASC LIMIT %d ,%d ",
+ ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
intval(local_user()),
intval($a->pager['start']),
intval($a->pager['itemspage'])
);
- }
-
- $author_contacts = extract_item_authors($r,local_user());
- $cmnt_tpl = load_view_file('view/comment_item.tpl');
- $like_tpl = load_view_file('view/like.tpl');
- $tpl = load_view_file('view/wall_item.tpl');
- $wallwall = load_view_file('view/wallwall_item.tpl');
- $alike = array();
- $dlike = array();
-
- if(count($r)) {
-
- if($nouveau) {
-
- $tpl = load_view_file('view/search_item.tpl');
- $droptpl = load_view_file('view/wall_fake_drop.tpl');
-
- foreach($r as $item) {
-
- $comment = '';
- $owner_url = '';
- $owner_photo = '';
- $owner_name = '';
- $sparkle = '';
-
- $profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']);
- $profile_avatar = ((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']);
- $profile_link = ((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
-
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
- if(strlen($item['author-link'])) {
- if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
- $profile_link = $redirect_url;
- $sparkle = ' sparkle';
- }
- elseif(isset($author_contacts[$item['author-link']])) {
- $profile_link = $a->get_baseurl() . '/redir/' . $author_contacts[$item['author-link']];
- $sparkle = ' sparkle';
- }
- }
-
- $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
- $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
- if($coord) {
- if($location)
- $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
- else
- $location = '<span class="smalltext">' . $coord . '</span>';
- }
-
- $drop = replace_macros($droptpl,array('$id' => $item['id']));
- $lock = '<div class="wall-item-lock"></div>';
-
- $o .= replace_macros($tpl,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$profile_url' => $profile_link,
- '$name' => $profile_name,
- '$sparkle' => $sparkle,
- '$lock' => $lock,
- '$thumb' => $profile_avatar,
- '$title' => $item['title'],
- '$body' => smilies(bbcode($item['body'])),
- '$ago' => relative_date($item['created']),
- '$location' => $location,
- '$indent' => '',
- '$owner_url' => $owner_url,
- '$owner_photo' => $owner_photo,
- '$owner_name' => $owner_name,
- '$drop' => $drop,
- '$conv' => '<a href="' . $a->get_baseurl() . '/display/' . $a->user['nickname'] . '/' . $item['id'] . '">' . t('View in context') . '</a>'
- ));
-
- }
- $o .= paginate($a);
-
- return $o;
-
- }
-
-
-
- foreach($r as $item) {
- like_puller($a,$item,$alike,'like');
- like_puller($a,$item,$dlike,'dislike');
+ // Then fetch all the children of the parents that are on this page
+
+ $parents_arr = array();
+ $parents_str = '';
+
+ if(count($r)) {
+ foreach($r as $rr)
+ $parents_arr[] = $rr['item_id'];
+ $parents_str = implode(', ', $parents_arr);
+
+ $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`, `contact`.`writable`,
+ `contact`.`network`, `contact`.`thumb`, `contact`.`dfrn-id`, `contact`.`self`,
+ `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
+ FROM `item`, (SELECT `p`.`id`,`p`.`created` FROM `item` AS `p` WHERE `p`.`parent`=`p`.`id`) as `parentitem`, `contact`
+ WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+ AND `contact`.`id` = `item`.`contact-id`
+ AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ AND `item`.`parent` = `parentitem`.`id` AND `item`.`parent` IN ( %s )
+ $sql_extra
+ ORDER BY `parentitem`.`created` DESC, `item`.`gravity` ASC, `item`.`created` ASC ",
+ intval(local_user()),
+ dbesc($parents_str)
+ );
}
+ }
- foreach($r as $item) {
-
- $comment = '';
- $template = $tpl;
- $commentww = '';
- $sparkle = '';
- $owner_url = $owner_photo = $owner_name = '';
-
- if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE))) && ($item['id'] != $item['parent']))
- continue;
-
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
-
-
- $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
- || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
- ? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
- : '<div class="wall-item-lock"></div>');
-
-
- // Top-level wall post not written by the wall owner (wall-to-wall)
- // First figure out who owns it.
-
- $osparkle = '';
-
- if(($item['parent'] == $item['item_id']) && (! $item['self'])) {
-
- if($item['type'] === 'wall') {
- // I do. Put me on the left of the wall-to-wall notice.
- $owner_url = $a->contact['url'];
- $owner_photo = $a->contact['thumb'];
- $owner_name = $a->contact['name'];
- $template = $wallwall;
- $commentww = 'ww';
- }
- if(($item['type'] === 'remote') && (strlen($item['owner-link'])) && ($item['owner-link'] != $item['author-link'])) {
- // Could be anybody.
- $owner_url = $item['owner-link'];
- $owner_photo = $item['owner-avatar'];
- $owner_name = $item['owner-name'];
- $template = $wallwall;
- $commentww = 'ww';
- // If it is our contact, use a friendly redirect link
- if((link_compare($item['owner-link'],$item['url']))
- && ($item['network'] === 'dfrn')) {
- $owner_url = $redirect_url;
- $osparkle = ' sparkle';
- }
- }
- }
-
- if($update)
- $return_url = $_SESSION['return_url'];
- else
- $return_url = $_SESSION['return_url'] = $a->cmd;
-
- $likebuttons = '';
- if($item['id'] == $item['parent']) {
- $likebuttons = replace_macros($like_tpl,array(
- '$id' => $item['id'],
- '$likethis' => t("I like this \x28toggle\x29"),
- '$nolike' => t("I don't like this \x28toggle\x29"),
- '$wait' => t('Please wait')
- ));
- }
-
- if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '',
- '$jsreload' => '', // $_SESSION['return_url'],
- '$type' => 'net-comment',
- '$id' => $item['item_id'],
- '$parent' => $item['parent'],
- '$profile_uid' => $_SESSION['uid'],
- '$mylink' => $a->contact['url'],
- '$mytitle' => t('This is you'),
- '$myphoto' => $a->contact['thumb'],
- '$ww' => $commentww
- ));
- }
-
- $drop = replace_macros(load_view_file('view/wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
-
- $photo = $item['photo'];
- $thumb = $item['thumb'];
-
- // Post was remotely authored.
-
- $diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true);
-
- $profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
- $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $thumb);
-
- if(strlen($item['author-link'])) {
- $profile_link = $item['author-link'];
- if(link_compare($item['author-link'],$item['url']) && ($item['network'] === 'dfrn') && (! $item['self'])) {
- $profile_link = $redirect_url;
- $sparkle = ' sparkle';
- }
- elseif(isset($author_contacts[$item['author-link']])) {
- $profile_link = $a->get_baseurl() . '/redir/' . $author_contacts[$item['author-link']];
- $sparkle = ' sparkle';
- }
- }
- else
- $profile_link = $item['url'];
-
- $like = ((x($alike,$item['id'])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
- $dislike = ((x($dlike,$item['id'])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
-
- $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
- $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
- if($coord) {
- if($location)
- $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
- else
- $location = '<span class="smalltext">' . $coord . '</span>';
- }
+ // Set this so that the conversation function can find out contact info for our wall-wall items
+ $a->page_contact = $a->contact;
- $indent = (($item['parent'] != $item['item_id']) ? ' comment' : '');
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $indent .= ' shiny';
-
-
- // Build the HTML
-
- $tmp_item = replace_macros($template,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$olinktitle' => t('View $owner_name\'s profile'),
- '$to' => t('to'),
- '$wall' => t('Wall-to-Wall'),
- '$vwall' => t('via Wall-To-Wall:'),
- '$profile_url' => $profile_link,
- '$name' => $profile_name,
- '$thumb' => $profile_avatar,
- '$osparkle' => $osparkle,
- '$sparkle' => $sparkle,
- '$title' => $item['title'],
- '$body' => smilies(bbcode($item['body'])),
- '$ago' => relative_date($item['created']),
- '$lock' => $lock,
- '$location' => $location,
- '$indent' => $indent,
- '$owner_url' => $owner_url,
- '$owner_photo' => $owner_photo,
- '$owner_name' => $owner_name,
- '$plink' => get_plink($item),
- '$drop' => $drop,
- '$vote' => $likebuttons,
- '$like' => $like,
- '$dislike' => $dislike,
- '$comment' => $comment
- ));
-
- $arr = array('item' => $item, 'output' => $tmp_item);
- call_hooks('display_item', $arr);
-
- $o .= $arr['output'];
+ $mode = (($nouveau) ? 'network-new' : 'network');
- }
- }
+ $o .= conversation($a,$r,$mode,$update);
if(! $update) {
+
$o .= paginate($a);
$o .= '<div class="cc-license">' . t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.') . '</div>';
}
return $o;
-} \ No newline at end of file
+}
diff --git a/mod/notes.php b/mod/notes.php
new file mode 100644
index 000000000..7a826bf61
--- /dev/null
+++ b/mod/notes.php
@@ -0,0 +1,129 @@
+<?php
+
+function notes_init(&$a) {
+
+ if(! local_user())
+ return;
+
+ $profile = 0;
+
+ $which = $a->user['nickname'];
+
+// profile_load($a,$which,$profile);
+
+}
+
+
+function notes_content(&$a) {
+
+ if(! local_user()) {
+ notice( t('Permission denied.') . EOL);
+ return;
+ }
+
+ require_once("include/bbcode.php");
+ require_once('include/security.php');
+ require_once('include/conversation.php');
+ require_once('include/acl_selectors.php');
+ $groups = array();
+
+
+ $o = '';
+
+ $remote_contact = false;
+
+ $contact_id = $_SESSION['cid'];
+ $contact = $a->contact;
+
+ $is_owner = true;
+
+
+ $o .= '<h3>' . t('Private Notes') . '</h3>';
+
+ $commpage = false;
+ $commvisitor = false;
+
+ $celeb = false;
+
+
+
+ $x = array(
+ 'is_owner' => $is_owner,
+ 'allow_location' => (($a->user['allow_location']) ? true : false),
+ 'default_location' => $a->user['default-location'],
+ 'nickname' => $a->user['nickname'],
+ 'lockstate' => 'lock',
+ 'acl' => '',
+ 'bang' => '',
+ 'visitor' => 'block',
+ 'profile_uid' => local_user(),
+ 'button' => t('Save')
+
+ );
+
+ $o .= status_editor($a,$x,$a->contact['id']);
+
+
+ // Construct permissions
+
+ // default permissions - anonymous user
+
+ $sql_extra = " AND `allow_cid` = '<" . $a->contact['id'] . ">' ";
+
+ $r = q("SELECT COUNT(*) AS `total`
+ FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+ WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+ AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
+ $sql_extra ",
+ intval(local_user())
+
+ );
+
+ if(count($r)) {
+ $a->set_pager_total($r[0]['total']);
+ $a->set_pager_itemspage(40);
+ }
+
+ $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact-uid`
+ FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+ WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+ AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 0
+ $sql_extra
+ ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
+ intval(local_user()),
+ intval($a->pager['start']),
+ intval($a->pager['itemspage'])
+
+ );
+
+ $parents_arr = array();
+ $parents_str = '';
+
+ if(count($r)) {
+ foreach($r as $rr)
+ $parents_arr[] = $rr['item_id'];
+ $parents_str = implode(', ', $parents_arr);
+
+ $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
+ `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
+ `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
+ FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+ WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+ AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ AND `item`.`parent` IN ( %s )
+ $sql_extra
+ ORDER BY `parent` DESC, `gravity` ASC, `item`.`id` ASC ",
+ intval(local_user()),
+ dbesc($parents_str)
+ );
+ }
+
+ $o .= conversation($a,$r,'notes',$update);
+
+
+ $o .= paginate($a);
+ return $o;
+}
diff --git a/mod/notifications.php b/mod/notifications.php
index 93ca82bb0..b860f6018 100644
--- a/mod/notifications.php
+++ b/mod/notifications.php
@@ -65,12 +65,11 @@ function notifications_content(&$a) {
else
$sql_extra = " AND `ignore` = 0 ";
-
- $tpl = load_view_file('view/intros-top.tpl');
- $o .= replace_macros($tpl,array(
- '$hide_url' => ((strlen($sql_extra)) ? 'notifications/all' : 'notifications' ),
- '$hide_text' => ((strlen($sql_extra)) ? t('Show Ignored Requests') : t('Hide Ignored Requests'))
- ));
+ $o .= '<h1>' . t('Pending Friend/Connect Notifications') . '</h1>' . "\r\n";
+
+ $o .= '<div id="notification-show-hide-wrapper" >';
+ $o .= '<a href="' . ((strlen($sql_extra)) ? 'notifications/all' : 'notifications' ) . '" id="notifications-show-hide-link" >'
+ . ((strlen($sql_extra)) ? t('Show Ignored Requests') : t('Hide Ignored Requests')) . '</a></div>' . "\r\n";
$r = q("SELECT COUNT(*) AS `total` FROM `intro`
@@ -90,13 +89,13 @@ function notifications_content(&$a) {
if(($r !== false) && (count($r))) {
- $tpl = load_view_file("view/intros.tpl");
+ $tpl = get_markup_template("intros.tpl");
foreach($r as $rr) {
$friend_selected = (($rr['network'] !== 'stat') ? ' checked="checked" ' : ' disabled ');
$fan_selected = (($rr['network'] === 'stat') ? ' checked="checked" disabled ' : '');
- $dfrn_tpl = load_view_file('view/netfriend.tpl');
+ $dfrn_tpl = get_markup_template('netfriend.tpl');
$knowyou = '';
$dfrn_text = '';
@@ -141,24 +140,20 @@ function notifications_content(&$a) {
if ($a->config['register_policy'] == REGISTER_APPROVE &&
$a->config['admin_email'] === $a->user['email']){
- $o .= load_view_file('view/registrations-top.tpl');
+ $o .= '<h1>' . t('User registrations waiting for confirm') . '</h1>' . "\r\n";
$r = q("SELECT `register`.*, `contact`.`name`, `user`.`email`
FROM `register`
LEFT JOIN `contact` ON `register`.`uid` = `contact`.`uid`
LEFT JOIN `user` ON `register`.`uid` = `user`.`uid`;");
if(($r !== false) && (count($r))) {
- $tpl = load_view_file("view/registrations.tpl");
+ $o .= '<ul>';
foreach($r as $rr) {
- $o .= "<ul>";
- $o .= replace_macros($tpl, array(
- '$fullname' => $rr['name'],
- '$email' => $rr['email'],
- '$approvelink' => "regmod/allow/".$rr['hash'],
- '$denylink' => "regmod/deny/".$rr['hash'],
- ));
- $o .= "</ul>";
+ $o .= '<li>' . sprintf('%s (%s) : ', $rr['name'],$rr['email'])
+ . '<a href="regmod/allow/' . $rr['hash'] .'">' . t('Approve')
+ . '</a> - <a href="regmod/deny/' . $rr['hash'] . '">' . t('Deny') . '</a></li>' . "\r\n";
}
+ $o .= "</ul>";
}
else
notice( t('No registrations.') . EOL);
diff --git a/mod/oexchange.php b/mod/oexchange.php
new file mode 100644
index 000000000..d5af4813b
--- /dev/null
+++ b/mod/oexchange.php
@@ -0,0 +1,53 @@
+<?php
+
+
+function oexchange_init(&$a) {
+
+ if(($a->argc > 1) && ($a->argv[1] === 'xrd')) {
+ $tpl = get_markup_template('oexchange_xrd.tpl');
+
+ $o = replace_macros($tpl, array('$base' => $a->get_baseurl()));
+ echo $o;
+ killme();
+ }
+
+
+
+
+}
+
+function oexchange_content(&$a) {
+
+ if(! local_user()) {
+ $o = login(false);
+ return $o;
+ }
+
+ if(($a->argc > 1) && $a->argv[1] === 'done') {
+ notice( t('Post successful.') . EOL);
+ return;
+ }
+
+ $url = (((x($_GET,'url')) && strlen($_GET['url'])) ? notags(trim($_GET['url'])) : '');
+
+ $s = fetch_url($a->get_baseurl() . '/parse_url&url=' . $url);
+
+ if(! strlen($s))
+ return;
+
+ require_once('include/html2bbcode.php');
+
+ $post = array();
+
+ $post['profile_uid'] = local_user();
+ $post['return'] = '/oexchange/done' ;
+ $post['body'] = html2bbcode($s);
+ $post['type'] = 'wall';
+
+ $_POST = $post;
+ require_once('mod/item.php');
+ item_post($a);
+
+}
+
+
diff --git a/mod/openid.php b/mod/openid.php
index 6ccd28e5b..c3c6c11e9 100644
--- a/mod/openid.php
+++ b/mod/openid.php
@@ -70,9 +70,18 @@ function openid_content(&$a) {
$_SESSION['page_flags'] = $r[0]['page-flags'];
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $r[0]['nickname'];
- notice( t("Welcome back ") . $r[0]['username'] . EOL);
$a->user = $r[0];
+ if($a->user['login_date'] === '0000-00-00 00:00:00') {
+ $_SESSION['return_url'] = 'profile_photo/new';
+ $a->module = 'profile_photo';
+ notice( t("Welcome ") . $a->user['username'] . EOL);
+ notice( t('Please upload a profile photo.') . EOL);
+ }
+ else
+ notice( t("Welcome back ") . $a->user['username'] . EOL);
+
+
if(strlen($a->user['timezone'])) {
date_default_timezone_set($a->user['timezone']);
$a->timezone = $a->user['timezone'];
diff --git a/mod/opensearch.php b/mod/opensearch.php
new file mode 100644
index 000000000..ff748d1c5
--- /dev/null
+++ b/mod/opensearch.php
@@ -0,0 +1,18 @@
+<?php
+ function opensearch_content(&$a) {
+
+ $tpl = get_markup_template('opensearch.tpl');
+
+ header("Content-type: application/opensearchdescription+xml");
+
+ $o = replace_macros($tpl, array(
+ '$baseurl' => $a->get_baseurl(),
+ '$nodename' => $a->get_hostname(),
+ ));
+
+ echo $o;
+
+ killme();
+
+ }
+?> \ No newline at end of file
diff --git a/mod/parse_url.php b/mod/parse_url.php
index b3b42b6cb..30371e9f6 100644
--- a/mod/parse_url.php
+++ b/mod/parse_url.php
@@ -5,11 +5,15 @@ require_once('library/HTML5/Parser.php');
function parse_url_content(&$a) {
- $url = trim($_GET['url']);
+ logger('parse_url: ' . $_GET['url']);
+
+ $url = trim(hex2bin($_GET['url']));
+
+ logger('parse_url: ' . $url);
$text = null;
- $template = "<a href=\"%s\" >%s</a>%s";
+ $template = "<a href=\"%s\" >%s</a>\n%s";
$arr = array('url' => $url, 'text' => '');
@@ -57,6 +61,8 @@ function parse_url_content(&$a) {
$items = $div->getElementsByTagName('p');
if($items) {
foreach($items as $item) {
+ if($item->getElementsByTagName('script'))
+ continue;
$text = $item->textContent;
$text = strip_tags($text);
if(strlen($text) < 100)
@@ -73,6 +79,8 @@ function parse_url_content(&$a) {
$items = $dom->getElementsByTagName('p');
if($items) {
foreach($items as $item) {
+ if($item->getElementsByTagName('script'))
+ continue;
$text = $item->textContent;
$text = strip_tags($text);
if(strlen($text) < 100)
diff --git a/mod/photo.php b/mod/photo.php
index 2f8d180fd..3bea7e72d 100644
--- a/mod/photo.php
+++ b/mod/photo.php
@@ -19,6 +19,11 @@ function photo_init(&$a) {
$default = 'images/default-profile.jpg';
if(isset($type)) {
+
+ /**
+ * Profile photos
+ */
+
switch($type) {
case 'profile':
@@ -50,6 +55,10 @@ function photo_init(&$a) {
}
else {
+ /**
+ * Other photos
+ */
+
$resolution = 0;
$photo = str_replace('.jpg','',$photo);
@@ -114,7 +123,7 @@ function photo_init(&$a) {
// but who should otherwise be able to view it. Show a default image to let
// them know permissions was denied. It may be possible to view the image
// through an authenticated profile visit.
- // There won't be many complete unauthorised people seeing this because
+ // There won't be many completely unauthorised people seeing this because
// they won't have the photo link, so there's a reasonable chance that the person
// might be able to obtain permission to view it.
diff --git a/mod/photos.php b/mod/photos.php
index 929d1c971..89fef2ee8 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -6,6 +6,10 @@ require_once('include/bbcode.php');
function photos_init(&$a) {
+
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return;
+ }
$o = '';
if($a->argc > 1) {
@@ -310,6 +314,7 @@ foreach($_FILES AS $key => $val) {
$arr['deny_gid'] = $p[0]['deny_gid'];
$arr['last-child'] = 1;
$arr['visible'] = $visibility;
+
$arr['body'] = '[url=' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $p[0]['resource-id'] . ']'
. '[img]' . $a->get_baseurl() . '/photo/' . $p[0]['resource-id'] . '-' . $p[0]['scale'] . '.jpg' . '[/img]'
. '[/url]';
@@ -557,6 +562,8 @@ foreach($_FILES AS $key => $val) {
if(($maximagesize) && ($filesize > $maximagesize)) {
notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
@unlink($src);
+ $foo = 0;
+ call_hooks('photo_post_end',$foo);
return;
}
@@ -569,6 +576,8 @@ foreach($_FILES AS $key => $val) {
logger('mod/photos.php: photos_post(): unable to process image' , 'LOGGER_DEBUG');
notice( t('Unable to process image.') . EOL );
@unlink($src);
+ $foo = 0;
+ call_hooks('photo_post_end',$foo);
killme();
}
@@ -634,6 +643,17 @@ foreach($_FILES AS $key => $val) {
$item_id = item_store($arr);
+ if($item_id) {
+ q("UPDATE `item` SET `plink` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
+ dbesc($a->get_baseurl() . '/display/' . $owner_record['nickname'] . '/' . $item_id),
+ intval($page_owner_uid),
+ intval($item_id)
+ );
+ }
+
+ if($visible)
+ proc_run('php', "include/notifier.php", 'wall-new', $item_id);
+
call_hooks('photo_post_end',intval($item_id));
// addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
@@ -656,6 +676,16 @@ function photos_content(&$a) {
// photos/name/image/xxxxx/edit
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
+
+ require_once('include/bbcode.php');
+ require_once('include/security.php');
+ require_once('include/conversation.php');
+
if(! x($a->data,'user')) {
notice( t('No photos selected') . EOL );
return;
@@ -802,7 +832,7 @@ function photos_content(&$a) {
- $tpl = load_view_file('view/photos_upload.tpl');
+ $tpl = get_markup_template('photos_upload.tpl');
$o .= replace_macros($tpl,array(
'$pagename' => t('Upload Photos'),
'$sessid' => session_id(),
@@ -848,7 +878,7 @@ function photos_content(&$a) {
if($cmd === 'edit') {
if(($album != t('Profile Photos')) && ($album != t('Contact Photos'))) {
if($can_post) {
- $edit_tpl = load_view_file('view/album_edit.tpl');
+ $edit_tpl = get_markup_template('album_edit.tpl');
$o .= replace_macros($edit_tpl,array(
'$nametext' => t('New album name: '),
'$nickname' => $a->data['user']['nickname'],
@@ -869,7 +899,7 @@ function photos_content(&$a) {
}
}
}
- $tpl = load_view_file('view/photo_album.tpl');
+ $tpl = get_markup_template('photo_album.tpl');
if(count($r))
foreach($r as $rr) {
$o .= replace_macros($tpl,array(
@@ -892,10 +922,9 @@ function photos_content(&$a) {
if($datatype === 'image') {
- require_once('security.php');
- require_once('bbcode.php');
- $o = '<div id="live-display"></div>' . "\r\n";
+
+ $o = '';
// fetch image, item containing image, then comments
$ph = q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
@@ -948,34 +977,36 @@ function photos_content(&$a) {
}
}
-
- $o .= '<h3>' . '<a href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']) . '">' . $ph[0]['album'] . '</a></h3>';
+ $album_link = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']);
+ $tools = Null;
+ $lock = Null;
if($can_post && ($ph[0]['uid'] == $owner_uid)) {
- $o .= '<div id="photo-edit-link-wrap" ><a id="photo-edit-link" href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit' . '">' . t('Edit photo') . '</a>';
-
- $o .= ' - <a id="photo-toprofile-link" href="' . $a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'].'">'.t('Use as profile photo').'</a>';
+ $tools = array(
+ 'edit' => array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit', t('Edit photo')),
+ 'profile'=>array($a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'], t('Use as profile photo')),
+ );
+
// lock
- $o .= ( ( ($ph[0]['uid'] == local_user()) && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid'])
+ $lock = ( ( ($ph[0]['uid'] == local_user()) && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid'])
|| strlen($ph[0]['deny_cid']) || strlen($ph[0]['deny_gid'])) )
- ? ' - <img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,\'photo/' . $ph[0]['id'] . '\');" />'
- : '');
+ ? t('Private Message')
+ : Null);
- $o .= '</div>';
+
}
if($prevlink)
- $o .= '<div id="photo-prev-link"><a href="' . $prevlink .'">' . t('<< Prev') . '</a></div>' ;
+ $prevlink = array($prevlink, t('<< Prev')) ;
- $o .= '<div id="photo-photo"><a href="' . $a->get_baseurl() . '/photo/'
- . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg" title="'
- . t('View Full Size') . '" ><img src="' . $a->get_baseurl() . '/photo/'
- . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '" /></a></div>';
+ $photo = array(
+ 'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg',
+ 'title'=> t('View Full Size'),
+ 'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg'
+ );
if($nextlink)
- $o .= '<div id="photo-next-link"><a href="' . $nextlink .'">' . t('Next >>') . '</a></div>';
-
- $o .= '<div id="photo-photo-end"></div>';
+ $nextlink = array($nextlink, t('Next >>'));
// Do we have an item for this photo?
@@ -1027,28 +1058,27 @@ function photos_content(&$a) {
}
}
- $o .= '<div id="photo-caption" >' . $ph[0]['desc'] . '</div>';
-
+ $tags=Null;
if(count($linked_items) && strlen($link_item['tag'])) {
$arr = explode(',',$link_item['tag']);
- // parse tags and add links
- $o .= '<div id="in-this-photo-text">' . t('Tags: ') . '</div>';
- $o .= '<div id="in-this-photo">';
+ // parse tags and add links
$tag_str = '';
foreach($arr as $t) {
if(strlen($tag_str))
$tag_str .= ', ';
$tag_str .= bbcode($t);
}
- $o .= $tag_str . '</div>';
+ $tags = array(t('Tags: '), $tag_str);
if($cmd === 'edit')
- $o .= '<div id="tag-remove"><a href="' . $a->get_baseurl() . '/tagrm/' . $link_item['id'] . '">' . t('[Remove any tag]') . '</a></div>';
+ $tags[] = $a->get_baseurl() . '/tagrm/' . $link_item['id'];
+ $tags[] = t('[Remove any tag]');
}
+ $edit = Null;
if(($cmd === 'edit') && ($can_post)) {
- $edit_tpl = load_view_file('view/photo_edit.tpl');
- $o .= replace_macros($edit_tpl, array(
+ $edit_tpl = get_markup_template('photo_edit.tpl');
+ $edit = replace_macros($edit_tpl, array(
'$id' => $ph[0]['id'],
'$album' => $ph[0]['album'],
'$newalbum' => t('New album name'),
@@ -1069,31 +1099,29 @@ function photos_content(&$a) {
if(count($linked_items)) {
- $cmnt_tpl = load_view_file('view/comment_item.tpl');
- $tpl = load_view_file('view/photo_item.tpl');
+ $cmnt_tpl = get_markup_template('comment_item.tpl');
+ $tpl = get_markup_template('photo_item.tpl');
$return_url = $a->cmd;
- $like_tpl = load_view_file('view/like.tpl');
+ $like_tpl = get_markup_template('like_noshare.tpl');
$likebuttons = '';
if($can_post || can_write_wall($a,$owner_uid)) {
$likebuttons = replace_macros($like_tpl,array(
- '$id' => $item['id'],
+ '$id' => $link_item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
- '$wait' => t('Please wait')
+ '$share' => t('Share'),
+ '$wait' => t('Please wait')
));
}
+ $comments = '';
if(! count($r)) {
- $o .= '<div id="photo-like-div">';
- $o .= $likebuttons;
- $o .= '</div>';
-
if($can_post || can_write_wall($a,$owner_uid)) {
if($link_item['last-child']) {
- $o .= replace_macros($cmnt_tpl,array(
+ $comments .= replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => $return_url,
'$type' => 'wall-comment',
@@ -1103,6 +1131,8 @@ function photos_content(&$a) {
'$mylink' => $contact['url'],
'$mytitle' => t('This is you'),
'$myphoto' => $contact['thumb'],
+ '$comment' => t('Comment'),
+ '$submit' => t('Submit'),
'$ww' => ''
));
}
@@ -1111,6 +1141,9 @@ function photos_content(&$a) {
$alike = array();
$dlike = array();
+
+ $like = '';
+ $dislike = '';
// display comments
if(count($r)) {
@@ -1123,17 +1156,11 @@ function photos_content(&$a) {
$like = ((isset($alike[$link_item['id']])) ? format_like($alike[$link_item['id']],$alike[$link_item['id'] . '-l'],'like',$link_item['id']) : '');
$dislike = ((isset($dlike[$link_item['id']])) ? format_like($dlike[$link_item['id']],$dlike[$link_item['id'] . '-l'],'dislike',$link_item['id']) : '');
- $o .= '<div id="photo-like-div">';
- $o .= $likebuttons;
- $o .= $like;
- $o .= $dislike;
- $o .= '</div>';
-
if($can_post || can_write_wall($a,$owner_uid)) {
if($link_item['last-child']) {
- $o .= replace_macros($cmnt_tpl,array(
+ $comments .= replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => $return_url,
'$type' => 'wall-comment',
@@ -1143,6 +1170,8 @@ function photos_content(&$a) {
'$mylink' => $contact['url'],
'$mytitle' => t('This is you'),
'$myphoto' => $contact['thumb'],
+ '$comment' => t('Comment'),
+ '$submit' => t('Submit'),
'$ww' => ''
));
}
@@ -1162,7 +1191,7 @@ function photos_content(&$a) {
if($can_post || can_write_wall($a,$owner_uid)) {
if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
+ $comments .= replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => $return_url,
'$type' => 'wall-comment',
@@ -1172,6 +1201,8 @@ function photos_content(&$a) {
'$mylink' => $contact['url'],
'$mytitle' => t('This is you'),
'$myphoto' => $contact['thumb'],
+ '$comment' => t('Comment'),
+ '$submit' => t('Submit'),
'$ww' => ''
));
}
@@ -1198,10 +1229,10 @@ function photos_content(&$a) {
$drop = '';
if(($item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
- $drop = replace_macros(load_view_file('view/wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
+ $drop = replace_macros(get_markup_template('wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
- $o .= replace_macros($template,array(
+ $comments .= replace_macros($template,array(
'$id' => $item['item_id'],
'$profile_url' => $profile_link,
'$name' => $profile_name,
@@ -1217,8 +1248,28 @@ function photos_content(&$a) {
}
}
- $o .= paginate($a);
+ $paginate = paginate($a);
}
+
+ $photo_tpl = get_markup_template('photo_view.tpl');
+ $o .= replace_macros($photo_tpl, array(
+ '$id' => $ph[0]['id'],
+ '$album' => array($album_link,$ph[0]['album']),
+ '$tools' => $tools,
+ '$lock' => $lock,
+ '$photo' => $photo,
+ '$prevlink' => $prevlink,
+ '$nextlink' => $nextlink,
+ '$desc' => $ph[0]['desc'],
+ '$tags' => $tags,
+ '$edit' => $edit,
+ '$likebuttons' => $likebuttons,
+ '$like' => $like,
+ '$dislike' => $dislike,
+ '$comments' => $comments,
+ '$paginate' => $paginate,
+ ));
+
return $o;
}
@@ -1251,21 +1302,18 @@ function photos_content(&$a) {
. $a->data['user']['nickname'] . '/upload' . '">' . t('Upload New Photos') . '</a></div>';
}
- $tpl = load_view_file('view/photo_top.tpl');
+ $tpl = get_markup_template('photo_top.tpl');
if(count($r)) {
foreach($r as $rr) {
$o .= replace_macros($tpl,array(
- '$id' => $rr['id'],
- '$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname']
- . '/image/' . $rr['resource-id'],
+ '$id' => $rr['id'],
+ '$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
'$phototitle' => t('View Photo'),
- '$imgsrc' => $a->get_baseurl() . '/photo/'
- . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.jpg',
- '$albumlink' => $a->get_baseurl() . '/photos/'
- . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']),
- '$albumname' => $rr['album'],
- '$albumalt' => t('View Album'),
- '$imgalt' => $rr['filename']
+ '$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.jpg',
+ '$albumlink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']),
+ '$albumname' => $rr['album'],
+ '$albumalt' => t('View Album'),
+ '$imgalt' => $rr['filename']
));
}
diff --git a/mod/ping.php b/mod/ping.php
index cb067f3fe..b736ea995 100644
--- a/mod/ping.php
+++ b/mod/ping.php
@@ -14,7 +14,7 @@ function ping_init(&$a) {
$network = $r[0]['total'];
$r = q("SELECT COUNT(*) AS `total` FROM `item`
- WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `type` != 'remote' ",
+ WHERE `unseen` = 1 AND `visible` = 1 AND `deleted` = 0 AND `uid` = %d AND `wall` = 1 ",
intval(local_user())
);
$home = $r[0]['total'];
diff --git a/mod/profile.php b/mod/profile.php
index 5615573b9..634aec460 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -2,6 +2,9 @@
function profile_init(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user()))
+ return;
+
if($a->argc > 1)
$which = $a->argv[1];
else {
@@ -28,6 +31,11 @@ function profile_init(&$a) {
$a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
}
+ $keywords = ((x($a->profile,'pub_keywords')) ? $a->profile['pub_keywords'] : '');
+ $keywords = str_replace(array(',',' ',',,'),array(' ',',',','),$keywords);
+ if(strlen($keywords))
+ $a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n" ;
+
$a->page['htmlhead'] .= '<meta name="dfrn-global-visibility" content="' . (($a->profile['net-publish']) ? 'true' : 'false') . '" />' . "\r\n" ;
$a->page['htmlhead'] .= '<link rel="alternate" type="application/atom+xml" href="' . $a->get_baseurl() . '/dfrn_poll/' . $which .'" />' . "\r\n" ;
$uri = urlencode('acct:' . $a->profile['nickname'] . '@' . $a->get_hostname() . (($a->path) ? '/' . $a->path : ''));
@@ -43,9 +51,16 @@ function profile_init(&$a) {
function profile_content(&$a, $update = 0) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return login();
+ }
+
+
+
require_once("include/bbcode.php");
require_once('include/security.php');
-
+ require_once('include/conversation.php');
+ require_once('include/acl_selectors.php');
$groups = array();
$tab = 'posts';
@@ -89,25 +104,21 @@ function profile_content(&$a, $update = 0) {
if(x($_GET,'tab'))
$tab = notags(trim($_GET['tab']));
- $tpl = load_view_file('view/profile_tabs.tpl');
+ $tpl = get_markup_template('profile_tabs.tpl');
$o .= replace_macros($tpl,array(
'$url' => $a->get_baseurl() . '/' . $a->cmd,
- '$phototab' => $a->get_baseurl() . '/photos/' . $a->profile['nickname']
+ '$phototab' => $a->get_baseurl() . '/photos/' . $a->profile['nickname'],
+ '$status' => t('Status'),
+ '$profile' => t('Profile'),
+ '$photos' => t('Photos')
));
if($tab === 'profile') {
- $profile_lang = get_config('system','language');
- if(! $profile_lang)
- $profile_lang = 'en';
- if(file_exists("view/$profile_lang/profile_advanced.php"))
- require_once("view/$profile_lang/profile_advanced.php");
- else
- require_once('view/profile_advanced.php');
-
+ require_once('include/profile_advanced.php');
+ $o .= advanced_profile($a);
call_hooks('profile_advanced',$o);
-
return $o;
}
@@ -118,57 +129,19 @@ function profile_content(&$a, $update = 0) {
if(can_write_wall($a,$a->profile['profile_uid'])) {
- $geotag = ((($is_owner || $commvisitor) && $a->profile['allow_location']) ? load_view_file('view/jot_geotag.tpl') : '');
-
- $tpl = load_view_file('view/jot-header.tpl');
-
- $a->page['htmlhead'] .= replace_macros($tpl, array(
- '$baseurl' => $a->get_baseurl(),
- '$geotag' => $geotag,
- '$nickname' => $a->profile['nickname']
- ));
-
- require_once('include/acl_selectors.php');
-
- $tpl = load_view_file('view/jot.tpl');
-
- if(is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))
- $lockstate = 'lock';
- else
- $lockstate = 'unlock';
-
- $jotplugins = '';
- $jotnets = '';
- call_hooks('jot_tool', $jotplugins);
-
- call_hooks('jot_networks', $jotnets);
-
- $tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));
-
- $o .= replace_macros($tpl,array(
- '$baseurl' => $a->get_baseurl(),
- '$action' => 'item',
- '$share' => t('Share'),
- '$upload' => t('Upload photo'),
- '$weblink' => t('Insert web link'),
- '$youtube' => t('Insert YouTube video'),
- '$setloc' => t('Set your location'),
- '$noloc' => t('Clear browser location'),
- '$wait' => t('Please wait'),
- '$permset' => t('Permission settings'),
- '$content' => '',
- '$post_id' => '',
- '$defloc' => (($is_owner) ? $a->user['default-location'] : ''),
- '$return_path' => $a->cmd,
- '$visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
- '$lockstate' => $lockstate,
- '$emailcc' => t('CC: email addresses'),
- '$jotnets' => $jotnets,
- '$emtitle' => t('Example: bob@example.com, mary@example.com'),
- '$bang' => '',
- '$acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
- '$profile_uid' => $a->profile['profile_uid']
- ));
+ $x = array(
+ 'is_owner' => $is_owner,
+ 'allow_location' => ((($is_owner || $commvisitor) && $a->profile['allow_location']) ? true : false),
+ 'default_location' => (($is_owner) ? $a->user['default-location'] : ''),
+ 'nickname' => $a->profile['nickname'],
+ 'lockstate' => (((is_array($a->user) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))))) ? 'lock' : 'unlock'),
+ 'acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
+ 'bang' => '',
+ 'visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
+ 'profile_uid' => $a->profile['profile_uid']
+ );
+
+ $o .= status_editor($a,$x);
}
// This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
@@ -195,7 +168,7 @@ function profile_content(&$a, $update = 0) {
// Oh - while we're here... reset the Unseen messages
$r = q("UPDATE `item` SET `unseen` = 0
- WHERE `type` != 'remote' AND `unseen` = 1 AND `uid` = %d",
+ WHERE `wall` = 1 AND `unseen` = 1 AND `uid` = %d",
intval($_SESSION['uid'])
);
@@ -228,191 +201,66 @@ function profile_content(&$a, $update = 0) {
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
- AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `wall` = 1 )
+ AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1
$sql_extra ",
intval($a->profile['profile_uid'])
);
- if(count($r))
+ if(count($r)) {
$a->set_pager_total($r[0]['total']);
+ $a->set_pager_itemspage(40);
+ }
- $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
- `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
- `contact`.`thumb`, `contact`.`self`,
- `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
+ $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact-uid`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
- AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `wall` = 1 )
+ AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1
$sql_extra
- ORDER BY `parent` DESC, `gravity` ASC, `id` ASC LIMIT %d ,%d ",
+ ORDER BY `item`.`created` DESC LIMIT %d ,%d ",
intval($a->profile['profile_uid']),
intval($a->pager['start']),
intval($a->pager['itemspage'])
);
+ $parents_arr = array();
+ $parents_str = '';
+
+ if(count($r)) {
+ foreach($r as $rr)
+ $parents_arr[] = $rr['item_id'];
+ $parents_str = implode(', ', $parents_arr);
+
+ $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
+ `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`network`, `contact`.`rel`,
+ `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
+ `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
+ FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+ WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
+ AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ AND `item`.`parent` IN ( %s )
+ $sql_extra
+ ORDER BY `parent` DESC, `gravity` ASC, `item`.`id` ASC ",
+ intval($a->profile['profile_uid']),
+ dbesc($parents_str)
+ );
+ }
if($is_owner && ! $update)
$o .= get_birthdays();
- $cmnt_tpl = load_view_file('view/comment_item.tpl');
-
- $like_tpl = load_view_file('view/like.tpl');
-
- $tpl = load_view_file('view/wall_item.tpl');
-
- $droptpl = load_view_file('view/wall_item_drop.tpl');
- $fakedrop = load_view_file('view/wall_fake_drop.tpl');
- if($update)
- $return_url = $_SESSION['return_url'];
- else
- $return_url = $_SESSION['return_url'] = $a->cmd;
- $alike = array();
- $dlike = array();
-
- if($r !== false && count($r)) {
-
- foreach($r as $item) {
- like_puller($a,$item,$alike,'like');
- like_puller($a,$item,$dlike,'dislike');
- }
+ $o .= conversation($a,$r,'profile',$update);
- foreach($r as $item) {
-
- $sparkle = '';
- $comment = '';
- $likebuttons = '';
-
- $template = $tpl;
-
- $redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
-
- if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
- && ($item['id'] != $item['parent']))
- continue;
-
- $lock = ((($item['private']) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
- || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
- ? '<div class="wall-item-lock"><img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,' . $item['id'] . ');" /></div>'
- : '<div class="wall-item-lock"></div>');
-
- if(can_write_wall($a,$a->profile['profile_uid'])) {
- if($item['id'] == $item['parent']) {
- $likebuttons = replace_macros($like_tpl,array(
- '$id' => $item['id'],
- '$likethis' => t("I like this \x28toggle\x29"),
- '$nolike' => t("I don't like this \x28toggle\x29"),
- '$wait' => t('Please wait')
- ));
- }
- if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
- '$return_path' => '',
- '$jsreload' => '', // $_SESSION['return_url'],
- '$type' => 'wall-comment',
- '$id' => $item['item_id'],
- '$parent' => $item['parent'],
- '$profile_uid' => $a->profile['profile_uid'],
- '$mylink' => $contact['url'],
- '$mytitle' => t('This is you'),
- '$myphoto' => $contact['thumb'],
- '$ww' => ''
- ));
- }
- }
-
-
- $profile_url = $item['url'];
-
- // This is my profile page but I'm not the author of this post/comment. If it's somebody that's a fan or mutual friend,
- // I can go directly to their profile as an authenticated guest.
-
- if(local_user() && ($item['contact-uid'] == $_SESSION['uid'])
- && ($item['network'] === 'dfrn') && (! $item['self'] )) {
- $profile_url = $redirect_url;
- $sparkle = ' sparkle';
- }
- else
- $sparkle = '';
-
- // We would prefer to use our own avatar link for this item because the one in the author-avatar might reference a
- // remote site (which could be down). We will use author-avatar if we haven't got something stored locally.
- // We use this same logic block in mod/network.php to determine it this is a third party post and we don't have any
- // local contact info at all. In this module you should never encounter a third-party author, but we still will do
- // the right thing if you ever do.
-
- $diff_author = ((link_compare($item['url'],$item['author-link'])) ? false : true);
-
- $profile_name = (((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
- $profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $item['thumb']);
-
- $profile_link = $profile_url;
-
- $drop = '';
- $dropping = false;
-
- if(($item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
- $dropping = true;
-
- $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$delete' => t('Delete')));
-
-
- $like = ((isset($alike[$item['id']])) ? format_like($alike[$item['id']],$alike[$item['id'] . '-l'],'like',$item['id']) : '');
- $dislike = ((isset($dlike[$item['id']])) ? format_like($dlike[$item['id']],$dlike[$item['id'] . '-l'],'dislike',$item['id']) : '');
- $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
- $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
- if($coord) {
- if($location)
- $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
- else
- $location = '<span class="smalltext">' . $coord . '</span>';
- }
-
- $indent = (($item['parent'] != $item['item_id']) ? ' comment' : '');
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $indent .= ' shiny';
-
- $tmp_item = replace_macros($template,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$profile_url' => $profile_link,
- '$name' => $profile_name,
- '$thumb' => $profile_avatar,
- '$sparkle' => $sparkle,
- '$title' => $item['title'],
- '$body' => smilies(bbcode($item['body'])),
- '$ago' => relative_date($item['created']),
- '$lock' => $lock,
- '$location' => $location,
- '$indent' => $indent,
- '$plink' => get_plink($item),
- '$drop' => $drop,
- '$like' => $like,
- '$vote' => $likebuttons,
- '$dislike' => $dislike,
- '$comment' => $comment
- ));
-
- $arr = array('item' => $item, 'output' => $tmp_item);
- call_hooks('display_item', $arr);
-
- $o .= $arr['output'];
-
- }
- }
- if($update) {
- return $o;
- }
+ if(! $update) {
- $o .= paginate($a);
- $o .= '<div class="cc-license">' . t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.') . '</div>';
-
+ $o .= paginate($a);
+ $o .= '<div class="cc-license">' . t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.') . '</div>';
+ }
return $o;
}
diff --git a/mod/profile_photo.php b/mod/profile_photo.php
index 0f84a85c9..b1fd0fc6e 100644
--- a/mod/profile_photo.php
+++ b/mod/profile_photo.php
@@ -58,21 +58,21 @@ function profile_photo_post(&$a) {
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 4, 1);
if($r === false)
- notice ( t('Image size reduction [175] failed.') . EOL );
+ notice ( sprintf(t('Image size reduction [%s] failed.'),"175") . EOL );
$im->scaleImage(80);
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 5, 1);
if($r === false)
- notice( t('Image size reduction [80] failed.') . EOL );
+ notice( sprintf(t('Image size reduction [%s] failed.'),"80") . EOL );
$im->scaleImage(48);
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 6, 1);
if($r === false)
- notice( t('Image size reduction [48] failed.') . EOL );
+ notice( sprintf(t('Image size reduction [%s] failed.'),"48") . EOL );
// Unset the profile photo flag from any other photos I own
@@ -87,7 +87,7 @@ function profile_photo_post(&$a) {
);
// Update global directory in background
- $url = $_SESSION['my_url'];
+ $url = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
if($url && strlen(get_config('system','directory_submit_url')))
proc_run('php',"include/directory.php","$url");
}
@@ -106,7 +106,7 @@ function profile_photo_post(&$a) {
$maximagesize = get_config('system','maximagesize');
if(($maximagesize) && ($filesize > $maximagesize)) {
- notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
+ notice( sprintf(t('Image exceeds size limit of %d'), $maximagesize) . EOL);
@unlink($src);
return;
}
@@ -134,6 +134,11 @@ function profile_photo_content(&$a) {
return;
}
+ $newuser = false;
+
+ if($a->argc == 2 && $a->argv[1] === 'new')
+ $newuser = true;
+
if( $a->argv[1]=='use'){
if ($a->argc<3){
notice( t('Permission denied.') . EOL );
@@ -181,10 +186,14 @@ function profile_photo_content(&$a) {
if(! x($a->config,'imagecrop')) {
- $tpl = load_view_file('view/profile_photo.tpl');
+ $tpl = get_markup_template('profile_photo.tpl');
$o .= replace_macros($tpl,array(
- '$user' => $a->user['nickname']
+ '$user' => $a->user['nickname'],
+ '$lbl_upfile' => t('Upload File:'),
+ '$title' => t('Upload Profile Photo'),
+ '$submit' => t('Upload'),
+ '$select' => sprintf('%s %s', t('or'), ($newuser) ? '<a href="' . $a->get_baseurl() . '">' . t('skip this step') . '</a>' : '<a href="'. $a->get_baseurl() . '/photos/' . $a->user['nickname'] . '">' . t('select a photo from your photo albums') . '</a>')
));
return $o;
@@ -192,13 +201,15 @@ function profile_photo_content(&$a) {
else {
$filename = $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'] . '.jpg';
$resolution = $a->config['imagecrop_resolution'];
- $tpl = load_view_file("view/cropbody.tpl");
+ $tpl = get_markup_template("cropbody.tpl");
$o .= replace_macros($tpl,array(
'$filename' => $filename,
'$resource' => $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'],
- '$image_url' => $a->get_baseurl() . '/photo/' . $filename
- ));
-
+ '$image_url' => $a->get_baseurl() . '/photo/' . $filename,
+ '$title' => t('Crop Image'),
+ '$desc' => t('Please adjust the image cropping for optimum viewing.'),
+ '$done' => t('Done Editing')
+ ));
return $o;
}
@@ -234,14 +245,14 @@ function profile_photo_crop_ui_head(&$a, $ph){
$r = $ph->store(local_user(), 0 , $hash, $filename, t('Profile Photos'), 1 );
if($r === false)
- notice( t('Image size reduction [640] failed.') . EOL );
+ notice( sprintf(t('Image size reduction [%s] failed.'),"640") . EOL );
else
$smallest = 1;
}
$a->config['imagecrop'] = $hash;
$a->config['imagecrop_resolution'] = $smallest;
- $a->page['htmlhead'] .= load_view_file("view/crophead.tpl");
+ $a->page['htmlhead'] .= get_markup_template("crophead.tpl");
return;
}}
diff --git a/mod/profiles.php b/mod/profiles.php
index 409999a3e..984420aa2 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -55,7 +55,8 @@ function profiles_post(&$a) {
$region = notags(trim($_POST['region']));
$postal_code = notags(trim($_POST['postal_code']));
$country_name = notags(trim($_POST['country_name']));
- $keywords = notags(trim($_POST['keywords']));
+ $pub_keywords = notags(trim($_POST['pub_keywords']));
+ $prv_keywords = notags(trim($_POST['prv_keywords']));
$marital = notags(trim($_POST['marital']));
if($marital != $orig[0]['marital'])
$maritalchanged = true;
@@ -147,7 +148,8 @@ function profiles_post(&$a) {
`homepage` = '%s',
`politic` = '%s',
`religion` = '%s',
- `keywords` = '%s',
+ `pub_keywords` = '%s',
+ `prv_keywords` = '%s',
`about` = '%s',
`interest` = '%s',
`contact` = '%s',
@@ -176,7 +178,8 @@ function profiles_post(&$a) {
dbesc($homepage),
dbesc($politic),
dbesc($religion),
- dbesc($keywords),
+ dbesc($pub_keywords),
+ dbesc($prv_keywords),
dbesc($about),
dbesc($interest),
dbesc($contact),
@@ -344,10 +347,13 @@ function profiles_content(&$a) {
require_once('include/profile_selectors.php');
- $tpl = load_view_file('view/profed_head.tpl');
+ $tpl = get_markup_template('profed_head.tpl');
- $opt_tpl = load_view_file("view/profile-hide-friends.tpl");
+ $opt_tpl = get_markup_template("profile-hide-friends.tpl");
$hide_friends = replace_macros($opt_tpl,array(
+ '$desc' => t('Hide my contact/friend list from viewers of this profile?'),
+ '$yes_str' => t('Yes'),
+ '$no_str' => t('No'),
'$yes_selected' => (($r[0]['hide-friends']) ? " checked=\"checked\" " : ""),
'$no_selected' => (($r[0]['hide-friends'] == 0) ? " checked=\"checked\" " : "")
));
@@ -358,8 +364,46 @@ function profiles_content(&$a) {
$is_default = (($r[0]['is-default']) ? 1 : 0);
- $tpl = load_view_file("view/profile_edit.tpl");
+ $tpl = get_markup_template("profile_edit.tpl");
$o .= replace_macros($tpl,array(
+ '$banner' => t('Edit Profile Details'),
+ '$submit' => t('Submit'),
+ '$viewprof' => t('View this profile'),
+ '$cr_prof' => t('Create a new profile using these settings'),
+ '$cl_prof' => t('Clone this profile'),
+ '$del_prof' => t('Delete this profile'),
+ '$lbl_profname' => t('Profile Name:'),
+ '$lbl_fullname' => t('Your Full Name:'),
+ '$lbl_title' => t('Title/Description:'),
+ '$lbl_gender' => t('Your Gender:'),
+ '$lbl_bd' => t("Birthday \x28y/m/d\x29:"),
+ '$lbl_address' => t('Street Address:'),
+ '$lbl_city' => t('Locality/City:'),
+ '$lbl_zip' => t('Postal/Zip Code:'),
+ '$lbl_country' => t('Country:'),
+ '$lbl_region' => t('Region/State:'),
+ '$lbl_marital' => t('<span class="heart">&hearts;</span> Marital Status:'),
+ '$lbl_with' => t("Who: \x28if applicable\x29"),
+ '$lbl_ex1' => t('Examples: cathy123, Cathy Williams, cathy@example.com'),
+ '$lbl_sexual' => t('Sexual Preference:'),
+ '$lbl_homepage' => t('Homepage URL:'),
+ '$lbl_politic' => t('Political Views:'),
+ '$lbl_religion' => t('Religious Views:'),
+ '$lbl_pubkey' => t('Public Keywords:'),
+ '$lbl_prvkey' => t('Private Keywords:'),
+ '$lbl_ex2' => t('Example: fishing photography software'),
+ '$lbl_pubdsc' => t("\x28Used for suggesting potential friends, can be seen by others\x29"),
+ '$lbl_prvdsc' => t("\x28Used for searching profiles, never shown to others\x29"),
+ '$lbl_about' => t('Tell us about yourself...'),
+ '$lbl_hobbies' => t('Hobbies/Interests'),
+ '$lbl_social' => t('Contact information and Social Networks'),
+ '$lbl_music' => t('Musical interests'),
+ '$lbl_book' => t('Books, literature'),
+ '$lbl_tv' => t('Television'),
+ '$lbl_film' => t('Film/dance/culture/entertainment'),
+ '$lbl_love' => t('Love/romance'),
+ '$lbl_work' => t('Work/employment'),
+ '$lbl_school' => t('School/education'),
'$disabled' => (($is_default) ? 'onclick="return false;" style="color: #BBBBFF;"' : ''),
'$baseurl' => $a->get_baseurl(),
'$profile_id' => $r[0]['id'],
@@ -383,7 +427,8 @@ function profiles_content(&$a) {
'$homepage' => $r[0]['homepage'],
'$politic' => $r[0]['politic'],
'$religion' => $r[0]['religion'],
- '$keywords' => $r[0]['keywords'],
+ '$pub_keywords' => $r[0]['pub_keywords'],
+ '$prv_keywords' => $r[0]['prv_keywords'],
'$music' => $r[0]['music'],
'$book' => $r[0]['book'],
'$tv' => $r[0]['tv'],
@@ -406,17 +451,24 @@ function profiles_content(&$a) {
local_user());
if(count($r)) {
- $o .= load_view_file('view/profile_listing_header.tpl');
- $tpl_default = load_view_file('view/profile_entry_default.tpl');
- $tpl = load_view_file('view/profile_entry.tpl');
+ $tpl_header = get_markup_template('profile_listing_header.tpl');
+ $o .= replace_macros($tpl_header,array(
+ '$header' => t('Profiles'),
+ '$chg_photo' => t('Change profile photo'),
+ '$cr_new' => t('Create New Profile')
+ ));
+
+
+ $tpl = get_markup_template('profile_entry.tpl');
foreach($r as $rr) {
- $template = (($rr['is-default']) ? $tpl_default : $tpl);
- $o .= replace_macros($template, array(
+ $o .= replace_macros($tpl, array(
'$photo' => $rr['thumb'],
'$id' => $rr['id'],
'$alt' => t('Profile Image'),
- '$profile_name' => $rr['profile-name']
+ '$profile_name' => $rr['profile-name'],
+ '$visible' => (($rr['is-default']) ? '<strong>' . t('Visible to everybody') . '</strong>'
+ : '<a href="' . $a->get_baseurl() . '/profperm/' . $rr['id'] . '" />' . t('Edit visibility') . '</a>')
));
}
}
diff --git a/mod/profperm.php b/mod/profperm.php
new file mode 100644
index 000000000..e70992a2b
--- /dev/null
+++ b/mod/profperm.php
@@ -0,0 +1,141 @@
+<?php
+
+function profperm_init(&$a) {
+
+ if(! local_user())
+ return;
+
+ $which = $a->user['nickname'];
+ $profile = $a->argv[1];
+
+ profile_load($a,$which,$profile);
+
+}
+
+
+function profperm_content(&$a) {
+
+ if(! local_user()) {
+ notice( t('Permission denied') . EOL);
+ return;
+ }
+
+
+ if($a->argc < 2) {
+ notice( t('Invalid profile identifier.') . EOL );
+ return;
+ }
+
+ if(($a->argc > 2) && intval($a->argv[1]) && intval($a->argv[2])) {
+ $r = q("SELECT `id` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `self` = 0
+ AND `network` = 'dfrn' AND `id` = %d AND `uid` = %d LIMIT 1",
+ intval($a->argv[2]),
+ intval(local_user())
+ );
+ if(count($r))
+ $change = intval($a->argv[2]);
+ }
+
+
+ if(($a->argc > 1) && (intval($a->argv[1]))) {
+ $r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 LIMIT 1",
+ intval($a->argv[1]),
+ intval(local_user())
+ );
+ if(! count($r)) {
+ notice( t('Invalid profile identifier.') . EOL );
+ return;
+ }
+ $profile = $r[0];
+
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `profile-id` = %d",
+ intval(local_user()),
+ intval($a->argv[1])
+ );
+
+ $ingroup = array();
+ if(count($r))
+ foreach($r as $member)
+ $ingroup[] = $member['id'];
+
+ $members = $r;
+
+ if($change) {
+ if(in_array($change,$ingroup)) {
+ q("UPDATE `contact` SET `profile-id` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($change),
+ intval(local_user())
+ );
+ }
+ else {
+ q("UPDATE `contact` SET `profile-id` = %d WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($a->argv[1]),
+ intval($change),
+ intval(local_user())
+ );
+
+ }
+
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `profile-id` = %d",
+ intval(local_user()),
+ intval($a->argv[1])
+ );
+
+ $members = $r;
+
+ $ingroup = array();
+ if(count($r))
+ foreach($r as $member)
+ $ingroup[] = $member['id'];
+ }
+
+ $o .= '<h2>' . t('Profile Visibility Editor') . '</h2>';
+
+ $o .= '<h3>' . t('Profile') . ' \'' . $profile['profile-name'] . '\'</h3>';
+
+ $o .= '<div id="prof-edit-desc">' . t('Click on a contact to add or remove.') . '</div>';
+
+ }
+
+ $o .= '<div id="prof-update-wrapper">';
+ if($change)
+ $o = '';
+
+ $o .= '<div id="prof-members">';
+ $o .= '<h3>' . t('Visible To') . '</h3>';
+ foreach($members as $member) {
+ if($member['url']) {
+ $member['click'] = 'profChangeMember(' . $profile['id'] . ',' . $member['id'] . '); return true;';
+ $o .= micropro($member,true,'mpprof');
+ }
+ }
+ $o .= '</div><div id="prof-members-end"></div>';
+ $o .= '<hr id="prof-separator" />';
+ $o .= '<div id="prof-all-contacts">';
+
+ $o .= '<h3>' . t("All Contacts \x28with secure profile access\x29") . '</h3>';
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0
+ AND `network` = 'dfrn' ORDER BY `name` ASC",
+ intval(local_user())
+ );
+
+ if(count($r)) {
+ foreach($r as $member) {
+ if(! in_array($member['id'],$ingroup)) {
+ $member['click'] = 'profChangeMember(' . $profile['id'] . ',' . $member['id'] . '); return true;';
+ $o .= micropro($member,true,'mpprof');
+ }
+ }
+ }
+
+ $o .= '</div><div id="prof-all-contacts-end"></div>';
+
+ if($change) {
+ echo $o;
+ killme();
+ }
+ $o .= '</div>';
+ return $o;
+
+}
+
diff --git a/mod/redir.php b/mod/redir.php
index ac21aa17e..8d0c8f4b3 100644
--- a/mod/redir.php
+++ b/mod/redir.php
@@ -5,6 +5,7 @@ function redir_init(&$a) {
if((! local_user()) || (! ($a->argc == 2)) || (! intval($a->argv[1])))
goaway($a->get_baseurl());
$cid = $a->argv[1];
+ $url = ((x($_GET,'url')) ? $_GET['url'] : '');
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($cid),
@@ -37,8 +38,8 @@ function redir_init(&$a) {
);
logger('mod_redir: ' . $r[0]['name'] . ' ' . $sec, LOGGER_DEBUG);
-
+ $dest = (($url) ? '&destination_url=' . $url : '');
goaway ($r[0]['poll'] . '?dfrn_id=' . $dfrn_id
- . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec);
+ . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec . $dest );
}
diff --git a/mod/register.php b/mod/register.php
index fdf488b1a..c9521f9be 100644
--- a/mod/register.php
+++ b/mod/register.php
@@ -70,9 +70,9 @@ function register_post(&$a) {
$err = '';
- if(strlen($username) > 48)
+ if(mb_strlen($username) > 48)
$err .= t('Please use a shorter name.') . EOL;
- if(strlen($username) < 3)
+ if(mb_strlen($username) < 3)
$err .= t('Name too short.') . EOL;
// I don't really like having this rule, but it cuts down
@@ -85,8 +85,11 @@ function register_post(&$a) {
// So now we are just looking for a space in the full name.
$loose_reg = get_config('system','no_regfullname');
- if((! $loose_reg) && (! strpos($username,' ')))
- $err .= t("That doesn\'t appear to be your full \x28First Last\x29 name.") . EOL;
+ if(! $loose_reg) {
+ $username = mb_convert_case($username,MB_CASE_TITLE,'UTF-8');
+ if(! strpos($username,' '))
+ $err .= t("That doesn't appear to be your full \x28First Last\x29 name.") . EOL;
+ }
if(! allowed_email($email))
$err .= t('Your email domain is not among those allowed on this site.') . EOL;
@@ -199,6 +202,24 @@ function register_post(&$a) {
return;
}
+ /**
+ * if somebody clicked submit twice very quickly, they could end up with two accounts
+ * due to race condition. Remove this one.
+ */
+
+ $r = q("SELECT `uid` FROM `user`
+ WHERE `nickname` = '%s' ",
+ dbesc($nickname)
+ );
+ if((count($r) > 1) && $newuid) {
+ $err .= t('Nickname is already registered. Please choose another.') . EOL;
+ q("DELETE FROM `user` WHERE `uid` = %d LIMIT 1",
+ intval($newuid)
+ );
+ notice ($err);
+ return;
+ }
+
if(x($newuid) !== false) {
$r = q("INSERT INTO `profile` ( `uid`, `profile-name`, `is-default`, `name`, `photo`, `thumb`, `publish`, `net-publish` )
VALUES ( %d, '%s', %d, '%s', '%s', '%s', %d, %d ) ",
@@ -298,7 +319,7 @@ function register_post(&$a) {
if( $a->config['register_policy'] == REGISTER_OPEN ) {
- $email_tpl = load_view_file("view/register_open_eml.tpl");
+ $email_tpl = get_intltext_template("register_open_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
@@ -307,8 +328,11 @@ function register_post(&$a) {
'$password' => $new_password,
'$uid' => $newuid ));
- $res = mail($email, t('Registration details for ') . $a->config['sitename'],
- $email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME']);
+ $res = mail($email, sprintf(t('Registration details for %s'), $a->config['sitename']),
+ $email_tpl,
+ 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
if($res) {
@@ -333,7 +357,7 @@ function register_post(&$a) {
dbesc($new_password)
);
- $email_tpl = load_view_file("view/register_verify_eml.tpl");
+ $email_tpl = get_intltext_template("register_verify_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
@@ -344,9 +368,11 @@ function register_post(&$a) {
'$hash' => $hash
));
- $res = mail($a->config['admin_email'], t('Registration request at ') . $a->config['sitename'],
- $email_tpl,'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME']);
-
+ $res = mail($a->config['admin_email'], sprintf(t('Registration request at %s'), $a->config['sitename']),
+ $email_tpl,
+ 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
if($res) {
notice( t('Your registration is pending approval by the site owner.') . EOL ) ;
goaway($a->get_baseurl());
@@ -409,7 +435,7 @@ function register_content(&$a) {
$profile_publish_reg = '<input type="hidden" name="profile_publish_reg" value="1" />';
}
else {
- $publish_tpl = load_view_file("view/profile_publish.tpl");
+ $publish_tpl = get_markup_template("profile_publish.tpl");
$profile_publish = replace_macros($publish_tpl,array(
'$instance' => 'reg',
'$pubdesc' => t('Include your profile in member directory?'),
@@ -424,7 +450,7 @@ function register_content(&$a) {
$license = t('Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.');
- $o = load_view_file("view/register.tpl");
+ $o = get_markup_template("register.tpl");
$o = replace_macros($o, array(
'$oidhtml' => $oidhtml,
'$realpeople' => $realpeople,
diff --git a/mod/regmod.php b/mod/regmod.php
index 00cfa06e2..fe29cb185 100644
--- a/mod/regmod.php
+++ b/mod/regmod.php
@@ -51,7 +51,7 @@ function regmod_content(&$a) {
$r = q("DELETE FROM `register` WHERE `hash` = '%s' LIMIT 1",
dbesc($register[0]['hash'])
);
- notice( t('Registration revoked for ') . $user[0]['username'] . EOL);
+ notice( sprintf(t('Registration revoked for %s'), $user[0]['username']) . EOL);
return;
}
@@ -79,7 +79,7 @@ function regmod_content(&$a) {
proc_run('php',"include/directory.php","$url");
}
- $email_tpl = load_view_file("view/register_open_eml.tpl");
+ $email_tpl = get_intltext_template("register_open_eml.tpl");
$email_tpl = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(),
@@ -89,8 +89,11 @@ function regmod_content(&$a) {
'$uid' => $user[0]['uid']
));
- $res = mail($user[0]['email'], t('Registration details for '). $a->config['sitename'],
- $email_tpl,'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
+ $res = mail($user[0]['email'], sprintf(t('Registration details for %s'), $a->config['sitename']),
+ $email_tpl,
+ 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+ . 'Content-type: text/plain; charset=UTF-8' . "\n"
+ . 'Content-transfer-encoding: 8bit' );
if($res) {
notice( t('Account approved.') . EOL );
diff --git a/mod/removeme.php b/mod/removeme.php
index 62b9a6d13..6a56963b6 100644
--- a/mod/removeme.php
+++ b/mod/removeme.php
@@ -35,7 +35,7 @@ function removeme_content(&$a) {
$_SESSION['remove_account_verify'] = $hash;
- $tpl = load_view_file('view/removeme.tpl');
+ $tpl = get_markup_template('removeme.tpl');
$o .= replace_macros($tpl, array(
'$basedir' => $a->get_baseurl(),
'$hash' => $hash,
diff --git a/mod/rsd_xml.php b/mod/rsd_xml.php
new file mode 100644
index 000000000..5bf4663fd
--- /dev/null
+++ b/mod/rsd_xml.php
@@ -0,0 +1,24 @@
+<?php
+
+
+
+function rsd_xml_content(&$a) {
+ header ("Content-Type: text/xml");
+ echo '<?xml version="1.0" encoding="UTF-8"?>
+ <rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd">
+ <service>
+ <engineName>Friendika</engineName>
+ <engineLink>http://friendika.com/</engineLink>
+ <apis>
+ <api name="Twitter" preferred="true" apiLink="'.$a->get_baseurl().'/api/" blogID="">
+ <settings>
+ <docs>http://status.net/wiki/TwitterCompatibleAPI</docs>
+ <setting name="OAuth">false</setting>
+ </settings>
+ </api>
+ </apis>
+ </service>
+ </rsd>
+ ';
+die();
+} \ No newline at end of file
diff --git a/mod/salmon.php b/mod/salmon.php
index 885ba470c..c2f76aa0a 100644
--- a/mod/salmon.php
+++ b/mod/salmon.php
@@ -89,7 +89,7 @@ function salmon_post(&$a) {
// Create a fake feed wrapper so simplepie doesn't choke
- $tpl = load_view_file('view/fake_feed.tpl');
+ $tpl = get_markup_template('fake_feed.tpl');
$base = substr($data,strpos($data,'<entry'));
diff --git a/mod/search.php b/mod/search.php
index db7279fb5..33032e183 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -9,6 +9,15 @@ function search_post(&$a) {
function search_content(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
+ require_once("include/bbcode.php");
+ require_once('include/security.php');
+ require_once('include/conversation.php');
+
if(x($_SESSION,'theme'))
unset($_SESSION['theme']);
@@ -26,8 +35,6 @@ function search_content(&$a) {
if(! $search)
return $o;
- require_once("include/bbcode.php");
- require_once('include/security.php');
$sql_extra = "
AND `item`.`allow_cid` = ''
@@ -36,12 +43,20 @@ function search_content(&$a) {
AND `item`.`deny_gid` = ''
";
+ $s_bool = "AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )";
+ $s_regx = "AND `item`.`body` REGEXP '%s' ";
+
+ if(mb_strlen($search) >= 3)
+ $search_alg = $s_bool;
+ else
+ $search_alg = $s_regx;
+
$r = q("SELECT COUNT(*) AS `total`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0
AND ( `wall` = 1 OR `contact`.`uid` = %d )
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
- AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )
+ $search_alg
$sql_extra ",
intval(local_user()),
dbesc($search)
@@ -57,7 +72,7 @@ function search_content(&$a) {
$r = q("SELECT `item`.*, `item`.`id` AS `item_id`,
`contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
- `contact`.`network`, `contact`.`thumb`, `contact`.`self`,
+ `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`,
`contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,
`user`.`nickname`
FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
@@ -65,74 +80,16 @@ function search_content(&$a) {
WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0
AND ( `wall` = 1 OR `contact`.`uid` = %d )
AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
- AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )
+ $search_alg
$sql_extra
ORDER BY `parent` DESC ",
intval(local_user()),
dbesc($search)
);
- $tpl = load_view_file('view/search_item.tpl');
- $droptpl = load_view_file('view/wall_fake_drop.tpl');
-
- $return_url = $_SESSION['return_url'] = $a->cmd;
-
- if(count($r)) {
-
- foreach($r as $item) {
-
- $total = 0;
- $comment = '';
- $owner_url = '';
- $owner_photo = '';
- $owner_name = '';
- $sparkle = '';
-
- if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE)))
- && ($item['id'] != $item['parent']))
- continue;
-
- $total ++;
-
- $profile_name = ((strlen($item['author-name'])) ? $item['author-name'] : $item['name']);
- $profile_avatar = ((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']);
- $profile_link = ((strlen($item['author-link'])) ? $item['author-link'] : $item['url']);
-
-
- $location = (($item['location']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
- $coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
- if($coord) {
- if($location)
- $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
- else
- $location = '<span class="smalltext">' . $coord . '</span>';
- }
-
- $drop = replace_macros($droptpl,array('$id' => $item['id']));
- $lock = '<div class="wall-item-lock"></div>';
-
- $o .= replace_macros($tpl,array(
- '$id' => $item['item_id'],
- '$linktitle' => t('View $name\'s profile'),
- '$profile_url' => $profile_link,
- '$name' => $profile_name,
- '$sparkle' => $sparkle,
- '$lock' => $lock,
- '$thumb' => $profile_avatar,
- '$title' => $item['title'],
- '$body' => bbcode($item['body']),
- '$ago' => relative_date($item['created']),
- '$location' => $location,
- '$indent' => '',
- '$owner_url' => $owner_url,
- '$owner_photo' => $owner_photo,
- '$owner_name' => $owner_name,
- '$drop' => $drop,
- '$conv' => '<a href="' . $a->get_baseurl() . '/display/' . $item['nickname'] . '/' . $item['id'] . '">' . t('View in context') . '</a>'
- ));
-
- }
- }
+
+
+ $o .= conversation($a,$r,'search',false);
$o .= paginate($a);
diff --git a/mod/settings.php b/mod/settings.php
index ebe07612e..cba6958b3 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -5,6 +5,7 @@ function settings_init(&$a) {
if(local_user()) {
profile_load($a,$a->user['nickname']);
}
+
}
@@ -63,12 +64,54 @@ function settings_post(&$a) {
$defloc = ((x($_POST,'defloc')) ? notags(trim($_POST['defloc'])) : '');
$openid = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : '');
$maxreq = ((x($_POST,'maxreq')) ? intval($_POST['maxreq']) : 0);
+ $expire = ((x($_POST,'expire')) ? intval($_POST['expire']) : 0);
$allow_location = (((x($_POST,'allow_location')) && (intval($_POST['allow_location']) == 1)) ? 1: 0);
$publish = (((x($_POST,'profile_in_directory')) && (intval($_POST['profile_in_directory']) == 1)) ? 1: 0);
$net_publish = (((x($_POST,'profile_in_netdirectory')) && (intval($_POST['profile_in_netdirectory']) == 1)) ? 1: 0);
$old_visibility = (((x($_POST,'visibility')) && (intval($_POST['visibility']) == 1)) ? 1 : 0);
$page_flags = (((x($_POST,'page-flags')) && (intval($_POST['page-flags']))) ? intval($_POST['page-flags']) : 0);
+ $blockwall = (((x($_POST,'blockwall')) && (intval($_POST['blockwall']) == 1)) ? 0: 1); // this setting is inverted!
+
+ $mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : '');
+ $mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : '');
+ $mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : '');
+ $mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : '');
+ $mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : '');
+ $mail_replyto = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : '');
+ $mail_pubmail = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : '');
+
+
+ $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
+
+ if(! $mail_disabled) {
+ $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
+ intval(local_user())
+ );
+ if(! count($r)) {
+ q("INSERT INTO `mailacct` (`uid`) VALUES (%d)",
+ intval(local_user())
+ );
+ }
+ if(strlen($mail_pass)) {
+ $pass = '';
+ openssl_public_encrypt($mail_pass,$pass,$a->user['pubkey']);
+ q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d LIMIT 1",
+ dbesc(bin2hex($pass)),
+ intval(local_user())
+ );
+ }
+ $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s',
+ `mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d LIMIT 1",
+ dbesc($mail_server),
+ intval($mail_port),
+ dbesc($mail_ssl),
+ dbesc($mail_user),
+ dbesc($mail_replyto),
+ intval($mail_pubmail),
+ intval(local_user())
+ );
+ }
$notify = 0;
@@ -139,7 +182,7 @@ function settings_post(&$a) {
$openidserver = '';
}
- $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `theme` = '%s', `maxreq` = %d, `openidserver` = '%s' WHERE `uid` = %d LIMIT 1",
+ $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `theme` = '%s', `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `blockwall` = %d WHERE `uid` = %d LIMIT 1",
dbesc($username),
dbesc($email),
dbesc($openid),
@@ -154,7 +197,9 @@ function settings_post(&$a) {
intval($allow_location),
dbesc($theme),
intval($maxreq),
+ intval($expire),
dbesc($openidserver),
+ intval($blockwall),
intval(local_user())
);
if($r)
@@ -238,11 +283,34 @@ function settings_content(&$a) {
$defloc = $a->user['default-location'];
$openid = $a->user['openid'];
$maxreq = $a->user['maxreq'];
+ $expire = ((intval($a->user['expire'])) ? $a->user['expire'] : '');
+ $blockwall = $a->user['blockwall'];
if(! strlen($a->user['timezone']))
$timezone = date_default_timezone_get();
- $pageset_tpl = load_view_file('view/pagetypes.tpl');
+
+ $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1);
+
+ if(! $mail_disabled) {
+ $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
+ local_user()
+ );
+ }
+ else {
+ $r = null;
+ $imap_disabled = (($mail_disabled) ? ' disabled="disabled" ' : '');
+ }
+
+ $mail_server = ((count($r)) ? $r[0]['server'] : '');
+ $mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : '');
+ $mail_ssl = ((count($r)) ? $r[0]['ssltype'] : '');
+ $mail_user = ((count($r)) ? $r[0]['user'] : '');
+ $mail_replyto = ((count($r)) ? $r[0]['reply_to'] : '');
+ $mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0);
+
+
+ $pageset_tpl = get_markup_template('pagetypes.tpl');
$pagetype = replace_macros($pageset_tpl,array(
'$normal' => (($a->user['page-flags'] == PAGE_NORMAL) ? " checked=\"checked\" " : ""),
'$soapbox' => (($a->user['page-flags'] == PAGE_SOAPBOX) ? " checked=\"checked\" " : ""),
@@ -251,7 +319,15 @@ function settings_content(&$a) {
'$page_normal' => PAGE_NORMAL,
'$page_soapbox' => PAGE_SOAPBOX,
'$page_community' => PAGE_COMMUNITY,
- '$page_freelove' => PAGE_FREELOVE
+ '$page_freelove' => PAGE_FREELOVE,
+ '$n_l' => t('Normal Account'),
+ '$n_d' => t('This account is a normal personal profile'),
+ '$s_l' => t('Soapbox Account'),
+ '$s_d' => t('Automatically approve all connection/friend requests as read-only fans'),
+ '$c_l' => t('Community/Celebrity Account'),
+ '$c_d' => t('Automatically approve all connection/friend requests as read-write fans'),
+ '$f_l' => t('Automatic Friend Account'),
+ '$f_d' => t('Automatically approve all connection/friend requests as friends')
));
$noid = get_config('system','no_openid');
@@ -268,17 +344,23 @@ function settings_content(&$a) {
$profile_in_dir = '<input type="hidden" name="profile_in_directory" value="1" />';
}
else {
- $opt_tpl = load_view_file("view/profile-in-directory.tpl");
+ $opt_tpl = get_markup_template("profile-in-directory.tpl");
$profile_in_dir = replace_macros($opt_tpl,array(
+ '$desc' => t('Publish your default profile in site directory?'),
+ '$yes_str' => t('Yes'),
+ '$no_str' => t('No'),
'$yes_selected' => (($profile['publish']) ? " checked=\"checked\" " : ""),
'$no_selected' => (($profile['publish'] == 0) ? " checked=\"checked\" " : "")
));
}
if(strlen(get_config('system','directory_submit_url'))) {
- $opt_tpl = load_view_file("view/profile-in-netdir.tpl");
+ $opt_tpl = get_markup_template("profile-in-netdir.tpl");
$profile_in_net_dir = replace_macros($opt_tpl,array(
+ '$desc' => t('Publish your default profile in global social directory?'),
+ '$yes_str' => t('Yes'),
+ '$no_str' => t('No'),
'$yes_selected' => (($profile['net-publish']) ? " checked=\"checked\" " : ""),
'$no_selected' => (($profile['net-publish'] == 0) ? " checked=\"checked\" " : "")
));
@@ -294,18 +376,7 @@ function settings_content(&$a) {
if($invisible)
notice( t('Profile is <strong>not published</strong>.') . EOL );
- $nickname_block = load_view_file("view/settings_nick_set.tpl");
- $nickname_subdir = '';
- if(strlen($a->get_path())) {
- $subdir_tpl = load_view_file('view/settings_nick_subdir.tpl');
- $nickname_subdir = replace_macros($subdir_tpl, array(
- '$baseurl' => $a->get_baseurl(),
- '$nickname' => $nickname,
- '$hostname' => $a->get_hostname()
- ));
- }
-
$theme_selector = '<select name="theme" id="theme-select" >';
$files = glob('view/theme/*');
@@ -321,28 +392,64 @@ function settings_content(&$a) {
$theme_selector .= '<option val="' . basename($file) . '"' . $selected . '>' . basename($file) . '</option>';
}
}
+
$theme_selector .= '</select>';
+ $subdir = ((strlen($a->get_path())) ? '<br />' . t('or') . ' ' . $a->get_baseurl() . '/profile/' . $nickname : '');
+
+ $tpl_addr = get_markup_template("settings_nick_set.tpl");
- $nickname_block = replace_macros($nickname_block,array(
+ $prof_addr = replace_macros($tpl_addr,array(
+ '$desc' => t('Your Identity Address is'),
'$nickname' => $nickname,
- '$uid' => local_user(),
- '$subdir' => $nickname_subdir,
- '$basepath' => $a->get_hostname(),
- '$baseurl' => $a->get_baseurl()));
+ '$subdir' => $subdir,
+ '$basepath' => $a->get_hostname()
+ ));
- $stpl = load_view_file('view/settings.tpl');
+ $stpl = get_markup_template('settings.tpl');
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
+ $uexport = '<div id="uexport-link"><a href="uexport" >' . t('Export Personal Data') . '</a></div>';
+
+
$o .= replace_macros($stpl,array(
+ '$ptitle' => t('Account Settings'),
+ '$lbl_plug' => t('Plugin Settings'),
+ '$lbl_basic' => t('Basic Settings'),
+ '$lbl_fn' => t('Full Name:'),
+ '$lbl_email' => t('Email Address:'),
+ '$lbl_tz' => t('Your Timezone:'),
+ '$lbl_loc1' => t('Default Post Location:'),
+ '$lbl_loc2' => t('Use Browser Location:'),
+ '$lbl_theme' => t('Display Theme:'),
+ '$submit' => t('Submit'),
+ '$lbl_prv' => t('Security and Privacy Settings'),
+ '$lbl_maxreq' => t('Maximum Friend Requests/Day:'),
+ '$lbl_maxrdesc' => t("\x28to prevent spam abuse\x29"),
+ '$lbl_rempost' => t('Allow friends to post to your profile page:'),
+ '$lbl_exp1' => t("Automatically expire \x28delete\x29 posts older than"),
+ '$lbl_exp2' => t('days'),
+ '$lbl_not1' => t('Notification Settings'),
+ '$lbl_not2' => t('Send a notification email when:'),
+ '$lbl_not3' => t('You receive an introduction'),
+ '$lbl_not4' => t('Your introductions are confirmed'),
+ '$lbl_not5' => t('Someone writes on your profile wall'),
+ '$lbl_not6' => t('Someone writes a followup comment'),
+ '$lbl_not7' => t('You receive a private message'),
+ '$lbl_pass1' => t('Password Settings'),
+ '$lbl_pass2' => t('Leave password fields blank unless changing'),
+ '$lbl_pass3' => t('New Password:'),
+ '$lbl_pass4' => t('Confirm:'),
+ '$lbl_advn' => t('Advanced Page Settings'),
'$baseurl' => $a->get_baseurl(),
'$oidhtml' => $oidhtml,
+ '$uexport' => $uexport,
'$uid' => local_user(),
'$username' => $username,
'$openid' => $openid,
'$email' => $email,
- '$nickname_block' => $nickname_block,
+ '$nickname_block' => $prof_addr,
'$timezone' => $timezone,
'$zoneselect' => select_timezone($timezone),
'$defloc' => $defloc,
@@ -350,6 +457,7 @@ function settings_content(&$a) {
'$profile_in_dir' => $profile_in_dir,
'$profile_in_net_dir' => $profile_in_net_dir,
'$permissions' => t('Default Post Permissions'),
+ '$permdesc' => t("\x28click to open/close\x29"),
'$visibility' => $profile['net-publish'],
'$aclselect' => populate_acl($a->user,$celeb),
'$sel_notify1' => (($notify & NOTIFY_INTRO) ? ' checked="checked" ' : ''),
@@ -358,8 +466,27 @@ function settings_content(&$a) {
'$sel_notify4' => (($notify & NOTIFY_COMMENT) ? ' checked="checked" ' : ''),
'$sel_notify5' => (($notify & NOTIFY_MAIL) ? ' checked="checked" ' : ''),
'$maxreq' => $maxreq,
+ '$expire' => $expire,
+ '$blockw_checked' => (($blockwall) ? '' : ' checked="checked" ' ),
'$theme' => $theme_selector,
- '$pagetype' => $pagetype
+ '$pagetype' => $pagetype,
+ '$lbl_imap0' => t('Email/Mailbox Setup'),
+ '$imap_desc' => t("If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."),
+ '$lbl_imap1' => t('IMAP server name:'),
+ '$imap_server' => $mail_server,
+ '$lbl_imap2' => t('IMAP port:'),
+ '$imap_port' => $mail_port,
+ '$lbl_imap3' => t("Security \x28TLS or SSL\x29:"),
+ '$imap_ssl' => $mail_ssl,
+ '$lbl_imap4' => t('Email login name:'),
+ '$imap_user' => $mail_user,
+ '$lbl_imap5' => t('Email password:'),
+ '$lbl_imap6' => t("Reply-to address \x28Optional\x29:"),
+ '$imap_replyto' => $mail_replyto,
+ '$lbl_imap7' => t('Send public posts to all email contacts:'),
+ '$pubmail_checked' => (($mail_pubmail) ? ' checked="checked" ' : ''),
+ '$mail_disabled' => (($mail_disabled) ? '<div class="error-message">' . t('Email access is disabled on this site.') . '</div>' : ''),
+ '$imap_disabled' => $imap_disabled
));
call_hooks('settings_form',$o);
diff --git a/mod/share.php b/mod/share.php
new file mode 100644
index 000000000..f355a842a
--- /dev/null
+++ b/mod/share.php
@@ -0,0 +1,23 @@
+<?php
+
+require_once('bbcode.php');
+
+function share_init(&$a) {
+
+ $post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
+ if((! $post_id) || (! local_user()))
+ killme();
+
+ $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
+ intval($post_id)
+ );
+ if(! count($r) || $r[0]['private'])
+ killme();
+
+ $o = '';
+
+ $o .= '&#x2672; <a href="' . $r[0]['author-link'] . '">' . $r[0]['author-name'] . '</a><br />';
+ $o .= bbcode($r[0]['body'], true);
+ echo $o . '<br />';
+ killme();
+}
diff --git a/mod/uexport.php b/mod/uexport.php
new file mode 100644
index 000000000..96f062c41
--- /dev/null
+++ b/mod/uexport.php
@@ -0,0 +1,72 @@
+<?php
+
+function uexport_init(&$a) {
+
+ if(! local_user())
+ killme();
+
+ $user = array();
+ $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
+ local_user()
+ );
+ if(count($r)) {
+ foreach($r as $rr)
+ foreach($rr as $k => $v)
+ $user[$k] = $v;
+
+ }
+ $contact = array();
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d ",
+ intval(local_user())
+ );
+ if(count($r)) {
+ foreach($r as $rr)
+ foreach($rr as $k => $v)
+ $contact[][$k] = $v;
+
+ }
+
+ $profile = array();
+ $r = q("SELECT * FROM `profile` WHERE `uid` = %d ",
+ intval(local_user())
+ );
+ if(count($r)) {
+ foreach($r as $rr)
+ foreach($rr as $k => $v)
+ $profile[][$k] = $v;
+ }
+
+ $output = array('user' => $user, 'contact' => $contact, 'profile' => $profile );
+
+ header("Content-type: application/json");
+ echo str_replace('\\/','/',json_encode($output));
+
+ $r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
+ intval(local_user())
+ );
+ if(count($r))
+ $total = $r[0]['total'];
+
+ // chunk the output to avoid exhausting memory
+
+ for($x = 0; $x < $total; $x += 500) {
+ $item = array();
+ $r = q("SELECT * FROM `item` WHERE `uid` = %d LIMIT %d, %d",
+ intval(local_user()),
+ intval($x),
+ intval(500)
+ );
+ if(count($r)) {
+ foreach($r as $rr)
+ foreach($rr as $k => $v)
+ $item[][$k] = $v;
+ }
+
+ $output = array('item' => $item);
+ echo str_replace('\\/','/',json_encode($output));
+ }
+
+
+ killme();
+
+} \ No newline at end of file
diff --git a/mod/update_network.php b/mod/update_network.php
index cf9f11f58..36de0722a 100644
--- a/mod/update_network.php
+++ b/mod/update_network.php
@@ -19,6 +19,17 @@ function update_network_content(&$a) {
$replace = "<img\${1} dst=\"\${2}\"";
$text = preg_replace($pattern, $replace, $text);
+ $replace = '<br />' . t('[Embedded content - reload page to view]') . '<br />';
+ $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
+ $text = preg_replace($pattern, $replace, $text);
+ $pattern = "/<\s*video[^>]*>(.*?)<\s*\/\s*video>/i";
+ $text = preg_replace($pattern, $replace, $text);
+ $pattern = "/<\s*embed[^>]*>(.*?)<\s*\/\s*embed>/i";
+ $text = preg_replace($pattern, $replace, $text);
+ $pattern = "/<\s*iframe[^>]*>(.*?)<\s*\/\s*iframe>/i";
+ $text = preg_replace($pattern, $replace, $text);
+
+
echo str_replace("\t",' ',$text);
echo (($_GET['msie'] == 1) ? '</div>' : '</section>');
echo "</body></html>\r\n";
diff --git a/mod/update_profile.php b/mod/update_profile.php
index 13c519d1c..c4884b30f 100644
--- a/mod/update_profile.php
+++ b/mod/update_profile.php
@@ -38,6 +38,16 @@ function update_profile_content(&$a) {
$replace = "<img\${1} dst=\"\${2}\"";
$text = preg_replace($pattern, $replace, $text);
+ $replace = '<br />' . t('[Embedded content - reload page to view]') . '<br />';
+ $pattern = "/<\s*audio[^>]*>(.*?)<\s*\/\s*audio>/i";
+ $text = preg_replace($pattern, $replace, $text);
+ $pattern = "/<\s*video[^>]*>(.*?)<\s*\/\s*video>/i";
+ $text = preg_replace($pattern, $replace, $text);
+ $pattern = "/<\s*embed[^>]*>(.*?)<\s*\/\s*embed>/i";
+ $text = preg_replace($pattern, $replace, $text);
+ $pattern = "/<\s*iframe[^>]*>(.*?)<\s*\/\s*iframe>/i";
+ $text = preg_replace($pattern, $replace, $text);
+
/**
* reportedly some versions of MSIE don't handle tabs in XMLHttpRequest documents very well
*/
diff --git a/mod/viewcontacts.php b/mod/viewcontacts.php
index 90ff85b9d..732607b18 100644
--- a/mod/viewcontacts.php
+++ b/mod/viewcontacts.php
@@ -2,13 +2,21 @@
function viewcontacts_init(&$a) {
- profile_load($a,$a->argv[1]);
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return;
+ }
+ profile_load($a,$a->argv[1]);
}
function viewcontacts_content(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
if(((! count($a->profile)) || ($a->profile['hide-friends']))) {
notice( t('Permission denied.') . EOL);
return;
@@ -33,7 +41,7 @@ function viewcontacts_content(&$a) {
return $o;
}
- $tpl = load_view_file("view/viewcontact_template.tpl");
+ $tpl = get_markup_template("viewcontact_template.tpl");
foreach($r as $rr) {
if($rr['self'])
@@ -41,9 +49,10 @@ function viewcontacts_content(&$a) {
$o .= replace_macros($tpl, array(
'$id' => $rr['id'],
- '$alt_text' => t('Visit ') . $rr['name'] . t('\'s profile'),
+ '$alt_text' => t('Visit $username\'s profile'),
'$thumb' => $rr['thumb'],
'$name' => substr($rr['name'],0,20),
+ '$username' => $rr['name'],
'$url' => $rr['url']
));
}
diff --git a/mod/wall_upload.php b/mod/wall_upload.php
index b5725311d..f7638b730 100644
--- a/mod/wall_upload.php
+++ b/mod/wall_upload.php
@@ -53,7 +53,7 @@ function wall_upload_post(&$a) {
$maximagesize = get_config('system','maximagesize');
if(($maximagesize) && ($filesize > $maximagesize)) {
- notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
+ notice( sprintf(t('Image exceeds size limit of %d'), $maximagesize) . EOL);
@unlink($src);
return;
}
diff --git a/mod/xrd.php b/mod/xrd.php
index a0ecbaea8..8ac6ff7cf 100644
--- a/mod/xrd.php
+++ b/mod/xrd.php
@@ -27,7 +27,7 @@ function xrd_content(&$a) {
header("Content-type: text/xml");
- $tpl = load_view_file('view/xrd_person.tpl');
+ $tpl = file_get_contents('view/xrd_person.tpl');
$o = replace_macros($tpl, array(
'$accturi' => $uri,