Example #1
0
/**
 * Render actions localized
 */
function localize_item(&$item)
{
    $extracted = item_extract_images($item['body']);
    if ($extracted['images']) {
        $item['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $item['contact-id']);
    }
    $xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
    if (activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) {
        $r = q("SELECT * from `item`,`contact` WHERE\n\t\t\t\t`item`.`contact-id`=`contact`.`id` AND `item`.`uri`='%s';", dbesc($item['parent-uri']));
        if (count($r) == 0) {
            return;
        }
        $obj = $r[0];
        $author = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
        $objauthor = '[url=' . $obj['author-link'] . ']' . $obj['author-name'] . '[/url]';
        switch ($obj['verb']) {
            case ACTIVITY_POST:
                switch ($obj['object-type']) {
                    case ACTIVITY_OBJ_EVENT:
                        $post_type = t('event');
                        break;
                    default:
                        $post_type = t('status');
                }
                break;
            default:
                if ($obj['resource-id']) {
                    $post_type = t('photo');
                    $m = array();
                    preg_match("/\\[url=([^]]*)\\]/", $obj['body'], $m);
                    $rr['plink'] = $m[1];
                } else {
                    $post_type = t('status');
                }
        }
        $plink = '[url=' . $obj['plink'] . ']' . $post_type . '[/url]';
        if (activity_match($item['verb'], ACTIVITY_LIKE)) {
            $bodyverb = t('%1$s likes %2$s\'s %3$s');
        } elseif (activity_match($item['verb'], ACTIVITY_DISLIKE)) {
            $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
        }
        $item['body'] = sprintf($bodyverb, $author, $objauthor, $plink);
    }
    if (activity_match($item['verb'], ACTIVITY_FRIEND)) {
        if ($item['object-type'] == "" || $item['object-type'] !== ACTIVITY_OBJ_PERSON) {
            return;
        }
        $Aname = $item['author-name'];
        $Alink = $item['author-link'];
        $xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
        $obj = parse_xml_string($xmlhead . $item['object']);
        $links = parse_xml_string($xmlhead . "<links>" . unxmlify($obj->link) . "</links>");
        $Bname = $obj->title;
        $Blink = "";
        $Bphoto = "";
        foreach ($links->link as $l) {
            $atts = $l->attributes();
            switch ($atts['rel']) {
                case "alternate":
                    $Blink = $atts['href'];
                case "photo":
                    $Bphoto = $atts['href'];
            }
        }
        $A = '[url=' . zrl($Alink) . ']' . $Aname . '[/url]';
        $B = '[url=' . zrl($Blink) . ']' . $Bname . '[/url]';
        if ($Bphoto != "") {
            $Bphoto = '[url=' . zrl($Blink) . '][img]' . $Bphoto . '[/img][/url]';
        }
        $item['body'] = sprintf(t('%1$s is now friends with %2$s'), $A, $B) . "\n\n\n" . $Bphoto;
    }
    if (stristr($item['verb'], ACTIVITY_POKE)) {
        $verb = urldecode(substr($item['verb'], strpos($item['verb'], '#') + 1));
        if (!$verb) {
            return;
        }
        if ($item['object-type'] == "" || $item['object-type'] !== ACTIVITY_OBJ_PERSON) {
            return;
        }
        $Aname = $item['author-name'];
        $Alink = $item['author-link'];
        $xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
        $obj = parse_xml_string($xmlhead . $item['object']);
        $links = parse_xml_string($xmlhead . "<links>" . unxmlify($obj->link) . "</links>");
        $Bname = $obj->title;
        $Blink = "";
        $Bphoto = "";
        foreach ($links->link as $l) {
            $atts = $l->attributes();
            switch ($atts['rel']) {
                case "alternate":
                    $Blink = $atts['href'];
                case "photo":
                    $Bphoto = $atts['href'];
            }
        }
        $A = '[url=' . zrl($Alink) . ']' . $Aname . '[/url]';
        $B = '[url=' . zrl($Blink) . ']' . $Bname . '[/url]';
        if ($Bphoto != "") {
            $Bphoto = '[url=' . zrl($Blink) . '][img=80x80]' . $Bphoto . '[/img][/url]';
        }
        // we can't have a translation string with three positions but no distinguishable text
        // So here is the translate string.
        $txt = t('%1$s poked %2$s');
        // now translate the verb
        $txt = str_replace(t('poked'), t($verb), $txt);
        // then do the sprintf on the translation string
        $item['body'] = sprintf($txt, $A, $B) . "\n\n\n" . $Bphoto;
    }
    if (stristr($item['verb'], ACTIVITY_MOOD)) {
        $verb = urldecode(substr($item['verb'], strpos($item['verb'], '#') + 1));
        if (!$verb) {
            return;
        }
        $Aname = $item['author-name'];
        $Alink = $item['author-link'];
        $A = '[url=' . zrl($Alink) . ']' . $Aname . '[/url]';
        $txt = t('%1$s is currently %2$s');
        $item['body'] = sprintf($txt, $A, t($verb));
    }
    if (activity_match($item['verb'], ACTIVITY_TAG)) {
        $r = q("SELECT * from `item`,`contact` WHERE\n\t\t`item`.`contact-id`=`contact`.`id` AND `item`.`uri`='%s';", dbesc($item['parent-uri']));
        if (count($r) == 0) {
            return;
        }
        $obj = $r[0];
        $author = '[url=' . zrl($item['author-link']) . ']' . $item['author-name'] . '[/url]';
        $objauthor = '[url=' . zrl($obj['author-link']) . ']' . $obj['author-name'] . '[/url]';
        switch ($obj['verb']) {
            case ACTIVITY_POST:
                switch ($obj['object-type']) {
                    case ACTIVITY_OBJ_EVENT:
                        $post_type = t('event');
                        break;
                    default:
                        $post_type = t('status');
                }
                break;
            default:
                if ($obj['resource-id']) {
                    $post_type = t('photo');
                    $m = array();
                    preg_match("/\\[url=([^]]*)\\]/", $obj['body'], $m);
                    $rr['plink'] = $m[1];
                } else {
                    $post_type = t('status');
                }
        }
        $plink = '[url=' . $obj['plink'] . ']' . $post_type . '[/url]';
        $parsedobj = parse_xml_string($xmlhead . $item['object']);
        $tag = sprintf('#[url=%s]%s[/url]', $parsedobj->id, $parsedobj->content);
        $item['body'] = sprintf(t('%1$s tagged %2$s\'s %3$s with %4$s'), $author, $objauthor, $plink, $tag);
    }
    if (activity_match($item['verb'], ACTIVITY_FAVORITE)) {
        if ($item['object-type'] == "") {
            return;
        }
        $Aname = $item['author-name'];
        $Alink = $item['author-link'];
        $xmlhead = "<" . "?xml version='1.0' encoding='UTF-8' ?" . ">";
        $obj = parse_xml_string($xmlhead . $item['object']);
        if (strlen($obj->id)) {
            $r = q("select * from item where uri = '%s' and uid = %d limit 1", dbesc($obj->id), intval($item['uid']));
            if (count($r) && $r[0]['plink']) {
                $target = $r[0];
                $Bname = $target['author-name'];
                $Blink = $target['author-link'];
                $A = '[url=' . zrl($Alink) . ']' . $Aname . '[/url]';
                $B = '[url=' . zrl($Blink) . ']' . $Bname . '[/url]';
                $P = '[url=' . $target['plink'] . ']' . t('post/item') . '[/url]';
                $item['body'] = sprintf(t('%1$s marked %2$s\'s %3$s as favorite'), $A, $B, $P) . "\n";
            }
        }
    }
    $matches = null;
    if (preg_match_all('/@\\[url=(.*?)\\]/is', $item['body'], $matches, PREG_SET_ORDER)) {
        foreach ($matches as $mtch) {
            if (!strpos($mtch[1], 'zrl=')) {
                $item['body'] = str_replace($mtch[0], '@[url=' . zrl($mtch[1]) . ']', $item['body']);
            }
        }
    }
    // add zrl's to public images
    $photo_pattern = "/\\[url=(.*?)\\/photos\\/(.*?)\\/image\\/(.*?)\\]\\[img(.*?)\\]h(.*?)\\[\\/img\\]\\[\\/url\\]/is";
    if (preg_match($photo_pattern, $item['body'])) {
        $photo_replace = '[url=' . zrl('$1' . '/photos/' . '$2' . '/image/' . '$3', true) . '][img' . '$4' . ']h' . '$5' . '[/img][/url]';
        $item['body'] = bb_tag_preg_replace($photo_pattern, $photo_replace, 'url', $item['body']);
    }
    // add sparkle links to appropriate permalinks
    $x = stristr($item['plink'], '/display/');
    if ($x) {
        $sparkle = false;
        $y = best_link_url($item, $sparkle, true);
        if (strstr($y, '/redir/')) {
            $item['plink'] = $y . '?f=&url=' . $item['plink'];
        }
    }
}
Example #2
0
function message_content(&$a)
{
    $o = '';
    nav_set_selected('messages');
    if (!local_user()) {
        notice(t('Permission denied.') . EOL);
        return;
    }
    $myprofile = $a->get_baseurl(true) . '/profile/' . $a->user['nickname'];
    $tpl = get_markup_template('mail_head.tpl');
    $header = replace_macros($tpl, array('$messages' => t('Messages'), '$tab_content' => $tab_content));
    if ($a->argc == 3 && ($a->argv[1] === 'drop' || $a->argv[1] === 'dropconv')) {
        if (!intval($a->argv[2])) {
            return;
        }
        // Check if we should do HTML-based delete confirmation
        if ($_REQUEST['confirm']) {
            // <form> can't take arguments in its "action" parameter
            // so add any arguments as hidden inputs
            $query = explode_querystring($a->query_string);
            $inputs = array();
            foreach ($query['args'] as $arg) {
                if (strpos($arg, 'confirm=') === false) {
                    $arg_parts = explode('=', $arg);
                    $inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
                }
            }
            //$a->page['aside'] = '';
            return replace_macros(get_markup_template('confirm.tpl'), array('$method' => 'get', '$message' => t('Do you really want to delete this message?'), '$extra_inputs' => $inputs, '$confirm' => t('Yes'), '$confirm_url' => $query['base'], '$confirm_name' => 'confirmed', '$cancel' => t('Cancel')));
        }
        // Now check how the user responded to the confirmation query
        if ($_REQUEST['canceled']) {
            goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
        }
        $cmd = $a->argv[1];
        if ($cmd === 'drop') {
            $r = q("DELETE FROM `mail` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($a->argv[2]), intval(local_user()));
            if ($r) {
                info(t('Message deleted.') . EOL);
            }
            //goaway($a->get_baseurl(true) . '/message' );
            goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
        } else {
            $r = q("SELECT `parent-uri`,`convid` FROM `mail` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($a->argv[2]), intval(local_user()));
            if (count($r)) {
                $parent = $r[0]['parent-uri'];
                $convid = $r[0]['convid'];
                $r = q("DELETE FROM `mail` WHERE `parent-uri` = '%s' AND `uid` = %d ", dbesc($parent), intval(local_user()));
                // remove diaspora conversation pointer
                // Actually if we do this, we can never receive another reply to that conversation,
                // as we will never again have the info we need to re-create it.
                // We'll just have to orphan it.
                //if($convid) {
                //	q("delete from conv where id = %d limit 1",
                //		intval($convid)
                //	);
                //}
                if ($r) {
                    info(t('Conversation removed.') . EOL);
                }
            }
            //goaway($a->get_baseurl(true) . '/message' );
            goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
        }
    }
    if ($a->argc > 1 && $a->argv[1] === 'new') {
        $o .= $header;
        /*		$plaintext = false;
        		if(intval(get_pconfig(local_user(),'system','plaintext')))
        			$plaintext = true;*/
        $plaintext = true;
        if (local_user() && feature_enabled(local_user(), 'richtext')) {
            $plaintext = false;
        }
        $tpl = get_markup_template('msg-header.tpl');
        $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl(true), '$editselect' => $plaintext ? 'none' : '/(profile-jot-text|prvmail-text)/', '$nickname' => $a->user['nickname'], '$linkurl' => t('Please enter a link URL:')));
        $tpl = get_markup_template('msg-end.tpl');
        $a->page['end'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl(true), '$editselect' => $plaintext ? 'none' : '/(profile-jot-text|prvmail-text)/', '$nickname' => $a->user['nickname'], '$linkurl' => t('Please enter a link URL:')));
        $preselect = isset($a->argv[2]) ? array($a->argv[2]) : false;
        $prename = $preurl = $preid = '';
        if ($preselect) {
            $r = q("select name, url, id from contact where uid = %d and id = %d limit 1", intval(local_user()), intval($a->argv[2]));
            if (count($r)) {
                $prename = $r[0]['name'];
                $preurl = $r[0]['url'];
                $preid = $r[0]['id'];
            }
        }
        $prefill = $preselect ? $prename : '';
        // the ugly select box
        $select = contact_select('messageto', 'message-to-select', $preselect, 4, true, false, false, 10);
        $tpl = get_markup_template('prv_message.tpl');
        $o .= replace_macros($tpl, array('$header' => t('Send Private Message'), '$to' => t('To:'), '$showinputs' => 'true', '$prefill' => $prefill, '$autocomp' => $autocomp, '$preid' => $preid, '$subject' => t('Subject:'), '$subjtxt' => x($_REQUEST, 'subject') ? strip_tags($_REQUEST['subject']) : '', '$text' => x($_REQUEST, 'body') ? escape_tags(htmlspecialchars($_REQUEST['body'])) : '', '$readonly' => '', '$yourmessage' => t('Your message:'), '$select' => $select, '$parent' => '', '$upload' => t('Upload photo'), '$insert' => t('Insert web link'), '$wait' => t('Please wait'), '$submit' => t('Submit')));
        return $o;
    }
    $_SESSION['return_url'] = $a->query_string;
    if ($a->argc == 1) {
        // list messages
        $o .= $header;
        $r = q("SELECT count(*) AS `total` FROM `mail`\n\t\t\tWHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `created` DESC", intval(local_user()), dbesc($myprofile));
        if (count($r)) {
            $a->set_pager_total($r[0]['total']);
        }
        $r = q("SELECT max(`mail`.`created`) AS `mailcreated`, min(`mail`.`seen`) AS `mailseen`,\n\t\t\t`mail`.* , `contact`.`name`, `contact`.`url`, `contact`.`thumb` , `contact`.`network`,\n\t\t\tcount( * ) as count\n\t\t\tFROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`\n\t\t\tWHERE `mail`.`uid` = %d GROUP BY `parent-uri` ORDER BY `mailcreated` DESC  LIMIT %d , %d ", intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage']));
        if (!count($r)) {
            info(t('No messages.') . EOL);
            return $o;
        }
        $tpl = get_markup_template('mail_list.tpl');
        foreach ($r as $rr) {
            if ($rr['unknown']) {
                $partecipants = sprintf(t("Unknown sender - %s"), $rr['from-name']);
            } elseif (link_compare($rr['from-url'], $myprofile)) {
                $partecipants = sprintf(t("You and %s"), $rr['name']);
            } else {
                $partecipants = sprintf(t("%s and You"), $rr['from-name']);
            }
            if ($a->theme['template_engine'] === 'internal') {
                $subject_e = template_escape($rr['mailseen'] ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>');
                $body_e = template_escape($rr['body']);
                $to_name_e = template_escape($rr['name']);
            } else {
                $subject_e = $rr['mailseen'] ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>';
                $body_e = $rr['body'];
                $to_name_e = $rr['name'];
            }
            $o .= replace_macros($tpl, array('$id' => $rr['id'], '$from_name' => $partecipants, '$from_url' => $rr['network'] === NETWORK_DFRN ? $a->get_baseurl(true) . '/redir/' . $rr['contact-id'] : $rr['url'], '$sparkle' => ' sparkle', '$from_photo' => $rr['thumb'] ? $rr['thumb'] : $rr['from-photo'], '$subject' => $subject_e, '$delete' => t('Delete conversation'), '$body' => $body_e, '$to_name' => $to_name_e, '$date' => datetime_convert('UTC', date_default_timezone_get(), $rr['mailcreated'], t('D, d M Y - g:i A')), '$ago' => relative_date($rr['mailcreated']), '$seen' => $rr['mailseen'], '$count' => sprintf(tt('%d message', '%d messages', $rr['count']), $rr['count'])));
        }
        $o .= paginate($a);
        return $o;
    }
    if ($a->argc > 1 && intval($a->argv[1])) {
        $o .= $header;
        $plaintext = true;
        if (local_user() && feature_enabled(local_user(), 'richtext')) {
            $plaintext = false;
        }
        $r = q("SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`\n\t\t\tFROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`\n\t\t\tWHERE `mail`.`uid` = %d AND `mail`.`id` = %d LIMIT 1", intval(local_user()), intval($a->argv[1]));
        if (count($r)) {
            $contact_id = $r[0]['contact-id'];
            $convid = $r[0]['convid'];
            $sql_extra = sprintf(" and `mail`.`parent-uri` = '%s' ", dbesc($r[0]['parent-uri']));
            if ($convid) {
                $sql_extra = sprintf(" and ( `mail`.`parent-uri` = '%s' OR `mail`.`convid` = '%d' ) ", dbesc($r[0]['parent-uri']), intval($convid));
            }
            $messages = q("SELECT `mail`.*, `contact`.`name`, `contact`.`url`, `contact`.`thumb`\n\t\t\t\tFROM `mail` LEFT JOIN `contact` ON `mail`.`contact-id` = `contact`.`id`\n\t\t\t\tWHERE `mail`.`uid` = %d {$sql_extra} ORDER BY `mail`.`created` ASC", intval(local_user()));
        }
        if (!count($messages)) {
            notice(t('Message not available.') . EOL);
            return $o;
        }
        $r = q("UPDATE `mail` SET `seen` = 1 WHERE `parent-uri` = '%s' AND `uid` = %d", dbesc($r[0]['parent-uri']), intval(local_user()));
        require_once "include/bbcode.php";
        $tpl = get_markup_template('msg-header.tpl');
        $a->page['htmlhead'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl(true), '$editselect' => $plaintext ? 'none' : '/(profile-jot-text|prvmail-text)/', '$nickname' => $a->user['nickname'], '$linkurl' => t('Please enter a link URL:')));
        $tpl = get_markup_template('msg-end.tpl');
        $a->page['end'] .= replace_macros($tpl, array('$baseurl' => $a->get_baseurl(true), '$editselect' => $plaintext ? 'none' : '/(profile-jot-text|prvmail-text)/', '$nickname' => $a->user['nickname'], '$linkurl' => t('Please enter a link URL:')));
        $mails = array();
        $seen = 0;
        $unknown = false;
        foreach ($messages as $message) {
            if ($message['unknown']) {
                $unknown = true;
            }
            if ($message['from-url'] == $myprofile) {
                $from_url = $myprofile;
                $sparkle = '';
            } else {
                $from_url = $a->get_baseurl(true) . '/redir/' . $message['contact-id'];
                $sparkle = ' sparkle';
            }
            $extracted = item_extract_images($message['body']);
            if ($extracted['images']) {
                $message['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $message['contact-id']);
            }
            if ($a->theme['template_engine'] === 'internal') {
                $from_name_e = template_escape($message['from-name']);
                $subject_e = template_escape($message['title']);
                $body_e = template_escape(smilies(bbcode($message['body'])));
                $to_name_e = template_escape($message['name']);
            } else {
                $from_name_e = $message['from-name'];
                $subject_e = $message['title'];
                $body_e = smilies(bbcode($message['body']));
                $to_name_e = $message['name'];
            }
            $mails[] = array('id' => $message['id'], 'from_name' => $from_name_e, 'from_url' => $from_url, 'sparkle' => $sparkle, 'from_photo' => $message['from-photo'], 'subject' => $subject_e, 'body' => $body_e, 'delete' => t('Delete message'), 'to_name' => $to_name_e, 'date' => datetime_convert('UTC', date_default_timezone_get(), $message['created'], 'D, d M Y - g:i A'), 'ago' => relative_date($message['created']));
            $seen = $message['seen'];
        }
        $select = $message['name'] . '<input type="hidden" name="messageto" value="' . $contact_id . '" />';
        $parent = '<input type="hidden" name="replyto" value="' . $message['parent-uri'] . '" />';
        $tpl = get_markup_template('mail_display.tpl');
        if ($a->theme['template_engine'] === 'internal') {
            $subjtxt_e = template_escape($message['title']);
        } else {
            $subjtxt_e = $message['title'];
        }
        $o = replace_macros($tpl, array('$thread_id' => $a->argv[1], '$thread_subject' => $message['title'], '$thread_seen' => $seen, '$delete' => t('Delete conversation'), '$canreply' => $unknown ? false : '1', '$unknown_text' => t("No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."), '$mails' => $mails, '$header' => t('Send Reply'), '$to' => t('To:'), '$showinputs' => '', '$subject' => t('Subject:'), '$subjtxt' => $subjtxt_e, '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ', '$yourmessage' => t('Your message:'), '$text' => '', '$select' => $select, '$parent' => $parent, '$upload' => t('Upload photo'), '$insert' => t('Insert web link'), '$submit' => t('Submit'), '$wait' => t('Please wait')));
        return $o;
    }
}