/**
  * Method to get the fields in their positions
  * 
  * @access private
  * @return object
  * @since 1.5
  */
 static function &renderPositions(&$items, $view = FLEXI_ITEMVIEW, $params = null, $use_tmpl = true, &$_rendered = array())
 {
     if (!$items) {
         return;
     }
     if (!$params) {
         return $items;
     }
     if ($view == 'category') {
         $layout = 'clayout';
     }
     if ($view == FLEXI_ITEMVIEW) {
         $layout = 'ilayout';
     }
     // field's source code, can use this JRequest variable, to detect who rendered the fields (e.g. they can detect rendering from 'module')
     JRequest::setVar("flexi_callview", $view);
     if ($use_tmpl && ($view == 'category' || $view == FLEXI_ITEMVIEW)) {
         $fbypos = flexicontent_tmpl::getFieldsByPositions($params->get($layout, 'default'), $view);
     } else {
         // $view == 'module', or other
         // Create a fake template position, for fields defined via parameters
         $fbypos[0] = new stdClass();
         $fbypos[0]->fields = explode(',', $params->get('fields'));
         $fbypos[0]->methods = explode(',', $params->get('methods'));
         $fbypos[0]->position = $view;
     }
     $always_create_fields_display = $params->get('always_create_fields_display', 0);
     // Render some fields by default, this is done for compatibility reasons, but avoid rendering these fields again (2nd time),
     // since some of them may also be in template positions. NOTE: this is not needed since renderField() should detect this case
     if ($always_create_fields_display != 3) {
         // value 3 means never create for any view (blog template incompatible)
         $item = reset($items);
         // get the first item ... so that we can get the name of CORE fields out of it
         // 'description' item field is implicitly used by category layout of some templates (blog), render it
         $custom_values = null;
         if ($view == 'category') {
             if (isset($item->fields['text']) && !isset($_rendered['ALL']['text'])) {
                 $_field_name_ = 'text';
                 FlexicontentFields::renderField($items, $_field_name_, $custom_values, $method = 'display', $view);
             }
             $_rendered['ALL']['text'] = 1;
         } else {
             if ($view == FLEXI_ITEMVIEW) {
                 foreach ($item->fields as $field) {
                     if ($field->iscore && !isset($_rendered['ALL'][$field->name])) {
                         $_field_name_ = $field->name;
                         FlexicontentFields::renderField($items, $_field_name_, $custom_values, $method = 'display', $view);
                     }
                 }
                 $_rendered['ALL']['core'] = 1;
             }
         }
     }
     // *** RENDER fields on DEMAND, (if present in template positions)
     foreach ($fbypos as $pos) {
         // RENDER fields if they are present in a template position (or in a dummy template position ... e.g. when called by module)
         foreach ($pos->fields as $c => $f) {
             // CORE/CUSTOM: Render field (if already rendered above, the function will return result immediately)
             $method = isset($pos->methods[$c]) && $pos->methods[$c] ? $pos->methods[$c] : 'display';
             // Render ANY CORE field with single call for all items, CORE fields are assigned to ALL types,
             // try to get field out of first item, if it does not exist, then field is a CUSTOM field
             $item = reset($items);
             $field = @$item->fields[$f];
             if ($field && $field->iscore) {
                 // Check if already rendered
                 if (!isset($_rendered['ALL']['core']) && !isset($_rendered['ALL'][$f])) {
                     // No custom values for CORE fields, values are decided inside the CORE field
                     $values = null;
                     FlexicontentFields::renderField($items, $f, $values, $method, $view);
                 }
                 $_rendered['ALL'][$f] = 1;
             } else {
                 foreach ($items as $item) {
                     // Check that field with given name: $f exists for current item (AKA, that it is assigned to the item's type)
                     if (!isset($item->fields[$f])) {
                         continue;
                     }
                     // Check if already rendered
                     if (isset($_rendered['ALL'][$f]) || isset($_rendered[$item->id][$f])) {
                         continue;
                     }
                     // Get field and field values, currently, custom field values can be passed only for CUSTOM fields, OR versioned CORE/CUSTOM fields too ...
                     $field = $item->fields[$f];
                     $values = isset($item->fieldvalues[$field->id]) ? $item->fieldvalues[$field->id] : array();
                     // Render the field's display
                     $field = FlexicontentFields::renderField($item, $field, $values, $method, $view);
                     $_rendered[$item->id][$f] = 1;
                 }
             }
             foreach ($items as $item) {
                 // Check that field with given name: $f exists for current item (AKA, that it is assigned to the item's type)
                 if (!isset($item->fields[$f])) {
                     continue;
                 }
                 $field = $item->fields[$f];
                 // Skip field if empty display was produced
                 if (!isset($field->display) || !strlen($field->display)) {
                     continue;
                 }
                 // Set field display HTML/data in the template position,
                 if (!isset($item->positions[$pos->position])) {
                     $item->positions[$pos->position] = new stdClass();
                 }
                 $item->positions[$pos->position]->{$f} = new stdClass();
                 $item->positions[$pos->position]->{$f}->id = $field->id;
                 $item->positions[$pos->position]->{$f}->id = $field->id;
                 $item->positions[$pos->position]->{$f}->name = $field->name;
                 $item->positions[$pos->position]->{$f}->label = $field->parameters->get('display_label') ? $field->label : '';
                 $item->positions[$pos->position]->{$f}->display = $field->display;
             }
         }
     }
     return $items;
 }
    function renderFields($context, &$row, &$params, $page = 0)
    {
        JTable::addIncludePath(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_flexicontent' . DS . 'tables');
        require_once JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_flexicontent' . DS . 'defineconstants.php';
        require_once JPATH_SITE . DS . 'components' . DS . 'com_flexicontent' . DS . 'classes' . DS . 'flexicontent.fields.php';
        require_once JPATH_SITE . DS . 'components' . DS . 'com_flexicontent' . DS . 'classes' . DS . 'flexicontent.helper.php';
        require_once JPATH_SITE . DS . 'components' . DS . 'com_flexicontent' . DS . 'helpers' . DS . 'permission.php';
        require_once JPATH_SITE . DS . 'components' . DS . 'com_flexicontent' . DS . 'models' . DS . FLEXI_ITEMVIEW . '.php';
        $app = JFactory::getApplication();
        $user = JFactory::getUser();
        $aid = JAccess::getAuthorisedViewLevels($user->id);
        $itemmodel = new FlexicontentModelItem();
        $item = $itemmodel->getItem($row->id, $check_view_access = false);
        $view = 'com_content.article' ? FLEXI_ITEMVIEW : 'category';
        $items = FlexicontentFields::getFields($item, $view, $_item_params = null, $aid = null, $use_tmpl = false);
        // $_item_params == null means only retrieve fields
        // Only Render custom fields
        $displayed_fields = array();
        foreach ($item->fields as $field) {
            if ($field->iscore) {
                continue;
            }
            $displayed_fields[$field->name] = $field;
            $values = isset($item->fieldvalues[$field->id]) ? $item->fieldvalues[$field->id] : array();
            FlexicontentFields::renderField($item, $field, $values, $method = 'display', $view);
        }
        if (!count($displayed_fields)) {
            return null;
        }
        // Render the list of groups
        $field_html = array();
        foreach ($displayed_fields as $field_name => $field) {
            $_values = null;
            if (!isset($field->display)) {
                continue;
            }
            $field_html[] = '
				<div class="fc-field-box">
					' . ($field->parameters->get('display_label') ? '
					<span class="flexi label">' . $field->label . '</span>' : '') . '
					<div class="flexi value">' . $field->display . '</div>
				</div>
				';
        }
        $_display = '<div class="fc-custom-fields-box">' . implode('', $field_html) . '</div>';
        return $_display;
    }
Example #3
0
    ?>
			</td>

    <?php 
    foreach ($this->extra_fields as $_field) {
        ?>

			<td>
		    <?php 
        // Clear display HTML just in case
        $field = clone $_field;
        // quickly make a shallow copy of the fields object to avoid assignments of various member variables being persistent
        // Field value for current item
        $field_value = isset($row->fieldvalues[$field->id]) ? $row->fieldvalues[$field->id] : false;
        // Create field's display HTML, via calling FlexicontentFields::renderField() for the given method name
        FlexicontentFields::renderField($row, $field, $field_value, $method = $field->methodname);
        // Output the field's display HTML
        echo @$field->{$field->methodname};
        ?>
			</td>
		<?php 
    }
    ?>

		<?php 
    if ($this->CanOrder) {
        ?>
			<td class="order">
				<?php 
        $row_stategrp_prev = @$stategrps[@$this->rows[$i - 1]->state];
        $row_stategrp = @$stategrps[$this->rows[$i]->state];
 private function _createDisplayHTML(&$field, &$item, &$grouped_fields, $custom_html, $max_count, $pretext, $posttext)
 {
     // ********************************
     // Parse and identify custom fields
     // ********************************
     //return array('"<b>Custom HTML</b>" display for fieldgroup field, is not implemented yet, please use default HTML');
     if (!$custom_html) {
         return "Empty custom HTML variable for group field: " . $field->label;
     }
     $result = preg_match_all("/\\{\\{([a-zA-Z_0-9]+)(##)?([a-zA-Z_0-9]+)?\\}\\}/", $custom_html, $field_matches);
     $gf_reps = $result ? $field_matches[0] : array();
     $gf_names = $result ? $field_matches[1] : array();
     $gf_methods = $result ? $field_matches[3] : array();
     //foreach ($gf_names as $i => $gf_name)
     //	$parsed_fields[] = $gf_names[$i] . ($gf_methods[$i] ? "->". $gf_methods[$i] : "");
     //echo "$custom_html :: Fields for Related Items List: ". implode(", ", $parsed_fields ? $parsed_fields : array() ) ."<br/>\n";
     // ***********************************************************************
     // Parse and identify language strings and then make language replacements
     // ***********************************************************************
     $result = preg_match_all("/\\%\\%([^%]+)\\%\\%/", $custom_html, $translate_matches);
     $translate_strings = $result ? $translate_matches[1] : array('FLEXI_READ_MORE_ABOUT');
     foreach ($translate_strings as $translate_string) {
         $custom_html = str_replace('%%' . $translate_string . '%%', JText::_($translate_string), $custom_html);
     }
     // **************************************************************
     // Render HTML of grouped fields mentioned inside the custom HTML
     // **************************************************************
     $_rendered_fields = array();
     $found_names = array_flip($gf_names);
     //print_r($gf_names);
     if (count($gf_names)) {
         $view = JRequest::getVar('flexi_callview', JRequest::getVar('view', FLEXI_ITEMVIEW));
         $gf_props = array();
         foreach ($grouped_fields as $grouped_field) {
             if (!isset($found_names[$grouped_field->name])) {
                 continue;
             }
             $pos = $found_names[$grouped_field->name];
             $_rendered_fields[$pos] = $grouped_field;
             // Check if display method is 'label' aka nothing to render
             if ($gf_methods[$pos] == 'label') {
                 continue;
             }
             // Check if display method of the field has been created already
             $method = $gf_methods[$pos] ? $gf_methods[$pos] : 'display';
             if (isset($grouped_field->{$method}) && is_array($grouped_field->{$method})) {
                 continue;
             }
             // Render the display method for the given field
             $_values = $grouped_field->value;
             $grouped_field->ingroup = 1;
             // render as array
             //echo 'Rendering: '. $grouped_field->name . ', method: ' . $method . '<br/>';
             //FLEXIUtilities::call_FC_Field_Func($grouped_field->field_type, 'onDisplayFieldValue', array(&$grouped_field, $item, $_values, $method));
             unset($grouped_field->{$method});
             // Unset display variable to make sure display HTML it is created, because we reuse the field
             FlexicontentFields::renderField($item, $grouped_field, $_values, $method, $view);
             // Includes content plugins triggering
             unset($grouped_field->ingroup);
         }
     }
     // *******************************************************************
     // Render the value list of the fieldgroup, using custom HTML for each
     // value-set of the fieldgroup, and performing the field replacements
     // *******************************************************************
     $custom_display = array();
     for ($n = 0; $n < $max_count; $n++) {
         $rendered_html = $custom_html;
         foreach ($_rendered_fields as $pos => $_rendered_field) {
             $pos = $found_names[$_rendered_field->name];
             $method = $gf_methods[$pos] ? $gf_methods[$pos] : 'display';
             //echo 'Replacing: '. $_rendered_field->name . ', method: ' . $method . ', index: ' .$n. '<br/>';
             $rendered_html = str_replace($gf_reps[$pos], @$_rendered_field->{$method}[$n], $rendered_html);
             //unset($_rendered_field->{$method});  // Unset display of fields in case they need to be rendered again
         }
         $custom_display[$n] = $pretext . $rendered_html . $posttext;
     }
     return $custom_display;
 }
 private function _createDisplayHTML(&$field, &$item, &$grouped_fields, $custom_html, $max_count, $pretext, $posttext)
 {
     // ********************************
     // Parse and identify custom fields
     // ********************************
     //return array('"<b>Custom HTML</b>" display for fieldgroup field, is not implemented yet, please use default HTML');
     if (!$custom_html) {
         return "Empty custom HTML variable for group field: " . $field->label;
     }
     $result = preg_match_all("/\\{\\{([a-zA-Z_0-9]+)(##)?([a-zA-Z_0-9]+)?\\}\\}/", $custom_html, $field_matches);
     $gf_reps = $result ? $field_matches[0] : array();
     $gf_names = $result ? $field_matches[1] : array();
     $gf_methods = $result ? $field_matches[3] : array();
     //foreach ($gf_names as $i => $gf_name)
     //	$parsed_fields[] = $gf_names[$i] . ($gf_methods[$i] ? "->". $gf_methods[$i] : "");
     //echo "$custom_html :: Fields for Related Items List: ". implode(", ", $parsed_fields ? $parsed_fields : array() ) ."<br/>\n";
     $_name_to_field = array();
     foreach ($grouped_fields as $i => $grouped_field) {
         $_name_to_field[$grouped_field->name] =& $grouped_fields[$i];
     }
     //print_r(array_keys($_name_to_field)); echo "<br/>";
     // ***********************************************************************
     // Parse and identify language strings and then make language replacements
     // ***********************************************************************
     $result = preg_match_all("/\\%\\%([^%]+)\\%\\%/", $custom_html, $translate_matches);
     $translate_strings = $result ? $translate_matches[1] : array('FLEXI_READ_MORE_ABOUT');
     foreach ($translate_strings as $translate_string) {
         $custom_html = str_replace('%%' . $translate_string . '%%', JText::_($translate_string), $custom_html);
     }
     // **************************************************************
     // Render HTML of grouped fields mentioned inside the custom HTML
     // **************************************************************
     $_rendered_fields = array();
     if (count($gf_names)) {
         $view = JRequest::getVar('flexi_callview', JRequest::getVar('view', FLEXI_ITEMVIEW));
         $gf_props = array();
         foreach ($gf_names as $pos => $grp_field_name) {
             // Check that field exists and is assigned the fieldgroup field
             $grouped_field = $_name_to_field[$grp_field_name];
             if (!isset($_name_to_field[$grp_field_name])) {
                 continue;
             }
             $_rendered_fields[$pos] = $grouped_field;
             // Check if display method is 'label' aka nothing to render
             if ($gf_methods[$pos] == 'label') {
                 continue;
             }
             // Optional use custom display method
             $method = $gf_methods[$pos] ? $gf_methods[$pos] : 'display';
             // SAME field with SAME method, may have been used more than ONCE, inside the custom HTML parameter
             // Check if field has been rendered already
             if (isset($grouped_field->{$method}) && is_array($grouped_field->{$method})) {
                 continue;
             }
             // Render the display method for the given field
             $_values = $grouped_field->value;
             $grouped_field->ingroup = 1;
             // render as array
             //echo 'Rendering: '. $grouped_field->name . ', method: ' . $method . '<br/>';
             //FLEXIUtilities::call_FC_Field_Func($grouped_field->field_type, 'onDisplayFieldValue', array(&$grouped_field, $item, $_values, $method));
             FlexicontentFields::renderField($item, $grouped_field, $_values, $method, $view);
             // Includes content plugins triggering
             //print_r($grouped_field->$method);
             $grouped_field->_method = $method;
             // This is used to decide if field does not have value and hide label (if configured to hide on empty values)
             unset($grouped_field->ingroup);
         }
     }
     // *******************************************************************
     // Render the value list of the fieldgroup, using custom HTML for each
     // value-set of the fieldgroup, and performing the field replacements
     // *******************************************************************
     // Get labels to hide on empty values
     $hide_lbl_ifnoval = $this->getHideLabelsOnEmpty($field);
     $custom_display = array();
     //echo "<br/>max_count: ".$max_count."<br/>";
     for ($n = 0; $n < $max_count; $n++) {
         $rendered_html = $custom_html;
         foreach ($_rendered_fields as $pos => $_rendered_field) {
             $method = $gf_methods[$pos] ? $gf_methods[$pos] : 'display';
             //echo 'Replacing: '. $_rendered_field->name . ', method: ' . $method . ', index: ' .$n. '<br/>';
             if ($method != 'label') {
                 $_html = isset($_rendered_field->{$method}[$n]) ? $_rendered_field->{$method}[$n] : '';
             } else {
                 $_method = isset($_rendered_field->_method) ? $_rendered_field->_method : 'display';
                 if ((!isset($_rendered_field->{$_method}[$n]) || !strlen($_rendered_field->{$_method}[$n])) && isset($hide_lbl_ifnoval[$_rendered_field->id])) {
                     $_html = '';
                     // Skip (hide) label for field without value (is such behaviour was configured)
                 } else {
                     $_html = $_rendered_field->label;
                 }
             }
             $rendered_html = str_replace($gf_reps[$pos], $_html, $rendered_html);
         }
         $custom_display[$n] = $pretext . $rendered_html . $posttext;
     }
     // IMPORTANT FIELD IS REUSED, !! unset display methods since it maybe rendered again for different item
     foreach ($_rendered_fields as $pos => $_rendered_field) {
         unset($_rendered_field->{$method});
     }
     return $custom_display;
 }