e107inc/e107

View on GitHub
e107_core/shortcodes/single/user_extended.php

Summary

Maintainability
A
0 mins
Test Coverage
B
84%
<?php
    /*
* Copyright e107 Inc e107.org, Licensed under GNU GPL (http://www.gnu.org/licenses/gpl.txt)

* Extended user field shortcode
*/

    /**
     * @param $parm
     * @usage {USER_EXTENDED=<field_name>.[text|value|icon|text_value].<user_id>}
     * @example {USER_EXTENDED=gender.value.5}  will show the value of the extended field user_gender for user #5
     * @return bool|string
     */
    function user_extended_shortcode($parm)
    {

    //    $currentUser = e107::user();
        $tp = e107::getParser();
        $ue = e107::getUserExt();

        global $loop_uid, $e107, $sc_style;

        if(empty($parm))
        {
            trigger_error('{USER_EXTENDED} was sent an empty $parm',E_USER_NOTICE);
            return null;
        }

        $tmp = explode('.', $parm);

        $fieldname = trim($tmp[0]);
        $type = trim($tmp[1]);
        $user = varset($tmp[2], 0);

        if(isset($loop_uid) && $loop_uid === 0)
        {
            return '';
        }

        $key = $fieldname. '.' .$type;

        $sc_style['USER_EXTENDED']['pre'] = (isset($sc_style['USER_EXTENDED'][$key]['pre']) ? $sc_style['USER_EXTENDED'][$key]['pre'] : '');
        $sc_style['USER_EXTENDED']['post'] = (isset($sc_style['USER_EXTENDED'][$key]['post']) ? $sc_style['USER_EXTENDED'][$key]['post'] : '');

        $uid = (int) $user;

        if($uid === 0)
        {
            if(isset($loop_uid) && $loop_uid > 0)
            {
                $uid = $loop_uid;
            }
            else
            {
                $uid = USERID;
            }
        }

        $udata = e107::user($uid);

        $udata['user_class'] .= ($udata['user_class'] == '' ? '' : ',');
        $udata['user_class'] .= e_UC_PUBLIC. ',' .e_UC_MEMBER;

        if(!empty($udata['user_admin']))
        {
            $udata['user_class'] .= ','.e_UC_ADMIN;
        }


        // Need to pick up the 'miscellaneous' category - anything which isn't in a named category. Have to control visibility on a field by field basis
        // And I don't think this should apply to icons
        /**
         *    @todo - must be a better way of picking up the 'Miscellaneous' category
         */

    //    e107::coreLan('user');

        if(($type !== 'icon') && ($ue->getCategoryAttribute($fieldname, 'read') === false))
        {
            $fkeyApplic = $ue->getFieldAttribute('user_' . $fieldname, 'applicable');
            $fkeyRead   = $ue->getFieldAttribute('user_' . $fieldname, 'read');
            $fkeyStruct = $ue->getFieldAttribute('user_' . $fieldname, 'parms');

            $ret_cause = 0;

            if(!check_class($fkeyApplic, $udata['user_class']))
            {
                $ret_cause = 1;
            }

            if(!check_class($fkeyRead, $udata['user_class']))
            {
                $ret_cause = 2;
            }

            if(($fkeyRead == e_UC_READONLY && (!ADMIN && $udata['user_id'] != USERID)))
            {
                $ret_cause = 3;
            }

            if((!ADMIN && substr($fkeyStruct, -1) == 1    && strpos($udata['user_hidden_fields'], '^user_' . $fieldname . '^') !== false && $uid != USERID))
            {
                $ret_cause = 4;
            }
            
            if(!empty($ret_cause))
            {
                return false;
            }
        }



        $ret = false;

        switch($type)
        {
            case 'text_value':
                $_value = user_extended_shortcode($fieldname. '.value.' .$user);

                if($_value)
                {
                    $__pre = (isset($sc_style['USER_EXTENDED'][$key]['pre']) ? $sc_style['USER_EXTENDED'][$key]['pre'] : '');
                    $__post = (isset($sc_style['USER_EXTENDED'][$key]['post']) ? $sc_style['USER_EXTENDED'][$key]['post'] : '');
                    $_text = $ue->getFieldLabel($fieldname); // user_extended_shortcode($fieldname.".text");
                    $_mid = (isset($sc_style['USER_EXTENDED'][$key]['mid']) ? $sc_style['USER_EXTENDED'][$key]['mid'] : ': ');
                    $ret = $__pre.$_text.$_mid.$_value.$__post;
                }

                break;

            case 'text':
                if(isset($fieldname))
                {
                    $ret = $ue->getFieldLabel($fieldname);
                }
                break;


            case 'icon':
                if(defined(strtoupper($fieldname).'_ICON'))
                {
                    $ret = constant(strtoupper($fieldname).'_ICON');
                }
                elseif(is_readable(e_IMAGE."user_icons/user_{$fieldname}.png"))
                {
                    $ret = "<img src='".e_IMAGE_ABS."user_icons/user_{$fieldname}.png' style='width:16px; height:16px' alt='' />";
                }
                elseif(is_readable(e_IMAGE."user_icons/{$fieldname}.png"))
                {
                    $ret = "<img src='".e_IMAGE_ABS."user_icons/{$fieldname}.png' style='width:16px; height:16px' alt='' />";
                }
            break;


            case 'value':
                $fullField = 'user_'.$fieldname;
                $uVal = isset($fieldname, $udata[$fullField]) ?  str_replace(chr(1), '', $udata[$fullField]) : '';

                if(!empty($uVal))
                {
                    $ret = $ue->renderValue($uVal, $fullField);

                    if(!empty($ret))
                    {
                        $ret = $tp->toHTML($ret, TRUE, 'no_make_clickable', "class:{$udata['user_class']}");
                    }
                }
                elseif(!isset($udata[$fullField]))
                {
                //    trigger_error($fullField. ' is not defined: '.print_r($udata, true), E_USER_NOTICE);
                }

            break;

                // code to be executed if n is different from all labels;
        }




        return $ret;

    }