<?php
/*
Plugin Name: Root Category Lock
Description: Only allow CMS administrators to create root level category records
Version: 1.00
Requires at least: 2.53
*/

addAction('record_save_errorchecking', 'rootCategoryLock', null, 3);

function rootCategoryLock($tableName, $recordExists, $oldRecord) {
  if ($GLOBALS['schema']['menuType'] != 'category') { return; } // only run for category menus
//  if ($GLOBALS['CURRENT_USER']['isAdmin']) { return; } // only run for non-admins
  
  // don't allow creating root categories
  $creatingNewRootCategory   = (!$recordExists && $_REQUEST['parentNum'] == '0');
  $changingOldCategoryToRoot = @$oldRecord['parentNum'] && ($_REQUEST['parentNum'] == '0');
  if ($creatingNewRootCategory || $changingOldCategoryToRoot) { 
    die("Only administrators can create new root level categories!");
  }

  // don't allow making root category subcategory
  $changingRootToSubCategory = @$oldRecord['parentNum'] == '0' && $_REQUEST['parentNum'] != '0'; 
  if ($creatingNewRootCategory || $changingOldCategoryToRoot || $changingRootToSubCategory) { 
    die("Only administrators can change parent of root level categories!");
  }
  
}

//eof