질문/조언질답게시판
Extra Form
PHP PHP 7.3
CMS Rhymix

https://www.minitalk.kr/ko/download/others/view/24

 

제작자분이 공개해주신 XE용 위젯인데, XE 및 라이믹스 최신버전에서는 '위젯 생성' 버튼을 눌러도 반응이 없고

코드를 강제로 페이지에 삽입하게 되면 서버 오류가 발생하더라구요.

 

코드를 쓱 훑어보니 php7.2이후부터 수정해야하는 object -> BaseObject 도 딱히 해당되지 않는것 같고..

 

혹시 해당 위젯을 수정하여 사용하시거나 정상 작동하시는 분 계신가요?

 

아래는 코드 전문입니다(무료로 배포되는 자료라 코드를 올려도 된다고 판단하여 올립니다. 문제시 삭제하겠습니다)

 

<?php
class minitalk extends WidgetHandler {
function proc($args) {
$logged_info = Context::get('logged_info');
$obj = null;

/* widget configs */
$obj->url = isset($args->url) ? $args->url : null;
$obj->url = preg_match('/\/$/',$obj->url) == true ? $obj->url : $obj->url.'/';
$obj->channel = isset($args->channel) ? $args->channel : null;
$obj->key = isset($args->key) && strlen($args->key) == 32 ? $args->key : null;
$obj->skin = isset($args->skins) ? $args->skins : 'default';
$obj->language = isset($args->language) ? $args->language : 'ko';
$obj->type = isset($args->type) ? $args->type : 'auto';
$obj->m_width = isset($args->m_width) && preg_match('/[1-9]+[0-9]*%?$/',$args->m_width) == true ? $args->m_width : '100%';
$obj->m_height = isset($args->m_height) && preg_match('/[1-9]+[0-9]*%?$/',$args->m_height) == true ? $args->m_height : '500';
$obj->view_user = isset($args->view_user) ? $args->view_user : 'true';
$obj->view_user_limit = isset($args->view_user_limit) ? $args->view_user_limit : 'ALL';
$obj->view_alert_limit = isset($args->view_alert_limit) ? $args->view_alert_limit : 'ALL';
$obj->log_limit = isset($args->log_limit) ? $args->log_limit : '15';
$obj->plugin = isset($args->plugin) ? $args->plugin : 'ALL';
$obj->admin_user = isset($args->admin_user) ? explode(',',$args->admin_user) : array();
$obj->notice = isset($args->notice) ? $args->notice : '';
$obj->split_string = isset($args->split_string) ? $args->split_string : ' : ';
$obj->tool_type = isset($args->tool_type) ? $args->tool_type : 'icon';
$obj->nickname_type = isset($args->nickname_type) ? $args->nickname_type : 'nickname';
$obj->icon_type = isset($args->icon_type) ? $args->icon_type : '0';
$obj->nickcon_type = isset($args->nickcon_type) ? $args->nickcon_type : 'true';
$obj->popup_menu = isset($args->popup_menu) ? explode(',',$args->popup_menu) : array();

/* values */
$obj->wwwroot = getFullUrl();
$obj->wwwroot = preg_match('/\/$/',$obj->wwwroot) == true ? $obj->wwwroot : $ob->wwwroot.'/';
$obj->width = preg_match('/%$/',$obj->m_width) == true ? $obj->m_width : $obj->m_width.'px';
$obj->height = preg_match('/%$/',$obj->m_height) == true ? $obj->m_height : $obj->m_height.'px';
$obj->nickname = null;
$obj->nickcon = null;
$obj->opperCode = null;
$obj->info = array();
if (in_array('communication',$obj->popup_menu) == true) $obj->info['communication'] = '';
if (in_array('homepage',$obj->popup_menu) == true) $obj->info['homepage'] = '';
if (in_array('blog',$obj->popup_menu) == true) $obj->info['blog'] = '';

if ($logged_info->member_srl) {
$oModuleModel = &getModel('module');
$oPointModel = &getModel('point');
$config = $oModuleModel->getModuleConfig('point');
$point = $oPointModel->getPoint($logged_info->member_srl);
$level = $oPointModel->getLevel($point,$config->level_step);

if ($obj->nickname_type == 'nickname') {
$obj->nickname = $logged_info->nick_name;
} elseif ($obj->nickname_type == 'name') {
$obj->nickname = $logged_info->user_name;
} elseif ($obj->nickname_type == 'user_id') {
$obj->nickname = $logged_info->user_id;
} elseif ($obj->nickname_type == 'all') {
$obj->nickname = $logged_info->nick_name.'('.$logged_info->user_id.')';
}

$obj->nickcon = '';
if ($obj->icon_type == 1) { // 레벨아이콘
$obj->nickcon = Context::getRequestUri().'modules/point/icons/'.$config->level_icon.'/'.$level.'.gif,';
} elseif ($obj->icon_type == 2) { // 그룹아이콘
$obj->nickcon = $logged_info->group_mark->src ? $logged_info->group_mark->src.',' : '';
} elseif ($obj->icon_type == 3) { // 아이콘샵
$oIconshopModel = &getModel('iconshop');
$icon = $oIconshopModel->getMemberIconBySelected($logged_info->member_srl);
$obj->nickcon = $icon->file1 ? Context::getRequestUri().$icon->file1.',' : '';
} elseif ($obj->icon_type == 4) { // 회원아이콘
$obj->nickcon = $logged_info->image_mark->src ? $logged_info->image_mark->src.',' : '';
}

$popup_menu = explode(",",$args->popup_menu);
$info = array();

if (in_array('communication',$obj->popup_menu) == true) {
$obj->info['communication'] = str_replace("&","&",getFullUrl('','module','communication','act','dispCommunicationSendMessage','receiver_srl',$logged_info->member_srl));
}

if (in_array('homepage',$obj->popup_menu) == true) {
$obj->info['homepage'] = $logged_info->homepage;
}

if (in_array('blog',$obj->popup_menu) == true) {
$obj->info['blog'] = $logged_info->blog;
}

if (isset($logged_info->profile_image) && isset($logged_info->profile_image->src)) {
$obj->info['photo'] = $logged_info->profile_image->src;
}

// 이미지이름 연동
if ($obj->nickcon_type == 'true' && $logged_info->image_name->src) {
$obj->nickcon.= $logged_info->image_name->src;
} else {
$obj->nickcon.= '{nickname}';
}

// 관리자라면
if (in_array($logged_info->user_id,$obj->admin_user) == true) {
$obj->opperCode = $this->GetOpperCode('ADMIN',$obj->key);
} else {
$obj->opperCode = $this->GetOpperCode('MEMBER',$obj->key);
}
}

if (count($obj->info) > 0) {
$obj->info = json_encode($obj->info);
} else {
$obj->info = null;
}

Context::set('minitalk',$obj);

$act = Context::get('act');
$tpl_path = sprintf('%sskins/%s',$this->widget_path,'default');
$tpl_file = ($act == "dispPageAdminContentModify" || $act == "procWidgetGenerateCodeInPage")? "preview" : "minitalk";

$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($tpl_path, $tpl_file);
}

function MiniTalkEncoder($value,$key) {
$padSize = 16 - (strlen($value) % 16);
$value = $value.str_repeat(chr($padSize),$padSize);
$output = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$value,MCRYPT_MODE_CBC,str_repeat(chr(0),16));
return base64_encode($output);
}

function MiniTalkDecoder($value,$key) {
$value = base64_decode($value);
$output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$value,MCRYPT_MODE_CBC,str_repeat(chr(0),16));
$valueLen = strlen($output);
if ($valueLen % 16 > 0) return false;
$padSize = ord($output{$valueLen - 1});
if (($padSize < 1) || ($padSize > 16)) return false;
for ($i=0;$i<$padSize;$i++) {
if (ord($output{$valueLen - $i - 1}) != $padSize) return false;
}
return substr($output,0,$valueLen-$padSize);
}

function GetOpperCode($opper,$key) {
$value = json_encode(array('opper'=>$opper,'ip'=>$_SERVER['REMOTE_ADDR']));
return urlencode($this->MiniTalkEncoder($value,$key));
}
}
?>