<?php
if(!defined("__XE__")) exit();
 
if(Context::get("content")&&strpos(Context::get("act"), "proc")>-1&&$called_position=="before_module_proc")
{
    class mta
    {
        /**
         * @author Lalafell (a.k.a Laighlinne)
         * @brief reset preg_match_all result like C#
         */
        public function match_to_array($a)
        {
            $b = array();
            foreach($a as $key=>$val)
            {
                foreach($val as $k=>$v)
                {
                    $b[$k][$key] = $v;
                }
            }
            return $b;
        }
    }
 
    $mta = new mta();
    $content = Context::get("content");
    $allow = TRUE;
    $class_pattern = array("sound_only", "wfsr", "ui-helper-hidden");
    $style_pattern = array("display"=>"none");
 
    $reg = "/class=\"([^\"]+)\"/im";
    $style_reg = "/style=\"([^\"]+)\"/im";
    preg_match_all($reg, $content, $matches);
    $matches = $mta->match_to_array($matches);
    // using class check
    foreach($matches as $key=>$val) // class
    {
        if(strpos($val[1], " ") > -1)
        {
            $items = explode(" ", $val[1]);
            foreach($items as $v)
            {
                if(in_array($v, $class_pattern))
                {
                    $allow = FALSE;
                }
            }
        }
        else
        {
            if(in_array($val[1], $class_pattern))
            {
                $allow = FALSE;
            }
        }
    }
    preg_match_all($style_reg, $content, $matches);
    $matches = $mta->match_to_array($matches);
 
    // using style check
    foreach($matches as $key=>$val)
    {
        if(strpos($val[1], ";") > -1)
        {
            $items = explode(";", $val[1]);
            foreach($items as $v)
            {
                $styles = explode(":", $v);
                foreach($style_pattern as $rk=>$rv)
                {
                    if($styles[0] == trim($rk) && $styles[1] == trim($rv))
                    {
                        $allow = FALSE;
                    }
                }
            }
        }
        else
        {
            $styles = explode(":", $v);
            foreach($style_pattern as $rk=>$rv)
            {
                if($styles[0] == trim($rk) && $styles[1] == trim($rv))
                {
                    $allow = FALSE;
                }
            }
        }
    }
 
    if(!$allow)
    {
        echo "<msg>작성불가</msg>";
        exit();
    }
}

 

일단 글 몇개 검색해서 해당 내용으로 작성했을때는 안 되는데용...

상황이 다양하다 보니 잘 모르겠네요 작성이 아예 안되게 막습니다.

 

일반 이용자가 글 내에 클래스를 넣을 일도 없고 display:none를 넣을 일이 거의 없어서 아마 문제없이 될거 같네요...

애드온으로 만들어서 넣으시면 됩니다. 배포해도 되는데 음 버전관리가 귀찮은 작품이라서용...

 

일단 마켓에 올려놓겠습니다 ㅋㅋ;

글쓴이 라라펠

profile
┌─────────────────────────────────────┐
│XE를 혼자 개발하고 혼자 씁니다. 기능 공유는 제 코딩 스타일이 난잡해서 힘들지도│
│자료가 필요해서 온게 아니라 XE 생태계가 궁금해서 찾아온 길가던 행인 1입니다 │
│https://rxe.st/xe/index.php?mid=contect or https://github.com/lalafellsleep│
│개인메세지는 위 주소로 부탁드립니다. 쪽지로 오는 문의나 질문은 모두 무시합니다│
└─────────────────────────────────────┘

프로그래밍 초보 입니다. 진짜로요
외주같은건 별로 관심 없습니다...

이 콘텐츠가 마음에 드셨다면 커피 한잔 (후원)

닫기
작가에게 커피 한잔(후원)을 사주세요.
  • profile
    RayHur 2018.03.16 21:38:31
    슥삭슥삭 뚝딱 ~~~ 완성 ... 라라펠님은 찍어내는 수준이네요 ㅋㅋ 그냥 부러울 뿐입니다. 저는 코드를 아무리 뜯어봐도 모르겠는뎅 ㅠㅠ
    1
  • profile
    라라펠 2018.03.16 21:51:24
    https://xetown.com/rxe_point/926257 에서 받으실 수 있습니다.
    2
  • profile
    Chronos 2018.03.17 08:50:52
    새로운 애드온 공장장님의 탄생 ㅎㅎ

서버에 요청 중입니다. 잠시만 기다려 주십시오...