aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorredmatrix <git@macgirvin.com>2016-05-20 22:52:47 -0700
committerredmatrix <git@macgirvin.com>2016-05-20 22:52:47 -0700
commitd8ace38041ad3ef161cf9c727c94b6ce2a00ce75 (patch)
tree80326bb033ded557c846cecafba3882459f20906 /include
parentbc20cf9fa3479be20417f78187f7302f13fbf0ec (diff)
downloadvolse-hubzilla-d8ace38041ad3ef161cf9c727c94b6ce2a00ce75.tar.gz
volse-hubzilla-d8ace38041ad3ef161cf9c727c94b6ce2a00ce75.tar.bz2
volse-hubzilla-d8ace38041ad3ef161cf9c727c94b6ce2a00ce75.zip
rework the conversation object stuff at a high level - still needs a bit of refactoring
Diffstat (limited to 'include')
-rw-r--r--include/BaseObject.php38
-rw-r--r--include/ConversationObject.php225
-rw-r--r--include/ItemObject.php773
-rw-r--r--include/api.php10
-rw-r--r--include/conversation.php7
-rw-r--r--include/enotify.php2
-rw-r--r--include/event.php2
-rw-r--r--include/feedutils.php4
-rw-r--r--include/identity.php2
-rw-r--r--include/language.php2
-rw-r--r--include/network.php10
-rw-r--r--include/zot.php4
12 files changed, 20 insertions, 1059 deletions
diff --git a/include/BaseObject.php b/include/BaseObject.php
deleted file mode 100644
index a88978a83..000000000
--- a/include/BaseObject.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php /** @file */
-
-if(class_exists('BaseObject'))
- return;
-
-require_once('boot.php');
-
-/**
- * Basic object
- *
- * Contains what is usefull to any object
- */
-class BaseObject {
- private static $app = null;
-
- /**
- * Get the app
- *
- * Same as get_app from boot.php
- */
- public function get_app() {
- if(self::$app)
- return self::$app;
-
- global $a;
- self::$app = $a;
-
- return self::$app;
- }
-
- /**
- * Set the app
- */
- public static function set_app($app) {
- self::$app = $app;
- }
-}
-
diff --git a/include/ConversationObject.php b/include/ConversationObject.php
deleted file mode 100644
index 82f381b0c..000000000
--- a/include/ConversationObject.php
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php /** @file */
-
-if(class_exists('Conversation'))
- return;
-
-require_once('boot.php');
-require_once('include/BaseObject.php');
-require_once('include/ItemObject.php');
-require_once('include/text.php');
-require_once('include/items.php');
-
-/**
- * A list of threads
- *
- */
-
-class Conversation extends BaseObject {
-
- private $threads = array();
- private $mode = null;
- private $observer = null;
- private $writable = false;
- private $commentable = false;
- private $profile_owner = 0;
- private $preview = false;
- private $prepared_item = '';
- private $cipher = 'aes256';
-
- // $prepared_item is for use by alternate conversation structures such as photos
- // wherein we've already prepared a top level item which doesn't look anything like
- // a normal "post" item
-
- public function __construct($mode, $preview, $prepared_item = '') {
- $this->set_mode($mode);
- $this->preview = $preview;
- $this->prepared_item = $prepared_item;
- $c = ((local_channel()) ? get_pconfig(local_channel(),'system','default_cipher') : '');
- if($c)
- $this->cipher = $c;
- }
-
- /**
- * Set the mode we'll be displayed on
- */
- private function set_mode($mode) {
- if($this->get_mode() == $mode)
- return;
-
- $a = $this->get_app();
-
- $this->observer = App::get_observer();
- $ob_hash = (($this->observer) ? $this->observer['xchan_hash'] : '');
-
- switch($mode) {
- case 'network':
- $this->profile_owner = local_channel();
- $this->writable = true;
- break;
- case 'channel':
- $this->profile_owner = App::$profile['profile_uid'];
- $this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments');
- break;
- case 'display':
- // in this mode we set profile_owner after initialisation (from conversation()) and then
- // pull some trickery which allows us to re-invoke this function afterward
- // it's an ugly hack so FIXME
- $this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments');
- break;
- case 'page':
- $this->profile_owner = App::$profile['uid'];
- $this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments');
- break;
- default:
- logger('[ERROR] Conversation::set_mode : Unhandled mode ('. $mode .').', LOGGER_DEBUG);
- return false;
- break;
- }
- $this->mode = $mode;
- }
-
- /**
- * Get mode
- */
- public function get_mode() {
- return $this->mode;
- }
-
- /**
- * Check if page is writable
- */
- public function is_writable() {
- return $this->writable;
- }
-
- public function is_commentable() {
- return $this->commentable;
- }
-
- /**
- * Check if page is a preview
- */
- public function is_preview() {
- return $this->preview;
- }
-
- /**
- * Get profile owner
- */
- public function get_profile_owner() {
- return $this->profile_owner;
- }
-
- public function set_profile_owner($uid) {
- $this->profile_owner = $uid;
- $mode = $this->get_mode();
- $this->mode = null;
- $this->set_mode($mode);
- }
-
- public function get_observer() {
- return $this->observer;
- }
-
- public function get_cipher() {
- return $this->cipher;
- }
-
-
- /**
- * Add a thread to the conversation
- *
- * Returns:
- * _ The inserted item on success
- * _ false on failure
- */
- public function add_thread($item) {
- $item_id = $item->get_id();
- if(!$item_id) {
- logger('Item has no ID!!', LOGGER_DEBUG, LOG_ERR);
- return false;
- }
- if($this->get_thread($item->get_id())) {
- logger('Thread already exists ('. $item->get_id() .').', LOGGER_DEBUG, LOG_WARNING);
- return false;
- }
-
- /*
- * Only add things that will be displayed
- */
-
-
- if(($item->get_data_value('id') != $item->get_data_value('parent')) && (activity_match($item->get_data_value('verb'),ACTIVITY_LIKE) || activity_match($item->get_data_value('verb'),ACTIVITY_DISLIKE))) {
- return false;
- }
-
- $item->set_commentable(false);
- $ob_hash = (($this->observer) ? $this->observer['xchan_hash'] : '');
-
- if(! comments_are_now_closed($item->get_data())) {
- if(($item->get_data_value('author_xchan') === $ob_hash) || ($item->get_data_value('owner_xchan') === $ob_hash))
- $item->set_commentable(true);
-
- if(intval($item->get_data_value('item_nocomment'))) {
- $item->set_commentable(false);
- }
- elseif(($this->observer) && (! $item->is_commentable())) {
- if((array_key_exists('owner',$item->data)) && intval($item->data['owner']['abook_self']))
- $item->set_commentable(perm_is_allowed($this->profile_owner,$this->observer['xchan_hash'],'post_comments'));
- else
- $item->set_commentable(can_comment_on_post($this->observer['xchan_hash'],$item->data));
- }
- }
- require_once('include/identity.php');
-
- $item->set_conversation($this);
- $this->threads[] = $item;
- return end($this->threads);
- }
-
- /**
- * Get data in a form usable by a conversation template
- *
- * We should find a way to avoid using those arguments (at least most of them)
- *
- * Returns:
- * _ The data requested on success
- * _ false on failure
- */
- public function get_template_data($conv_responses) {
- $result = array();
-
- foreach($this->threads as $item) {
-
- if(($item->get_data_value('id') == $item->get_data_value('parent')) && $this->prepared_item) {
- $item_data = $this->prepared_item;
- }
- else {
- $item_data = $item->get_template_data($conv_responses);
- }
- if(!$item_data) {
- logger('Failed to get item template data ('. $item->get_id() .').', LOGGER_DEBUG, LOG_ERR);
- return false;
- }
- $result[] = $item_data;
- }
-
- return $result;
- }
-
- /**
- * Get a thread based on its item id
- *
- * Returns:
- * _ The found item on success
- * _ false on failure
- */
- private function get_thread($id) {
- foreach($this->threads as $item) {
- if($item->get_id() == $id)
- return $item;
- }
-
- return false;
- }
-}
diff --git a/include/ItemObject.php b/include/ItemObject.php
deleted file mode 100644
index 019fa87ad..000000000
--- a/include/ItemObject.php
+++ /dev/null
@@ -1,773 +0,0 @@
-<?php /** @file */
-
-if(class_exists('Item'))
- return;
-
-require_once('include/BaseObject.php');
-require_once('include/text.php');
-require_once('boot.php');
-
-/**
- * An item
- */
-
-class Item extends BaseObject {
- public $data = array();
- private $template = 'conv_item.tpl';
- private $comment_box_template = 'comment_item.tpl';
- private $commentable = false;
- private $toplevel = false;
- private $children = array();
- private $parent = null;
- private $conversation = null;
- private $redirect_url = null;
- private $owner_url = '';
- private $owner_photo = '';
- private $owner_name = '';
- private $wall_to_wall = false;
- private $threaded = false;
- private $visiting = false;
- private $channel = null;
- private $display_mode = 'normal';
-
-
- public function __construct($data) {
- $a = $this->get_app();
-
- $this->data = $data;
- $this->toplevel = ($this->get_id() == $this->get_data_value('parent'));
-
- // Prepare the children
- if(count($data['children'])) {
- foreach($data['children'] as $item) {
-
- /*
- * Only add those that will be displayed
- */
-
- if((! visible_activity($item)) || array_key_exists('author_blocked',$item)) {
- continue;
- }
-
- $child = new Item($item);
- $this->add_child($child);
- }
- }
- }
-
- /**
- * Get data in a form usable by a conversation template
- *
- * Returns:
- * _ The data requested on success
- * _ false on failure
- */
-
- public function get_template_data($conv_responses, $thread_level=1) {
-
- $result = array();
-
- $a = $this->get_app();
- $item = $this->get_data();
-
- $commentww = '';
- $sparkle = '';
- $buttons = '';
- $dropping = false;
- $star = false;
- $isstarred = "unstarred fa-star-o";
- $indent = '';
- $osparkle = '';
- $total_children = $this->count_descendants();
- $unseen_comments = (($item['real_uid']) ? 0 : $this->count_unseen_descendants());
-
- $conv = $this->get_conversation();
- $observer = $conv->get_observer();
-
- $lock = ((($item['item_private'] == 1) || (($item['uid'] == local_channel()) && (strlen($item['allow_cid']) || strlen($item['allow_gid'])
- || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
- ? t('Private Message')
- : false);
- $shareable = ((($conv->get_profile_owner() == local_channel() && local_channel()) && ($item['item_private'] != 1)) ? true : false);
-
- // allow an exemption for sharing stuff from your private feeds
- if($item['author']['xchan_network'] === 'rss')
- $shareable = true;
-
- $mode = $conv->get_mode();
-
- if(local_channel() && $observer['xchan_hash'] === $item['author_xchan'])
- $edpost = array(z_root()."/editpost/".$item['id'], t("Edit"));
- else
- $edpost = false;
-
-
- if($observer['xchan_hash'] == $this->get_data_value('author_xchan')
- || $observer['xchan_hash'] == $this->get_data_value('owner_xchan')
- || $this->get_data_value('uid') == local_channel())
- $dropping = true;
-
-
- if(array_key_exists('real_uid',$item)) {
- $edpost = false;
- $dropping = false;
- }
-
-
- if($dropping) {
- $drop = array(
- 'dropping' => $dropping,
- 'delete' => t('Delete'),
- );
- }
-// FIXME
- if($observer_is_pageowner) {
- $multidrop = array(
- 'select' => t('Select'),
- );
- }
-
- $filer = ((($conv->get_profile_owner() == local_channel()) && (! array_key_exists('real_uid',$item))) ? t("Save to Folder") : false);
-
- $profile_avatar = $item['author']['xchan_photo_m'];
- $profile_link = chanlink_url($item['author']['xchan_url']);
- $profile_name = $item['author']['xchan_name'];
-
- $location = format_location($item);
- $isevent = false;
- $attend = null;
- $canvote = false;
-
- // process action responses - e.g. like/dislike/attend/agree/whatever
- $response_verbs = array('like');
- if(feature_enabled($conv->get_profile_owner(),'dislike'))
- $response_verbs[] = 'dislike';
- if($item['obj_type'] === ACTIVITY_OBJ_EVENT) {
- $response_verbs[] = 'attendyes';
- $response_verbs[] = 'attendno';
- $response_verbs[] = 'attendmaybe';
- if($this->is_commentable()) {
- $isevent = true;
- $attend = array( t('I will attend'), t('I will not attend'), t('I might attend'));
- }
- }
-
- $consensus = (intval($item['item_consensus']) ? true : false);
- if($consensus) {
- $response_verbs[] = 'agree';
- $response_verbs[] = 'disagree';
- $response_verbs[] = 'abstain';
- if($this->is_commentable()) {
- $conlabels = array( t('I agree'), t('I disagree'), t('I abstain'));
- $canvote = true;
- }
- }
-
- if(! feature_enabled($conv->get_profile_owner(),'dislike'))
- unset($conv_responses['dislike']);
-
- $responses = get_responses($conv_responses,$response_verbs,$this,$item);
-
- $like_count = ((x($conv_responses['like'],$item['mid'])) ? $conv_responses['like'][$item['mid']] : '');
- $like_list = ((x($conv_responses['like'],$item['mid'])) ? $conv_responses['like'][$item['mid'] . '-l'] : '');
- if (count($like_list) > MAX_LIKERS) {
- $like_list_part = array_slice($like_list, 0, MAX_LIKERS);
- array_push($like_list_part, '<a href="#" data-toggle="modal" data-target="#likeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
- } else {
- $like_list_part = '';
- }
- $like_button_label = tt('Like','Likes',$like_count,'noun');
-
- if (feature_enabled($conv->get_profile_owner(),'dislike')) {
- $dislike_count = ((x($conv_responses['dislike'],$item['mid'])) ? $conv_responses['dislike'][$item['mid']] : '');
- $dislike_list = ((x($conv_responses['dislike'],$item['mid'])) ? $conv_responses['dislike'][$item['mid'] . '-l'] : '');
- $dislike_button_label = tt('Dislike','Dislikes',$dislike_count,'noun');
- if (count($dislike_list) > MAX_LIKERS) {
- $dislike_list_part = array_slice($dislike_list, 0, MAX_LIKERS);
- array_push($dislike_list_part, '<a href="#" data-toggle="modal" data-target="#dislikeModal-' . $this->get_id() . '"><b>' . t('View all') . '</b></a>');
- } else {
- $dislike_list_part = '';
- }
- }
-
- $showlike = ((x($conv_responses['like'],$item['mid'])) ? format_like($conv_responses['like'][$item['mid']],$conv_responses['like'][$item['mid'] . '-l'],'like',$item['mid']) : '');
- $showdislike = ((x($conv_responses['dislike'],$item['mid']) && feature_enabled($conv->get_profile_owner(),'dislike'))
- ? format_like($conv_responses['dislike'][$item['mid']],$conv_responses['dislike'][$item['mid'] . '-l'],'dislike',$item['mid']) : '');
-
- /*
- * We should avoid doing this all the time, but it depends on the conversation mode
- * And the conv mode may change when we change the conv, or it changes its mode
- * Maybe we should establish a way to be notified about conversation changes
- */
-
- $this->check_wall_to_wall();
-
- if($this->is_toplevel()) {
- // FIXME check this permission
- if(($conv->get_profile_owner() == local_channel()) && (! array_key_exists('real_uid',$item))) {
-
-// FIXME we don't need all this stuff, some can be done in the template
-
- $star = array(
- 'do' => t("Add Star"),
- 'undo' => t("Remove Star"),
- 'toggle' => t("Toggle Star Status"),
- 'classdo' => (intval($item['item_starred']) ? "hidden" : ""),
- 'classundo' => (intval($item['item_starred']) ? "" : "hidden"),
- 'isstarred' => (intval($item['item_starred']) ? "starred fa-star" : "unstarred fa-star-o"),
- 'starred' => t('starred'),
- );
-
- }
- } else {
- $indent = 'comment';
- }
-
-
- $verified = (intval($item['item_verified']) ? t('Message signature validated') : '');
- $forged = ((($item['sig']) && (! intval($item['item_verified']))) ? t('Message signature incorrect') : '');
- $unverified = '' ; // (($this->is_wall_to_wall() && (! intval($item['item_verified']))) ? t('Message cannot be verified') : '');
-
-
-
- // FIXME - check this permission
- if($conv->get_profile_owner() == local_channel()) {
- $tagger = array(
- 'tagit' => t("Add Tag"),
- 'classtagger' => "",
- );
- }
-
- $has_bookmarks = false;
- if(is_array($item['term'])) {
- foreach($item['term'] as $t) {
- if(!UNO && $t['type'] == TERM_BOOKMARK)
- $has_bookmarks = true;
- }
- }
-
- $has_event = false;
- if(($item['obj_type'] === ACTIVITY_OBJ_EVENT) && $conv->get_profile_owner() == local_channel())
- $has_event = true;
-
- if($this->is_commentable()) {
- $like = array( t("I like this \x28toggle\x29"), t("like"));
- $dislike = array( t("I don't like this \x28toggle\x29"), t("dislike"));
- }
-
- if ($shareable)
- $share = array( t('Share This'), t('share'));
-
- $dreport = '';
-
- $keep_reports = intval(get_config('system','expire_delivery_reports'));
- if($keep_reports === 0)
- $keep_reports = 30;
-
- if((! get_config('system','disable_dreport')) && strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC',"now - $keep_reports days")) > 0)
- $dreport = t('Delivery Report');
-
- if(strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC','now - 12 hours')) > 0)
- $indent .= ' shiny';
-
-
- localize_item($item);
-
- $body = prepare_body($item,true);
-
- // $viewthread (below) is only valid in list mode. If this is a channel page, build the thread viewing link
- // since we can't depend on llink or plink pointing to the right local location.
-
- $owner_address = substr($item['owner']['xchan_addr'],0,strpos($item['owner']['xchan_addr'],'@'));
- $viewthread = $item['llink'];
- if($conv->get_mode() === 'channel')
- $viewthread = z_root() . '/channel/' . $owner_address . '?f=&mid=' . $item['mid'];
-
- $comment_count_txt = sprintf( tt('%d comment','%d comments',$total_children),$total_children );
- $list_unseen_txt = (($unseen_comments) ? sprintf('%d unseen',$unseen_comments) : '');
-
-
-
-
-
- $children = $this->get_children();
-
- $has_tags = (($body['tags'] || $body['categories'] || $body['mentions'] || $body['attachments'] || $body['folders']) ? true : false);
-
- $tmp_item = array(
- 'template' => $this->get_template(),
- 'mode' => $mode,
- 'type' => implode("",array_slice(explode("/",$item['verb']),-1)),
- 'body' => $body['html'],
- 'tags' => $body['tags'],
- 'categories' => $body['categories'],
- 'mentions' => $body['mentions'],
- 'attachments' => $body['attachments'],
- 'folders' => $body['folders'],
- 'text' => strip_tags($body['html']),
- 'id' => $this->get_id(),
- 'mid' => $item['mid'],
- 'isevent' => $isevent,
- 'attend' => $attend,
- 'consensus' => $consensus,
- 'conlabels' => $conlabels,
- 'canvote' => $canvote,
- 'linktitle' => sprintf( t('View %s\'s profile - %s'), $profile_name, $item['author']['xchan_addr']),
- 'olinktitle' => sprintf( t('View %s\'s profile - %s'), $this->get_owner_name(), $item['owner']['xchan_addr']),
- 'llink' => $item['llink'],
- 'viewthread' => $viewthread,
- 'to' => t('to'),
- 'via' => t('via'),
- 'wall' => t('Wall-to-Wall'),
- 'vwall' => t('via Wall-To-Wall:'),
- 'profile_url' => $profile_link,
- 'item_photo_menu' => item_photo_menu($item),
- 'dreport' => $dreport,
- 'name' => $profile_name,
- 'thumb' => $profile_avatar,
- 'osparkle' => $osparkle,
- 'sparkle' => $sparkle,
- 'title' => $item['title'],
- 'title_tosource' => get_pconfig($conv->get_profile_owner(),'system','title_tosource'),
- 'ago' => relative_date($item['created']),
- 'app' => $item['app'],
- 'str_app' => sprintf( t('from %s'), $item['app']),
- 'isotime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'c'),
- 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
- 'editedtime' => (($item['edited'] != $item['created']) ? sprintf( t('last edited: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['edited'], 'r')) : ''),
- 'expiretime' => (($item['expires'] !== NULL_DATE) ? sprintf( t('Expires: %s'), datetime_convert('UTC', date_default_timezone_get(), $item['expires'], 'r')):''),
- 'lock' => $lock,
- 'verified' => $verified,
- 'unverified' => $unverified,
- 'forged' => $forged,
- 'location' => $location,
- 'indent' => $indent,
- 'owner_url' => $this->get_owner_url(),
- 'owner_photo' => $this->get_owner_photo(),
- 'owner_name' => $this->get_owner_name(),
- 'photo' => $body['photo'],
- 'event' => $body['event'],
- 'has_tags' => $has_tags,
-
-// Item toolbar buttons
- 'like' => $like,
- 'dislike' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike : ''),
- 'share' => $share,
- 'rawmid' => $item['mid'],
- 'plink' => get_plink($item),
- 'edpost' => $edpost, // ((feature_enabled($conv->get_profile_owner(),'edit_posts')) ? $edpost : ''),
- 'star' => ((feature_enabled($conv->get_profile_owner(),'star_posts')) ? $star : ''),
- 'tagger' => ((feature_enabled($conv->get_profile_owner(),'commtag')) ? $tagger : ''),
- 'filer' => ((feature_enabled($conv->get_profile_owner(),'filing')) ? $filer : ''),
- 'bookmark' => (($conv->get_profile_owner() == local_channel() && local_channel() && $has_bookmarks) ? t('Save Bookmarks') : ''),
- 'addtocal' => (($has_event) ? t('Add to Calendar') : ''),
- 'drop' => $drop,
- 'multidrop' => ((feature_enabled($conv->get_profile_owner(),'multi_delete')) ? $multidrop : ''),
-// end toolbar buttons
-
- 'unseen_comments' => $unseen_comments,
- 'comment_count' => $total_children,
- 'comment_count_txt' => $comment_count_txt,
- 'list_unseen_txt' => $list_unseen_txt,
- 'markseen' => t('Mark all seen'),
- 'responses' => $responses,
- 'like_count' => $like_count,
- 'like_list' => $like_list,
- 'like_list_part' => $like_list_part,
- 'like_button_label' => $like_button_label,
- 'like_modal_title' => t('Likes','noun'),
- 'dislike_modal_title' => t('Dislikes','noun'),
- 'dislike_count' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_count : ''),
- 'dislike_list' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_list : ''),
- 'dislike_list_part' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_list_part : ''),
- 'dislike_button_label' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike_button_label : ''),
- 'modal_dismiss' => t('Close'),
- 'showlike' => $showlike,
- 'showdislike' => $showdislike,
- 'comment' => $this->get_comment_box($indent),
- 'previewing' => ($conv->is_preview() ? ' preview ' : ''),
- 'wait' => t('Please wait'),
- 'thread_level' => $thread_level
- );
-
- $arr = array('item' => $item, 'output' => $tmp_item);
- call_hooks('display_item', $arr);
-
- $result = $arr['output'];
-
- $result['children'] = array();
- $nb_children = count($children);
-
- $visible_comments = get_config('system','expanded_comments');
- if($visible_comments === false)
- $visible_comments = 3;
-
- if(($this->get_display_mode() === 'normal') && ($nb_children > 0)) {
- foreach($children as $child) {
- $result['children'][] = $child->get_template_data($conv_responses, $thread_level + 1);
- }
- // Collapse
- if(($nb_children > $visible_comments) || ($thread_level > 1)) {
- $result['children'][0]['comment_firstcollapsed'] = true;
- $result['children'][0]['num_comments'] = $comment_count_txt;
- $result['children'][0]['hide_text'] = t('[+] show all');
- if($thread_level > 1) {
- $result['children'][$nb_children - 1]['comment_lastcollapsed'] = true;
- }
- else {
- $result['children'][$nb_children - ($visible_comments + 1)]['comment_lastcollapsed'] = true;
- }
- }
- }
-
- $result['private'] = $item['item_private'];
- $result['toplevel'] = ($this->is_toplevel() ? 'toplevel_item' : '');
-
- if($this->is_threaded()) {
- $result['flatten'] = false;
- $result['threaded'] = true;
- }
- else {
- $result['flatten'] = true;
- $result['threaded'] = false;
- }
-
- return $result;
- }
-
- public function get_id() {
- return $this->get_data_value('id');
- }
-
- public function get_display_mode() {
- return $this->display_mode;
- }
-
- public function set_display_mode($mode) {
- $this->display_mode = $mode;
- }
-
- public function is_threaded() {
- return $this->threaded;
- }
-
- public function set_commentable($val) {
- $this->commentable = $val;
- foreach($this->get_children() as $child)
- $child->set_commentable($val);
- }
-
- public function is_commentable() {
- return $this->commentable;
- }
-
- /**
- * Add a child item
- */
- public function add_child($item) {
- $item_id = $item->get_id();
- if(!$item_id) {
- logger('[ERROR] Item::add_child : Item has no ID!!', LOGGER_DEBUG);
- return false;
- }
- if($this->get_child($item->get_id())) {
- logger('[WARN] Item::add_child : Item already exists ('. $item->get_id() .').', LOGGER_DEBUG);
- return false;
- }
- /*
- * Only add what will be displayed
- */
-
- if(activity_match($item->get_data_value('verb'),ACTIVITY_LIKE) || activity_match($item->get_data_value('verb'),ACTIVITY_DISLIKE)) {
- return false;
- }
-
- $item->set_parent($this);
- $this->children[] = $item;
- return end($this->children);
- }
-
- /**
- * Get a child by its ID
- */
- public function get_child($id) {
- foreach($this->get_children() as $child) {
- if($child->get_id() == $id)
- return $child;
- }
- return null;
- }
-
- /**
- * Get all our children
- */
- public function get_children() {
- return $this->children;
- }
-
- /**
- * Set our parent
- */
- protected function set_parent($item) {
- $parent = $this->get_parent();
- if($parent) {
- $parent->remove_child($this);
- }
- $this->parent = $item;
- $this->set_conversation($item->get_conversation());
- }
-
- /**
- * Remove our parent
- */
- protected function remove_parent() {
- $this->parent = null;
- $this->conversation = null;
- }
-
- /**
- * Remove a child
- */
- public function remove_child($item) {
- $id = $item->get_id();
- foreach($this->get_children() as $key => $child) {
- if($child->get_id() == $id) {
- $child->remove_parent();
- unset($this->children[$key]);
- // Reindex the array, in order to make sure there won't be any trouble on loops using count()
- $this->children = array_values($this->children);
- return true;
- }
- }
- logger('[WARN] Item::remove_child : Item is not a child ('. $id .').', LOGGER_DEBUG);
- return false;
- }
-
- /**
- * Get parent item
- */
- protected function get_parent() {
- return $this->parent;
- }
-
- /**
- * set conversation
- */
- public function set_conversation($conv) {
- $previous_mode = ($this->conversation ? $this->conversation->get_mode() : '');
-
- $this->conversation = $conv;
-
- // Set it on our children too
- foreach($this->get_children() as $child)
- $child->set_conversation($conv);
- }
-
- /**
- * get conversation
- */
- public function get_conversation() {
- return $this->conversation;
- }
-
- /**
- * Get raw data
- *
- * We shouldn't need this
- */
- public function get_data() {
- return $this->data;
- }
-
- /**
- * Get a data value
- *
- * Returns:
- * _ value on success
- * _ false on failure
- */
- public function get_data_value($name) {
- if(!isset($this->data[$name])) {
-// logger('[ERROR] Item::get_data_value : Item has no value name "'. $name .'".', LOGGER_DEBUG);
- return false;
- }
-
- return $this->data[$name];
- }
-
- /**
- * Get template
- */
- public function get_template() {
- return $this->template;
- }
-
-
- public function set_template($t) {
- $this->template = $t;
- }
-
- /**
- * Check if this is a toplevel post
- */
- private function is_toplevel() {
- return $this->toplevel;
- }
-
- /**
- * Count the total of our descendants
- */
- private function count_descendants() {
- $children = $this->get_children();
- $total = count($children);
- if($total > 0) {
- foreach($children as $child) {
- $total += $child->count_descendants();
- }
- }
- return $total;
- }
-
- private function count_unseen_descendants() {
- $children = $this->get_children();
- $total = count($children);
- if($total > 0) {
- $total = 0;
- foreach($children as $child) {
- if((! visible_activity($child->data)) || array_key_exists('author_blocked',$child->data)) {
- continue;
- }
- if(intval($child->data['item_unseen']))
- $total ++;
- }
- }
- return $total;
- }
-
-
- /**
- * Get the template for the comment box
- */
- private function get_comment_box_template() {
- return $this->comment_box_template;
- }
-
- /**
- * Get the comment box
- *
- * Returns:
- * _ The comment box string (empty if no comment box)
- * _ false on failure
- */
- private function get_comment_box($indent) {
-
- if(!$this->is_toplevel() && !get_config('system','thread_allow')) {
- return '';
- }
-
- $comment_box = '';
- $conv = $this->get_conversation();
-
-// logger('Commentable conv: ' . $conv->is_commentable());
-
- if(! $this->is_commentable())
- return;
-
- $template = get_markup_template($this->get_comment_box_template());
-
- $a = $this->get_app();
- $observer = $conv->get_observer();
-
- $qc = ((local_channel()) ? get_pconfig(local_channel(),'system','qcomment') : null);
- $qcomment = (($qc) ? explode("\n",$qc) : null);
-
- $arr = array('comment_buttons' => '','id' => $this->get_id());
- call_hooks('comment_buttons',$arr);
- $comment_buttons = $arr['comment_buttons'];
-
-
- $comment_box = replace_macros($template,array(
- '$return_path' => '',
- '$threaded' => $this->is_threaded(),
- '$jsreload' => '', //(($conv->get_mode() === 'display') ? $_SESSION['return_url'] : ''),
- '$type' => (($conv->get_mode() === 'channel') ? 'wall-comment' : 'net-comment'),
- '$id' => $this->get_id(),
- '$parent' => $this->get_id(),
- '$qcomment' => $qcomment,
- '$comment_buttons' => $comment_buttons,
- '$profile_uid' => $conv->get_profile_owner(),
- '$mylink' => $observer['xchan_url'],
- '$mytitle' => t('This is you'),
- '$myphoto' => $observer['xchan_photo_s'],
- '$comment' => t('Comment'),
- '$submit' => t('Submit'),
- '$edbold' => t('Bold'),
- '$editalic' => t('Italic'),
- '$eduline' => t('Underline'),
- '$edquote' => t('Quote'),
- '$edcode' => t('Code'),
- '$edimg' => t('Image'),
- '$edurl' => t('Insert Link'),
- '$edvideo' => t('Video'),
- '$preview' => t('Preview'), // ((feature_enabled($conv->get_profile_owner(),'preview')) ? t('Preview') : ''),
- '$indent' => $indent,
- '$feature_encrypt' => ((feature_enabled($conv->get_profile_owner(),'content_encrypt')) ? true : false),
- '$encrypt' => t('Encrypt text'),
- '$cipher' => $conv->get_cipher(),
- '$sourceapp' => App::$sourcename
-
- ));
-
- return $comment_box;
- }
-
- private function get_redirect_url() {
- return $this->redirect_url;
- }
-
- /**
- * Check if we are a wall to wall item and set the relevant properties
- */
- protected function check_wall_to_wall() {
- $conv = $this->get_conversation();
- $this->wall_to_wall = false;
- $this->owner_url = '';
- $this->owner_photo = '';
- $this->owner_name = '';
-
- if($conv->get_mode() === 'channel')
- return;
-
- if($this->is_toplevel() && ($this->get_data_value('author_xchan') != $this->get_data_value('owner_xchan'))) {
- $this->owner_url = chanlink_url($this->data['owner']['xchan_url']);
- $this->owner_photo = $this->data['owner']['xchan_photo_m'];
- $this->owner_name = $this->data['owner']['xchan_name'];
- $this->wall_to_wall = true;
- }
- }
-
- private function is_wall_to_wall() {
- return $this->wall_to_wall;
- }
-
- private function get_owner_url() {
- return $this->owner_url;
- }
-
- private function get_owner_photo() {
- return $this->owner_photo;
- }
-
- private function get_owner_name() {
- return $this->owner_name;
- }
-
- private function is_visiting() {
- return $this->visiting;
- }
-
-
-
-
-}
-
diff --git a/include/api.php b/include/api.php
index 5f4d4bedb..4a462d1e8 100644
--- a/include/api.php
+++ b/include/api.php
@@ -2107,10 +2107,10 @@ require_once('include/api_auth.php');
'private' => $private, 'textlimit' => $textlimit, 'sslserver' => $sslserver, 'ssl' => $ssl,
'shorturllength' => '30',
'hubzilla' => array(
- 'PLATFORM_NAME' => Zotlabs\Project\System::get_platform_name(),
- 'STD_VERSION' => Zotlabs\Project\System::get_project_version(),
+ 'PLATFORM_NAME' => Zotlabs\Lib\System::get_platform_name(),
+ 'STD_VERSION' => Zotlabs\Lib\System::get_project_version(),
'ZOT_REVISION' => ZOT_REVISION,
- 'DB_UPDATE_VERSION' => Zotlabs\Project\System::get_update_version()
+ 'DB_UPDATE_VERSION' => Zotlabs\Lib\System::get_update_version()
)
));
@@ -2143,12 +2143,12 @@ require_once('include/api_auth.php');
if($type === 'xml') {
header("Content-type: application/xml");
- echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n" . '<version>' . Zotlabs\Project\System::get_project_version() . '</version>' . "\r\n";
+ echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n" . '<version>' . Zotlabs\Lib\System::get_project_version() . '</version>' . "\r\n";
killme();
}
elseif($type === 'json') {
header("Content-type: application/json");
- echo '"' . Zotlabs\Project\System::get_project_version() . '"';
+ echo '"' . Zotlabs\Lib\System::get_project_version() . '"';
killme();
}
}
diff --git a/include/conversation.php b/include/conversation.php
index 8be0557e7..fca07a91d 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -754,10 +754,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
// Normal View
// logger('conv: items: ' . print_r($items,true));
- require_once('include/ConversationObject.php');
- require_once('include/ItemObject.php');
-
- $conv = new Conversation($mode, $preview, $prepared_item);
+ $conv = new Zotlabs\Lib\ThreadStream($mode, $preview, $prepared_item);
// In the display mode we don't have a profile owner.
@@ -806,7 +803,7 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $
if($item['id'] == $item['parent']) {
- $item_object = new Item($item);
+ $item_object = new Zotlabs\Lib\ThreadItem($item);
$conv->add_thread($item_object);
if($page_mode === 'list') {
$item_object->set_template('conv_list.tpl');
diff --git a/include/enotify.php b/include/enotify.php
index d87c5af11..bd8698606 100644
--- a/include/enotify.php
+++ b/include/enotify.php
@@ -529,7 +529,7 @@ function notification($params) {
$tpl = get_markup_template('email_notify_html.tpl');
$email_html_body = replace_macros($tpl,array(
'$banner' => $datarray['banner'],
- '$notify_icon' => Zotlabs\Project\System::get_notify_icon(),
+ '$notify_icon' => Zotlabs\Lib\System::get_notify_icon(),
'$product' => $datarray['product'],
'$preamble' => $datarray['preamble'],
'$sitename' => $datarray['sitename'],
diff --git a/include/event.php b/include/event.php
index e41bf2db7..29ca5bb79 100644
--- a/include/event.php
+++ b/include/event.php
@@ -67,7 +67,7 @@ function ical_wrapper($ev) {
$o .= "BEGIN:VCALENDAR";
$o .= "\r\nVERSION:2.0";
$o .= "\r\nMETHOD:PUBLISH";
- $o .= "\r\nPRODID:-//" . get_config('system','sitename') . "//" . Zotlabs\Project\System::get_platform_name() . "//" . strtoupper(App::$language). "\r\n";
+ $o .= "\r\nPRODID:-//" . get_config('system','sitename') . "//" . Zotlabs\Lib\System::get_platform_name() . "//" . strtoupper(App::$language). "\r\n";
if(array_key_exists('start', $ev))
$o .= format_event_ical($ev);
else {
diff --git a/include/feedutils.php b/include/feedutils.php
index 2ba5efe22..700198ff8 100644
--- a/include/feedutils.php
+++ b/include/feedutils.php
@@ -88,8 +88,8 @@ function get_feed_for($channel, $observer_hash, $params) {
$atom = '';
$atom .= replace_macros($feed_template, array(
- '$version' => xmlify(Zotlabs\Project\System::get_project_version()),
- '$red' => xmlify(Zotlabs\Project\System::get_platform_name()),
+ '$version' => xmlify(Zotlabs\Lib\System::get_project_version()),
+ '$red' => xmlify(Zotlabs\Lib\System::get_platform_name()),
'$feed_id' => xmlify($channel['xchan_url']),
'$feed_title' => xmlify($channel['channel_name']),
'$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', 'now' , ATOM_TIME)) ,
diff --git a/include/identity.php b/include/identity.php
index 206dad084..4ef1105ea 100644
--- a/include/identity.php
+++ b/include/identity.php
@@ -491,7 +491,7 @@ function identity_basic_export($channel_id, $items = false) {
// use constants here as otherwise we will have no idea if we can import from a site
// with a non-standard platform and version.
- $ret['compatibility'] = array('project' => PLATFORM_NAME, 'version' => STD_VERSION, 'database' => DB_UPDATE_VERSION, 'server_role' => Zotlabs\Project\System::get_server_role());
+ $ret['compatibility'] = array('project' => PLATFORM_NAME, 'version' => STD_VERSION, 'database' => DB_UPDATE_VERSION, 'server_role' => Zotlabs\Lib\System::get_server_role());
$r = q("select * from channel where channel_id = %d limit 1",
intval($channel_id)
diff --git a/include/language.php b/include/language.php
index d6b7606ca..14139e90c 100644
--- a/include/language.php
+++ b/include/language.php
@@ -189,7 +189,7 @@ function t($s, $ctx = '') {
function translate_projectname($s) {
- return str_replace(array('$projectname','$Projectname'),array(Zotlabs\Project\System::get_platform_name(),ucfirst(Zotlabs\Project\System::get_platform_name())),$s);
+ return str_replace(array('$projectname','$Projectname'),array(Zotlabs\Lib\System::get_platform_name(),ucfirst(Zotlabs\Lib\System::get_platform_name())),$s);
}
diff --git a/include/network.php b/include/network.php
index f38f8d548..3e5263d3e 100644
--- a/include/network.php
+++ b/include/network.php
@@ -1839,7 +1839,7 @@ function format_and_send_email($sender,$xchan,$item) {
$tpl = get_markup_template('email_notify_html.tpl');
$email_html_body = replace_macros($tpl,array(
'$banner' => $banner,
- '$notify_icon' => Zotlabs\Project\System::get_notify_icon(),
+ '$notify_icon' => Zotlabs\Lib\System::get_notify_icon(),
'$product' => $product,
'$preamble' => '',
'$sitename' => $sitename,
@@ -1990,8 +1990,8 @@ function get_site_info() {
$site_info = get_config('system','info');
$site_name = get_config('system','sitename');
if(! get_config('system','hidden_version_siteinfo')) {
- $version = Zotlabs\Project\System::get_project_version();
- $tag = Zotlabs\Project\System::get_std_version();
+ $version = Zotlabs\Lib\System::get_project_version();
+ $tag = Zotlabs\Lib\System::get_std_version();
if(@is_dir('.git') && function_exists('shell_exec')) {
$commit = trim( @shell_exec('git log -1 --format="%h"'));
@@ -2027,7 +2027,7 @@ function get_site_info() {
$data = Array(
'version' => $version,
'version_tag' => $tag,
- 'server_role' => Zotlabs\Project\System::get_server_role(),
+ 'server_role' => Zotlabs\Lib\System::get_server_role(),
'commit' => $commit,
'url' => z_root(),
'plugins' => $visible_plugins,
@@ -2041,7 +2041,7 @@ function get_site_info() {
'locked_features' => $locked_features,
'admin' => $admin,
'site_name' => (($site_name) ? $site_name : ''),
- 'platform' => Zotlabs\Project\System::get_platform_name(),
+ 'platform' => Zotlabs\Lib\System::get_platform_name(),
'dbdriver' => $db->getdriver(),
'lastpoll' => get_config('system','lastpoll'),
'info' => (($site_info) ? $site_info : ''),
diff --git a/include/zot.php b/include/zot.php
index 5884245e9..54a3fe640 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -3924,7 +3924,7 @@ function zotinfo($arr) {
$ret['site']['channels'] = channel_total();
- $ret['site']['version'] = Zotlabs\Project\System::get_platform_name() . ' ' . STD_VERSION . '[' . DB_UPDATE_VERSION . ']';
+ $ret['site']['version'] = Zotlabs\Lib\System::get_platform_name() . ' ' . STD_VERSION . '[' . DB_UPDATE_VERSION . ']';
$ret['site']['admin'] = get_config('system','admin_email');
@@ -3944,7 +3944,7 @@ function zotinfo($arr) {
$ret['site']['sellpage'] = get_config('system','sellpage');
$ret['site']['location'] = get_config('system','site_location');
$ret['site']['realm'] = get_directory_realm();
- $ret['site']['project'] = Zotlabs\Project\System::get_platform_name() . Zotlabs\Project\System::get_server_role();
+ $ret['site']['project'] = Zotlabs\Lib\System::get_platform_name() . Zotlabs\Lib\System::get_server_role();
}