예제 #1
0
파일: NewsBlock.php 프로젝트: ilivanoff/www
 /**
  * Метод добавления события в блок событий.
  * 
  * При этом дата самого событийного блока определяется датой первого добавленного в него события.
  * Все остальные собыия должны иметь ту же дату.
  * 
  * @param NewsEvent $event
  */
 public function addEvent(NewsEvent $event)
 {
     if (empty($this->events)) {
         $this->blockDate = $event->getBlockDate();
         $this->pickerDate = DatesTools::inst()->uts2dateInCurTZ($event->getNewsEventUtc(), DF_JS_DATEPICKER);
     } else {
         check_condition($this->blockDate == $event->getBlockDate(), "Новость на дату [{$event->getBlockDate()}] не может быть добавлена в блок на дату [{$this->blockDate}]");
     }
     $this->events[] = $event;
 }
예제 #2
0
function smarty_block_hinfo($params, $content, Smarty_Internal_Template &$template)
{
    if (!$content) {
        return;
    }
    $content = trim($content);
    $name = value_Array('name', $params);
    $start = value_Array('start', $params);
    $end = value_Array('end', $params);
    $id = value_Array('id', $params);
    $dates = DatesTools::inst()->toString(DatesTools::TS_MONTH_FULL, $start, $end);
    /* @var $hinfoTpl Smarty_Internal_Template */
    $hinfoTpl = $template->smarty->createTemplate('common/human_info.tpl');
    $hinfoTpl->assign('c_id', $id);
    $hinfoTpl->assign('c_name', $name);
    $hinfoTpl->assign('c_date', $dates);
    $hinfoTpl->assign('c_body', $content);
    $hinfoTpl->display();
}
예제 #3
0
 public function zonesSelectHtml()
 {
     if (!isset($this->selectHtml)) {
         $currentZone = $this->getCurrentDateTimeZone()->getName();
         $zones = array();
         foreach (DateTimeZone::listIdentifiers() as $tzName) {
             $tz = $this->getDateTimeZone($tzName);
             //#1
             if ($tz) {
                 $offsetS = $tz->getOffset(new DateTime());
                 // -- Сдвиг в секундах
                 $sign = $offsetS < 0 ? '-' : '+';
                 $secARR = DatesTools::inst()->parseSeconds($offsetS);
                 $offsetH = $secARR['hf'];
                 $offsetM = $secARR['m'];
                 $gmt = number_format("{$offsetH}.{$offsetM}", 2, ":", "");
                 $gmt = "GMT {$sign}{$gmt}";
                 $tzName = $tz->getName();
                 $option['value'] = $tzName;
                 $option['offset'] = $offsetS;
                 $option['content'] = "{$tzName}  ({$gmt})";
                 if ($tzName == $currentZone) {
                     $option['class'] = 'current';
                     $option['selected'] = 1;
                 }
                 $zones[] = $option;
             }
             //#1
         }
         $selectAttrs['class'] = 'time_zones';
         $selectAttrs['name'] = FORM_PARAM_TIMEZONE;
         /*
          * Мы не передаём $currentZone внутрь, так как нам нужно ещё установить 
          * класс, который потом будет использован в js.
          */
         $this->selectHtml = PsHtml::select($selectAttrs, $zones);
     }
     return $this->selectHtml;
 }
예제 #4
0
파일: posts.php 프로젝트: ilivanoff/www
 protected function buildComposition(ArrayAdapter $params)
 {
     $items = array();
     /* @var $pp PostsProcessor */
     foreach (Handlers::getInstance()->getPostsProcessors() as $pp) {
         foreach ($pp->getPosts() as $post) {
             $items[] = $post;
         }
     }
     $events = array();
     /* @var $post Post */
     foreach ($items as $post) {
         $postType = $post->getPostType();
         $pp = Handlers::getInstance()->getPostsProcessorByPostType($postType);
         $dt_start = DatesTools::inst()->uts2dateInCurTZ($post->getDtPublication(), 'Y-m-d');
         $rec = TimeLineItem::inst($post->getName(), IdHelper::ident($post), $dt_start);
         $rec->setImage($pp->getCoverDi($post->getIdent(), TimeLineManager::COVERS_DIM));
         $rec->setLink($pp->postUrl($post->getId()));
         switch ($postType) {
             case POST_TYPE_ISSUE:
                 $rec->setColorSchema(TimeLineItem::COLOR_SCHEMA_GREEN);
                 break;
             case POST_TYPE_BLOG:
                 $rec->setColorSchema(TimeLineItem::COLOR_SCHEMA_BLUE);
                 break;
             case POST_TYPE_TRAINING:
                 $rec->setColorSchema(TimeLineItem::COLOR_SCHEMA_RED);
                 break;
         }
         $rec->setContent($pp->getPostContentProvider($post->getId())->getPostContentShowcase()->getContent());
         $events[] = $rec;
     }
     $composite = new TimeLineItemsComposite($events);
     $composite->colorOneByOne();
     return $composite;
 }
예제 #5
0
 public function getDtEvent($format = DF_USER_POINTS)
 {
     return DatesTools::inst()->uts2dateInCurTZ($this->dt_event, $format);
 }
예제 #6
0
파일: NewsEvent.php 프로젝트: ilivanoff/www
 /**
  * Дата блока новостей, к которому относится данная новость (16 февраля 2013г.)
  */
 public function getBlockDate()
 {
     return DatesTools::inst()->uts2dateInCurTZ($this->event->getNewsEventUtc(), DF_NEWS);
 }
예제 #7
0
파일: Post.php 프로젝트: ilivanoff/www
 public function getDtEvent($format = DF_POSTS)
 {
     return DatesTools::inst()->uts2dateInCurTZ($this->dt_publication, $format);
 }
예제 #8
0
 public function getDtReg($format = DF_USER_REG_EVENT)
 {
     return DatesTools::inst()->uts2dateInCurTZ($this->dt_reg, $format);
 }
예제 #9
0
 /**
  * Преобразование в массив.
  * Возвращает события для отображения на временнОй шкале. Параметры:
  * 
  * [title]       - название события
  * [start]       - начало события, в формате 1985-01-29 или 580 BC
  * [end]         - окончание события, в формате 1985-01-29 ил 500 BC
  * [image]       - картинка события
  * [color]       - цвет полоски
  * [link]        - ссылка
  * [textColor]   - цвет текста
  * [icon]        - иконка для события-точки
  * [description] - текст, показываемый под событием
  * 
  */
 public function toArray()
 {
     $rec = array();
     $rec['title'] = $this->title;
     $rec['start'] = $this->dt_start;
     $rec['image'] = $this->image;
     $rec['textColor'] = $this->textColor;
     /*
      * Все необходимые проверки мы выполняем в классе на момент установки значений, поэтому здесь можем просто собирать установленные значения
      */
     if ($this->link) {
         $rec['link'] = $this->link;
     }
     if ($this->dt_stop) {
         $rec['end'] = $this->dt_stop;
     }
     if ($this->lineColor) {
         $rec['color'] = $this->lineColor;
     }
     if ($this->icon) {
         $rec['icon'] = DirManager::images()->relFilePath('timeline', $this->icon);
     }
     /* Содержимое */
     $rec['description'] = PsHtml::p(array('class' => 'dates'), $this->dates) . $this->content;
     /* Наши данные */
     $this->custom['ident'] = $this->ident;
     $this->custom['interval'] = DatesTools::inst()->toString(DatesTools::TS_NUMBERED, $this->dt_start, $this->dt_stop);
     /* Специфические данные */
     $rec['custom'] = $this->custom;
     return $rec;
 }
예제 #10
0
 /** @return DatesTools */
 public static function inst()
 {
     if (self::$instance == NULL) {
         self::$instance = new DatesTools();
     }
     return self::$instance;
 }
예제 #11
0
파일: DirItem.php 프로젝트: ilivanoff/www
 /**
  * Время последней модификации файла.
  * $format = DF_COMMENTS
  * DatesTools - не подключается в kitcore!
  */
 public function getModificationTime($format = null)
 {
     clearstatcache();
     $time = @filemtime($this->absPath);
     if ($time === false) {
         return null;
     }
     if ($format) {
         return DatesTools::inst()->uts2dateInCurTZ($time, $format);
     }
     return $time;
 }
예제 #12
0
 /**
  * Сохраняет значение для показа в таблице
  */
 public function safe4show($val)
 {
     $allowed = $this->getColumnAllowedValues();
     if (count($allowed)) {
         $option = array_get_value($val, $allowed);
         return is_array($option) ? PsHtml::nobr($val . ' (' . array_get_value('content', $option) . ')') : $val;
     }
     switch ($this->getType()) {
         case self::TYPE_INT_DATE:
             return is_numeric($val) ? PsHtml::nobr(DatesTools::inst()->uts2dateInCurTZ($val, DF_PS_HM)) : null;
     }
     return $val;
 }
예제 #13
0
 private function doSolve($rebus)
 {
     $this->LOGGER->info("Обрабатываем ребус: [{$rebus}], пропускать первые символы={$this->SCIP_FIRST_CHARS}");
     $this->COMBINATIONS = array();
     check_condition($rebus, "Пустой ребус");
     $eqCnt = substr_count($rebus, '=');
     check_condition($eqCnt == 1, "Знак равенства '=' встретился {$eqCnt} раз");
     $this->LOGGER->info("Приведённый вид: [{$rebus}]");
     $enCh = array();
     $ruCh = array();
     for ($i = 0; $i < ps_strlen($rebus); $i++) {
         //русский символ
         $letter = ps_charat($rebus, $i);
         if ($this->isRuChar($letter)) {
             if (!array_key_exists($letter, $ruCh)) {
                 $ruCh[$letter] = null;
             }
             continue;
         }
         if ($this->isEnChar($letter)) {
             //английский символ
             if (!in_array($letter, $enCh)) {
                 $enCh[] = $letter;
             }
             continue;
         }
     }
     $this->LOGGER->info('Русские символы: ' . print_r($ruCh, true));
     $this->LOGGER->info('Английские символы: ' . print_r($enCh, true));
     foreach ($ruCh as $ch => $value) {
         for ($i = 0; $i < strlen($this->EN); $i++) {
             $letter = substr($this->EN, $i, 1);
             if (!in_array($letter, $enCh)) {
                 $enCh[] = $letter;
                 $ruCh[$ch] = $letter;
                 break;
             }
         }
     }
     $this->LOGGER->info('После привязки: ');
     $this->LOGGER->info('Русские символы: ' . print_r($ruCh, true));
     $this->LOGGER->info('Английские символы: ' . print_r($enCh, true));
     $enCharsCnt = count($enCh);
     check_condition($enCharsCnt > 0, 'Нет символов для перебора');
     check_condition($enCharsCnt <= 10, "Слишком много переменных: {$enCharsCnt}");
     $rebus = PsStrings::replaceMap($rebus, $ruCh);
     $this->LOGGER->info("Подготовленный ребус: [{$rebus}]");
     $this->LOGGER->info("Всего символов для перебора: {$enCharsCnt}");
     $this->LOGGER->info('Возможных комбинаций: ' . $this->variantsCnt($enCharsCnt));
     $this->REBUS = $rebus;
     $this->EXPR = str_replace('=', '-', $rebus);
     $hasBefore = false;
     for ($i = 0; $i < strlen($rebus); $i++) {
         $char = substr($rebus, $i, 1);
         if ($this->isEnChar($char)) {
             //Символ перебора
             if (!$hasBefore) {
                 $this->FIRST_CHARS[] = $char;
                 $hasBefore = true;
             }
         } else {
             $hasBefore = false;
         }
     }
     $this->LOGGER->info('Начинаем перебор...');
     $numbers = array(0 => false, 1 => false, 2 => false, 3 => false, 4 => false, 5 => false, 6 => false, 7 => false, 8 => false, 9 => false);
     $secundomer = Secundomer::startedInst();
     for ($i = 0; $i <= 9; $i++) {
         $letter = reset($enCh);
         if ($this->isScip($i, $letter)) {
             continue;
         }
         $next = next($enCh);
         $numbers[$i] = $letter;
         $this->doCheckIteration($enCh, $next, $numbers);
         $numbers[$i] = false;
     }
     $secundomer->stop();
     $parsed = DatesTools::inst()->parseSeconds(round($secundomer->getTotalTime()));
     $min = $parsed['mf'];
     $sec = pad_zero_left($parsed['s'], 2);
     $parsed = "{$min}:{$sec}";
     $combCnt = count($this->COMBINATIONS);
     $this->LOGGER->info("Перебор закончен. Обработано операций: {$this->cnt}, найдено решений: {$combCnt}.");
     $this->LOGGER->info("Общее время обработки: {$parsed}.");
     return $this->COMBINATIONS;
 }
예제 #14
0
 /**
  * Время последней модификации файла.
  * $format = DF_COMMENTS
  * DatesTools - не подключается в src/auto!
  */
 public function getModificationTime($format = null)
 {
     if (!is_file($this->absPath)) {
         return null;
         //--
     }
     clearstatcache();
     $time = @filemtime($this->absPath);
     if ($time === false || !is_int($time) || $time <= 0) {
         return null;
     }
     if ($format) {
         return DatesTools::inst()->uts2dateInCurTZ($time, $format);
     }
     return $time;
 }