Version 4.3.0

This commit is contained in:
Neo committed 2025-12-19 05:47:12 -08:00
1 parent 96997ddd8e
commit fe1acf984a
1349 files changed
+116159 -67711

No files matched your search

@@ -130,13 +130,7 @@ class _incomingemail extends \IPS\Dispatcher\Controller
*/
protected function disablePop3()
{
foreach ( array( 'pop3_server', 'pop3_port', 'pop3_user', 'pop3_password' ) as $k )
{
\IPS\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => '' ), array( 'conf_key=?', $k ) );
\IPS\Settings::i()->$k = '';
}
unset( \IPS\Data\Store::i()->settings );
\IPS\Settings::i()->changeValues( array( 'pop3_server' => '', 'pop3_port' => '', 'pop3_user' => '', 'pop3_password' => '' ) );
\IPS\Session::i()->log( 'acplogs__pop3_settings' );
\IPS\Db::i()->update( 'core_tasks', array( 'enabled' => 0 ), array( 'app=? AND `key`=?', 'core', 'pop' ) );
\IPS\Output::i()->redirect( \IPS\Http\Url::internal('app=nexus&module=support&controller=settings&tab=incomingemail') );
@@ -896,7 +896,7 @@ class _request extends \IPS\nexus\modules\front\support\view
}
$options[ $request->author()->member_id ] = $request->author()->name;
$toggles[ $request->author()->member_id ] = array( 'associated_purchase_' . $request->author()->member_id );
$form->add( new \IPS\Helpers\Form\Radio( 'support_account', $request->author()->member_id, TRUE, array( 'options' => $options, 'toggles' => $toggles, 'parse' => 'none' ) ) );
$form->add( new \IPS\Helpers\Form\Radio( 'support_account', $request->author()->member_id, TRUE, array( 'options' => $options, 'toggles' => $toggles, 'parse' => 'normal' ) ) );
foreach ( $options as $memberId => $memberName )
{
$field = new \IPS\Helpers\Form\Node( 'associated_purchase_' . $memberId, $memberId == $request->author()->member_id ? $request->purchase : NULL, TRUE, array( 'class' => 'IPS\nexus\Purchase', 'forceOwner' => \IPS\Member::load( $memberId ), 'zeroVal' => 'none' ), NULL, NULL, NULL, 'associated_purchase_' . $memberId );
@@ -1002,7 +1002,7 @@ class _request extends \IPS\nexus\modules\front\support\view
$form->add( new \IPS\Helpers\Form\Node( 'support_department', $request->department, TRUE, array( 'class' => 'IPS\nexus\Support\Department', 'url' => $url ) ) );
$form->add( new \IPS\Helpers\Form\Node( 'r_status', $request->status, TRUE, array( 'class' => 'IPS\nexus\Support\Status', 'url' => $url ) ) );
$form->add( new \IPS\Helpers\Form\Node( 'support_severity', $request->severity, TRUE, array( 'class' => 'IPS\nexus\Support\Severity', 'url' => $url ) ) );
$form->add( new \IPS\Helpers\Form\Select( 'r_staff', $request->staff ? $request->staff->member_id : 0, FALSE, array( 'options' => array( 0 => 'unassigned' ) + \IPS\nexus\Support\Request::staff() ) ) );
$form->add( new \IPS\Helpers\Form\Select( 'r_staff', $request->staff ? $request->staff->member_id : 0, FALSE, array( 'parse' => 'normal', 'options' => array( 0 => \IPS\Member::loggedIn()->language()->addToStack('unassigned') ) + \IPS\nexus\Support\Request::staff() ) ) );
if ( $values = $form->values() )
{
@@ -138,7 +138,8 @@ class _requests extends \IPS\Dispatcher\Controller
$order = array();
if ( $groupByDepartment )
{
$order[] = 'dpt_position';
$order[] = 'nexus_support_staff_dpt_order.dpt_position';
$order[] = 'nexus_support_departments.dpt_position'; // This is to prevent an issue if two departments have the same position (which may be the case if new departments have been created since the user set their preferred order)
}
$honorSeverities = ( !isset( \IPS\Request::i()->cookie['support_honor_severities'] ) or \IPS\Request::i()->cookie['support_honor_severities'] );
if ( $honorSeverities )
@@ -525,19 +526,26 @@ class _requests extends \IPS\Dispatcher\Controller
/* Init */
\IPS\Dispatcher::i()->checkAcpPermission( 'requests_create' );
$steps = array();
$url = \IPS\Http\Url::internal('app=nexus&module=support&controller=requests&do=create');
$initialData = NULL;
if ( isset( \IPS\Request::i()->member ) )
{
$initialData = array( 'member' => \IPS\Request::i()->member );
$url = $url->setQueryString( 'member', \IPS\Request::i()->member );
}
/* Owner */
if ( !isset( \IPS\Request::i()->member ) )
{
$steps['request_owner'] = function( $data )
$steps['request_owner'] = function( $data ) use ( $url )
{
$form = new \IPS\Helpers\Form( 'owner', 'continue' );
$form->add( new \IPS\Helpers\Form\Radio( 'request_owner_type', 'member', TRUE, array(
$form = new \IPS\Helpers\Form( 'owner', 'continue', $url->setQueryString( '_step', 'request_owner' ) );
$form->add( new \IPS\Helpers\Form\Radio( 'request_owner_type', isset( $data['email'] ) ? 'email' : 'member', TRUE, array(
'options' => array( 'member' => 'request_owner_member', 'email' => 'request_owner_email' ),
'toggles' => array( 'member' => array( 'request_owner_member' ), 'email' => array( 'request_owner_email' ) )
) ) );
$form->add( new \IPS\Helpers\Form\Member( 'request_owner_member', isset( \IPS\Request::i()->member ) ? \IPS\Member::load( \IPS\Request::i()->member ) : NULL, FALSE, array(), NULL, NULL, NULL, 'request_owner_member' ) );
$form->add( new \IPS\Helpers\Form\Email( 'request_owner_email', NULL, FALSE, array(), NULL, NULL, NULL, 'request_owner_email' ) );
$form->add( new \IPS\Helpers\Form\Member( 'request_owner_member', isset( $data['member'] ) ? \IPS\Member::load( $data['member'] ) : ( isset( \IPS\Request::i()->member ) ? \IPS\Member::load( \IPS\Request::i()->member ) : NULL ), FALSE, array(), NULL, NULL, NULL, 'request_owner_member' ) );
$form->add( new \IPS\Helpers\Form\Email( 'request_owner_email', isset( $data['email'] ) ? $data['email'] : NULL, FALSE, array(), NULL, NULL, NULL, 'request_owner_email' ) );
if ( $values = $form->values() )
{
if ( $values['request_owner_type'] === 'member' )
@@ -579,7 +587,7 @@ class _requests extends \IPS\Dispatcher\Controller
$stockActions = \IPS\nexus\Support\StockAction::roots();
if ( count( $stockActions ) )
{
$steps['stock_action'] = function( $data ) use ( $stockActions )
$steps['stock_action'] = function( $data ) use ( $stockActions, $url )
{
$options = array( 0 => 'none' );
foreach ( $stockActions as $action )
@@ -587,8 +595,8 @@ class _requests extends \IPS\Dispatcher\Controller
$options[ $action->id ] = $action->_title;
}
$form = new \IPS\Helpers\Form( 'stock_action', 'continue' );
$form->add( new \IPS\Helpers\Form\Radio( 'stock_action', 0, FALSE, array(
$form = new \IPS\Helpers\Form( 'stock_action', 'continue', $url->setQueryString( '_step', 'stock_action' ) );
$form->add( new \IPS\Helpers\Form\Radio( 'stock_action', isset( $data['stock_action'] ) ? $data['stock_action'] : 0, FALSE, array(
'options' => $options
) ) );
if ( $values = $form->values() )
@@ -602,7 +610,7 @@ class _requests extends \IPS\Dispatcher\Controller
}
/* Request Details */
$steps['request_details'] = function( $data ) use ( $stockActions )
$steps['request_details'] = function( $data ) use ( $stockActions, $url )
{
if ( !isset( $data['member'] ) AND isset( \IPS\Request::i()->member ) )
{
@@ -615,16 +623,16 @@ class _requests extends \IPS\Dispatcher\Controller
$stockAction = $stockActions[ $data['stock_action'] ];
}
$form = new \IPS\Helpers\Form( 'request_details', 'continue' );
$form->add( new \IPS\Helpers\Form\Text( 'support_title', NULL, TRUE ) );
$form->add( new \IPS\Helpers\Form\Node( 'support_department', $stockAction ? $stockAction->department : NULL, TRUE, array( 'class' => 'IPS\nexus\Support\Department' ) ) );
$form = new \IPS\Helpers\Form( 'request_details', 'continue', $url->setQueryString( '_step', 'request_details' ) );
$form->add( new \IPS\Helpers\Form\Text( 'support_title', isset( $data['title'] ) ? $data['title'] : NULL, TRUE ) );
$form->add( new \IPS\Helpers\Form\Node( 'support_department', isset( $data['department'] ) ? $data['department'] : ( $stockAction ? $stockAction->department : NULL ), TRUE, array( 'class' => 'IPS\nexus\Support\Department' ) ) );
if ( isset( $data['member'] ) )
{
$form->add( new \IPS\Helpers\Form\Node( 'support_purchase', 0, FALSE, array( 'class' => 'IPS\nexus\Purchase', 'forceOwner' => \IPS\Member::load( $data['member'] ), 'zeroVal' => 'none' ) ) );
$form->add( new \IPS\Helpers\Form\Node( 'support_purchase', isset( $data['purchase'] ) ? $data['purchase'] : 0, FALSE, array( 'class' => 'IPS\nexus\Purchase', 'forceOwner' => \IPS\Member::load( $data['member'] ), 'zeroVal' => 'none' ) ) );
}
$form->add( new \IPS\Helpers\Form\Node( 'r_status', $stockAction ? $stockAction->status : \IPS\nexus\Support\Status::load( TRUE, 'status_default_staff' ), TRUE, array( 'class' => 'IPS\nexus\Support\Status' ) ) );
$form->add( new \IPS\Helpers\Form\Node( 'support_severity', \IPS\nexus\Support\Severity::load( TRUE, 'sev_default' ), TRUE, array( 'class' => 'IPS\nexus\Support\Severity' ) ) );
$form->add( new \IPS\Helpers\Form\Select( 'r_staff', 0, FALSE, array( 'options' => array( 0 => 'unassigned' ) + \IPS\nexus\Support\Request::staff() ) ) );
$form->add( new \IPS\Helpers\Form\Node( 'r_status', isset( $data['status'] ) ? $data['status'] : ( $stockAction ? $stockAction->status : \IPS\nexus\Support\Status::load( TRUE, 'status_default_staff' ) ), TRUE, array( 'class' => 'IPS\nexus\Support\Status' ) ) );
$form->add( new \IPS\Helpers\Form\Node( 'support_severity', isset( $data['severity'] ) ? $data['severity'] : \IPS\nexus\Support\Severity::load( TRUE, 'sev_default' ), TRUE, array( 'class' => 'IPS\nexus\Support\Severity' ) ) );
$form->add( new \IPS\Helpers\Form\Select( 'r_staff', isset( $data['staff'] ) ? $data['staff'] : 0, FALSE, array( 'parse' => 'normal', 'options' => array( 0 => \IPS\Member::loggedIn()->language()->addToStack('unassigned') ) + \IPS\nexus\Support\Request::staff() ) ) );
if ( $values = $form->values() )
{
$data['title'] = $values['support_title'];
@@ -645,15 +653,15 @@ class _requests extends \IPS\Dispatcher\Controller
$customFields = \IPS\nexus\Support\CustomField::roots();
if ( count( $customFields ) )
{
$steps['custom_support_fields'] = function( $data )
$steps['custom_support_fields'] = function( $data ) use ( $url )
{
$customFields = \IPS\nexus\Support\CustomField::roots( NULL, NULL, array( "sf_departments='*' OR " . \IPS\Db::i()->findInSet( 'sf_departments', array( $data['department'] ) ) ) );
if ( count( $customFields ) )
{
$form = new \IPS\Helpers\Form( 'custom_fields', 'continue' );
$form = new \IPS\Helpers\Form( 'custom_fields', 'continue', $url->setQueryString( '_step', 'custom_support_fields' ) );
foreach ( $customFields as $field )
{
$form->add( $field->buildHelper() );
$form->add( $field->buildHelper( isset( $data['custom_fields']["nexus_cfield_{$field->id}"] ) ? $data['custom_fields']["nexus_cfield_{$field->id}"] : NULL ) );
}
if ( $values = $form->values() )
{
@@ -670,7 +678,7 @@ class _requests extends \IPS\Dispatcher\Controller
}
/* Your Message */
$steps['your_message'] = function( $data ) use ( $stockActions )
$steps['your_message'] = function( $data ) use ( $stockActions, $url )
{
$stockAction = NULL;
if ( isset( $data['stock_action'] ) and isset( $stockActions[ $data['stock_action'] ] ) )
@@ -701,7 +709,7 @@ class _requests extends \IPS\Dispatcher\Controller
$defaultContent = NULL;
}
$form = new \IPS\Helpers\Form( 'your_message' );
$form = new \IPS\Helpers\Form( 'your_message', 'save', $url->setQueryString( '_step', 'your_message' ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'support_email_customer', TRUE, TRUE, array( 'togglesOn' => array( 'support_create_to', 'support_create_cc', 'support_create_bcc' ) ) ) );
$form->add( new \IPS\Helpers\Form\Email( 'to', isset( $data['member'] ) ? \IPS\Member::load( $data['member'] )->email : $data['email'], NULL, array(), NULL, NULL, NULL, 'support_create_to' ) );
$form->add( new \IPS\Helpers\Form\Text( 'cc', array(), FALSE, array( 'autocomplete' => array( 'unique' => TRUE, 'forceLower' => TRUE ) ), array( 'IPS\nexus\Support\Request', '_validateEmail' ), NULL, NULL, 'support_create_cc' ) );
@@ -845,16 +853,7 @@ class _requests extends \IPS\Dispatcher\Controller
return $form;
};
/* Set member */
$url = \IPS\Http\Url::internal('app=nexus&module=support&controller=requests&do=create');
$initialData = NULL;
if ( isset( \IPS\Request::i()->member ) )
{
$initialData = array( 'member' => \IPS\Request::i()->member );
$url = $url->setQueryString( 'member', \IPS\Request::i()->member );
}
/* Display */
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('create_support_request');
\IPS\Output::i()->output = new \IPS\Helpers\Wizard( $steps, $url, TRUE, $initialData );
@@ -50,9 +50,7 @@ class _severities extends \IPS\Node\Controller
if ( isset( \IPS\Request::i()->nexus_severities ) )
{
\IPS\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => \IPS\Request::i()->nexus_severities ), array( 'conf_key=?', 'nexus_severities' ) );
\IPS\Settings::i()->nexus_severities = \IPS\Request::i()->nexus_severities;
unset( \IPS\Data\Store::i()->settings );
\IPS\Settings::i()->changeValues( array( 'nexus_severities' => \IPS\Request::i()->nexus_severities ) );
\IPS\Session::i()->log( 'acplogs__severity_settings' );
\IPS\Output::i()->redirect( \IPS\Http\Url::internal('app=nexus&module=support&controller=settings&tab=severities') );
}
@@ -58,6 +58,26 @@ class _volume extends \IPS\Dispatcher\Controller
$chart->addSeries( $department->_title, 'number', 'COUNT(*)', TRUE, $department->id );
}
$chart->tableInclude = array( 'r_id', 'r_title', 'r_member', 'r_department', 'r_status', 'r_started', 'r_last_reply', 'r_replies' );
$chart->tableParsers = array(
'r_member' => function( $val ) {
return \IPS\Theme::i()->getTemplate('global', 'nexus')->userLink( \IPS\Member::load( $val ) );
},
'r_department' => function( $val ) {
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_department_' . $val );
},
'r_status' => function( $val, $row )
{
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_status_' . $val . '_admin' );
},
'r_started' => function( $val ) {
return \IPS\DateTime::ts( $val );
},
'r_last_reply' => function( $val ) {
return \IPS\DateTime::ts( $val );
}
);
\IPS\Output::i()->output = (string) $chart;
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('menu__nexus_support_volume');
}