Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Zero108

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

Recommended Posts

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

Edited by Zero108

Share this post


Link to post
Share on other sites

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

                $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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...