. // Check if request is for JSONP if (isset ($_GET['jsonp'])) { // If so, setup HashOver for JavaScript require ('javascript-setup.php'); } else { // If not, setup HashOver for JSON require ('json-setup.php'); } try { // Instantiate HashOver class $hashover = new \HashOver ('json'); // Throw exception if requested by remote server $hashover->setup->refererCheck (); // Set page URL from POST/GET data $hashover->setup->setPageURL ('request'); // Set page title from POST/GET data $hashover->setup->setPageTitle ('request'); // Set thread name from POST/GET data $hashover->setup->setThreadName ('request'); // Set website from POST/GET data $hashover->setup->setWebsite ('request'); // Set instance from POST/GET data $hashover->setup->setInstance ('request'); // Load user settings $hashover->setup->loadFrontendSettings (); // Initiate, parse, and finalize comment processing $hashover->initiate (); $hashover->parsePrimary (); $hashover->parsePopular (); $hashover->finalize (); // Set/update default page metadata $hashover->defaultMetadata (); // Page, setup, and comment data array $data = array (); // Check if backend sorting and collapsing is enabled if ($hashover->setup->collapsesComments === true and $hashover->setup->usesAjax === true) { // If so, sort the comments first $hashover->sortPrimary (); // Then collapse the comments $hashover->collapseComments (); } // Add locales to data $data['locale'] = array ( 'cancel' => $hashover->locale->text['cancel'], 'click-to-close' => $hashover->locale->text['click-to-close'], 'commenter-tip' => $hashover->locale->text['commenter-tip'], 'comment-needed' => $hashover->locale->text['comment-needed'], 'delete-comment' => $hashover->locale->text['delete-comment'], 'dislike' => $hashover->locale->text['dislike'], 'dislike-comment' => $hashover->locale->text['dislike-comment'], 'disliked' => $hashover->locale->text['disliked'], 'disliked-comment' => $hashover->locale->text['disliked-comment'], 'dislikes' => $hashover->locale->text['dislikes'], 'email' => $hashover->locale->text['email'], 'external-image-tip' => $hashover->locale->text['external-image-tip'], 'field-needed' => $hashover->locale->text['field-needed'], 'invalid-email' => $hashover->locale->text['invalid-email'], 'like' => $hashover->locale->text['like'], 'like-comment' => $hashover->locale->text['like-comment'], 'liked' => $hashover->locale->text['liked'], 'liked-comment' => $hashover->locale->text['liked-comment'], 'likes' => $hashover->locale->text['likes'], 'loading' => $hashover->locale->text['loading'], 'name' => $hashover->locale->text['name'], 'no-email-warning' => $hashover->locale->text['no-email-warning'], 'password' => $hashover->locale->text['password'], 'replies' => $hashover->locale->text['replies'], 'reply' => $hashover->locale->text['reply'], 'reply-needed' => $hashover->locale->text['reply-needed'], 'subscribed-tip' => $hashover->locale->text['subscribed-tip'], 'today' => $hashover->locale->text['date-today'], 'unsubscribed-tip' => $hashover->locale->text['unsubscribed-tip'], 'website' => $hashover->locale->text['website'] ); // Add setup information to data $data['setup'] = array ( 'allows-dislikes' => $hashover->setup->allowsDislikes, 'allows-images' => $hashover->setup->allowsImages, 'allows-likes' => $hashover->setup->allowsLikes, 'allows-login' => $hashover->setup->allowsLogin, 'appends-css' => $hashover->setup->appendsCss, 'appends-rss' => $hashover->setup->appendsRss, 'collapse-limit' => $hashover->setup->collapseLimit, 'collapses-comments' => $hashover->setup->collapsesComments, 'collapses-interface' => $hashover->setup->collapsesInterface, 'default-name' => $hashover->setup->defaultName, 'default-sorting' => $hashover->setup->defaultSorting, 'device-type' => ($hashover->setup->isMobile === true) ? 'mobile' : 'desktop', 'form-fields' => $hashover->setup->formFields, 'http-backend' => $hashover->setup->httpBackend, 'http-root' => $hashover->setup->httpRoot, 'image-extensions' => $hashover->setup->imageTypes, 'image-format' => $hashover->setup->imageFormat, 'image-placeholder' => $hashover->setup->getImagePath ('place-holder'), 'rss-api' => $hashover->setup->getHttpPath ('api/rss.php'), 'server-eol' => PHP_EOL, 'stream-depth' => $hashover->setup->streamDepth, 'stream-mode' => ($hashover->setup->replyMode === 'stream'), 'theme-css' => $hashover->setup->getThemePath ('comments.css'), 'user-is-admin' => $hashover->login->userIsAdmin, 'user-is-logged-in' => $hashover->login->userIsLoggedIn, 'uses-ajax' => $hashover->setup->usesAjax, 'uses-auto-login' => $hashover->setup->usesAutoLogin, 'uses-cancel-buttons' => $hashover->setup->usesCancelButtons, 'uses-markdown' => $hashover->setup->usesMarkdown ); // And add UI HTML to data $data['ui'] = array ( 'comment-wrapper' => $hashover->ui->commentWrapper (), 'date-link' => $hashover->ui->dateLink (), 'dislike-link' => $hashover->ui->likeLink ('dislike'), 'edit-form' => $hashover->ui->editForm (), 'edit-link' => $hashover->ui->formLink ('{href}', 'edit'), 'ip-span' => $hashover->ui->ipWrapper (), 'like-link' => $hashover->ui->likeLink ('like'), 'name-link' => $hashover->ui->nameElement ('a'), 'name-span' => $hashover->ui->nameElement ('span'), 'name-wrapper' => $hashover->ui->nameWrapper (), 'parent-link' => $hashover->ui->parentThreadLink (), 'reply-form' => $hashover->ui->replyForm (), 'reply-link' => $hashover->ui->formLink ('{href}', 'reply'), 'theme' => $hashover->templater->parseTheme ('comments.html'), 'user-avatar' => $hashover->ui->userAvatar () ); // HashOver instance information $data['instance'] = array ( 'comments' => $hashover->comments, 'file-path' => $hashover->setup->filePath, 'initial-html' => $hashover->ui->initialHTML (false), 'page-title' => $hashover->setup->pageTitle, 'page-url' => $hashover->setup->pageURL, 'primary-count' => $hashover->thread->primaryCount - 1, 'thread-name' => $hashover->setup->threadName, 'total-count' => $hashover->thread->totalCount - 1 ); // Count according to `$showsReplyCount` setting $show_comments = $hashover->getCommentCount ('show-comments', 'show-comment'); // Add locales for show interface button if ($hashover->setup->collapsesInterface !== false) { $data['instance']['post-a-comment'] = $hashover->ui->postComment; $data['instance']['show-comments'] = $show_comments; } // Text for "Show X Other Comment(s)" link if ($hashover->setup->collapsesComments !== false) { // Check if at least 1 comment is to be shown if ($hashover->setup->collapseLimit >= 1) { // Shorter variables $total_count = $hashover->thread->totalCount; $collapse_limit = $hashover->setup->collapseLimit; // Get number of comments after collapse limit $other_count = ($total_count - 1) - $collapse_limit; // Subtract deleted comment counts if ($hashover->setup->countsDeletions === false) { $other_count -= $hashover->thread->collapsedDeletedCount; } // Check if there is more than one other comment if ($other_count !== 1) { // If so, use the "Show X Other Comments" locale $more_link_text = $hashover->locale->text['show-other-comments']; } else { // If not, use the "Show X Other Comment" locale $more_link_text = $hashover->locale->text['show-other-comment']; } // And inject the count into the locale string $more_link_text = sprintf ($more_link_text, $other_count); } else { // If not, show count according to `$showsReplyCount` setting $more_link_text = $show_comments; } // Add "Show X Other Comment(s)" link to instance $data['instance']['more-link-text'] = $more_link_text; } // Generate statistics $hashover->statistics->executionEnd (); // HashOver statistics $data['statistics'] = array ( 'execution-time' => $hashover->statistics->executionTime, 'script-memory' => $hashover->statistics->scriptMemory, 'system-memory' => $hashover->statistics->systemMemory ); // Return JSON or JSONP function call echo Misc::jsonData ($data); } catch (\Exception $error) { echo Misc::displayException ($error, 'json'); }