Небольшая модификация приложения Videos 3.3.6
Рекомендованные сообщения
Сейчас на странице 0
- Нет пользователей, просматривающих эту страницу.
A better way to browse. Learn more.
A full-screen app on your home screen with push notifications, badges and more.
Приложение Videos 3.3.6 имеет опцию настройки импорта видео из RSS-потока в категорию.
При импорте создается новое видео, у которого в описании (поле Description) добавляется много ненужного с YouTube. Как отключить в коде файла \applications\videos\sources\Import.php импорт описания видео? То есть чтобы не импортировалось и не добавлялось в базу данных вообще.
<?php /** * @package Videos * @author <a href='https://www.devfuse.com'>DevFuse</a> * @copyright (c) 2018-2019 DevFuse */ namespace IPS\videos; /* To prevent PHP errors (extending class does not exist) revealing path */ if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' ); exit; } /** * Media Import Node */ class _Import extends \IPS\Node\Model { /** * @brief [ActiveRecord] Multiton Store */ protected static $multitons; /** * @brief [ActiveRecord] Database Table */ public static $databaseTable = 'videos_rss_import'; /** * @brief Database Prefix */ public static $databasePrefix = 'video_import_'; /** * @brief [Node] Node Title */ public static $nodeTitle = 'videos_rss_import'; /** * @brief [Node] ACP Restrictions * @code array( 'app' => 'core', // The application key which holds the restrictrions 'module' => 'foo', // The module key which holds the restrictions 'map' => array( // [Optional] The key for each restriction - can alternatively use "prefix" 'add' => 'foo_add', 'edit' => 'foo_edit', 'permissions' => 'foo_perms', 'delete' => 'foo_delete' ), 'all' => 'foo_manage', // [Optional] The key to use for any restriction not provided in the map (only needed if not providing all 4) 'prefix' => 'foo_', // [Optional] Rather than specifying each key in the map, you can specify a prefix, and it will automatically look for restrictions with the key "[prefix]_add/edit/permissions/delete" * @endcode */ protected static $restrictions = array( 'app' => 'videos', 'module' => 'videos', 'prefix' => 'videoimport_' ); /** * [Node] Get title * * @return string */ protected function get__title() { return $this->title; } /** * [Node] Get description * * @return string */ protected function get__description() { return $this->url; } /** * [Node] Get whether or not this node is enabled * * @note Return value NULL indicates the node cannot be enabled/disabled * @return bool|null */ protected function get__enabled() { return $this->enabled; } /** * [Node] Set whether or not this node is enabled * * @param bool|int $enabled Whether to set it enabled or disabled * @return void */ protected function set__enabled( $enabled ) { if ( $enabled ) { \IPS\Db::i()->update( 'core_tasks', array( 'enabled' => 1 ), array( '`key`=?', 'importVideos' ) ); } $this->enabled = $enabled; } /** * [Node] Get buttons to display in tree * Example code explains return value * * @code array( array( 'icon' => 'plus-circle', // Name of FontAwesome icon to use 'title' => 'foo', // Language key to use for button's title parameter 'link' => \IPS\Http\Url::internal( 'app=foo...' ) // URI to link to 'class' => 'modalLink' // CSS Class to use on link (Optional) ), ... // Additional buttons ); * @endcode * @param string $url Base URL * @param bool $subnode Is this a subnode? * @return array */ public function getButtons( $url, $subnode=FALSE ) { $buttons = parent::getButtons( $url, $subnode ); if ( \IPS\Member::loggedIn()->hasAcpRestriction('videoimport_run') ) { $buttons = array_merge( array( 'run' => array( 'icon' => 'refresh', 'title' => 'videos_import_run', 'link' => $url->setQueryString( array( 'do' => 'run', 'id' => $this->_id ) ) ) ), $buttons ); } return $buttons; } /** * [Node] Add/Edit Form * * @param \IPS\Helpers\Form $form The form * @return void */ public function form( &$form ) { $form->addHeader('videos_mediaimport_feed'); $form->add( new \IPS\Helpers\Form\Url( 'video_import_url', $this->url, TRUE ) ); $form->add( new \IPS\Helpers\Form\Text( 'video_import_auth_user', $this->auth_user ) ); $form->add( new \IPS\Helpers\Form\Password( 'video_import_auth_pass', $this->auth_pass ) ); $form->addHeader('video_import_details'); $form->add( new \IPS\Helpers\Form\Text( 'video_import_prefix', $this->prefix, FALSE, array( 'trim' => FALSE ) ) ); $form->add( new \IPS\Helpers\Form\Member( 'video_import_member', $this->member ? \IPS\Member::load( $this->member ) : \IPS\Member::loggedIn(), TRUE ) ); $form->add( new \IPS\Helpers\Form\Node( 'video_import_category', $this->category, TRUE, array( 'class' => 'IPS\videos\Category', 'permissionCheck' => 'add', 'clubs' => TRUE ) ) ); $form->add( new \IPS\Helpers\Form\YesNo( 'video_import_tags', $this->tags, FALSE, array() ) ); $form->add( new \IPS\Helpers\Form\YesNo( 'video_import_lock', $this->lock, FALSE, array() ) ); $form->add( new \IPS\Helpers\Form\YesNo( 'video_import_hide', $this->hide, FALSE, array() ) ); } /** * [Node] Format form values from add/edit form for save * * @param array $values Values from the form * @return array */ public function formatFormValues( $values ) { if( isset( $values['video_import_url'] ) ) { try { $request = $values['video_import_url']->request(); if ( $values['video_import_auth_user'] or $values['video_import_auth_pass'] ) { $request = $request->login( $values['video_import_auth_user'], $values['video_import_auth_pass'] ); } $response = $request->get(); if ( $response->httpResponseCode == 401 ) { throw new \DomainException( \IPS\Member::loggedIn()->language()->addToStack( 'video_import_auth' ) ); } $response = $response->decodeXml(); if ( !( $response instanceof \IPS\Xml\Rss ) and !( $response instanceof \IPS\Xml\Atom ) ) { throw new \DomainException( \IPS\Member::loggedIn()->language()->addToStack( 'video_import_invalid' ) ); } } catch ( \IPS\Http\Request\Exception $e ) { throw new \DomainException( \IPS\Member::loggedIn()->language()->addToStack( 'form_url_bad' ) ); } catch( \RuntimeException $e ) { throw new \DomainException( \IPS\Member::loggedIn()->language()->addToStack( 'video_import_invalid' ) ); } catch ( \ErrorException $e ) { throw new \DomainException( \IPS\Member::loggedIn()->language()->addToStack( 'video_import_invalid' ) ); } $values['title'] = (string) $request->get()->decodeXml()->title; } if( isset( $values['video_import_category'] ) ) { $values['category'] = $values['video_import_category']->_id; unset( $values['video_import_category'] ); } if( isset( $values['video_import_member'] ) ) { $values['member'] = $values['video_import_member']->member_id; unset( $values['video_import_member'] ); } return $values; } /** * [Node] Perform actions after saving the form * * @param array $values Values from the form * @return void */ public function postSaveForm( $values ) { if( $this->enabled ) { $this->run(); } } /** * Run Import * * @return void * @throws \IPS\Http\Url\Exception */ public function run() { /* Skip this if the member is restricted from posting */ if( \IPS\Member::load( $this->member )->restrict_post or \IPS\Member::load( $this->member )->members_bitoptions['unacknowledged_warnings'] ) { return; } /* Previously imported videos */ $previouslyImportedGuids = iterator_to_array( \IPS\Db::i()->select( 'video_imported_guid', 'videos_rss_imported', array( 'video_imported_impid=?', $this->id ) ) ); $request = \IPS\Http\Url::external( $this->url )->request(); if ( $this->auth ) { $request = $request->login( $this->auth_user, $this->auth_pass ); } $request = $request->get(); /* Get video category */ $container = \IPS\videos\Category::load( $this->category ); $i = 0; $inserts = array(); $request = $request->decodeXml(); if( !( $request instanceof \IPS\Xml\RssOne ) AND !( $request instanceof \IPS\Xml\Rss ) AND !( $request instanceof \IPS\Xml\Atom ) ) { throw new \RuntimeException( 'video_import_invalid' ); } $video = NULL; foreach ( $request->articles( $this->id ) as $guid => $article ) { if ( !\in_array( $guid, $previouslyImportedGuids ) ) { $video = \IPS\videos\Video::createItem( \IPS\Member::load( $this->member ), NULL, $article['date'], $container, $this->hide ); $video->title = $this->prefix . $article['title']; $video->description = \IPS\Text\Parser::parseStatic( $article['content'], TRUE, NULL, \IPS\Member::load( $this->member ), 'videos_Videos', TRUE, !(bool) \IPS\Member::load( $this->member )->group['g_dohtml'] ); $video->video_data = $article['link']; $video->video_type = 'media_url'; if( $this->lock ) { $video->state = 'closed'; } $video->save(); $video->generateThumbnail(); $video->generateEmbed(); /* Try and get media data */ try { $mediaData = \IPS\videos\MediaSite::loadDataFromUrl( $article['link'] ); } catch( \OutOfRangeException $e ){} /* Any tags to save? */ if( $this->tags AND $container->tags_enable AND isset( $mediaData['tags'] ) AND \count( $mediaData['tags'] ) ) { $tags = $mediaData['tags']; /* Limit tags? */ if( \IPS\Settings::i()->tags_max ) { $tags = \array_slice( $tags, 0, \IPS\Settings::i()->tags_max ); } /* Add tags to video */ $video->setTags( $tags ); } /* Send notifications */ if ( !$this->hide ) { $video->sendNotifications(); } /* Add to search index */ \IPS\Content\Search\Index::i()->index( $video ); $inserts[] = array( 'video_imported_guid' => $guid, 'video_imported_vid' => $video->tid, 'video_imported_impid' => $this->id ); $i++; if ( $i >= 10 ) { break; } } } if( \count( $inserts ) ) { \IPS\Db::i()->insert( 'videos_rss_imported', $inserts ); } $this->last_import = time(); $this->save(); if ( $video !== NULL ) { /* Update Category */ $video->container()->setLastVideo(); $video->container()->save(); } } /** * [ActiveRecord] Delete Record * * @return void */ public function delete() { \IPS\Db::i()->delete( 'videos_rss_imported', array( "video_imported_impid=?", $this->id ) ); return parent::delete(); } /** * Search * * @param string $column Column to search * @param string $query Search query * @param string|null $order Column to order by * @param mixed $where Where clause * @return array */ public static function search( $column, $query, $order=NULL, $where=array() ) { if ( $column === '_title' ) { $column = 'video_import_title'; } if ( $order === '_title' ) { $order = 'video_import_title'; } return parent::search( $column, $query, $order, $where ); } }Изменено пользователем Zero108