/**
  * Renders the layout data for a new module.
  *
  * @since 1.7
  * @param string $parent_id A column node ID.
  * @param int $position The new module position.
  * @param string $type The type of module.
  * @param string $template_id The ID of a module template to render.
  * @return array
  */
 public static function render_new_module($parent_id, $position = false, $type = null, $template_id = null)
 {
     // Add a module template?
     if ($template_id) {
         $module = FLBuilderModel::apply_node_template($template_id, $parent_id, $position);
     } else {
         $module = FLBuilderModel::add_default_module($parent_id, $type, $position);
     }
     // Render the new module's settings.
     $settings = FLBuilder::render_module_settings($module->node, $module->settings->type, $module->parent, false);
     // Maybe render the module's parent for a partial refresh?
     if ($module->partial_refresh) {
         // Get the new module parent.
         $parent = !$parent_id ? null : FLBuilderModel::get_node($parent_id);
         // Get the node to render.
         if (!$parent) {
             $row = FLBuilderModel::get_module_parent('row', $module);
             $render_id = $row->node;
         } else {
             if ($parent->type == 'row') {
                 $col = FLBuilderModel::get_module_parent('column-group', $module);
                 $render_id = $col->node;
             } else {
                 $render_id = $module->node;
             }
         }
     } else {
         $render_id = null;
     }
     // Return the response.
     return array('layout' => self::render($render_id), 'settings' => $settings['settings']);
 }