field_type, self::$field_types) ) return;
}
// Method to create field's HTML display for frontend views
function onDisplayFieldValue(&$field, $item, $values=null, $prop='display')
{
if ( !in_array($field->field_type, self::$field_types) ) return;
$view = JRequest::getString('view', FLEXI_ITEMVIEW);
//if ($view != FLEXI_ITEMVIEW) return;
if (JRequest::getCmd('print')) return;
global $mainframe, $addthis;
//$scheme = JURI::getInstance()->getScheme(); // we replaced http(s):// with //
$document = JFactory::getDocument();
$lang = $document->getLanguage();
$lang = $item->params->get('language', $lang);
$lang = $lang ? $lang : 'en-GB';
$lang = substr($lang, 0, 2);
$lang = in_array($lang, array('en','es','it','th')) ? $lang : 'en';
// parameters shortcuts
$display_comments = $field->parameters->get(FLEXI_J16GE ? 'display_comments' : 'display-comments', 1) && $item->parameters->get('comments',0);
$display_resizer = $field->parameters->get(FLEXI_J16GE ? 'display_resizer' : 'display-resizer', 1);
$display_print = $field->parameters->get(FLEXI_J16GE ? 'display_print' : 'display-print', 1);
$display_email = $field->parameters->get(FLEXI_J16GE ? 'display_email' : 'display-email', 1);
$display_voice = $field->parameters->get(FLEXI_J16GE ? 'display_voice' : 'display-voice', 1);
//$display_pdf = $field->parameters->get(FLEXI_J16GE ? 'display_pdf' : 'display-pdf', 1);
$display_pdf = FLEXI_J16GE ? 0 : $field->parameters->get('display-pdf', 1);
$load_css = $field->parameters->get(FLEXI_J16GE ? 'load_css' : 'load-css', 1);
$display_social = $field->parameters->get(FLEXI_J16GE ? 'display_social' : 'display-social', 1);
$addthis_user = $field->parameters->get(FLEXI_J16GE ? 'addthis_user' : 'addthis-user', '');
$addthis_pubid = $field->parameters->get('addthis_pubid', $addthis_user);
$spacer_size = $field->parameters->get(FLEXI_J16GE ? 'spacer_size' : 'spacer-size', 21);
$module_position = $field->parameters->get('module_position', '');
$default_size = $field->parameters->get(FLEXI_J16GE ? 'default_size' : 'default-size', 12);
$default_line = $field->parameters->get(FLEXI_J16GE ? 'default_line' : 'default-line', 16);
$target = $field->parameters->get('target', 'flexicontent');
$voicetarget = $field->parameters->get('voicetarget', 'flexicontent');
$spacer = ' style="width:'.$spacer_size.'px;"';
// define a global variable to be sure the script is loaded only once
$addthis = isset($addthis) ? $addthis : 0;
if ($load_css) {
$document->addStyleSheet(JURI::root(true).'/plugins/flexicontent_fields/toolbar/'.(FLEXI_J16GE ? 'toolbar/' : '').'/toolbar.css');
}
if ($display_social || $display_comments || $display_email || $display_print) {
$item_url = FlexicontentHelperRoute::getItemRoute($item->slug, $item->categoryslug);
$server = JURI::getInstance()->toString(array('scheme', 'host', 'port'));
$item_link = $server . JRoute::_($item_url);
// NOTE: this uses current SSL setting (e.g menu item), and not URL scheme: http/https
//$item_link = JRoute::_($item_url, true, -1);
}
$display = '
'; // begin of the toolbar container
// comments button
if ($display_comments)
{
$comment_link = $item_link . '#addcomments';
$display .= '
';
}
// text resizer
if ($display_resizer)
{
$document->addScriptDeclaration('var textsize = '.$default_size.';
var lineheight = '.$default_line.';
function fsize(size,line,unit,id){
var vfontsize = document.getElementById(id);
if(vfontsize){
vfontsize.style.fontSize = size + unit;
vfontsize.style.lineHeight = line + unit;
}
}
function changetextsize(up){
if(up){
textsize = parseFloat(textsize)+2;
lineheight = parseFloat(lineheight)+2;
}else{
textsize = parseFloat(textsize)-2;
lineheight = parseFloat(lineheight)-2;
}
}');
$display .= '
';
}
// email button
if ($display_email)
{
require_once(JPATH_SITE.DS.'components'.DS.'com_mailto'.DS.'helpers'.DS.'mailto.php');
$url = 'index.php?option=com_mailto&tmpl=component&link='.MailToHelper::addLink( $item_link );
$estatus = 'width=400,height=400,menubar=yes,resizable=yes';
$display .= '
';
}
// print button
if ($display_print)
{
$pop = JRequest::getInt('pop');
$pstatus = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no';
$print_link = $pop ? '#' : $item_link . '&pop=1&print=1&tmpl=component';
$js_link = $pop ? 'onclick="window.print();return false;"' : 'onclick="window.open(this.href,\'win2\',\''.$pstatus.'\'); return false;"';
$display .= '
';
}
// pdf button
if ($display_voice)
{
$display .= "
";
if ($lang=='th') {
// Special case language case, maybe la=laos, and Bhutan languages in the future (NECTEC support these languages)
$document->addScript(JURI::root(true).'/plugins/flexicontent_fields/toolbar'.(FLEXI_J16GE ? '/toolbar' : '').'/th.js');
$display .="
" . JTEXT::_('FLEXI_FIELD_TOOLBAR_VOICE') . "
";
} else {
$document->addScript('//vozme.com/get_text.js');
$display .="
" . JTEXT::_('FLEXI_FIELD_TOOLBAR_VOICE') . "
";
}
$display .="
";
}
// pdf button
if ($display_pdf)
{
$pdflink = 'index.php?view=items&cid='.$item->categoryslug.'&id='.$item->slug.'&format=pdf';
$display .= '
';
}
// AddThis social SHARE buttons, also optionally add OPEN GRAPH TAGs
if ($display_social)
{
// ***************
// OPEN GRAPH TAGs
// ***************
// OPEN GRAPH: site name
if ($field->parameters->get('add_og_site_name'))
{
$document->addCustomTag("
getCfg('sitename')."\" />");
}
// OPEN GRAPH: title
if ($field->parameters->get('add_og_title')) {
$title = flexicontent_html::striptagsandcut($item->title);
$document->addCustomTag("
");
}
// OPEN GRAPH: description
if ($field->parameters->get('add_og_descr'))
{
if ( $item->metadesc ) {
$document->addCustomTag('
');
} else {
$text = flexicontent_html::striptagsandcut($item->text);
$document->addCustomTag("
");
}
}
// OPEN GRAPH: type
$og_type = (int) $field->parameters->get('add_og_type');
if ($og_type) {
if ($og_type > 2) $og_type = 1;
$og_type_names = array(1=>'article', 2=>'website');
$document->addCustomTag("
");
}
// OPEN GRAPH: image (extracted from item's description text)
if ($field->parameters->get('add_og_image'))
{
$og_image_field = $field->parameters->get('og_image_field');
$og_image_fallback = $field->parameters->get('og_image_fallback');
$og_image_thumbsize = $field->parameters->get('og_image_thumbsize');
if ($og_image_field)
{
$imageurl = FlexicontentFields::getFieldDisplay($item, $og_image_field, null, 'display_'.$og_image_thumbsize.'_src', 'module');
if ( $imageurl ) {
$img_field = $item->fields[$og_image_field];
if ( (!$imageurl && $og_image_fallback==1) || ($imageurl && $og_image_fallback==2 && $img_field->using_default_value) ) {
$imageurl = $this->_extractimageurl($item);
}
}
}
else
{
$imageurl = $this->_extractimageurl($item);
}
if ($imageurl) $document->addCustomTag("
");
}
// ****************************
// AddThis social SHARE buttons
// ****************************
$addthis_outside_toolbar = $field->parameters->get('addthis_outside_toolbar', 0);
$addthis_custom_code = $field->parameters->get('addthis_custom_code', false);
$addthis_custom_predefined = $field->parameters->get('addthis_custom_predefined', false);
$addthis_code = '';
if ($addthis_custom_code) {
$addthis_code .= str_replace('_item_url_', $item_link, $addthis_custom_code);
$addthis_code .= str_replace('_item_title_', htmlspecialchars( $item->title, ENT_COMPAT, 'UTF-8' ), $addthis_code);
}
else {
switch ($addthis_custom_predefined) {
case 1:
$addthis_code .= '
';
break;
case 2:
$addthis_code .= '
';
break;
default:
case 3:
$addthis_code .= '
';
break;
case 4:
$addthis_code .= '
';
break;
case 5:
$addthis_code .= '
';
break;
case 6:
$addthis_code .= '
';
break;
case 7:
$addthis_code .= '
';
break;
}
}
if ($addthis_outside_toolbar)
$display .= '
'.$addthis_code.'
';
else
$display .= '
' .$addthis_code. '
';
if (!$addthis) {
$document->addCustomTag('
');
$addthis = 1;
}
}
$display .= '
'; // end of the toolbar container
$field->{$prop} = $display;
}
// **************************************************************
// METHODS HANDLING before & after saving / deleting field events
// **************************************************************
// Method to handle field's values before they are saved into the DB
function onBeforeSaveField($field, &$post, $file)
{
if ( !in_array($field->field_type, self::$field_types) ) return;
}
// Method to take any actions/cleanups needed after field's values are saved into the DB
function onAfterSaveField( &$field, &$post, &$file, &$item ) {
}
// Method called just before the item is deleted to remove custom item data related to the field
function onBeforeDeleteField(&$field, &$item) {
}
// **********************
// VARIOUS HELPER METHODS
// **********************
function _getCommentsCount($id)
{
$db = JFactory::getDBO();
static $jcomment_installed = null;
if ($jcomment_installed===null) {
$app = JFactory::getApplication();
$dbprefix = $app->getCfg('dbprefix');
$db->setQuery('SHOW TABLES LIKE "'.$dbprefix.'jcomments"');
$jcomment_installed = (boolean) count($db->loadObjectList());
}
if (!$jcomment_installed) return 0;
$query = 'SELECT COUNT(com.object_id)'
. ' FROM #__jcomments AS com'
. ' WHERE com.object_id = ' . (int)$id
. ' AND com.object_group = ' . $db->Quote('com_flexicontent')
. ' AND com.published = 1'
;
$db->setQuery($query);
return $db->loadResult() ? (int)$db->loadResult() : 0;
}
function _extractimageurl(& $item)
{
$matches = NULL;
preg_match_all('//i', $item->text, $matches);
$imageurl = @$matches[1][0];
if($imageurl) {
if($imageurl{0} == '/') {
$imageurls = explode('/', $imageurl);
$paths = array();
$found = false;
foreach($imageurls as $folder) {
if(!$found) {
if($folder!='images') continue;
else {
$found = true;
}
}
$paths[] = $folder;
}
$imageurl = '/'.implode('/', $paths);
$imageurl = JURI::root(true).$imageurl;
}elseif(substr($imageurl, 0, 7)=='images/') {
$imageurl = JURI::root(true).'/'.$imageurl;
}
}
return $imageurl;
}
}