public function up() { $arHlData = array('FIELDS' => array('UF_DATETIME' => array('N', 'datetime', array('EDIT_FORM_LABEL' => array('ru' => 'Дата добавления'), 'LIST_COLUMN_LABEL' => array('ru' => 'Дата добавления'))))); global $APPLICATION; \Bitrix\Main\Loader::includeModule("highloadblock"); $arHlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(array('filter' => array('TABLE_NAME' => \Hawkart\Megatv\ProgExternalTable::getTableName())))->fetch(); if ($arHlblock) { $oUserTypeEntity = new \CUserTypeEntity(); $sort = 500; foreach ($arHlData['FIELDS'] as $fieldName => $fieldValue) { $aUserField = array('ENTITY_ID' => 'HLBLOCK_' . $arHlblock["ID"], 'FIELD_NAME' => $fieldName, 'USER_TYPE_ID' => $fieldValue[1], 'SORT' => $sort, 'MULTIPLE' => 'N', 'MANDATORY' => $fieldValue[0], 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'N', 'SETTINGS' => array()); if (isset($fieldValue[2]) && is_array($fieldValue[2])) { $aUserField = array_merge($aUserField, $fieldValue[2]); } $resProperty = \CUserTypeEntity::GetList(array(), array('ENTITY_ID' => $aUserField['ENTITY_ID'], 'FIELD_NAME' => $aUserField['FIELD_NAME'])); if ($aUserHasField = $resProperty->Fetch()) { $idUserTypeProp = $aUserHasField['ID']; if ($oUserTypeEntity->Update($idUserTypeProp, $aUserField)) { $this->out('Обновлено свойство - ' . $aUserField['FIELD_NAME']); } else { if ($ex = $APPLICATION->GetException()) { $this->outError('Ошибка - ' . $ex->GetString()); } } } else { if ($idUserTypeProp = $oUserTypeEntity->Add($aUserField)) { $this->out('Добавлено новое свойство - ' . $aUserField['FIELD_NAME']); } else { if ($ex = $APPLICATION->GetException()) { $this->outError('Ошибка - ' . $ex->GetString()); } } } $sort += 100; } //Import datetime to field from Json field $result = \Hawkart\Megatv\ProgExternalTable::getList(array('filter' => array(), 'select' => array("ID", "UF_JSON"))); while ($row = $result->fetch()) { $datetime = $row["UF_JSON"]["created_ts"]; if (!empty($datetime)) { $datetime = new \Bitrix\Main\Type\DateTime(date("Y-m-d H:i:s", strtotime($datetime)), 'Y-m-d H:i:s'); \Hawkart\Megatv\ProgExternalTable::update($row["ID"], array("UF_DATETIME" => $datetime)); } } $this->outSuccess('Все готово на %d%%', 100); } }
<h3 class="block-title"><?php echo $arChannel["UF_TITLE"]; ?> </h3> </div> <div class="block-body"> <a href="#" class="close-link" data-dismiss="modal"><span data-icon="icon-times"></span></a> <div class="player-holder"> <div id="player"></div> </div> </div> </div> <?php } else { if (!preg_match("/^[\\d\\+]+\$/", $_GET["broadcastID"])) { $result = \Hawkart\Megatv\ProgExternalTable::getList(array('filter' => array("=UF_EXTERNAL_ID" => $_GET["broadcastID"]), 'select' => array("ID", "UF_TITLE", "UF_EXTERNAL_ID", "UF_THUMBNAIL_URL", "UF_VIDEO_URL", "UF_JSON"))); if ($row = $result->fetch()) { $arVideo["VIDEO_URL"] = $row["UF_VIDEO_URL"]; if (strpos($arVideo["VIDEO_URL"], "rutube") !== false && !empty($arVideo["VIDEO_URL"])) { $arVideo["VIDEO_URL"] = str_replace("play", "video", $arVideo["VIDEO_URL"]) . "?sTitle=false&sAuthor=false"; } else { $doc = new DOMDocument(); $doc->loadHTML($row["UF_JSON"]["html"]); $arVideo["VIDEO_URL"] = $doc->getElementsByTagName('iframe')->item(0)->getAttribute('src'); } $arVideo["NAME"] = $row["UF_TITLE"]; } ?> <div class="broadcast-player" data-module="broadcast-player"> <script type="text/x-config"> {
$arFilter = array("=UF_EPG_ID" => $_REQUEST["EPG_ID"]); $arSelect = array("ID", "UF_TITLE", "UF_DESC"); $obCache = new \CPHPCache(); if ($obCache->InitCache(86400, serialize($arFilter) . serialize($arSelect), "/serialByEpgID/")) { $arResult["SERIAL"] = $obCache->GetVars(); } elseif ($obCache->StartDataCache()) { $result = \Hawkart\Megatv\SerialTable::getList(array('filter' => $arFilter, 'select' => $arSelect)); if ($row = $result->fetch()) { $arResult["SERIAL"] = $row; } $obCache->EndDataCache($arResult["SERIAL"]); } $arFilter = array("=UF_SERIAL.UF_EPG_ID" => $_REQUEST["EPG_ID"]); $arSelect = array("ID", "UF_TITLE", "UF_EXTERNAL_ID", "UF_THUMBNAIL_URL"); $obCache = new \CPHPCache(); if ($obCache->InitCache(86400, serialize($arFilter) . serialize($arSelect), "/serialProgExList/")) { $arResult["ITEMS"] = $obCache->GetVars(); } elseif ($obCache->StartDataCache()) { $result = \Hawkart\Megatv\ProgExternalTable::getList(array('filter' => $arFilter, 'select' => $arSelect)); while ($row = $result->fetch()) { if (strpos($row["UF_THUMBNAIL_URL"], "rutube") !== false) { $row["UF_THUMBNAIL_URL"] .= "?size=m"; } $arResult["ITEMS"][] = $row; } $obCache->EndDataCache($arResult["ITEMS"]); } $APPLICATION->SetTitle($arResult["SERIAL"]["UF_TITLE"]); $APPLICATION->SetPageProperty($arResult["SERIAL"]["UF_TITLE"]); $APPLICATION->SetPageProperty("description", TruncateText($arResult["SERIAL"]["UF_DESC"], 256)); $this->IncludeComponentTemplate();
/** * Import all serials href from resource to db */ public static function importSerialsByWeek() { $arTableSerials = array(); $result = \Hawkart\Megatv\SerialTable::getList(array('filter' => array("!UF_EPG_ID" => false, "UF_EXTERNAL_URL" => "%rutube%"), 'select' => array("ID", "UF_TITLE", "UF_EXTERNAL_URL"))); while ($row = $result->fetch()) { $serial_id = preg_replace("/[^0-9]/", "", $row["UF_EXTERNAL_URL"]); $arTableSerials[$serial_id] = $row; } foreach ($arTableSerials as $serial_id => $arSerial) { $arTableItems = array(); $result = \Hawkart\Megatv\ProgExternalTable::getList(array('filter' => array("=UF_SERIAL_ID" => $arSerial["ID"]), 'select' => array("ID", "UF_SERIAL_ID", "UF_EXTERNAL_ID"))); while ($row = $result->fetch()) { $arTableItems[] = $row["UF_EXTERNAL_ID"]; } $arItems = self::search($arSerial["UF_TITLE"], "week", $serial_id); /** * Add items for serials in db table */ foreach ($arItems as $arItem) { if (!in_array($arItem["ID"], $arTableItems)) { $arFields = array("UF_TITLE" => $arItem["TITLE"], "UF_EXTERNAL_ID" => $arItem["ID"], "UF_SERIAL_ID" => $arSerial["ID"], "UF_THUMBNAIL_URL" => $arItem["THUMBNAIL_URL"], "UF_VIDEO_URL" => $arItem["VIDEO_URL"], "UF_JSON" => $arItem["JSON"]); $result = \Hawkart\Megatv\ProgExternalTable::add($arFields); if ($result->isSuccess()) { $arTableItems[] = $arItem["ID"]; } else { $errors = $result->getErrorMessages(); } } } } }
} else { $APPLICATION->SetTitle($arResult["PAGE_TITLE"]); $APPLICATION->SetPageProperty("description", TruncateText($arResult["UF_DESCRIPTION"], 256)); $APPLICATION->SetDirProperty("h1", $arResult["UF_H1"] ? $arResult["UF_H1"] : $arResult["UF_TITLE"]); //FOR SEO $url_params = parse_url($_SERVER["REQUEST_URI"]); if (substr($url_params["path"], -1) != "/") { $url = $url_params["path"] . "/"; if (!empty($url_params["query"])) { $url .= "?" . $url_params["query"]; } LocalRedirect($url, false, "301 Moved permanently"); } } $offset = 0; if ($_REQUEST["AJAX"] == "Y") { $offset = $_REQUEST["offset"]; } $arResult["PROGS"] = array(); $result = \Hawkart\Megatv\ProgExternalTable::getList(array('filter' => array("UF_SERIAL.UF_CHANNEL_ID" => '%"' . $arResult['UF_CHANNEL_BASE_ID'] . '"%'), 'select' => array("ID", "UF_TITLE", "UF_EXTERNAL_ID", "UF_THUMBNAIL_URL", "UF_JSON"), 'order' => array("UF_DATETIME" => "DESC"), 'limit' => $arParams["NEWS_COUNT"], 'offset' => $offset)); while ($row = $result->fetch()) { if (strpos($row["UF_THUMBNAIL_URL"], "rutube") !== false) { $row["UF_THUMBNAIL_URL"] .= "?size=m"; } $arResult["ITEMS"][] = $row; } /** * Add data to statistics */ //\Hawkart\Megatv\CStat::channelAdd($arResult["ID"]); $this->IncludeComponentTemplate();
/** * Import all serials href from resource to db */ public static function importSerials() { $arToFile = array(); $file_50_60 = $_SERVER['DOCUMENT_ROOT'] . "/upload/serials_50_60.txt"; /** * Get all prog which are serials */ $arSerials = array(); $date_prevprev = date('Y-m-d', strtotime("-2 day")); $arFilter = array(">=UF_DATE_START" => new \Bitrix\Main\Type\DateTime($date_prevprev . " 00:00:00", 'Y-m-d H:i:s'), "<UF_DATE_START" => new \Bitrix\Main\Type\DateTime($date_prevprev . " 23:59:59", 'Y-m-d H:i:s'), "!UF_PROG.UF_EPG_SUB_ID" => false); $arSelect = array("ID", "SID" => "UF_PROG.UF_EPG_ID", "TITLE" => "UF_PROG.UF_TITLE", "SUB_TITLE" => "UF_PROG.UF_SUB_TITLE", "SERIA" => "UF_PROG.UF_SERIA", "SEASON" => "UF_PROG.UF_SEASON", "UF_DATE_START", "UF_DATE_END"); $result = \Hawkart\Megatv\ScheduleTable::getList(array('filter' => $arFilter, 'select' => $arSelect)); while ($arSchedule = $result->fetch()) { $arSchedule["UF_DATE_START"] = $arSchedule["DATE_START"] = $arSchedule['UF_DATE_START']->toString(); $arSchedule["UF_DATE_END"] = $arSchedule["DATE_END"] = $arSchedule['UF_DATE_END']->toString(); $arSerials[] = $arSchedule; } /** * Get all serials with epg_id */ $arTableSerials = array(); $result = \Hawkart\Megatv\SerialTable::getList(array('filter' => array("!UF_EPG_ID" => false), 'select' => array("ID", "UF_EPG_ID", "UF_CHANNEL_ID"))); while ($row = $result->fetch()) { $arTableSerials[$row["UF_EPG_ID"]] = $row; } foreach ($arSerials as $arProg) { $title = $arProg["TITLE"]; if (!empty($arProg["SUB_TITLE"])) { $title = $arProg["SUB_TITLE"] . ". " . $title; } else { if (!empty($arProg["SEASON"])) { $title .= ": сезон " . $arProg["SEASON"]; } if (!empty($arProg["SERIA"])) { $title .= " серия " . $arProg["SERIA"]; } } $seria_secs = strtotime($arProg["DATE_END"]) - strtotime($arProg["DATE_START"]); $youtube = new \Hawkart\Megatv\Social\YoutubeClient(); $arVideos = $youtube->search($title); $arSerial = $arTableSerials[$arProg["SID"]]; if (empty($arSerial)) { continue; } //Progs in table by serial_id $arTableItems = array(); $result = \Hawkart\Megatv\ProgExternalTable::getList(array('filter' => array("=UF_SERIAL_ID" => $arSerial["ID"]), 'select' => array("ID", "UF_SERIAL_ID", "UF_EXTERNAL_ID"))); while ($row = $result->fetch()) { $arTableItems[] = $row["UF_EXTERNAL_ID"]; } foreach ($arVideos as $arItem) { //secs from youtube $time_parts = explode(":", $arItem["TIME"]); $secs = 60 * $time_parts[count($time_parts) - 2] + $time_parts[count($time_parts) - 1]; if (count($time_parts) == 3) { $secs = 60 * intval($time_parts[0]) + intval($time_parts[1]); } else { $secs = 3600 * intval($time_parts[0]) + 60 * intval($time_parts[1]) + intval($time_parts[2]); } $time_perc = $secs / $seria_secs * 100; similar_text($title, $arItem["TITLE"], $perc); similar_text($arItem["TITLE"], $title, $perc_2); if (floatval($perc) < 60 && floatval($perc) >= 40) { $arToFile[] = array("ORIGINAL_TITLE" => $title, "SOCIAL_TITLE" => $arItem["TITLE"], "PERCENT" => $perc, "EXTERNAL_ID" => $arItem["ID"], "TIME" => $arItem["TIME"], "UF_SERIAL_ID" => $arSerial["ID"]); } if (floatval($perc) > 60 && floatval($perc_2) > 40 && $time_perc > 70) { if (!in_array($arItem["ID"], $arTableItems)) { $datetime = new \Bitrix\Main\Type\DateTime(date("Y-m-d H:i:s", strtotime($arItem["JSON"]["publishedAt"])), 'Y-m-d H:i:s'); $arFields = array("UF_TITLE" => $arItem["TITLE"], "UF_EXTERNAL_ID" => $arItem["ID"], "UF_SERIAL_ID" => $arSerial["ID"], "UF_THUMBNAIL_URL" => $arItem["THUMBNAIL_URL"], "UF_VIDEO_URL" => $arItem["VIDEO_URL"], "UF_JSON" => $arItem["JSON"], "UF_DATETIME" => $datetime); $result = \Hawkart\Megatv\ProgExternalTable::add($arFields); if ($result->isSuccess()) { $arTableItems[] = $arItem["ID"]; } else { $errors = $result->getErrorMessages(); } } break; } } } file_put_contents($file_50_60, json_encode($arToFile)); }