Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Zero108

Небольшая модификация приложения Videos 3.3.6

Рекомендованные сообщения

07/23/19 22:48 (изменено)

Приложение 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

Поделиться сообщением


Ссылка на сообщение

Строка отвечающая за описание.

                $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'] );

Можно закомментировать.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...