GithubHelp home page GithubHelp logo

core's Introduction

core

NURI Core

NURI Core is the base frame of NURI CMS. NURI CMS is a web CMS program, branched out from XpressEngine.

core's People

Contributors

eundong avatar largeden avatar misol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

core's Issues

Mssql, Cubrid 미지원으로 변경

DB 중 Mssql, Cubrid 를 미지원하는게 어떤가 싶습니다.
유지 보수가 가능할지 모르겠어서요.
Mysql 과 MariaDB는 겹치니 둘을 잘 다듬어가는게 어떤가요?

자동로그인 보안 레벨 추가

자동 로그인 보안 레벨 옵션을 추가해서 멀티디바이스를 사용하는 사람이 보안적으로 불리하더라도 자동로그인을 쉽게 쓸수있도록 제작

faceOff 관련 코드 제거.

사용하지 않는 faceOff 관련 코드를 제거합니다.
관리자페이지에서 CSS 수정이나, HTML 수정 등 사용자 설정으로 사용되는 부분은 남겨둡니다.

게시물 cache가 다른 동작에 의해 변형되는 문제

문서의 목록 등을 가져올 때 $columnList가 다른 값이 지정되면 기존 캐시를 덮어버리는 문제가 있음.

이로 인해 각기 다른 컬럼을 필요로 하는 기능에서 일부 컬럼이 제거되어 동작에 영향을 주거나 데이터를 표시하지 못 함.

기존 cache가 있고 $columnList 변동이 있으면 덮어버리는 게 아니라 추가로 가져온 데이터를 추가하는 방식으로 변경해야 함.

에디터 기본 파일 업로더에서 플래시 제거.

가능하면 html 기본 기능으로도 올릴 수 있게 하고, 자바스크립트를 이용해서라도 플래시를 제거하는게 목표.
플래시가 설치되지 않은 PC에서 업로드 할 수 있는 수준이면 됨.
브라우저는 IE, FF 와 그 이상, OS는 Windows 7과 그 이상, 우분투 등 리눅스, iOS 등에서 테스트 해볼것.

point_level_icon 애드온에서 XML 및 JSON 응답에서 동작할 때 문제

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 응답 요청하여 확인 가능.
혹은, 첨부 이미지 참조.

page.class.php 파일 속의 php5.4 호환성 개선.

            $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()에서 애드온 호출 전에 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);

일부 확장기능 제거 논의

별도의 저장소로 분리하여 유지보수를 진행하거나 제거 할 대상을 선정.

예로 point, counter, poll 등의 부가적인 기능들(모듈, 애드온, 위젯)의 분리 운영 및 유지보수 중단 결정.

관리자페이지 Section Toggle을 줄바 전체에서 진행되도록 변경

<section class="section"><h1>고급</h1>...</section>

현재 관리자페이지에서 각종 설정 그룹을 지정할때 사용하는 section태그에 Toggle을 이용해서 접었다가 폈다가 할 수 있습니다. 헌데 컨트롤 할 수 있는 버튼이 오른쪽 구석에 조그맣게 있기 때문에 화면이 크거나 하면 마우스움직임 등 불편함을 줍니다.

h1타이틀에서부터 화살표 버튼까지 Toggle의 영역으로 지정하여 줄바의 클릭으로 접었다펴기를 수월하게 사용하도록 합니다.

setRequestMethod 기능 추가

#37

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);

이름, 카피라이트 변경

누리 또는 Nuri 로 이름을 변경한다.
NuriCMS
누리CMS
NuriCore
누리 코어
등의 용어를 상황에 맞게 사용한다.

예시 웹 사이트 주소 중 모 프로젝트를 가리키는 주소는 nuricms.org 로 모두 변경한다.

member 모듈의 dispMemberAdminConfig 정의에 대하여...

<!--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 구조 재정비 필요

*.admin.controller.php의 역할대로 모순이 발생하지 않도록 manager 접근으로 permission을 재정비해야한다고 생각합니다.

member 모듈을 예로 설명하면,

member.admin.controller.php 파일안에 기능들은 admin에서만 동작하도록 형태를 취하고 있지만 관리자체크를 하지 않고 있습니다. 최근 csrf 보안이슈때문에 임시적으로 is_admin체크를 올려놨지만 본래대로라면 권한체크는 module.xml에서 permission으로 정의해야하고 init()를 통해 csrf를 지정했어야합니다.

AXUpload5 drag selecter...

  • AXUpload5 첨부된 파일 선택에 drag selecter를 추가예정
  • jQuery UI Touch Punch을 이용하여 모바일 매체에서도 드래그 선택이 가능하도록 개선

카페XE를 Domain 접속으로 설정 후 관리페이지 접속 불가

XE 1.7.3.4

cafeXE 1.7.0.1

위 버전에서 카페 생성 -> Domain 접속으로 생성하신 후에 카페관리에 들어가실려면 '잘못된 요청입니다.' 라고 표시되면서 접속이 안되는 증상이 있습니다. 해당 증상은 아래와 같은 경우만 발생합니다.

  1. 관리자페이지 기본 URL이 공란일 경우
  2. 관리자페이지 기본 URL의 도메인 주소와 카페XE Domain 접속 URL 주소가 같은 경우

도메인이 하나만 있고 카페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을 공란으로 두시면 해결 됩니다.

HTML5 AXUpload5 강화

현재까지는 기능구현과 XE의 호환성 관련 처리를 중점으로 개발했는데요.
이제 NuriCms에 최적화된 작업을 진행해보려고 합니다.

  • 업로드, 다운로드 시에 불필요한 리로딩 요청 수 줄이기
  • 리스트업 UploadItem icon 사이즈를 80에서 60 혹은 48(현재 이곳의 제 아이콘 크기) 까지 줄여서 compact하게 만듬

feature/html5_upload_enhancement 에서 진행하겠습니다.

procFileUpload()에 자그마한 기능개선 필요

업로드를 다루고 있는 지금입니다만, 만들다보니 현재의 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에 넣어보고 싶군요...

의견좀 주세요~

메일 내용 중 Plain text 개선

Mail 클래스로 발송되는 메일의 Plain text 부분이 단순히 태그를 제거한 수준보다는 나아지도록 Markdownify 적용.

속도가 많이 걸리는 함수 제거

eval 은 별로 없는 것 (사실 한군데 정도..) 같은데
@ 가 붙은 함수는 대단히 많습니다. 가능하면 제거해보는게 어떤가요.
is_readable 까지 확인해놓고 @를 붙이는건 좀 너무해보입니다.

str_replace와 다름 없는 구문에 preg_replace를 쓰는 부분도 있어요. 이런 부분을 다듬을 필요가 있습니다.

관리자모드에서 상단이 보이는 바의 처리

생각해보니 상단에 한줄로 굵게 들어간게 좀 불편한데요. 요걸 네모난 버튼으로 만들고 마우스오버시 보여지거나 조금 수정하는게 좋을거 같아요.

이를테면 화면 우측구석이 종이접혀놓은 것처럼 디자인해서 마우스대면 다음장 넘길려는듯한 처리...
(이해돼심??)

PHP 최신버전에서 설치 오류 문제 보고

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

맨 마지막에 보시면 캐시로 생성되는 파일에도 해당 오류가 있는 듯 합니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.