/** * Render Field Value * @param string $field field name * @param mixed $value field value * @param array $attributes field attributes including render parameters, element options - see e_admin_ui::$fields for required format * @return string */ function renderValue($field, $value, $attributes, $id = 0) { if (!empty($attributes['multilan']) && is_array($value)) { $value = varset($value[e_LANGUAGE], ''); } $parms = array(); if (isset($attributes['readParms'])) { if (!is_array($attributes['readParms'])) { parse_str($attributes['readParms'], $attributes['readParms']); } $parms = $attributes['readParms']; } if (vartrue($attributes['inline'])) { $parms['editable'] = true; } // attribute alias if (vartrue($attributes['sort'])) { $parms['sort'] = true; } // attribute alias if (!empty($parms['type'])) { $attributes['type'] = $parms['type']; } $this->renderValueTrigger($field, $value, $parms, $id); $tp = e107::getParser(); switch ($field) { case 'options': if (varset($attributes['type']) == "method") { $attributes['mode'] = "read"; if (isset($attributes['method']) && $attributes['method'] && method_exists($this, $attributes['method'])) { $method = $attributes['method']; return $this->{$method}($parms, $value, $id, $attributes); } elseif (method_exists($this, 'options')) { //return $this->options($field, $value, $attributes, $id); // consistent method arguments, fixed in admin cron administration return $this->options($parms, $value, $id, $attributes); // OLD breaks admin->cron 'options' column } } if (!$value) { parse_str(str_replace('&', '&', e_QUERY), $query); //FIXME - FIX THIS // keep other vars in tact $query['action'] = 'edit'; $query['id'] = $id; //$edit_query = array('mode' => varset($query['mode']), 'action' => varset($query['action']), 'id' => $id); $query = http_build_query($query); $value = "<div class='btn-group'>"; if (vartrue($parms['sort'])) { $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $from = intval(vartrue($_GET['from'], 0)); $value .= "<a class='e-sort sort-trigger btn btn-default' style='cursor:move' data-target='" . e_SELF . "?mode={$mode}&action=sort&ajax_used=1&from={$from}' title='" . LAN_RE_ORDER . "'>" . ADMIN_SORT_ICON . "</a> "; } $cls = false; if (varset($parms['editClass'])) { $cls = deftrue($parms['editClass']) ? constant($parms['editClass']) : $parms['editClass']; } if ((false === $cls || check_class($cls)) && varset($parms['edit'], 1) == 1) { /* $value .= "<a href='".e_SELF."?{$query}' class='e-tip btn btn-large' title='".LAN_EDIT."' data-placement='left'> <img class='icon action edit list' src='".ADMIN_EDIT_ICON_PATH."' alt='".LAN_EDIT."' /></a>"; */ $value .= "<a href='" . e_SELF . "?{$query}' class='btn btn-default' title='" . LAN_EDIT . "' data-toggle='tooltip' data-placement='left'>\r\n\t\t\t\t\t\t" . ADMIN_EDIT_ICON . "</a>"; } $delcls = vartrue($attributes['noConfirm']) ? ' no-confirm' : ''; if (varset($parms['deleteClass']) && varset($parms['delete'], 1) == 1) { $cls = deftrue($parms['deleteClass']) ? constant($parms['deleteClass']) : $parms['deleteClass']; if (check_class($cls)) { $value .= $this->submit_image('etrigger_delete[' . $id . ']', $id, 'delete', LAN_DELETE . ' [ ID: ' . $id . ' ]', array('class' => 'action delete btn btn-default' . $delcls)); } } else { $value .= $this->submit_image('etrigger_delete[' . $id . ']', $id, 'delete', LAN_DELETE . ' [ ID: ' . $id . ' ]', array('class' => 'action delete btn btn-default' . $delcls)); } } //$attributes['type'] = 'text'; $value .= "</div>"; return $value; break; case 'checkboxes': $value = $this->checkbox(vartrue($attributes['toggle'], 'multiselect') . '[' . $id . ']', $id); //$attributes['type'] = 'text'; return $value; break; } switch ($attributes['type']) { case 'number': if (!$value) { $value = '0'; } if ($parms) { if (!isset($parms['sep'])) { $value = number_format($value, $parms['decimals']); } else { $value = number_format($value, $parms['decimals'], vartrue($parms['point'], '.'), vartrue($parms['sep'], ' ')); } } if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $value = "<a class='e-tip e-editable editable-click' data-name='" . $field . "' title=\"" . LAN_EDIT . " " . $attributes['title'] . "\" data-type='text' data-pk='" . $id . "' data-url='" . e_SELF . "?mode={$mode}&action=inline&id={$id}&ajax_used=1' href='#'>" . $value . "</a>"; } $value = vartrue($parms['pre']) . $value . vartrue($parms['post']); // else same break; case 'ip': //$e107 = e107::getInstance(); $value = e107::getIPHandler()->ipDecode($value); // else same break; case 'templates': case 'layouts': $pre = vartrue($parms['pre']); $post = vartrue($parms['post']); unset($parms['pre'], $parms['post']); if ($parms) { $attributes['writeParms'] = $parms; } elseif (isset($attributes['writeParms'])) { if (is_string($attributes['writeParms'])) { parse_str($attributes['writeParms'], $attributes['writeParms']); } } $attributes['writeParms']['raw'] = true; $tmp = $this->renderElement($field, '', $attributes); // Inline Editing. //@SecretR - please FIXME! if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $source = str_replace('"', "'", json_encode($wparms)); $value = "<a class='e-tip e-editable editable-click' data-name='" . $field . "' data-source=\"" . $source . "\" title=\"" . LAN_EDIT . " " . $attributes['title'] . "\" data-type='select' data-pk='" . $id . "' data-url='" . e_SELF . "?mode=&action=inline&id={$id}&ajax_used=1' href='#'>" . $value . "</a>"; } // $value = $pre.vartrue($tmp[$value]).$post; // FIXME "Fatal error: Only variables can be passed by reference" featurebox list page. break; case 'checkboxes': case 'comma': case 'dropdown': // XXX - should we use readParams at all here? see writeParms check below if ($parms && is_array($parms)) { //FIXME return no value at all when 'editable=1' is a readParm. See FAQs templates. // $value = vartrue($parms['pre']).vartrue($parms[$value]).vartrue($parms['post']); // break; } // NEW - multiple (array values) support // FIXME - add support for multi-level arrays (option groups) if (!is_array($attributes['writeParms'])) { parse_str($attributes['writeParms'], $attributes['writeParms']); } $wparms = $attributes['writeParms']; if (!is_array(varset($wparms['__options']))) { parse_str($wparms['__options'], $wparms['__options']); } if (!empty($wparms['optArray'])) { $fopts = $wparms; $wparms = $fopts['optArray']; unset($fopts['optArray']); $wparms['__options'] = $fopts; } $opts = $wparms['__options']; unset($wparms['__options']); $_value = $value; if ($attributes['type'] == 'checkboxes' || $attributes['type'] == 'comma') { $opts['multiple'] = true; } if (vartrue($opts['multiple'])) { $ret = array(); $value = is_array($value) ? $value : explode(',', $value); foreach ($value as $v) { if (isset($wparms[$v])) { $ret[] = $wparms[$v]; } } $value = implode(', ', $ret); } else { $ret = ''; if (isset($wparms[$value])) { $ret = $wparms[$value]; } $value = $ret; } $value = $value ? vartrue($parms['pre']) . defset($value, $value) . vartrue($parms['post']) : ''; // Inline Editing. // Inline Editing with 'comma' @SecretR - please FIXME - empty values added. @see news 'render type' or 'media-manager' category for test examples. if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { $xtype = $attributes['type'] == 'dropdown' ? 'select' : 'checklist'; // $value = "<a class='e-tip e-editable editable-click' data-name='".$field."' data-value='{$_value}' data-source=\"".$source."\" title=\"".LAN_EDIT." ".$attributes['title']."\" data-type='".$xtype."' data-pk='".$id."' data-url='".e_SELF."?mode=&action=inline&id={$id}&ajax_used=1' href='#'>".$value."</a>"; $value = $this->renderInline($field, $id, $attributes['title'], $_value, $value, $xtype, $wparms); } // return ; break; case 'radio': if ($parms && is_array($parms)) { $value = vartrue($parms['pre']) . vartrue($parms[$value]) . vartrue($parms['post']); break; } if (!is_array($attributes['writeParms'])) { parse_str($attributes['writeParms'], $attributes['writeParms']); } $value = vartrue($attributes['writeParms']['__options']['pre']) . vartrue($attributes['writeParms'][$value]) . vartrue($attributes['writeParms']['__options']['post']); break; case 'tags': if (!empty($parms['constant'])) { $value = defset($value, $value); } if (vartrue($parms['truncate'])) { $value = $tp->text_truncate($value, $parms['truncate'], '...'); } elseif (vartrue($parms['htmltruncate'])) { $value = $tp->html_truncate($value, $parms['htmltruncate'], '...'); } if (vartrue($parms['wrap'])) { $value = $tp->htmlwrap($value, (int) $parms['wrap'], varset($parms['wrapChar'], ' ')); } if (vartrue($parms['link']) && $id) { $link = str_replace('[id]', $id, $parms['link']); $link = $tp->replaceConstants($link); // SEF URL is not important since we're in admin. $dialog = vartrue($parms['target']) == 'dialog' ? " e-dialog" : ""; // iframe $ext = vartrue($parms['target']) == 'blank' ? " rel='external' " : ""; // new window $modal = vartrue($parms['target']) == 'modal' ? " data-toggle='modal' data-cache='false' data-target='#uiModal' " : ""; if ($parms['link'] == 'sef' && $this->getController()->getListModel()) { $model = $this->getController()->getListModel(); // copy url config if (!$model->getUrl()) { $model->setUrl($this->getController()->getUrl()); } // assemble the url $link = $model->url(); } elseif (vartrue($data[$parms['link']])) { $link = $tp->replaceConstants(vartrue($data[$parms['link']])); } // in case something goes wrong... if ($link) { $value = "<a class='e-tip{$dialog}' {$ext} href='" . $link . "' {$modal} title='Quick View' >" . $value . "</a>"; } } if (empty($value)) { $value = '-'; $setValue = "data-value=''"; } else { $setValue = ""; if ($attributes['type'] == 'tags' && !empty($value)) { $setValue = "data-value='" . $value . "'"; $value = str_replace(",", ", ", $value); // add spaces so it wraps, but don't change the actual values. } } if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { $options['selectize'] = array('create' => true, 'maxItems' => 7, 'mode' => 'multi', 'e_editable' => $field . '_' . $id); $tpl = $this->text($field, $value, 80, $options); $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $value = "<a id='" . $field . '_' . $id . "' class='e-tip e-editable editable-click editable-tags' data-emptytext='-' data-tpl='" . str_replace("'", '"', $tpl) . "' data-name='" . $field . "' title=\"" . LAN_EDIT . " " . $attributes['title'] . "\" data-type='text' data-pk='" . $id . "' " . $setValue . " data-url='" . e_SELF . "?mode={$mode}&action=inline&id={$id}&ajax_used=1' href='#'>" . $value . "</a>"; } $value = vartrue($parms['pre']) . $value . vartrue($parms['post']); break; case 'text': if (!empty($parms['constant'])) { $value = defset($value, $value); } if (vartrue($parms['truncate'])) { $value = $tp->text_truncate($value, $parms['truncate'], '...'); } elseif (vartrue($parms['htmltruncate'])) { $value = $tp->html_truncate($value, $parms['htmltruncate'], '...'); } if (vartrue($parms['wrap'])) { $value = $tp->htmlwrap($value, (int) $parms['wrap'], varset($parms['wrapChar'], ' ')); } if (vartrue($parms['link']) && $id) { $link = str_replace('[id]', $id, $parms['link']); $link = $tp->replaceConstants($link); // SEF URL is not important since we're in admin. $dialog = vartrue($parms['target']) == 'dialog' ? " e-dialog" : ""; // iframe $ext = vartrue($parms['target']) == 'blank' ? " rel='external' " : ""; // new window $modal = vartrue($parms['target']) == 'modal' ? " data-toggle='modal' data-cache='false' data-target='#uiModal' " : ""; if ($parms['link'] == 'sef' && $this->getController()->getListModel()) { $model = $this->getController()->getListModel(); // copy url config if (!$model->getUrl()) { $model->setUrl($this->getController()->getUrl()); } // assemble the url $link = $model->url(); } elseif (vartrue($data[$parms['link']])) { $link = $tp->replaceConstants(vartrue($data[$parms['link']])); } // in case something goes wrong... if ($link) { $value = "<a class='e-tip{$dialog}' {$ext} href='" . $link . "' {$modal} title='Quick View' >" . $value . "</a>"; } } if (empty($value)) { $value = '-'; $setValue = "data-value=''"; } else { $setValue = ""; if ($attributes['type'] == 'tags' && !empty($value)) { $setValue = "data-value='" . $value . "'"; $value = str_replace(",", ", ", $value); // add spaces so it wraps, but don't change the actual values. } } if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $value = "<a class='e-tip e-editable editable-click' data-emptytext='-' data-name='" . $field . "' title=\"" . LAN_EDIT . " " . $attributes['title'] . "\" data-type='text' data-pk='" . $id . "' " . $setValue . " data-url='" . e_SELF . "?mode={$mode}&action=inline&id={$id}&ajax_used=1' href='#'>" . $value . "</a>"; } $value = vartrue($parms['pre']) . $value . vartrue($parms['post']); break; case 'bbarea': case 'textarea': if ($attributes['type'] == 'textarea' && !vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { return $this->renderInline($field, $id, $attributes['title'], $value, substr($value, 0, 50) . "...", 'textarea'); //FIXME. } $expand = '...'; $toexpand = false; if ($attributes['type'] == 'bbarea' && !isset($parms['bb'])) { $parms['bb'] = true; } //force bb parsing for bbareas $elid = trim(str_replace('_', '-', $field)) . '-' . $id; if (!vartrue($parms['noparse'])) { $value = $tp->toHTML($value, vartrue($parms['bb']) ? true : false, vartrue($parms['parse'])); } if (vartrue($parms['expand']) || vartrue($parms['truncate']) || vartrue($parms['htmltruncate'])) { $ttl = vartrue($parms['expand']); if ($ttl == 1) { $ttl = $expand . "<button class='btn btn-default btn-xs btn-mini pull-right'>More..</button>"; $ttl1 = "<button class='btn btn-default btn-xs btn-mini pull-right'>..Less</button>"; } else { $ttl1 = null; } $expands = '<a href="#' . $elid . '-expand" class="e-show-if-js e-expandit">' . defset($ttl, $ttl) . "</a>"; $contracts = '<a href="#' . $elid . '-expand" class="e-show-if-js e-expandit">' . defset($ttl1, $ttl1) . "</a>"; } $oldval = $value; if (vartrue($parms['truncate'])) { $value = $oldval = strip_tags($value); $value = $tp->text_truncate($value, $parms['truncate'], ''); $toexpand = $value != $oldval; } elseif (vartrue($parms['htmltruncate'])) { $value = $tp->html_truncate($value, $parms['htmltruncate'], ''); $toexpand = $value != $oldval; } if ($toexpand) { // force hide! TODO - core style .expand-c (expand container) // TODO: Hide 'More..' button when text fully displayed. $value .= '<span class="expand-c" style="display: none" id="' . $elid . '-expand"><span>' . str_replace($value, '', $oldval) . $contracts . '</span></span>'; $value .= $expands; // 'More..' button. Keep it at the bottom so it does't cut the sentence. } break; case 'icon': $value = $tp->toIcon($value, array('size' => '2x')); break; case 'file': if (vartrue($parms['base'])) { $url = $parms['base'] . $value; } else { $url = e107::getParser()->replaceConstants($value, 'full'); } $name = basename($value); $value = '<a href="' . $url . '" title="Direct link to ' . $name . '" rel="external">' . $name . '</a>'; break; case 'image': //TODO - thumb, js tooltip... if ($value) { if (strpos($value, ",") !== false) { $tmp = explode(",", $value); $value = $tmp[0]; unset($tmp); } $vparm = array('thumb' => 'tag', 'w' => vartrue($parms['thumb_aw'], '80')); if ($video = e107::getParser()->toVideo($value, $vparm)) { return $video; } $fileOnly = basename($value); // Not an image but a file. (media manager) if (!preg_match("/\\.(png|jpg|jpeg|gif|PNG|JPG|JPEG|GIF)\$/", $fileOnly) && false !== strpos($fileOnly, '.')) { $icon = "{e_IMAGE}filemanager/zip_32.png"; $src = $tp->replaceConstants(vartrue($parms['pre']) . $icon, 'abs'); // return $value; return e107::getParser()->toGlyph('fa-file', 'size=2x'); // return '<img src="'.$src.'" alt="'.$value.'" class="e-thumb" title="'.$value.'" />'; } if (vartrue($parms['thumb'])) { $thparms = array(); // Support readParms example: thumb=1&w=200&h=300 // Support readParms example: thumb=1&aw=80&ah=30 if (isset($parms['h'])) { $thparms['h'] = intval($parms['h']); } if (isset($parms['ah'])) { $thparms['ah'] = intval($parms['ah']); } if (isset($parms['w'])) { $thparms['w'] = intval($parms['w']); } if (isset($parms['aw'])) { $thparms['aw'] = intval($parms['aw']); } // Support readParms example: thumb=200x300 (wxh) if (strpos($parms['thumb'], 'x') !== false) { list($thparms['w'], $thparms['h']) = explode('x', $parms['thumb']); } // Support readParms example: thumb={width} if (!isset($parms['w']) && is_numeric($parms['thumb']) && '1' != $parms['thumb']) { $thparms['w'] = intval($parms['thumb']); } elseif (vartrue($parms['thumb_aw'])) { $thparms['aw'] = intval($parms['thumb_aw']); } // return print_a($thparms,true); $src = $tp->replaceConstants(vartrue($parms['pre']) . $value, 'abs'); $thsrc = $tp->thumbUrl(vartrue($parms['pre']) . $value, $thparms, varset($parms['thumb_urlraw'])); $alt = basename($src); $ttl = '<img src="' . $thsrc . '" alt="' . $alt . '" class="thumbnail e-thumb" />'; $value = '<a href="' . $src . '" data-modal-caption="' . $alt . '" data-target="#uiModal" class="e-modal e-image-preview" title="' . $alt . '" rel="external">' . $ttl . '</a>'; } else { $src = $tp->replaceConstants(vartrue($parms['pre']) . $value, 'abs'); $alt = $src; //basename($value); $ttl = vartrue($parms['title'], 'LAN_PREVIEW'); $value = '<a href="' . $src . '" class="e-image-preview" title="' . $alt . '" rel="external">' . defset($ttl, $ttl) . '</a>'; } } break; case 'files': $ret = '<ol>'; for ($i = 0; $i < 5; $i++) { $k = $key . '[' . $i . '][path]'; $ival = $value[$i]['path']; $ret .= '<li>' . $ival . '</li>'; } $ret .= '</ol>'; $value = $ret; break; case 'datestamp': $value = $value ? e107::getDate()->convert_date($value, vartrue($parms['mask'], 'short')) : ''; break; case 'date': // just show original value break; case 'userclass': $dispvalue = $this->_uc->uc_get_classname($value); // Inline Editing. if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $uc_options = vartrue($parms['classlist'], 'public,guest,nobody,member,admin,main,classes'); // defaults to 'public,guest,nobody,member,classes' (userclass handler) unset($parms['classlist']); $array = e107::getUserClass()->uc_required_class_list($uc_options); //XXX Ugly looking (non-standard) function naming - TODO discuss name change. $source = str_replace('"', "'", json_encode($array, JSON_FORCE_OBJECT)); //NOTE Leading ',' required on $value; so it picks up existing value. $value = "<a class='e-tip e-editable editable-click' data-placement='left' data-value='" . $value . "' data-name='" . $field . "' data-source=\"" . $source . "\" title=\"" . LAN_EDIT . " " . $attributes['title'] . "\" data-type='select' data-pk='" . $id . "' data-url='" . e_SELF . "?mode={$mode}&action=inline&id={$id}&ajax_used=1' href='#'>" . $dispvalue . "</a>"; } else { $value = $dispvalue; } break; case 'userclasses': // return $value; $classes = explode(',', $value); $uv = array(); foreach ($classes as $cid) { if (!empty($parms['defaultLabel']) && $cid === '') { $uv[] = $parms['defaultLabel']; continue; } $uv[] = $this->_uc->getName($cid); } $dispvalue = implode(vartrue($parms['separator'], "<br />"), $uv); // Inline Editing. if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { $uc_options = vartrue($parms['classlist'], 'public,guest, nobody,member,admin,main,classes'); // defaults to 'public,guest,nobody,member,classes' (userclass handler) $array = e107::getUserClass()->uc_required_class_list($uc_options); //XXX Ugly looking (non-standard) function naming - TODO discuss name change. //$mode = preg_replace('/[^\w]/', '', vartrue($_GET['mode'], '')); $mode = $tp->filter(vartrue($_GET['mode'], ''), 'w'); $source = str_replace('"', "'", json_encode($array, JSON_FORCE_OBJECT)); //NOTE Leading ',' required on $value; so it picks up existing value. $value = "<a class='e-tip e-editable editable-click' data-placement='bottom' data-value='," . $value . "' data-name='" . $field . "' data-source=\"" . $source . "\" title=\"" . LAN_EDIT . " " . $attributes['title'] . "\" data-type='checklist' data-pk='" . $id . "' data-url='" . e_SELF . "?mode={$mode}&action=inline&id={$id}&ajax_used=1' href='#'>" . $dispvalue . "</a>"; } else { $value = $dispvalue; } unset($parms['classlist']); break; /*case 'user_name': case 'user_loginname': case 'user_login': case 'user_customtitle': case 'user_email':*/ /*case 'user_name': case 'user_loginname': case 'user_login': case 'user_customtitle': case 'user_email':*/ case 'user': /*if(is_numeric($value)) { $value = e107::user($value); if($value) { $value = $value[$attributes['type']] ? $value[$attributes['type']] : $value['user_name']; } else { $value = 'not found'; } }*/ $row_id = $id; // Dirty, but the only way for now $id = 0; $ttl = LAN_ANONYMOUS; //Defaults to user_id and user_name (when present) and when idField and nameField are not present. // previously set - real parameters are idField && nameField $id = vartrue($parms['__idval']); if ($value && !is_numeric($value)) { $id = vartrue($parms['__idval']); $ttl = $value; } elseif ($value && is_numeric($value)) { $id = $value; if (vartrue($parms['__nameval'])) { $ttl = $parms['__nameval']; } else { $user = e107::user($value); if (vartrue($user['user_name'])) { $ttl = $user['user_name']; } } } if (!empty($parms['link']) && $id && $ttl && is_numeric($id)) { // Stay in admin area. $link = e_ADMIN . "users.php?mode=main&action=edit&id=" . $id . "&readonly=1&iframe=1"; // e107::getUrl()->create('user/profile/view', array('id' => $id, 'name' => $ttl)) $value = '<a class="e-modal" data-modal-caption="User #' . $id . ' : ' . $ttl . '" href="' . $link . '" title="Go to user profile">' . $ttl . '</a>'; } else { $value = $ttl; } // Inline Editing. if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { // Need a Unique Field ID to store field settings using e107::js('settings'). $fieldID = $this->name2id($field . '_' . microtime(true)); // Unique ID for each rows. $eEditableID = $this->name2id($fieldID . '_' . $row_id); $tpl = $this->userpicker($field, '', $ttl, $id, array('id' => $fieldID, 'selectize' => array('e_editable' => $eEditableID))); $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $value = "<a id='" . $eEditableID . "' class='e-tip e-editable editable-click editable-userpicker' data-clear='false' data-tpl='" . str_replace("'", '"', $tpl) . "' data-name='" . $field . "' title=\"" . LAN_EDIT . " " . $attributes['title'] . "\" data-type='text' data-pk='" . $row_id . "' data-value='" . $id . "' data-url='" . e_SELF . "?mode={$mode}&action=inline&id={$row_id}&ajax_used=1' href='#'>" . $ttl . "</a>"; } break; case 'bool': case 'boolean': $false = vartrue($parms['trueonly']) ? "" : ADMIN_FALSE_ICON; if (!vartrue($attributes['noedit']) && vartrue($parms['editable']) && !vartrue($parms['link'])) { if (isset($parms['false'])) { $false = $parms['false']; } else { $false = $value === '' ? "□" : "✗"; } $true = varset($parms['true'], '✓'); // custom representation for 'true'. (supports font-awesome when set by css) $value = intval($value); $wparms = vartrue($parms['reverse']) ? array(0 => $true, 1 => $false) : array(0 => $false, 1 => $true); $dispValue = $wparms[$value]; return $this->renderInline($field, $id, $attributes['title'], $value, $dispValue, 'select', $wparms); } if (vartrue($parms['reverse'])) { $value = $value ? $false : ADMIN_TRUE_ICON; } else { $value = $value ? ADMIN_TRUE_ICON : $false; } break; case 'url': if (!$value) { break; } $ttl = $value; if (vartrue($parms['href'])) { return $tp->replaceConstants(vartrue($parms['pre']) . $value, varset($parms['replace_mod'], 'abs')); } if (vartrue($parms['truncate'])) { $ttl = $tp->text_truncate($value, $parms['truncate'], '...'); } $value = "<a href='" . $tp->replaceConstants(vartrue($parms['pre']) . $value, 'abs') . "' title='{$value}'>" . $ttl . "</a>"; break; case 'email': if (!$value) { break; } $ttl = $value; if (vartrue($parms['truncate'])) { $ttl = $tp->text_truncate($value, $parms['truncate'], '...'); } $value = "<a href='mailto:" . $value . "' title='{$value}'>" . $ttl . "</a>"; break; case 'method': // Custom Function $method = $attributes['field']; // prevents table alias in method names. ie. u.my_method. $_value = $value; if ($attributes['data'] == 'array') { $value = e107::unserialize($value); // (saved as array, return it as an array) } $meth = !empty($attributes['method']) ? $attributes['method'] : $method; if (method_exists($this, $meth)) { $parms['field'] = $field; $value = call_user_func_array(array($this, $meth), array($value, 'read', $parms)); } else { return "<span class='label label-important label-danger'>Missing: " . $method . "()</span>"; } // print_a($attributes); // Inline Editing. if (!vartrue($attributes['noedit']) && vartrue($parms['editable'])) { $mode = preg_replace('/[^\\w]/', '', vartrue($_GET['mode'], '')); $methodParms = call_user_func_array(array($this, $method), array($value, 'inline', $parms)); if (!empty($methodParms['inlineType'])) { $attributes['inline'] = $methodParms['inlineType']; $methodParms = !empty($methodParms['inlineData']) ? $methodParms['inlineData'] : null; } if (is_string($attributes['inline'])) { switch ($attributes['inline']) { case 'checklist': $xtype = 'checklist'; break; case 'select': case 'dropdown': $xtype = 'select'; break; case 'textarea': $xtype = 'textarea'; break; default: $xtype = 'text'; $methodParms = null; break; } } if (!empty($xtype)) { $value = $this->renderInline($field, $id, $attributes['title'], $_value, $value, $xtype, $methodParms); } } break; case 'hidden': return vartrue($parms['show']) ? $value ? $value : vartrue($parms['empty']) : ''; break; case 'language': // All Known Languages. if (!empty($value)) { $_value = $value; if (strlen($value) === 2) { $value = e107::getLanguage()->convert($value); } } if (!vartrue($attributes['noedit']) && vartrue($parms['editable'])) { $wparms = e107::getLanguage()->getList(); return $this->renderInline($field, $id, $attributes['title'], $_value, $value, 'select', $wparms); } return $value; break; case 'lanlist': // installed languages. $options = e107::getLanguage()->getLanSelectArray(); if ($options) { if (!is_array($attributes['writeParms'])) { parse_str($attributes['writeParms'], $attributes['writeParms']); } $wparms = $attributes['writeParms']; if (!is_array(varset($wparms['__options']))) { parse_str($wparms['__options'], $wparms['__options']); } $opts = $wparms['__options']; if ($opts['multiple']) { $ret = array(); $value = is_array($value) ? $value : explode(',', $value); foreach ($value as $v) { if (isset($options[$v])) { $ret[] = $options[$v]; } } $value = implode(', ', $ret); } else { $ret = ''; if (isset($options[$value])) { $ret = $options[$value]; } $value = $ret; } $value = $value ? vartrue($parms['pre']) . $value . vartrue($parms['post']) : ''; } else { $value = ''; } break; //TODO - order //TODO - order default: //unknown type break; } return $value; }