function editWithArray($itemId, $arg){ if (!isset($itemId) || !is_array($arg)) { return false; } foreach ($arg as $key=>$value) { if (!Validator::enum($key, 'author,permalink,title,autoUpdate,allowRedistribute,tags,focus,visibility')) { return false; } if (!FeedItem::edit($itemId, $key, $value)) { return false; } } return true; }
function on($event, $input = null) { global $service; if (empty($event)) return false; if (!isset($this->case) || !is_array($this->case) || !isset($this->case[$event]) || empty($this->case[$event])) return $input; if (Validator::enum($event, 'Plugin.on,Plugin.off,Plugin.set') && isset($input['plugin']) && !empty($input['plugin'])) { // Plug.on & off & set 이벤트는 연쇄작용 없음 $pluginName = $input['plugin']; include_once(ROOT . '/plugins/'.$input['plugin'].'/index.php'); if (function_exists($this->case[$event][$pluginName])) { $this->pluginURL = $service['path'] . '/plugins/'.$input['plugin'].'/'; return call_user_func($this->case[$event][$pluginName], $input, Plugin::getConfig($pluginName)); } } else { foreach ($this->case[$event] as $plugin=>$func) { include_once(ROOT . '/plugins/'.$plugin.'/index.php'); if (function_exists($func)) { $this->pluginURL = $service['path'] . '/plugins/'.$plugin; $input = call_user_func($func, $input, Plugin::getConfig($plugin)); } } return $input; } }
public function testEnumValidation() { $validator = new Validator(); // This method should fail if we haven't set up the enum list $this->assertThrows('LogicException', array($validator, 'enum'), array('foo')); $validator->setEnumValues(array('', '0', 0, false, '1', 'foo', ' BAR ')); // Passing anything that's not a scalar should throw an exception $this->assertThrows('InvalidArgumentException', array($validator, 'enum'), array(array())); $this->assertThrows('InvalidArgumentException', array($validator, 'enum'), array(new stdClass())); $this->assertThrows('InvalidArgumentException', array($validator, 'enum'), array(null)); // But we can get nulls to validate if we pass the proper assertion $this->assertNull($validator->enum(null, null, Validator::ASSERT_ALLOW_NULL)); /* If we don't pass any options, we get loose matching. Note that boolean true was not included in the enumeration. */ $this->assertSame(true, $validator->enum(true)); // Asserting the type should stop that from working $this->assertThrows('InvalidArgumentException', array($validator, 'enum'), array(true, null, Validator::ASSERT_TYPE_MATCH)); $this->assertThrows('InvalidArgumentException', array($validator, 'enum'), array(1, null, Validator::ASSERT_TYPE_MATCH)); $this->assertSame('1', $validator->enum('1', null, Validator::ASSERT_TYPE_MATCH)); $this->assertSame(false, $validator->enum(false, null, Validator::ASSERT_TYPE_MATCH)); $this->assertSame('0', $validator->enum('0', null, Validator::ASSERT_TYPE_MATCH)); $this->assertSame(0, $validator->enum(0, null, Validator::ASSERT_TYPE_MATCH)); $this->assertSame('', $validator->enum('', null, Validator::ASSERT_TYPE_MATCH)); // The trim filter could also be useful $this->assertSame('', $validator->enum(' ', null, Validator::FILTER_TRIM)); $this->assertSame('foo', $validator->enum(' foo', null, Validator::FILTER_TRIM)); /* This won't work though, because the string is trimmed before it is tested for presence in the enumeration. */ $this->assertThrows('InvalidArgumentException', array($validator, 'enum'), array(' BAR ', null, Validator::FILTER_TRIM)); }
<body style="background:transparent;"> <?php $config = new Settings; $requests = array(); $requests['title'] = $db->escape($_POST['title']); $requests['description'] = $db->escape($_POST['description']); if (isset($_POST['delLogo'])) { $requests['logo'] = ''; @unlink(ROOT.'/cache/logo/'.$config->logo); } $config->setWithArray($requests); if(!empty($_FILES['logoFile']['tmp_name']) && !isset($_POST['delLogo'])){ if (!Validator::enum(func::getExt($_FILES['logoFile']['name']), 'gif,jpg,png')) { echo '<script type="text/javascript">parent.addMessage("'._t('로고는 GIF, JPG, PNG 형식의 파일만 가능합니다').'");</script>'; exit; } else { $path = ROOT . '/cache/logo'; if (!is_dir($path)) { mkdir($path); if (!is_dir($path)) { echo '<script type="text/javascript">parent.addMessage("'._t('로고 이미지를 업로드 할 수 없었습니다').'");</script>'; exit; } @chmod($path, 0777); } if (file_exists($path . '/'. basename($_FILES['logoFile']['name']))) { $filename = substr(md5(time()), -1, 8).$_FILES['logoFile']['name'];
<?php define('ROOT', '../..'); include ROOT . '/lib/includeForAjax.php'; requireStrictRoute(); $response = array(); $response['error'] = 0; $response['message'] = ''; if (!isAdmin()) { $response['error'] = 1; $response['message'] = _t('관리자만이 이 기능을 사용할 수 있습니다.'); } else { $config = new Settings; $newSettings = array(); foreach ($_POST as $key=>$value) { if (!Validator::enum($key, 'skin,title,description,logo,updateCycle,updateProcess,archivePeriod,totalVisit,filter,blackfilter,restrictJoin,restrictBoom,rankBy,rankPeriod,rankLife,welcomePack,language,boomDownReactor,boomDownReactLimit,useRssOut,countRobotVisit,thumbnailLimit,thumbnailSize,thumbnailType,feeditemsOnRss,summarySave,filterType,blackfilterType,useVerifier,verifierType,verifier,directView,saveImages,addressType')) continue; $newSettings[$key] = $db->escape($value); } if (!$config->setWithArray($newSettings)) { $response['error'] = 1 ; $response['message'] = $config->_error; } } func::printRespond($response); ?>
requireStrictRoute(); $response = array(); $response['error'] = 0; $response['message'] = ''; if (Validator::getBool(Settings::get('restrictBoom')) && !isLoggedIn()) { $response['error'] = 1; $response['message'] = _t('로그인 한 사람만 이 기능을 사용할 수 있습니다'); func::printRespond($response); } requireComponent('Bloglounge.Model.Boom'); if (!Validator::enum($_POST['direction'], 'up,down')) { $response['error'] = 1; $response['message'] = $_POST['direction'].'is undefined direction'; func::printRespond($response); } if (!Validator::is_digit($_POST['itemId'])) { $response['error'] = 1; $response['message'] = 'illegal id'; } $itemId = $_POST['itemId']; switch($_POST['direction']) { case 'up': if (isLoggedIn()) { $userid = $session['id'];
$step_text = _t('삭제완료'); include ROOT . '/config.php'; // $database if (!isset($database['type'])) $database['type'] = 'mysql'; $db = DB::start($database['type']); if (!($database['alive'] || $db->alive)) { header("Location: {$path}/setup/?step=uninstall&error=8"); exit; } $IV = array(); foreach ($_POST as $key=>$value) { if (Validator::enum($key, 'userid,userpw')) $IV[$key] = $db->escape($value); } if (!isset($IV['userid']) || !isset($IV['userpw'])) { header("Location: {$path}/setup/?step=uninstall&error=10"); exit; } if (!list($loginid, $password, $is_admin) = $db->pick("SELECT loginid, password, is_admin FROM {$database['prefix']}Users WHERE loginid='{$IV['userid']}'")) { header("Location: {$path}/setup/?step=uninstall&error=11"); exit; } if ($password != Encrypt::hmac($IV['userid'], md5(md5($IV['userpw'])))) { header("Location: {$path}/setup/?step=uninstall&error=12");
<?php // ** 검색어 호환 처리 if (isset($_GET['type']) && Validator::enum($_GET['type'], 'all,tag,blogURL,archive')) { switch (strtolower($_GET['type'])) { case 'tag': $_GET['tag'] = $_GET['keyword']; $_GET['keyword'] = ''; break; case 'blogurl': $_GET['blogURL'] = $_GET['keyword']; $_GET['keyword'] = ''; break; case 'archive': $_GET['archive'] = $_GET['keyword']; $_GET['keyword'] = ''; break; } } $searchType = 'all'; // global if (isset($_GET['tag']) && !empty($_GET['tag'])) $searchType = 'tag'; else if (isset($_GET['blogURL']) && !empty($_GET['blogURL'])) $searchType = 'blogURL'; else if (isset($_GET['archive']) && !empty($_GET['archive'])) $searchType = 'archive'; $searchKeyword = ''; // global if (isset($_GET['keyword']) && !empty($_GET['keyword'])) $searchKeyword = urldecode(trim($_GET['keyword'])); else if (isset($_GET['tag']) && !empty($_GET['tag'])) $searchKeyword = urldecode(trim($_GET['tag'])); else if (isset($_GET['blogURL']) && !empty($_GET['blogURL'])) $searchKeyword = urldecode(trim($_GET['blogURL']));
include ROOT . '/lib/includeForAjax.php'; requireStrictRoute(); $response = array(); $response['error'] = 1; $response['message'] = ''; if (!isAdmin()) { $response['error'] = 1; $response['message'] = _t('관리자만이 이 기능을 사용할 수 있습니다.'); } else { $index=0; $fields = array(); $pluginName = $_POST['pluginName']; $types = explode('|', $_POST['fieldTypes']); foreach ($_POST as $key=>$value) { if (Validator::enum($key, 'fieldTypes,pluginName')) continue; $type = $types[$index]; $key = substr($key, 1, strlen($key)-1); array_push($fields, array('name'=>$key, 'value'=>$value, 'type'=>$type, 'isCDATA'=>(strtolower($type)=='textarea')?true:false)); $index++; } if (Plugin::setConfig($pluginName, $fields)) $response['error'] = 0; } func::printRespond($response); ?>
define('ROOT', '../..'); include ROOT . '/lib/includeForAjax.php'; requireStrictRoute(); $response = array(); $response['error'] = 0; $response['message'] = ''; if (!isAdmin()) { $response['error'] = 1; $response['message'] = _t('관리자만이 이 기능을 사용할 수 있습니다.'); } else { $arg = array(); foreach ($_POST as $key=>$value) { if (!Validator::enum($key, 'postList,postListDivision,postListDirection,postTitleLength,postDescLength,postNewLife,feedList,feedOrder,feedTitleLength,boomList,boomTitleLength,feedListPage,feedListPageOrder,feedListPageTitleLength,feedListRecentFeedList,focusList,focusTitleLength,focusDescLength,tagCloudOrder,tagCloudLimit')) continue; $arg[$key] = $value; } $__s = new SkinSettings; if (!$__s->setWithArray($arg)) { $response['error'] = 1; $rseponse['message'] = $__s->_error; } } func::printRespond($response); ?>
function num2talk($num) { global $__locale; $myLocale = (isset($__locale['locale']) && !empty($__locale['locale'])) ? $__locale['locale'] : 'ko'; // default is ko if (!Validator::enum($myLocale, 'ko,ja,zn')) // only CJK return $num; $zero = array(); $zero['ko'] = '영'; $zero['ja'] = $zero['zh']= '零'; if (!isset($num) || ($num <= 0)) return $zero[$myLocale]; $num = "$num"; $len = $s = strlen($num); $result = array(); switch ($myLocale) { case 'zh': case 'ja': $hfix = '二十'; $units = array('','萬','億','兆','京','垓'); $unitl = array('','十','百','千'); $nc = array('','一','二','三','四','五','六','七','八','九'); $nk = array('','一','二','三','四','五','六','七','八','九'); $nh = array('','十','二十','三十','四十','五十','六十','七十','八十','九十'); break; default: case 'ko': $hfix = '스무'; $units = array('','만','억','조','경','해'); $unitl = array('','십','백','천'); $nc = array('','일','이','삼','사','오','육','칠','팔','구'); $nk = array('','한','두','세','네','다섯','여섯','일곱','여덟','아홉'); $nh = array('','열','스물','서른','마흔','쉰','예순','일흔','여든','아흔'); break; } for ($i = 0; $i < $len; $i++) { $v = $num{$i}; $r = $nc[$v]; if ($i > $len-2) $r = $nk[$v]; $c = ( --$s % 4 ); $t = ( $v ) ? $unitl[$c] : ''; switch ($c) { case 0: $cut = ($i < 4) ? $i : 3; $tmp = substr($num, $i-$cut, $cut+1); if (!intval($tmp)) $t = ''; else $t = $units[floor($s/4)]; break; case 1: if ($i > $len-3) { if (($v == 2) && ($num{$i+1} == '0')) $r = $hfix; else $r = $nh[$v]; $t = ''; } else if ($v == 1) $r = ''; break; case 2: case 3: if ($v == 1) $r = ''; break; } array_push($result, $r.$t); } return @implode('', $result); }
function saveFeedItem($feedId,$feedVisibility,$item){ global $database, $db, $event; $db->query("SELECT id FROM {$database['prefix']}DeleteHistory WHERE feed='$feedId' and permalink='{$item['permalink']}'"); if ($db->numRows() > 0) return false; if ($item['written']>gmmktime()+86400) return false; $item['title']=$db->escape($db->lessen(UTF8::correct($item['title']))); list($useRssOut) = Settings::gets('useRssOut'); list($feedCreated,$localFilter,$localFilterType) = Feed::gets($feedId, 'created,filter,filterType'); $tagString=$db->escape($db->lessen(UTF8::correct(implode(', ',$item['tags'])))); list($globalFilter,$blackFilter,$globalFilterType,$blackFilterType) = Settings::gets('filter,blackfilter,filterType,blackfilterType'); $filter = empty($globalFilter)?$localFilter:$globalFilter; $filterType = empty($globalFilter)?$localFilterType:$globalFilterType; if (!Validator::is_empty($filter)) { $filtered = true; $allowTags = explode(',', $filter); if($filterType == 'tag' || $filterType == 'tag+title') { foreach ($allowTags as $ftag) { if (Validator::enum($ftag, $tagString)) { $filtered = false; break; } } } if($filtered && ($filterType == 'title' || $filterType == 'tag+title')) { foreach ($allowTags as $ftag) { if(strpos($item['title'],$ftag)!==false) { $filtered = false; break; } } } if ($filtered) return false; } if (!Validator::is_empty($blackFilter)) { $filtered = false; $denyTags = explode(',', $blackFilter); if($blackFilterType == 'tag' || $blackFilterType == 'tag+title') { foreach ($denyTags as $ftag) { if (Validator::enum($ftag, $tagString)) { $filtered = true; break; } } } if($filtered && ($filterType == 'title' || $filterType == 'tag+title')) { foreach ($denyTags as $ftag) { if(strpos($item['title'],$ftag)!==false) { $filtered = true; break; } } } if ($filtered) return false; } if (preg_match('/\((.[^\)]+)\)$/Ui', trim($item['author']), $_matches)) $item['author'] = $_matches[1]; $item['author']=$db->escape($db->lessen(UTF8::correct($item['author']))); $item['permalink']=$db->escape($db->lessen(UTF8::correct($item['permalink']))); $item['description']=$db->escape($db->lessen(UTF8::correct(trim($item['description'])),65535)); $enclosures = array(); foreach($item['enclosures'] as $en) { array_push($enclosures, $en['url']); } $enclosureString=$db->escape($db->lessen(UTF8::correct(implode('|',$enclosures)))); $deadLine=0; $feedLife = Settings::get('archivePeriod'); if ($feedLife > 0) $deadLine=gmmktime()-($feedLife*86400); requireComponent('Bloglounge.Data.FeedItems'); $oldTags = null; $id = FeedItem::getIdByURL($item['permalink']); if($id === false && isset($item['guid'])) { $item['guid']=$db->escape($db->lessen(UTF8::correct($item['guid']))); $id = FeedItem::getIdByURL($item['guid']); } $item['author'] = Feed::getAuthor($item, $feedId, $id); $item['title'] = Feed::getTitle($item, $feedId, $id); $affected = 0; $isRebuildData = false; $summarySave = Settings::get('summarySave'); $description = $item['description']; if(Validator::getBool($summarySave)) { // summarySave $description = func::stripHTML($item['description'].'>'); if (substr($description, -1) == '>') $description = substr($description, 0, strlen($description) - 1); $description = $db->lessen(func::htmltrim($description), 1000, ''); } if (preg_match("/^[0-9]+$/",$id)) { $baseItem = FeedItem::getFeedItem($id); // $baseItem['title']=$db->escape(UTF8::correct($baseItem['title'])); // $baseItem['description']=$db->escape(UTF8::correct(trim($baseItem['description']))); if(($baseItem['title']!=$item['title'])) { $isRebuildData = true; $tags = FeedItem::get($id, 'tags'); requireComponent('LZ.PHP.Media'); Media::delete($id); $oldTags = func::array_trim(explode(',', $tags)); $db->execute("UPDATE {$database['prefix']}FeedItems SET author = '{$item['author']}', title = '{$item['title']}', description = '{$description}', tags = '$tagString', enclosure = '$enclosureString', written = {$item['written']} WHERE id = $id"); } } else { if ($item['written']==0) $item['written']=gmmktime(); if ($item['written']>$deadLine) { $db->execute("INSERT INTO {$database['prefix']}FeedItems (feed, author, permalink, title, description, tags, enclosure, written, feedVisibility) VALUES ($feedId, '{$item['author']}', '{$item['permalink']}', '{$item['title']}', '{$description}', '$tagString', '$enclosureString', {$item['written']},'{$feedVisibility}')"); $id =$db->insertId(); $db->execute('UPDATE '.$database['prefix'].'Feeds SET feedCount=feedCount+1 WHERE id="'.$feedId.'"'); if (isset($this)) $this->updated++; } $isRebuildData = true; } if(Validator::getBool(Settings::get('saveImages'))) { if($description = FeedItem::saveImages($feedId, $id, $item)) { $db->execute("UPDATE {$database['prefix']}FeedItems SET description = '{$description}' WHERE id = $id"); } } $item = $event->on('Add.updateFeedItem', array($feedId, $id, $item)); if(count($item)==3) $item = $item[2]; $result = false; if($isRebuildData) { requireComponent('Bloglounge.Data.Groups'); GroupCategory::buildGroupCategory($id, $feedId, $item['tags']); Tag::buildTagIndex($id, $item['tags'], $oldTags); Category::buildCategoryRelations($id, $item['tags'], $oldTags); $isSaveThumbnail = FeedItem::cacheThumbnail($id, $item); // 썸네일 저장 이벤트 $event->on('Add.thumbnailSave',array($item, $feedId, $id, $isSaveThumbnail)); $result = true; } return $result; }