/**
  * Populates an array of classes in the CMS
  * which allows the user to change the page type.
  *
  * @return SS_List
  */
 public function ModuleTypes()
 {
     $classes = ContentModule::content_module_types();
     $result = new ArrayList();
     foreach ($classes as $instance) {
         $class = $instance->class;
         if ($instance instanceof HiddenClass) {
             continue;
         }
         if (!$instance->canCreate()) {
             continue;
         }
         // skip this type if it is restricted
         if ($instance->stat('need_permission') && !$this->can(singleton($class)->stat('need_permission'))) {
             continue;
         }
         $addAction = $instance->i18n_singular_name();
         // Get description (convert 'Page' to 'SiteTree' for correct localization lookups)
         $description = _t($class . '.DESCRIPTION');
         if (!$description) {
             $description = $instance->uninherited('description');
         }
         $result->push(new ArrayData(array('ClassName' => $class, 'AddAction' => $addAction, 'Description' => $description, 'IconURL' => $instance->stat('icon'), 'Title' => singleton($class)->i18n_singular_name())));
     }
     $result = $result->sort('AddAction');
     return $result;
 }