NURI Core
NURI Core is the base frame of NURI CMS. NURI CMS is a web CMS program, branched out from XpressEngine.
NURI Core
Home Page: https://www.nuricms.org/
License: Other
DB 중 Mssql, Cubrid 를 미지원하는게 어떤가 싶습니다.
유지 보수가 가능할지 모르겠어서요.
Mysql 과 MariaDB는 겹치니 둘을 잘 다듬어가는게 어떤가요?
자동 로그인 보안 레벨 옵션을 추가해서 멀티디바이스를 사용하는 사람이 보안적으로 불리하더라도 자동로그인을 쉽게 쓸수있도록 제작
사용하지 않는 faceOff 관련 코드를 제거합니다.
관리자페이지에서 CSS 수정이나, HTML 수정 등 사용자 설정으로 사용되는 부분은 남겨둡니다.
문서의 목록 등을 가져올 때 $columnList
가 다른 값이 지정되면 기존 캐시를 덮어버리는 문제가 있음.
이로 인해 각기 다른 컬럼을 필요로 하는 기능에서 일부 컬럼이 제거되어 동작에 영향을 주거나 데이터를 표시하지 못 함.
기존 cache가 있고 $columnList
변동이 있으면 덮어버리는 게 아니라 추가로 가져온 데이터를 추가하는 방식으로 변경해야 함.
템플릿언어 에서 호출파일명에 하이픈들어갈 경우 오류
하이픈(-)이 들어간 이름을 호출하면,
아래의 형식으로 소스상에 남는데 최종출력시 지워지지 않음
가능하면 html 기본 기능으로도 올릴 수 있게 하고, 자바스크립트를 이용해서라도 플래시를 제거하는게 목표.
플래시가 설치되지 않은 PC에서 업로드 할 수 있는 수준이면 됨.
브라우저는 IE, FF 와 그 이상, OS는 Windows 7과 그 이상, 우분투 등 리눅스, iOS 등에서 테스트 해볼것.
https://code.google.com/p/xe-core/issues/detail?id=3490
포인트 레벨 아이콘 표시 애드온(point_level_icon)이 XML 및 JSON 응답 시에 동작하면서 escape가 일부 적용되지 않으면서 결과물에 영향을 주고 있습니다. JSON 반환 시 따옴표(")가 문제 됩니다.
이 애드온을 HTML 응답 시에만 동작하도록 변경해야 합니다.
if(Context::getResponseMethod() != 'HTML') return;
http://www.xpressengine.com/?mid=download&act=dispResourceIndex&package_srl=19137447 을 JSON 응답 요청하여 확인 가능.
혹은, 첨부 이미지 참조.
$skin_args->module_srls = implode(',',$skin_update_srls);
$skin_args->is_skin_fix = "Y";
$ouput = executeQuery('page.updateSkinFix', $skin_args);
을 처리하는 구간에서
재일 위에
$skin_args = new stdClass;
$skin_args->module_srls = implode(',',$skin_update_srls);
$skin_args->is_skin_fix = "Y";
$ouput = executeQuery('page.updateSkinFix', $skin_args);
이렇게 추가 되어야 하지 않을까 싶습니다.
71번째 라인입니다. Xe-core에도 남겨놨습니다.
모듈제작에 있어서 좀 더 유연한 처리가 가능하도록 ModuleHandler()에서 애드온 호출 전에 Trigger를 설치했으면 합니다.
ModuleHandler::triggerCall('moduleHandler', 'before', $this);
// execute addon (before module initialization)
$called_position = 'before_module_init';
$oAddonController = getController('addon');
$addon_file = $oAddonController->getCacheFilePath(Mobile::isFromMobilePhone() ? 'mobile' : 'pc');
@include($addon_file);
애드온 수행 로직에는 모두 애드온 호출 전 Trigger가 선언되어있습니다.
<애드온 호출 전 Trigger가 있음>
before_module_proc
after_module_proc
before_display_content
<애드온 호출 전 Trigger가 없음>
before_module_init
before_module_init는 코어에서도 제일 처음 호출되는 애드온 내용입니다. 이보다 상단에 Trigger를 둠으로써 발생되는 이점은, 모듈자체만으로 코어전체를 컨트롤 하지못해 모듈+애드온으로 제작하던 문제점을 줄일 수 있으며, 모듈과 애드온을 각각별개의 독립적인 역할구조로 나눌 수 있게 해주는 점입니다.
반면, Trigger가 이곳저곳에서 호출되고 있기 때문에 자칫 무분별한 추가는 성능의 저하를 초래할 수 있으니 호출이 필요없는 곳은 제거가 필요합니다.
예) DisplayHandler.class.php
ModuleHandler::triggerCall('display', 'after', $content);
xeVid 값이 있는 경우 vid 값도 파라메터로 전송해야한다.
별도의 저장소로 분리하여 유지보수를 진행하거나 제거 할 대상을 선정.
예로 point, counter, poll 등의 부가적인 기능들(모듈, 애드온, 위젯)의 분리 운영 및 유지보수 중단 결정.
<section class="section"><h1>고급</h1>...</section>
현재 관리자페이지에서 각종 설정 그룹을 지정할때 사용하는 section태그에 Toggle을 이용해서 접었다가 폈다가 할 수 있습니다. 헌데 컨트롤 할 수 있는 버튼이 오른쪽 구석에 조그맣게 있기 때문에 화면이 크거나 하면 마우스움직임 등 불편함을 줍니다.
h1타이틀에서부터 화살표 버튼까지 Toggle의 영역으로 지정하여 줄바의 클릭으로 접었다펴기를 수월하게 사용하도록 합니다.
User-Agent에서 MSIE가 빠지면서, 예외 처리 코드가 회피되었다. 보완 필요.
fileupload를 만들다가 구조적으로 좋지 않은걸 개선하고 있었는데요. 아래와 같은 유형도 대응할 수 있도록 NuriCms에서 처리되면 좋겠다고 생각하여 제안합니다.
기존 요청방식
client(html) -- core -- server(html)
client(json) -- core -- server(json)
client(xml) -- core -- server(xml)
client(*>js_callback) -- core -- server(js_callback)
향후 요청방식
client(html) -- core -- server(html)
client(json) -- core -- server(json)
client(xml) -- core -- server(xml)
client(>js_callback) -- core -- server(js_callback)
client(>json_callback) -- core -- server(json)
client(*>xml_callback) -- core -- server(xml)
몇몇 외부 라이브러리의 경우 보통의 GET, POST로 요청을 보내고 서버측으로부터는 JSON, XML으로 받아야 동작하는 경우가 있습니다. 현재 XE가 그런 대응이 없기 때문에 아래처럼 개선하여 param값으로 출력을 헨들링 하면 좋겠다고 생각합니다.
context.class.php
js_callback_func = isset($_GET['xe_js_callback'])) or (isset($_POST['xe_js_callback']) && $self->js_callback_func = isset($_POST['xe_js_callback'])); (isset($_GET['xe_json_callback']) && $self->json_callback_func = isset($_GET['xe_json_callback'])) or (isset($_POST['xe_json_callback']) && $self->json_callback_func = isset($_POST['xe_json_callback'])); (isset($_GET['xe_xml_callback']) && $self->xml_callback_func = isset($_GET['xe_xml_callback'])) or (isset($_POST['xe_xml_callback']) && $self->xml_callback_func = isset($_POST['xe_xml_callback'])); ($type && $self->request_method = $type) or (strpos($_SERVER['CONTENT_TYPE'], 'json') && $self->request_method = 'JSON') or (isset($GLOBALS['HTTP_RAW_POST_DATA']) && $self->request_method = 'XMLRPC') or ($self->js_callback_func && $self->request_method = 'JS_CALLBACK') or ($self->json_callback_func && $self->request_method = 'JSON') or ($self->xml_callback_func && $self->request_method = 'XMLRPC') or ($self->request_method = $_SERVER['REQUEST_METHOD']); } ?>요청은 이렇게 합니다.
var params = {
mid : current_mid,
module : 'file',
act : 'getFileList',
xe_json_callback: 'xe_json_callback'
};
exec_xml(
'file',
'getFileList',
params,
func,response_tags);
php 5.5 지원.
파일 링크에 & 가 &로 바뀌어야 하지만, & 로 두번 바뀌는 문제가 있음.
차후 개발이 용이하도록 업로드, 다운로드 호출시 결과값을 좀 더 늘릴 필요가 있습니다.
누리 또는 Nuri 로 이름을 변경한다.
NuriCMS
누리CMS
NuriCore
누리 코어
등의 용어를 상황에 맞게 사용한다.
예시 웹 사이트 주소 중 모 프로젝트를 가리키는 주소는 nuricms.org 로 모두 변경한다.
commons/ 아래 HTML 형식이 두가지로 되어 있는데, 두가지일 이유가 없다. 통합해도 될듯.
<!--action name="dispMemberAdminConfig" type="view" menu_name="userSetting" menu_index="true" /-->
요런 문구가 member 모듈에 들어있으며,
member.admin.view.php에도 함수가 정의되어있습니다.
/**
* Set the default config.
*
* @return void
*/
public function dispMemberAdminConfig()
{
$this->setTemplateFile('default_config');
}
주석처리된 이유가 무엇이며 기능의 목적이 무엇인지 아시는분은 설명바랍니다.
(새로운 기능 만들려다가 말았나?)
*.admin.controller.php의 역할대로 모순이 발생하지 않도록 manager 접근으로 permission을 재정비해야한다고 생각합니다.
member 모듈을 예로 설명하면,
member.admin.controller.php 파일안에 기능들은 admin에서만 동작하도록 형태를 취하고 있지만 관리자체크를 하지 않고 있습니다. 최근 csrf 보안이슈때문에 임시적으로 is_admin체크를 올려놨지만 본래대로라면 권한체크는 module.xml에서 permission으로 정의해야하고 init()를 통해 csrf를 지정했어야합니다.
http://code.google.com/p/xe-core/issues/detail?id=3569
sejin7940님의 의견입니다.
다양한 암호화 방식을 지원하게 변경. PHP 지원 버전에 따라서 다양하게 지원하도록 변경
테스트 결과 보고되는 소소한 이슈들에 대한 처리입니다.
변경할 내용이 많은 이슈는 별개로 취급합니다.
인증 메일 재발송을 했을때 받는 이메일에 다국어 적용이 안되어있음.
XE 1.7.3.4
cafeXE 1.7.0.1
위 버전에서 카페 생성 -> Domain 접속으로 생성하신 후에 카페관리에 들어가실려면 '잘못된 요청입니다.' 라고 표시되면서 접속이 안되는 증상이 있습니다. 해당 증상은 아래와 같은 경우만 발생합니다.
도메인이 하나만 있고 카페XE로 이용하려면 사실상 이용을 할 수 없기 때문에 아래와 같은 조치를 취해주시면 해결 됩니다.
./modules/module/module.model.php
/**
* @brief Get the defaul mid according to the domain
*/
function getDefaultMid()
{
$default_url = preg_replace('/\/$/','',Context::getDefaultUrl());
$request_url = preg_replace('/\/$/','',Context::getRequestUri());
$default_url_parse = parse_url($default_url);
$request_url_parse = parse_url($request_url);
$vid = Context::get('vid');
$mid = Context::get('mid');
// Set up
// test.xe.com
$domain = '';
if($default_url && $default_url_parse['host'] != $request_url_parse['host'])
{
$url_info = parse_url($request_url);
$hostname = $url_info['host'];
$path = preg_replace('/\/$/','',$url_info['path']);
$domain = sprintf('%s%s%s', $hostname, $url_info['port']&&$url_info['port']!=80?':'.$url_info['port']:'',$path);
}
위 $default_url &&을 제거하시고 관리자페이지 기본 URL을 공란으로 두시면 해결 됩니다.
현재까지는 기능구현과 XE의 호환성 관련 처리를 중점으로 개발했는데요.
이제 NuriCms에 최적화된 작업을 진행해보려고 합니다.
feature/html5_upload_enhancement 에서 진행하겠습니다.
업로드를 다루고 있는 지금입니다만, 만들다보니 현재의 SWFUpload 연계 때문에 file 모듈이 구조적으로는 좋지 않더군요.
현재는,
게시판 모듈에서 SWFUpload를 이용해 파일을 올리면 업로드가 완료된 후 다시 한번 더 서버로 요청을 해서 file_srl을 받아오는 구조입니다.
modules/editor/tpl/js/upload.js
reloadFileList() <- 이것이 대부분의 함수에 관련 동작하여 불필요한 서버요청을 하고 있습니다.
우선은 간략하게 아래와 같은 기능을 추가해서 값을 리턴받아 처리하도록 하면 좋을 것 같습니다.
procFileUpload()
switch(strtolower(Context::get('dataType'))) {
case 'json' : Context::setRequestMethod('JSON');
case 'xml' : Context::setRequestMethod('XML');
break;
}
데이터타입을 지정하여 처리하도록 합니다.
(파일업로드 시에는 ajax요청시 dataType : json으로 지정하면 포맷이 틀려져 업로드가 안됩니다. 그래서 별도의 변수형태로 던져 값을 받습니다. )
ajax를 dataType:json(contentType:"application/json")으로 보낼경우 예)
stdClass Object
(
[-----------------------------17367453038805774971556180602
Content-Disposition:_form-data;_name] => "PHPSESSID"
0dfd239b56729ce58c04e2240c150ab8
-----------------------------17367453038805774971556180602
Content-Disposition: form-data; name="editor_sequence"
225
-----------------------------17367453038805774971556180602
Content-Disposition: form-data; name="mid"
board
-----------------------------17367453038805774971556180602
Content-Disposition: form-data; name="act"
procFileUpload
-----------------------------17367453038805774971556180602
Content-Disposition: form-data; name="uploadTargetSrl"
225
-----------------------------17367453038805774971556180602
Content-Disposition: form-data; name="Filedata"; filename="nuricms.png"
Content-Type: image/png
?PNG
[mid] => board
)
insertFile()
$output->add('file_srl', $args->file_srl);
$output->add('file_size', $args->file_size);
$output->add('sid', $args->sid);
$output->add('direct_download', $args->direct_download);
$output->add('source_filename', $args->source_filename);
$output->add('upload_target_srl', $upload_target_srl);
$output->add('uploaded_filename', $args->uploaded_filename);
$this->add('file_srl', $args->file_srl);
return $output;
$this->add('file_srl', $args->file_srl); 를 추가하여 json, xml형태로 리턴합니다.
{"message_type":"","file_srl":248,"error":0,"message":"success"}
결과를 받아와 개발자들이 입맛에 맞게 처리합니다.
위 내용 추가로 인한 문제점은 없습니다. 그리고 이 기능이 없으면 없는대로 따로 업로드 처리를 만들어도 되지만...
왠만하면 0.1.0에 넣어보고 싶군요...
의견좀 주세요~
Black용 스킨을 추가할 예정입니다.
dispMemberResendAuthMail에 reset_mail.html, resend_auth_mail.html이 정의되어있지만 최신 코어에 실제 파일이 없네요.
http://code.google.com/p/xe-core/issues/detail?id=3568
역시 sejin7940님께서...
html 에 표기되는 lang type 은 ISO639에 따른 표기가 필요한데, Nuri CMS 기존 언어 코드는 일부(일본어)가 ISO639와 차이가 있음.
일본어만 다르게 표기하게 할 수 있는데, 코드 자체는 이후 다른 다국어에도 대응할 수 있도록 대비.
파일이 웹상에 존재하는데 Nuri에는 없는듯 하여 추가.
스패머 방지용.
Mail 클래스로 발송되는 메일의 Plain text 부분이 단순히 태그를 제거한 수준보다는 나아지도록 Markdownify 적용.
파일 삭제시(이미지) 업로드때 생성된 썸네일과 폴더가 파일이 삭제되거나 업로드가 끝난 후에도 삭제되지 않고 files/attach 디렉토리에 그대로 남아있습니다.
개인 블로그나 텍스트 위주의 사이트라면 큰 문제가 없겠지만 이미지 업로드가 잦은 커뮤니티, 포럼이라면 문제가 있다고 봅니다.
eval 은 별로 없는 것 (사실 한군데 정도..) 같은데
@ 가 붙은 함수는 대단히 많습니다. 가능하면 제거해보는게 어떤가요.
is_readable 까지 확인해놓고 @를 붙이는건 좀 너무해보입니다.
str_replace와 다름 없는 구문에 preg_replace를 쓰는 부분도 있어요. 이런 부분을 다듬을 필요가 있습니다.
생각해보니 상단에 한줄로 굵게 들어간게 좀 불편한데요. 요걸 네모난 버튼으로 만들고 마우스오버시 보여지거나 조금 수정하는게 좋을거 같아요.
이를테면 화면 우측구석이 종이접혀놓은 것처럼 디자인해서 마우스대면 다음장 넘길려는듯한 처리...
(이해돼심??)
DB 검색 모듈 변경
PHP 5.5 대 이상에서 설치시 여전히 빈 오브젝트에 값을 할당하는 오류가 남아있는 듯 합니다. 많은 부분 수정하셔서 없애셨을 것 같은데 아직 남아있네요. xampp 최신버전에서 테스트 했습니다.
설치 설정을 모두 마친후에 발생했구요. 오류 내역은 다음과 같습니다.(중복 라인은 제거했습니다.)
Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\file\file.class.php on line 19 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\poll\poll.class.php on line 19 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\member\member.class.php on line 114 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\point\point.class.php on line 22 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\addon\addon.admin.controller.php on line 232 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\module\module.controller.php on line 400 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\install\script\ko.install.php on line 37 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\install\script\ko.install.php on line 43 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\install\script\ko.install.php on line 96 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\modules\install\script\ko.install.php on line 113 Warning: Creating default object from empty value in C:\xampp\htdocs\nuri\files\faceOff\147\ko.cache.php on line 1
맨 마지막에 보시면 캐시로 생성되는 파일에도 해당 오류가 있는 듯 합니다.
제로보드4와의 호환성을 위한 코드가 Nuri Core 곳곳에 남아있다 제거한다.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.