Version 5.0.13
This commit is contained in:
1 parent
b89858b2ff
commit
5efe744c5f
1407 files changed
+69690
-30177
No files matched your search
@@ -20,7 +20,6 @@ use IPS\DateTime;
|
||||
use IPS\Db;
|
||||
use IPS\Dispatcher;
|
||||
use IPS\Dispatcher\Controller;
|
||||
use IPS\Extensions\AdvertisementLocationsAbstract;
|
||||
use IPS\File;
|
||||
use IPS\Helpers\Form;
|
||||
use IPS\Helpers\Form\CheckboxSet;
|
||||
@@ -505,79 +504,12 @@ class advertisements extends Controller
|
||||
|
||||
$form->add( new Text( 'ad_image_alt', ( $record->id ) ? $record->image_alt : NULL, FALSE, array(), NULL, NULL, NULL, 'ad_image_alt' ) );
|
||||
|
||||
$currentValues = ( $record->id and $record->additional_settings ) ? json_decode( $record->additional_settings, TRUE ) : array();
|
||||
if( Request::i()->type != 'emails' )
|
||||
{
|
||||
$currentValues = ( $record->id ) ? json_decode( $record->additional_settings, TRUE ) : array();
|
||||
|
||||
/* Add the location fields, remember to call extensions for additional locations.
|
||||
Array format: location => array of toggle fields to show */
|
||||
$defaultLocations = array(
|
||||
'ad_global_header' => array( 'ad_apps' ),
|
||||
'ad_global_footer' => array( 'ad_apps' ),
|
||||
'ad_sidebar' => array( 'ad_apps' ),
|
||||
);
|
||||
|
||||
$settingFields = [];
|
||||
|
||||
/* Add a field to restrict by app */
|
||||
$settingFields[] = new Node( 'ad_apps', $currentValues['ad_apps'] ?? 0, false, array(
|
||||
'class' => Application::class,
|
||||
'multiple' => true,
|
||||
'zeroVal' => 'all',
|
||||
'subnodes' => false
|
||||
), null, null, null, 'ad_apps' );
|
||||
|
||||
/* Now grab ad location extensions */
|
||||
foreach ( Application::allExtensions( 'core', 'AdvertisementLocations', FALSE, 'core' ) as $key => $extension )
|
||||
{
|
||||
/* @var AdvertisementLocationsAbstract $extension */
|
||||
$result = $extension->getSettings( $currentValues );
|
||||
|
||||
$defaultLocations = array_merge( $defaultLocations, $result['locations'] );
|
||||
|
||||
/* If this is a list view, add setting fields for interaval and repeat */
|
||||
if( $extension::$listView )
|
||||
{
|
||||
$settingFields[] = new Number( 'ad_view_number', ( isset( $currentValues['ad_view_number'] ) AND $currentValues['ad_view_number'] ) ? $currentValues['ad_view_number'] : 1, FALSE, array( 'min' => 1 ), NULL, NULL, Member::loggedIn()->language()->addToStack('ad_view_number_suffix'), 'ad_view_number' );
|
||||
|
||||
$settingFields[] = new Number( 'ad_view_repeat', $currentValues['ad_view_repeat'] ?? 1, FALSE, array( 'unlimited' => -1 ), NULL, NULL, Member::loggedIn()->language()->addToStack('ad_view_repeat_suffix'), 'ad_view_repeat' );
|
||||
|
||||
foreach( $result['locations'] as $location => $toggles )
|
||||
{
|
||||
$defaultLocations[$location][] = 'ad_view_number';
|
||||
$defaultLocations[$location][] = 'ad_view_repeat';
|
||||
}
|
||||
}
|
||||
|
||||
if( isset( $result['settings'] ) )
|
||||
{
|
||||
$settingFields = $settingFields + $result['settings'];
|
||||
}
|
||||
}
|
||||
|
||||
/* Add the locations to the form, and make sure the toggles get set properly */
|
||||
$locations = array();
|
||||
if ( $record->id )
|
||||
{
|
||||
$locations = explode( ',', $record->location );
|
||||
$locations = array_intersect( $locations, array_keys( $defaultLocations ) );
|
||||
}
|
||||
|
||||
/* Make location optional so that you can have an active ad for widgets only */
|
||||
$form->add( new CheckboxSet( 'ad_location',
|
||||
$locations,
|
||||
false,
|
||||
array(
|
||||
'options' => array_combine( array_keys( $defaultLocations ), array_keys( $defaultLocations ) ),
|
||||
'toggles' => $defaultLocations,
|
||||
'noDefault' => true
|
||||
),
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
'ad_location'
|
||||
) );
|
||||
|
||||
$settingFields = Advertisement::locationFields( $currentValues, ( $record->id ? explode( ",", $record->location ) : [] ) );
|
||||
foreach( $settingFields as $settingField )
|
||||
{
|
||||
$form->add( $settingField );
|
||||
@@ -589,31 +521,9 @@ class advertisements extends Controller
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Container restrictions for email ads */
|
||||
$containerClasses = array();
|
||||
$containerToggles = array();
|
||||
|
||||
foreach( Content::routedClasses( FALSE, FALSE, TRUE ) as $contentItemClass )
|
||||
foreach( Advertisement::emailFields( $currentValues ) as $field )
|
||||
{
|
||||
if( isset( $contentItemClass::$containerNodeClass ) AND $contentItemClass::$containerNodeClass AND !isset( $containerClasses[ $contentItemClass::$containerNodeClass ] ) )
|
||||
{
|
||||
$containerClass = $contentItemClass::$containerNodeClass;
|
||||
|
||||
$containerClasses[ $containerClass ] = $contentItemClass::$title . '_pl';
|
||||
$containerToggles[ $containerClass ] = array( 'node_' . md5( $containerClass ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( count( $containerClasses ) )
|
||||
{
|
||||
$form->add( new Select( '_ad_email_container', ( $record->id AND isset( $record->_additional_settings['email_container'] ) ) ? $record->_additional_settings['email_container'] : '*', FALSE, array( 'options' => $containerClasses, 'multiple' => FALSE, 'unlimited' => '*', 'unlimitedLang' => 'unrestricted', 'toggles' => $containerToggles ), NULL, NULL, NULL, '_ad_email_container' ) );
|
||||
|
||||
foreach( $containerClasses as $classname => $lang )
|
||||
{
|
||||
$form->add( new Node( 'node_' . md5( $classname ), ( $record->id ) ? ( isset( $record->_additional_settings['email_node'] ) ? $record->_additional_settings['email_node'] : 0 ) : 0, FALSE, array( 'class' => $classname, 'zeroVal' => 'any', 'multiple' => TRUE, 'forceOwner' => FALSE ), NULL, NULL, NULL, 'node_' . md5( $classname ) ) );
|
||||
|
||||
Member::loggedIn()->language()->words[ 'node_' . md5( $classname ) ] = Member::loggedIn()->language()->addToStack( $classname::$nodeTitle );
|
||||
}
|
||||
$form->add( $field );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -773,30 +683,13 @@ class advertisements extends Controller
|
||||
|
||||
$record->images = json_encode( $images );
|
||||
|
||||
/* Any additional settings to save? */
|
||||
$additionalSettings = array(
|
||||
'ad_apps' => ( isset( $values['ad_apps'] ) AND is_array( $values['ad_apps'] ) ) ? array_keys( $values['ad_apps'] ) : 0
|
||||
);
|
||||
|
||||
if( $values['ad_type'] == Advertisement::AD_EMAIL )
|
||||
{
|
||||
$additionalSettings['email_container'] = $values['_ad_email_container'];
|
||||
$additionalSettings['email_node'] = ( $values['_ad_email_container'] != '*' ) ? ( ( $values['node_' . md5( $values['_ad_email_container'] ) ] == 0 ) ? 0 : array_keys( $values['node_' . md5( $values['_ad_email_container'] ) ] ) ) : 0;
|
||||
$additionalSettings = Advertisement::processEmailFields( $values );
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ( Application::allExtensions( 'core', 'AdvertisementLocations', FALSE, 'core' ) as $key => $extension )
|
||||
{
|
||||
if( $extension::$listView )
|
||||
{
|
||||
$additionalSettings['ad_view_number'] = $values['ad_view_number'] ?? 1;
|
||||
$additionalSettings['ad_view_repeat'] = $values['ad_view_repeat'] ?? 0;
|
||||
}
|
||||
|
||||
$settings = $extension->parseSettings( $values );
|
||||
|
||||
$additionalSettings = array_merge( $additionalSettings, $settings );
|
||||
}
|
||||
$additionalSettings = Advertisement::processLocationFields( $values );
|
||||
}
|
||||
|
||||
$record->additional_settings = json_encode( $additionalSettings );
|
||||
|
||||
Reference in new issue
Block a user