Example #1
0
 /**
  * Функция добавления ссылки:
  */
 public static function CreateLink($params)
 {
     $cache = KVS::getInstance();
     $id = $cache->incr(__CLASS__, null, 'nextId');
     if (!ControlModel::CheckLinkfilter($params['link']) && ($category = self::CheckCategory($params['link'])) !== false) {
         $params['description'] = TexyHelper::typo($params['description']);
         $record = array('id' => $id, 'link' => preg_replace('/(#.*)$/i', '', $params['link']), 'description' => $params['description'], 'category' => $category, 'board' => $category['board'], 'clicks' => 0, 'visitors' => array($_SERVER['REMOTE_ADDR']));
         $cache->set(__CLASS__, 'links', $id, serialize($record));
         $cache->expire(__CLASS__, 'links', $id, 60 * 60 * 24);
         // expire after 24 hours
         $cache->listAdd(__CLASS__, null, 'links', $id);
         $cache->set(__CLASS__, null, 'lastUpdate', time());
         EventModel::getInstance()->Broadcast('add_online_link', $record);
         return true;
     }
     return false;
 }
Example #2
0
/add_comment/" method="post" id="comment_form">
					<input type="text" name="email" value="" class="g-hidden" />
					<input type="hidden" name="post_id" value="<?php 
        echo $post['id'];
        ?>
" />
					<input type="hidden" name="homeboard" value="anonymous" />
					<div class="b-comment-form">
						<strong>Комментировать:</strong>
						<span class="b-comment-form_b-helplink">
							<a href="/help/markup/" target="_blank">Правила разметки</a>
						</span>

						<div>
						<?php 
        if (ControlModel::isCommentCaptcha()) {
            ?>
							<div class="b-comment-form_b-captcha">
								<input type="hidden" name="captcha_key" value="<?php 
            echo $this->getParameter('captcha_key');
            ?>
" />
								<input type="text" name="captcha" value=""<?php 
            if (array_key_exists('captcha', $form_errors)) {
                ?>
 class="g-input-error"<?php 
            }
            ?>
 />
								<img src="http://<?php 
            echo TemplateHelper::getSiteUrl();
Example #3
0
    ?>
/ico/homeboards/<?php 
    echo $data[0];
    ?>
" class="b-homeboard-form_icon" />
										</a>
									<?php 
}
?>

									</div>
								</span>
							</div>
						</div>
				<?php 
if (ControlModel::isPostHandApproving()) {
    ?>
						<div class="b-blog-form_b-info">Премодерация: ваше сообщение может быть одобрено только модератором.</div>
				<?php 
}
?>

						<div class="b-blog-form_b-actions">
							<input type="submit" value="Отправить" />
							<input type="button" value="Предпросмотр" disabled="disabled" id="blog_form_preview_button" />
						</div>

						<div class="b-blog-form_b-form"  id="blog_form_last_posts" style="display:none">
							<div class="b-blog-form_b-form_b-field">
								<h2>Новые сообщения:</h2>
								<p>С момента начала написания нового поста, были добавлены нижеперечисленные записи. Пожалуйста, избегайте повторяющихся тем сообщений.</p>
Example #4
0
/ico/tick.png" width="16" height="16" alt="" /></a>
		<a href="#" id="mod_rateable" title="Оцениваема"><img src="http://<?php 
echo TemplateHelper::getSiteUrl();
?>
/ico/rate_on.png" width="16" height="16" alt="" /></a>
		<a href="#" id="mod_closed"   title="Закрыта"><img src="http://<?php 
echo TemplateHelper::getSiteUrl();
?>
/ico/block.png" width="16" height="16" alt="" /></a>
		<a href="#" id="mod_remove"   title="Удалить"><img src="http://<?php 
echo TemplateHelper::getSiteUrl();
?>
/ico/remove.gif" width="16" height="16" alt="" /></a>
	</div>
	<?php 
if ($message = ControlModel::isGlobalMessage()) {
    ?>
		<div class="b-global-message-panel">
			<div class="l-wrap">
				<img src="http://<?php 
    echo TemplateHelper::getSiteUrl();
    ?>
/ico/warning.png" width="16" height="16" alt="" /> <?php 
    echo $message;
    ?>
			</div>
		</div>
	<?php 
}
?>
		<div class="l-wrap">
Example #5
0
 /**
  * Действие удаление ссылки из ротатора:
  */
 public function removeOnlineLinkAjaxAction(Application $application)
 {
     if (!Session::getInstance()->isAdminSession()) {
         return false;
     }
     $link = Blog_BlogOnlineModel::GetLink($_GET['id']);
     if ($link) {
         Blog_BlogOnlineModel::RemoveLink($_GET['id']);
         ControlModel::logModEvent(date("d-m-Y H:i:s") . ' ' . $_SESSION['auth']['name'] . '<br /> удалил ссылку ' . $link['link'] . '<br /><em>' . strip_tags($link['description']) . '</em>');
         JabberBot::send('-=$ /me (модлог) ' . $_SESSION['auth']['name'] . ' удалил ссылку ' . $link['link'] . ': ' . strip_tags($link['description']));
     }
     return true;
 }
Example #6
0
 /**
  * Добавление новой ссылки (ajax):
  */
 public function addAjaxAction(Application $application)
 {
     if (ControlModel::isLiveCaptcha()) {
         return array('isValid' => 'captcha');
     }
     ControlModel::checkContent($_POST['description']);
     $validator = new ValidatorHelper($_POST);
     $validator->assertExists('link', 'Не введена ссылка');
     $validator->assertRegexp('link', ValidatorHelper::URL_REGEXP, 'Ссылка введена неверно');
     if ($validator->fieldValid('link')) {
         $validator->assertTrue('link', Blog_BlogOnlineModel::CheckCategory($_POST['link']) !== false, 'Данная ссылка не может участвовать в ленте');
     }
     if ($validator->fieldValid('link')) {
         $validator->assertTrue('link', Blog_BlogOnlineModel::CheckLinkPosted($_POST['link']) != true, 'Ссылка уже участвует в ленте');
     }
     $validator->assertTrue('timeout', ControlModel::getLiveInterval() == 0, 'Таймаут ' . TemplateHelper::ending(ControlModel::getLiveInterval(), 'секунда', 'секунды', 'секунд'));
     $validator->assertTrue('link', !ControlModel::CheckLinkfilter($params['link']), 'Запрещенная ссылка');
     $validator->assertExists('description', 'Не введено описание');
     $validator->assertLength('description', 100, 'Описание длиннее 100 символов');
     if ($validator->isValid()) {
         Blog_BlogOnlineModel::CreateLink($_POST);
         return true;
     }
     return array('isValid' => $validator->isValid(), 'validationResults' => $validator->getValidationResults());
 }
Example #7
0
 /**
  * Проверка на модераторство:
  */
 public function isModerator($key)
 {
     $moderators = ControlModel::GetModerators();
     foreach ($moderators as $mod) {
         if ($mod['key'] === $key) {
             $_SESSION['auth'] = $mod;
             return true;
         }
     }
     return false;
 }
Example #8
0
 /**
  * Действие добавления комментария (ajax):
  */
 public function addCommentAjaxAction(Application $application)
 {
     $session = Session::getInstance();
     if ($session->isJustCreated()) {
         return false;
     }
     $validator = new ValidatorHelper($_POST);
     $validator->assertExists('text', 'Не введен текст комментария');
     $validator->assertExists('post_id', 'Не указан идентификатор поста');
     $validator->assertLength('text', 2048, 'Текст комментария слишком длинный');
     $validator->assertNotExists('email', 'Заполнено лишнее поле');
     $text_test = ControlModel::checkContent($_POST['text']);
     if (ControlModel::isCommentCaptcha()) {
         return array('captcha' => true);
     }
     $validator->assertTrue('text', $text_test, 'Запрещенное слово из вордфильтра');
     $validator->assertTrue('timeout', ControlModel::getPostCommentInterval() == 0, 'Таймаут ' . TemplateHelper::ending(ControlModel::getPostCommentInterval(), 'секунда', 'секунды', 'секунд'));
     if ($validator->isValid()) {
         $id = Blog_BlogCommentsModel::CreateComment($_POST, true);
         $session->activeSet('last_visit_post_' . $_POST['post_id'], time());
     }
     return array('isValid' => $validator->isValid(), 'validationResults' => $validator->getValidationResults());
 }
Example #9
0
 function KCAPTCHA()
 {
     $config = Config::getInstance();
     $captcha_config = $config['captcha'];
     $length = ControlModel::getCaptchaLength();
     extract($captcha_config);
     $fonts = array();
     $fontsdir_absolute = dirname(__FILE__) . '/' . $fontsdir;
     if ($handle = opendir($fontsdir_absolute)) {
         while (false !== ($file = readdir($handle))) {
             if (preg_match('/\\.png$/i', $file)) {
                 $fonts[] = $fontsdir_absolute . '/' . $file;
             }
         }
         closedir($handle);
     }
     $alphabet_length = strlen($alphabet);
     do {
         // generating random keystring
         while (true) {
             $this->keystring = '';
             for ($i = 0; $i < $length; $i++) {
                 $this->keystring .= $allowed_symbols[mt_rand(0, strlen($allowed_symbols) - 1)];
             }
             if (!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/', $this->keystring)) {
                 break;
             }
         }
         $font_file = $fonts[mt_rand(0, count($fonts) - 1)];
         $font = imagecreatefrompng($font_file);
         imagealphablending($font, true);
         $fontfile_width = imagesx($font);
         $fontfile_height = imagesy($font) - 1;
         $font_metrics = array();
         $symbol = 0;
         $reading_symbol = false;
         // loading font
         for ($i = 0; $i < $fontfile_width && $symbol < $alphabet_length; $i++) {
             $transparent = imagecolorat($font, $i, 0) >> 24 == 127;
             if (!$reading_symbol && !$transparent) {
                 $font_metrics[$alphabet[$symbol]] = array('start' => $i);
                 $reading_symbol = true;
                 continue;
             }
             if ($reading_symbol && $transparent) {
                 $font_metrics[$alphabet[$symbol]]['end'] = $i;
                 $reading_symbol = false;
                 $symbol++;
                 continue;
             }
         }
         $img = imagecreatetruecolor($width, $height);
         imagealphablending($img, true);
         $white = imagecolorallocate($img, 255, 255, 255);
         $black = imagecolorallocate($img, 0, 0, 0);
         imagefilledrectangle($img, 0, 0, $width - 1, $height - 1, $white);
         // draw text
         $x = 1;
         for ($i = 0; $i < $length; $i++) {
             $m = $font_metrics[$this->keystring[$i]];
             $y = mt_rand(-$fluctuation_amplitude, $fluctuation_amplitude) + ($height - $fontfile_height) / 2 + 2;
             if ($no_spaces) {
                 $shift = 0;
                 if ($i > 0) {
                     $shift = 10000;
                     for ($sy = 7; $sy < $fontfile_height - 20; $sy += 1) {
                         for ($sx = $m['start'] - 1; $sx < $m['end']; $sx += 1) {
                             $rgb = imagecolorat($font, $sx, $sy);
                             $opacity = $rgb >> 24;
                             if ($opacity < 127) {
                                 $left = $sx - $m['start'] + $x;
                                 $py = $sy + $y;
                                 if ($py > $height) {
                                     break;
                                 }
                                 for ($px = min($left, $width - 1); $px > $left - 12 && $px >= 0; $px -= 1) {
                                     $color = imagecolorat($img, $px, $py) & 0xff;
                                     if ($color + $opacity < 190) {
                                         if ($shift > $left - $px) {
                                             $shift = $left - $px;
                                         }
                                         break;
                                     }
                                 }
                                 break;
                             }
                         }
                     }
                     if ($shift == 10000) {
                         $shift = mt_rand(4, 6);
                     }
                 }
             } else {
                 $shift = 1;
             }
             imagecopy($img, $font, $x - $shift, $y, $m['start'], 1, $m['end'] - $m['start'], $fontfile_height);
             $x += $m['end'] - $m['start'] - $shift;
         }
     } while ($x >= $width - 10);
     // while not fit in canvas
     $center = $x / 2;
     // credits. To remove, see configuration file
     $img2 = imagecreatetruecolor($width, $height + ($show_credits ? 12 : 0));
     $foreground = imagecolorallocate($img2, $foreground_color[0], $foreground_color[1], $foreground_color[2]);
     $background = imagecolorallocate($img2, $background_color[0], $background_color[1], $background_color[2]);
     imagefilledrectangle($img2, 0, 0, $width - 1, $height - 1, $background);
     imagefilledrectangle($img2, 0, $height, $width - 1, $height + 12, $foreground);
     $credits = empty($credits) ? $_SERVER['HTTP_HOST'] : $credits;
     imagestring($img2, 2, $width / 2 - imagefontwidth(2) * strlen($credits) / 2, $height - 2, $credits, $background);
     // periods
     $rand1 = mt_rand(750000, 1200000) / 10000000;
     $rand2 = mt_rand(750000, 1200000) / 10000000;
     $rand3 = mt_rand(750000, 1200000) / 10000000;
     $rand4 = mt_rand(750000, 1200000) / 10000000;
     // phases
     $rand5 = mt_rand(0, 31415926) / 10000000;
     $rand6 = mt_rand(0, 31415926) / 10000000;
     $rand7 = mt_rand(0, 31415926) / 10000000;
     $rand8 = mt_rand(0, 31415926) / 10000000;
     // amplitudes
     $rand9 = mt_rand(330, 420) / 110;
     $rand10 = mt_rand(330, 450) / 110;
     //wave distortion
     for ($x = 0; $x < $width; $x++) {
         for ($y = 0; $y < $height; $y++) {
             $sx = $x + (sin($x * $rand1 + $rand5) + sin($y * $rand3 + $rand6)) * $rand9 - $width / 2 + $center + 1;
             $sy = $y + (sin($x * $rand2 + $rand7) + sin($y * $rand4 + $rand8)) * $rand10;
             if ($sx < 0 || $sy < 0 || $sx >= $width - 1 || $sy >= $height - 1) {
                 continue;
             } else {
                 $color = imagecolorat($img, $sx, $sy) & 0xff;
                 $color_x = imagecolorat($img, $sx + 1, $sy) & 0xff;
                 $color_y = imagecolorat($img, $sx, $sy + 1) & 0xff;
                 $color_xy = imagecolorat($img, $sx + 1, $sy + 1) & 0xff;
             }
             if ($color == 255 && $color_x == 255 && $color_y == 255 && $color_xy == 255) {
                 continue;
             } else {
                 if ($color == 0 && $color_x == 0 && $color_y == 0 && $color_xy == 0) {
                     $newred = $foreground_color[0];
                     $newgreen = $foreground_color[1];
                     $newblue = $foreground_color[2];
                 } else {
                     $frsx = $sx - floor($sx);
                     $frsy = $sy - floor($sy);
                     $frsx1 = 1 - $frsx;
                     $frsy1 = 1 - $frsy;
                     $newcolor = $color * $frsx1 * $frsy1 + $color_x * $frsx * $frsy1 + $color_y * $frsx1 * $frsy + $color_xy * $frsx * $frsy;
                     if ($newcolor > 255) {
                         $newcolor = 255;
                     }
                     $newcolor = $newcolor / 255;
                     $newcolor0 = 1 - $newcolor;
                     $newred = $newcolor0 * $foreground_color[0] + $newcolor * $background_color[0];
                     $newgreen = $newcolor0 * $foreground_color[1] + $newcolor * $background_color[1];
                     $newblue = $newcolor0 * $foreground_color[2] + $newcolor * $background_color[2];
                 }
             }
             imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue));
         }
     }
     header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
     header('Cache-Control: no-store, no-cache, must-revalidate');
     header('Cache-Control: post-check=0, pre-check=0', FALSE);
     header('Pragma: no-cache');
     if (function_exists("imagejpeg")) {
         header("Content-Type: image/jpeg");
         imagejpeg($img2, null, $jpeg_quality);
     } else {
         if (function_exists("imagegif")) {
             header("Content-Type: image/gif");
             imagegif($img2);
         } else {
             if (function_exists("imagepng")) {
                 header("Content-Type: image/x-png");
                 imagepng($img2);
             }
         }
     }
 }
Example #10
0
 /**
  * Удаление поста (ajax):
  */
 public function removeAjaxAction(Application $application)
 {
     $board = new Board_BoardModel($_GET['board']);
     $session = Session::getInstance();
     if ($board->existsPost($_GET['id'])) {
         $post = $board->getPost($_GET['id']);
         if (!empty($post['password']) && $post['password'] == $_GET['password']) {
             if ($board->existsThread($_GET['id'])) {
                 $board->removeThread($_GET['id']);
             } else {
                 $board->removePost($_GET['id']);
             }
             return true;
         }
         if ($session->isAdminSession()) {
             if (@$_GET['delall'] == true) {
                 $board->removePostsByAuthor($_GET['id']);
                 return true;
             } else {
                 if ($board->existsThread($_GET['id'])) {
                     $board->removeThread($_GET['id']);
                 } else {
                     $board->removePost($_GET['id']);
                 }
                 if ($board->getId() != 'alone') {
                     ControlModel::logModEvent(date("d-m-Y H:i:s") . ' ' . $_SESSION['auth']['name'] . '<br /> удалил пост №' . $_GET['id'] . ' в разделе ' . $_GET['board']);
                 }
             }
         }
         return false;
     }
     return true;
 }
Example #11
0
 /**
  * Управление ссылками:
  */
 public function blogLogAction(Application $application, Template $template)
 {
     $template->setParameter('menu', 'posts');
     $template->setParameter('submenu', 'log');
     $log = ControlModel::getLogModEvent();
     $this['log'] = '<p>' . implode("</p><p>", array_reverse($log)) . '</p>';
     return true;
 }