/** * Метод добавления события в блок событий. * * При этом дата самого событийного блока определяется датой первого добавленного в него события. * Все остальные собыия должны иметь ту же дату. * * @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; }
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(); }
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; }
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; }
public function getDtEvent($format = DF_USER_POINTS) { return DatesTools::inst()->uts2dateInCurTZ($this->dt_event, $format); }
/** * Дата блока новостей, к которому относится данная новость (16 февраля 2013г.) */ public function getBlockDate() { return DatesTools::inst()->uts2dateInCurTZ($this->event->getNewsEventUtc(), DF_NEWS); }
public function getDtEvent($format = DF_POSTS) { return DatesTools::inst()->uts2dateInCurTZ($this->dt_publication, $format); }
public function getDtReg($format = DF_USER_REG_EVENT) { return DatesTools::inst()->uts2dateInCurTZ($this->dt_reg, $format); }
/** * Преобразование в массив. * Возвращает события для отображения на временнОй шкале. Параметры: * * [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; }
/** @return DatesTools */ public static function inst() { if (self::$instance == NULL) { self::$instance = new DatesTools(); } return self::$instance; }
/** * Время последней модификации файла. * $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; }
/** * Сохраняет значение для показа в таблице */ 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; }
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; }
/** * Время последней модификации файла. * $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; }