Перейти к содержанию

Lafko

Пользователи
  • Постов

    205
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Lafko

  1. 11 часов назад, Respected сказал:

    Тема не актуальная, написано же

    Что значит не актуальная? Я создал тему у себя на форуме, и пытаюсь оставить сообщение в этой же теме, но вот такое сообщение получаю, но в тоже время другой пользователь может оставить сообщение без этой ошибки. Подозреваю что это связано с объединением двух сообщений в один пост. Та же ошибка была после того как второй администратор попытался отредактировать моё сообщение. Я в разных местах получаю похожую ошибку, например в виджете когда пытаюсь добавить рекомендуемый продукт. Это началаось именно с 4.4.1 версии в 4.4.0 такого не было...

    Screenshot_1.thumb.png.26eee3bccf70e087e526bede7390fbd9.png

  2. Подскажите как сломать счета продления? Чтобы их нельзя было продлевать даже если доступна кнопка продления.
    Дело в том что IPS не генерирует лицензионный ключ если не включена функция продления счета
    Screenshot_2.thumb.png.e0414afc4f27437a816ead1d7edf5c1d.png
    Дело в том что у меня на форуме при покупке данный ключ используется для доступа к программе и если пользователь случайно оплатит счет продления то новый ключ ему не придет. Новый ключ приходит только при новой покупке. Я думал что поможет указать счет продления через пару лет, но кривой IPS формирует его сразу

    Screenshot_3.thumb.png.50fc70cb300461376b5774a9f1a9f111.png

    Мне надо убрать эту кнопку

  3. Если у кого-то из способов оплаты пропали методы оплаты то вам надо в файл по пути /applications/nexus/sources/Gateway/Gateway.php добавить в функцию gateways() ваш метод оплаты. Пример ниже.

    public static function gateways()
    	{
    		$return = array(
    			'Stripe'		=> 'IPS\nexus\Gateway\Stripe',
    			'Braintree'		=> 'IPS\nexus\Gateway\Braintree',
    			'PayPal'		=> 'IPS\nexus\Gateway\PayPal',
    			'AuthorizeNet'	=> 'IPS\nexus\Gateway\AuthorizeNet',
    			'TwoCheckout'	=> 'IPS\nexus\Gateway\TwoCheckout',
    			'Manual'		=> 'IPS\nexus\Gateway\Manual',
    			'Robokassa'		=> 'IPS\nexus\Gateway\Robokassa',
    			'Payeer'		=> 'IPS\nexus\Gateway\Payeer',
    		);
    		
    		if ( \IPS\NEXUS_TEST_GATEWAYS )
    		{
    			$return['Test'] = 'IPS\nexus\Gateway\Test';
    		}
    		
    		return $return;
    	}

     

  4. 2 часа назад, Lafko сказал:

    У меня слдетели модули оплаты после обновления до 4.4.1 подскажите как восстановить?
    Screenshot_2.thumb.png.f503258ea7f0345f1dd1fad427e81924.png
    Или может быть у кого-то есть
    https://invisioncommunity.com/files/file/7658-robokassa-payment-gateway/ ?

    Посмотрел изменения в 4.4.1

    Commerce

    • Removed Braintree option for new payment gateways.

      Что это значит?
  5. 8 минут назад, WaNted сказал:

    В таблице nexus_purchases найдите связанную покупку с ключом и посмотрите есть ли там значение ps_expire отличное от 0.

    Упс. Вы были правы. Теперь всё работает. Большое спасибо!

  6. 3 минуты назад, WaNted сказал:

    $this->purchase->expire возвращает объект \IPS\DateTime. Попробуйте использовать $this->purchase->expire->getTimestamp().

    К сожалению не работает

    если expire получает значение после метода save то скорее всего надо в другой метод вставлять код, только я вот без понятия в какой

  7. 1 час назад, WaNted сказал:

    Вы можете нормально описать что в итоге Вам нужно? Зачем Вы трогаете запрос который относится к \IPS\nexus\Purchase::tree()? Покажите весь Ваш код (именно Ваш, а не весь класс целиком). Если все Ваши изменения находятся в классе IPS\nexus\Purchase\LicenseKey, то не нужно посылать никакие запросы, информация о покупке текущего ключа находится в переменной $this->purchase. Нужное Вам значение (ps_expire - ps_start) можно получить так: $this->purchase->expire - $this->purchase->start.

    Вот что мне надо "Из таблицы _nexus_purchases взять значение ps_expire - ps_start где в таблице xxxxxxx_nexus_licensekeys.lkey_purchase как xxxxxxx_nexus_purchases.ps_id"

    Выше я привел пример нужного мне запроса т.к. я не знаю как его составить.
    $this->purchase->expire - $this->purchase->start - не работают, а точнее в них пустые значения если я пытаюсь их использовать из метода save

    Я не понимаю какой именно код вы хотите увидеть.
     

    	public function save()
    	{
    		if ( !$this->key )
    	{
    		do
    		{
    			$this->key = $this->generate();
    		}
    		while ( \count( \IPS\Db::i()->select( '*', 'nexus_licensekeys', array( 'lkey_key=?', $this->key ) ) ) );
    
    
    
    		/* create external connect */
    		\IPS\Db::i(
    			'xxxxxxx_nexus_purchases', 
    			array(
    				'sql_host'      => '***',
    				'sql_user'      => '***',
    				'sql_pass'      => '***',
    				'sql_database'  => '***',
    			) 
    		);
    		$purchase = $this->get_purchase();
    
    		\IPS\Db::i('_nexus_purchases')->insert('_nexus_purchases', array( 
    	'ps_k' => $this->key,
    	'ps_a' => '1',
    	'Res' => $purchase->member->member_id,
    	'ps_time_k' => $this->purchase->expire, /* вот сюда не передаеться нужное мне значение */
    ));
    
    	}
    		return parent::save();
    	}

     

  8. Помогите пожалуйста переделать запрос так чтобы он брал 2 нужных мне значения из другой таблицы делал вычитание и присваивал результат в переменную

    \IPS\Db::i()->select( '*', 'nexus_purchases', $where, 'ps_start DESC', $limit ), 'IPS\nexus\Purchase' ) as $purchase )

    Из таблицы _nexus_purchases взять значение ps_expire - ps_start где в таблице xxxxxxx_nexus_licensekeys.lkey_purchase как xxxxxxx_nexus_purchases.ps_id

  9. 10 часов назад, siv1987 сказал:

    Да не в коде, а в переменной.  Где вы хотите получить, там и смотрите.

    $purchase->expire

    Если в том же месте где находится код для вставки в другую бд, то скорее всего так

    
    $purchase = $this->get_purchase();
    $purchase->expire;

     

     

    9 часов назад, WaNted сказал:

    Если так же в методе save(), то $this->purchase->expire

    Нет, не работает

  10. 15 минут назад, siv1987 сказал:

    В таблицу?

    
    \IPS\Db::i('remote_database_name')->insert('your_table', array( 
    	'license_key' => $this->key,
    	'field2' => 'value2', 
    	'field3' => 'value2', 
    ));

     

    И второй вопрос, как мне получить из другой таблицы форума количество оставшихся дней подписки?

    SELECT * FROM `_nexus_purchases`.`ps_expire` WHERE `ps_member` LIKE '$purchase->member->member_id'

    Только вот $purchase->member->member_id - не получает id пользователя

  11. siv1987 И ещё 2 вопроса. 
    При переносе ключа мне в это-же поле ещё надо добавить данные подскажи пожалуйста как это сделать.
     

    Я думал вот так
     

    \IPS\Db::i('remote_database_name')->insert('your_table', array('license_key' => $this->key, 'ban' => 1));

     

  12. 3 минуты назад, siv1987 сказал:

    Нет.
     

    
    	if ( !$this->key )
    	{
    		do
    		{
    			$this->key = $this->generate();
    		}
    		while ( \count( \IPS\Db::i()->select( '*', 'nexus_licensekeys', array( 'lkey_key=?', $this->key ) ) ) );
    
    		/* create external connect */
    		\IPS\Db::i(
    			'remote_database_name', 
    			array(
    				'sql_host'      => 'host',
    				'sql_user'      => 'user',
    				'sql_pass'      => 'pass',
    				'sql_database'  => 'database',
    			) 
    		);
    
    		\IPS\Db::i('remote_database_name')->insert('your_table', array('license_key' => $this->key));
    	}

     

    Великолепно, работает. Огромное спасибо!

  13. 3 минуты назад, siv1987 сказал:

    Выполнить запрос SHOW DATABASES в админцентр форума > Support > SQL Toolbox
    Или посмотреть в phpmyadmin
    image.thumb.png.7816a96761d34ce0b622623edf9b411d.png

    Screenshot_1.thumb.png.6e3f011769b0ea537f1150fcc53b939d.png
     

    Есть ли доступ у форума к базе данных в которую мне надо внести ключ? Нет нету. Соединение надо создать заново

    Вот так работать будет?
     

    public function save()
    	{
    	\IPS\Db::i(
        'remote_database_name', 
        array(
            'sql_host'      => 'host',
            'sql_user'      => 'user',
            'sql_pass'      => 'pass',
            'sql_database'      => 'database',
        ) 
    );
    		if ( !$this->key )
    		{
    			do
    			{
    				$this->key = $this->generate();
    			}
    			while ( \count( \IPS\Db::i()->select( '*', 'nexus_licensekeys', array( 'lkey_key=?', $this->key ) ) ) );
    			while ( \count( \IPS\Db::i('remote_database_name')->insert('you_table', array('license_key' => $this->key) ) ) );
    		}
    		return parent::save();
    	}
    	
    	
    	
    

     

  14. 2 минуты назад, siv1987 сказал:

    mysql пользователь который использует форум имеет доступ к этой базе данных? Если да, то запрос можно выполнить от текущего подключения.
    Если нет то http://ipbskins.ru/forum/topic15779.html#entry105651
     

    
    /* create external connect */
    \IPS\Db::i(
        'remote_database_name', 
        array(
            'sql_host'      => 'host',
            'sql_user'      => 'user',
            'sql_pass'      => 'pass',
            'sql_database'      => 'database',
        ) 
    );
    
    \IPS\Db::i('remote_database_name')->insert('you_table', array('license_key' => $this->key));

     

    Не совсем понял вопрос про пользователя который имеет доступ но я думаю что нет? Мне надо создать новое подключение.
    А куда код вставлять?
    Вот весь код файла LicenseKey.php если я всё плавильно понял в конце функция save() отвечает за кол-во ключей которое купили
     

    <?php
    /**
     * @brief		License Key Model
     * @author		<a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
     * @copyright	(c) Invision Power Services, Inc.
     * @license		https://www.invisioncommunity.com/legal/standards/
     * @package		Invision Community
     * @subpackage	Nexus
     * @since		30 Apr 2014
     */
    
    namespace IPS\nexus\Purchase;
    
    /* 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;
    }
    
    /**
     * License Key Model
     */
    abstract class _LicenseKey extends \IPS\Patterns\ActiveRecord
    {
    	/**
    	 * License Key Types
    	 *
    	 * @return	array
    	 */
    	public static function licenseKeyTypes()
    	{
    		return array(
    			'Standard'	=> 'IPS\nexus\Purchase\LicenseKey\Standard',
    			'Mdfive'	=> 'IPS\nexus\Purchase\LicenseKey\Mdfive',
    		);
    	}
    		
    	/**
    	 * @brief	Multiton Store
    	 */
    	protected static $multitons;
    
    	/**
    	 * @brief	Database Table
    	 */
    	public static $databaseTable = 'nexus_licensekeys';
    	
    	/**
    	 * @brief	Database Prefix
    	 */
    	public static $databasePrefix = 'lkey_';
    	
    	/**
    	 * @brief	[ActiveRecord] Database ID Column
    	 */
    	public static $databaseColumnId = 'key';
    	
    	/**
    	 * @brief	[ActiveRecord] Database ID Fields
    	 */
    	protected static $databaseIdFields = array( 'lkey_purchase' );
    	
    	/**
    	 * @brief	[ActiveRecord] Multiton Map
    	 */
    	protected static $multitonMap	= array();
    	
    	/**
    	 * Construct ActiveRecord from database row
    	 *
    	 * @param	array	$data							Row from database table
    	 * @param	bool	$updateMultitonStoreIfExists	Replace current object in multiton store if it already exists there?
    	 * @return	static
    	 */
    	public static function constructFromData( $data, $updateMultitonStoreIfExists = TRUE )
    	{
    		$classname = 'IPS\nexus\Purchase\LicenseKey\\' . mb_ucfirst( $data['lkey_type'] );
    
    		/* Initiate an object */
    		$obj = new $classname;
    		$obj->_new = FALSE;
    		
    		/* Import data */
    		foreach ( $data as $k => $v )
    		{
    			if( static::$databasePrefix AND mb_strpos( $k, static::$databasePrefix ) === 0 )
    			{
    				$k = \substr( $k, \strlen( static::$databasePrefix ) );
    			}
    
    			$obj->_data[ $k ] = $v;
    		}
    		$obj->changed = array();
    		
    		/* Init */
    		if ( method_exists( $obj, 'init' ) )
    		{
    			$obj->init();
    		}
    				
    		/* Return */
    		return $obj;
    	}
    	
    	/**
    	 * Set Default Values
    	 *
    	 * @return	void
    	 */
    	public function setDefaultValues()
    	{
    		$exploded = explode( '\\', \get_class( $this ) );
    		$this->type = mb_strtolower( array_pop( $exploded ) );
    		$this->active = TRUE;
    		$this->uses = 0;
    		$this->activate_data = array();
    		$this->generated = new \IPS\DateTime;
    	}
    	
    	/**
    	 * Set purchase
    	 *
    	 * @param	\IPS\nexus\Purchase	$purchase	The purchase
    	 * @return	void
    	 */
    	public function set_purchase( \IPS\nexus\Purchase $purchase )
    	{
    		$this->_data['purchase'] = $purchase->id;
    		$this->_data['member'] = $purchase->member->member_id;
    	}
    	
    	/**
    	 * Set purchase
    	 *
    	 * @return	\IPS\nexus\Purchase
    	 */
    	public function get_purchase()
    	{
    		return \IPS\nexus\Purchase::load( $this->_data['purchase'] );
    	}
    	
    	/**
    	 * Set activate data
    	 *
    	 * @param	array	$data	The data
    	 * @return	void
    	 */
    	public function set_activate_data( array $data )
    	{
    		$this->_data['activate_data'] = json_encode( $data );
    	}
    	
    	/**
    	 * Set activate data
    	 *
    	 * @return	\IPS\DateTime
    	 */
    	public function get_activate_data()
    	{
    		return json_decode( $this->_data['activate_data'], TRUE );
    	}
    	
    	/**
    	 * Set generated time
    	 *
    	 * @param	\IPS\DateTime	$generated	Generated time
    	 * @return	void
    	 */
    	public function set_generated( \IPS\DateTime $generated )
    	{
    		$this->_data['generated'] = $generated->getTimestamp();
    	}
    	
    	/**
    	 * Set generated time
    	 *
    	 * @return	\IPS\DateTime
    	 */
    	public function get_generated()
    	{
    		return \IPS\DateTime::ts( $this->_data['generated'] );
    	}
    	
    	/**
    	 * Save Changed Columns
    	 *
    	 * @return	void
    	 */
    	public function save()
    	{
    		if ( !$this->key )
    		{
    			do
    			{
    				$this->key = $this->generate();
    			}
    			while ( \count( \IPS\Db::i()->select( '*', 'nexus_licensekeys', array( 'lkey_key=?', $this->key ) ) ) );
    		}
    		return parent::save();
    	}
    }

     

  15. 1 час назад, siv1987 сказал:

    А чем таблица форума не устраивает? Можно создать mysql триггер таблицы при inserte чтобы данные копировались в другую таблицы.

    wanted, достаточно будет в конце условия добавить 

    
    \IPS\Db::i()->insert( 'your_table', array(
    		'license_key' => $this->key
    	) );

    Только насколько я понял ТС нужно вставить еще и в другую бд. Тут либо создать другое подключение, либо если у mysql пользователя есть доступ к этой бд, использовать нативный метод \IPS\Db::i()->query с указанием таблицы другой базы данных INSERT INTO other_db.your_table

    Совершенно верно, мне надо скопировать ключ в другую БД

    1 час назад, siv1987 сказал:

    А чем таблица форума не устраивает? Можно создать mysql триггер таблицы при inserte чтобы данные копировались в другую таблицы.

    wanted, достаточно будет в конце условия добавить 

    
    \IPS\Db::i()->insert( 'your_table', array(
    		'license_key' => $this->key
    	) );

    Только насколько я понял ТС нужно вставить еще и в другую бд. Тут либо создать другое подключение, либо если у mysql пользователя есть доступ к этой бд, использовать нативный метод \IPS\Db::i()->query с указанием таблицы другой базы данных INSERT INTO other_db.your_table

    Очень напрягает что на этом форуме нельзя редактировать свой текст.
    Дело в том что в том php я не могу почему то создать новое подключение
    использую

    $mysqli_key = new mysqli("****", "****", "****", "****");

     

    1 час назад, siv1987 сказал:

    А чем таблица форума не устраивает? Можно создать mysql триггер таблицы при inserte чтобы данные копировались в другую таблицы.

    wanted, достаточно будет в конце условия добавить 

    
    \IPS\Db::i()->insert( 'your_table', array(
    		'license_key' => $this->key
    	) );

    Только насколько я понял ТС нужно вставить еще и в другую бд. Тут либо создать другое подключение, либо если у mysql пользователя есть доступ к этой бд, использовать нативный метод \IPS\Db::i()->query с указанием таблицы другой базы данных INSERT INTO other_db.your_table

    Может быть ты в курсе где искать "использовать нативный метод \IPS\Db::i()->query с указанием таблицы другой базы данных INSERT INTO other_db.your_table"

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