mambax7/gwiki

View on GitHub
include/fbcomment_plugin.php

Summary

Maintainability
C
7 hrs
Test Coverage
<?php
/**
 * include/fbcomment_plugin.php - supply gwiki meta data open graph style for fbcomment module
 *
 * This file is part of gwiki - geekwright wiki
 *
 * @param mixed $metas
 * @param mixed $plugin_env
 * @since      1.0
 * @author     Richard Griffith <richard@geekwright.com>
 * @package    gwiki
 * @copyright  Copyright © 2013 geekwright, LLC. All rights reserved.
 * @license    gwiki/docs/license.txt  GNU General Public License (GPL)
 */

/*
 * Open Graph Meta Tags we can set here:
 *
 *   $metas['fb:admins'] = $admins;
 *   $metas['fb:app_id'] = $appid;
 *   $metas['og:type']=$type;
 *   $metas['og:url']=$oururl;
 *   $metas['og:title']=$title;
 *   $metas['og:description']=$description;
 *   $metas['og:image']=$image;
 *   $metas['og:site_name'] = $sitename;
 *
 */

use XoopsModules\Gwiki\Helper;

/**
 * @param $metas
 * @param $plugin_env
 *
 * @return bool
 */
function fbcom_plugin(&$metas, $plugin_env)
{
    global $xoopsDB;

    $helper = Helper::getInstance();

    $dir = \basename(\dirname(__DIR__));
    // Access module configs from block:
    /** @var \XoopsModuleHandler $moduleHandler */
    $moduleHandler = xoops_getHandler('module');
    $module        = $moduleHandler->getByDirname($dir);
    /** @var \XoopsConfigHandler $configHandler */
    $configHandler = xoops_getHandler('config');
    $moduleConfig  = $configHandler->getConfigsByCat(0, $module->getVar('mid'));

    $wikihome = mb_strtolower($helper->getConfig('wiki_home_page'));

    // fake a full url with page if at top of module
    if (!isset($plugin_env['page']) && '/' === mb_substr($metas['og:url'], -1)) {
        $plugin_env['page'] = $wikihome;
        $metas['og:url']    .= 'index.php'; //$metas['og:url']    = $metas['og:url'] . 'index.php';
    }

    if (isset($plugin_env['page'])) {
        // cononicalize our url with our rules
        // - page needs to be case insensitve (AbCde and AbcDe yield the same page)
        $keyword = mb_strtolower($plugin_env['page']);
        // - strip any OOB data
        if (')' === mb_substr($keyword, -1)) {
            $lparen = mb_strpos($keyword, '(');
            if (false !== $lparen) {
                $keyword = mb_substr($keyword, 0, $lparen);
            }
        }

        // - eliminate index.php?page=wikihome
        $ourscript       = explode('?', urldecode($metas['og:url']));
        $ourscript_parts = pathinfo($ourscript[0]);
        if ('index.php' !== $ourscript_parts['basename']) {
            return false;
        }
        if ($keyword === $wikihome && 'index.php' === $ourscript_parts['basename']) {
            $newscript = $ourscript_parts['dirname'] . '/';
        } else {
            $newscript = $ourscript[0] . '?page=' . $keyword;
        }
        $metas['og:url'] = $newscript;

        $wikitable  = $xoopsDB->prefix('gwiki_pages');
        $imagetable = $xoopsDB->prefix('gwiki_page_images');
        $sql        = "SELECT title, meta_description, search_body, image_file FROM {$wikitable} p ";
        $sql        .= " left join {$imagetable} i on p.keyword=i.keyword and use_to_represent = 1 ";
        $sql        .= " where p.keyword = '{$keyword}' and active=1 ";

        // set title and description
        $result = $xoopsDB->query($sql);
        if ($result) {
            //          if(!$xoopsDB->getRowsNum($result)) return false;
            $myrow = $xoopsDB->fetchArray($result);
            if ($myrow) {
                if (!empty($myrow['title'])) {
                    $metas['og:title'] = $myrow['title'];
                }
                if (!empty($myrow['search_body'])) {
                    $description             = $myrow['search_body'];
                    $description             = mb_substr($description, 0, 40) . '...';
                    $metas['og:description'] = $description;
                }
                if (!empty($myrow['meta_description'])) {
                    $description             = $myrow['meta_description'];
                    $metas['og:description'] = $description;
                }
                if (!empty($myrow['image_file'])) {
                    $image_file        = $myrow['image_file'];
                    $metas['og:image'] = XOOPS_URL . '/uploads/' . $dir . '/' . $image_file;
                }

                return true;
            }
        }
    }

    return false;
}