verifyPackage( 'pigeonholes' );
$gBitSystem->verifyPermission( 'p_pigeonholes_create' );
use Bitweaver\Pigeonholes\Pigeonholes;
use Bitweaver\KernelTools;
include_once PIGEONHOLES_PKG_INCLUDE_PATH.'lookup_pigeonholes_inc.php';
// include edit structure file only when structure_id is known
if( !empty( $_REQUEST["structure_id"] ) && ( empty( $_REQUEST['action'] ) || $_REQUEST['action'] != 'remove' ) ) {
$verifyStructurePermission = 'p_pigeonholes_create';
$noAjaxContent = true;
include_once LIBERTY_PKG_INCLUDE_PATH.'structure_edit_inc.php';
// get all the nodes in this structure
foreach( $rootTree as $node ) {
$pigeonStructure[$node['structure_id']] = str_repeat( '-', $node['level'] ).' '.$node['title'];
}
$gBitSmarty->assign( 'pigeonStructure', $pigeonStructure );
}
global $gStructure;
// store the form if we need to
if( !empty( $_REQUEST['pigeonhole_store'] ) ) {
if(( empty( $_REQUEST['pigeonhole']['title'] ))) {
$gBitSystem->fatalError( KernelTools::tra( "You must specify a title." ));
}
// we need to get the root structure id
$_REQUEST['pigeonhole']['root_structure_id'] = !empty( $rootStructure->mStructureId ) ? $rootStructure->mStructureId : null;
// store the pigeonhole
$pigeonStore = new Pigeonholes( null, !empty( $_REQUEST['pigeonhole_content_id'] ) ? $_REQUEST['pigeonhole_content_id'] : null );
$pigeonStore->load();
if( $pigeonStore->store( $_REQUEST['pigeonhole'] )) {
header( "Location: ".$_SERVER['SCRIPT_NAME'].'?structure_id='.$pigeonStore->mStructureId.( !empty( $_REQUEST['action'] ) ? '&action='.$_REQUEST['action'] : '' )."&success=".urlencode( KernelTools::tra( "The category was successfully stored" ) ) );
} else {
$feedback['error'] = $gContent->mErrors;
}
}
if( !empty( $_REQUEST['action'] ) || isset( $_REQUEST["confirm"] ) ) {
// if we need to edit, show the information
if( $_REQUEST['action'] == 'edit' ) {
$pigeonInfo = $gContent->mInfo;
$gContent->loadPreferences();
}
if( $_REQUEST['action'] == 'edit' || $_REQUEST['action'] == 'create' ) {
$gBitSmarty->assign( 'pigeonInfo', !empty( $pigeonInfo ) ? $pigeonInfo : null );
}
if( $_REQUEST["action"] == 'remove' || isset( $_REQUEST["confirm"] ) ) {
if( isset( $_REQUEST["confirm"] ) ) {
if( $gContent->expunge() ) {
KernelTools::bit_redirect( $_SERVER['SCRIPT_NAME'].'?structure_id='.$gContent->mInfo["parent_id"] );
} else {
$feedback['error'] = $gContent->mErrors;
}
}
$gBitSystem->setBrowserTitle( 'Confirm removal of '.$gContent->mInfo['title'] );
$formHash['remove'] = true;
$formHash['structure_id'] = $_REQUEST['structure_id'];
$formHash['action'] = 'remove';
$msgHash = [
'label' => 'Remove Pigeonhole',
'confirm_item' => $gContent->mInfo['title'].'
'.KernelTools::tra( 'and any subcategories' ),
'warning' => 'This will remove the pigeonhole but will not modify or remove the content itself.',
];
$gBitSystem->confirmDialog( $formHash, $msgHash );
}
if( $_REQUEST['action'] == 'dismember' && !empty( $_REQUEST['pigeonhole_content_id'] ) && !empty( $_REQUEST['parent_id'] ) ) {
if( $gContent->expungePigeonholeMember( [ 'parent_id' => $_REQUEST['parent_id'], 'member_id' => $_REQUEST['pigeonhole_content_id'] ] ) ) {
$feedback['success'] = KernelTools::tra( 'The item was successfully removed' );
} else {
$feedback['error'] = KernelTools::tra( 'The item could not be removed' );
}
// Have we been asked to return somewhere else?
if (!empty($_REQUEST['return_uri'])) {
KernelTools::bit_redirect($_REQUEST['return_uri']);
}
// used to avoid displaying edit form
unset( $_REQUEST['action'] );
}
}
if( !empty( $_REQUEST['success'] ) ) {
$feedback['success'] = $_REQUEST['success'];
}
// get all available perms only when the admin is visiting here.
if ( $gBitSystem->isFeatureActive( 'pigeonholes_permissions' ) ) {
$tmpPerms = $gBitUser->isAdmin() ? $gBitUser->getRolePermissions() : $gBitUser->mPerms;
$perms[''] = KernelTools::tra( 'None' );
foreach( $tmpPerms as $perm => $info ) {
$perms[$info['package']][$perm] = $perm;
}
$gBitSmarty->assign( 'perms', $perms );
}
$listHash = [
'root_structure_id' => !empty( $gContent->mInfo['root_structure_id'] ) ? $gContent->mInfo['root_structure_id'] : null,
'force_extras' => true,
'max_records' => -1,
];
$pigeonList = $gContent->getList( $listHash );
$gBitSmarty->assign( 'pigeonList', $pigeonList );
$gBitSmarty->assign( 'feedback', !empty( $feedback ) ? $feedback : null );
// Get list of available styles
if ( $gBitSystem->isFeatureActive( 'pigeonholes_themes' ) ) {
$styles = $gBitThemes->getStyles( null, true );
$gBitSmarty->assign( 'styles', $styles );
}
// Display the template
if ( !empty( $gStructure ) ) {
$gBitSystem->display( 'bitpackage:pigeonholes/edit_pigeonholes.tpl', !empty( $gStructure->mInfo['title'] ) ? KernelTools::tra( 'Edit Pigeonhole' ).': '.$gStructure->mInfo["title"] : KernelTools::tra( 'Create Pigeonhole' ) , [ 'display_mode' => 'edit' ]);
} else {
$gBitSystem->display( 'bitpackage:pigeonholes/edit_pigeonholes.tpl', KernelTools::tra( 'Create Pigeonhole' ) , [ 'display_mode' => 'edit' ]);
}