/// <summary> /// Generates a single task /// </summary> /// <param name="task">The task that should be generated.</param> private void GenerateTask( Task task ) { ClassProxyGenerator classGenerator = new ClassProxyGenerator( GeneratorContext, Subject ); TaskNamingStrategy taskNamingStrategy = new TaskNamingStrategy(); TaskFieldsNamingStrategy taskFieldsNamingStrategy = new TaskFieldsNamingStrategy(); // Generate the task class itself classGenerator.GenerateClassProxy( task, taskNamingStrategy, "Classes/Tasks/", false ); if( null != task.TaskFields ) { classGenerator.GenerateClassProxy( task.TaskFields, taskFieldsNamingStrategy, "Classes/Tasks/", false ); // Add the autoloader for our fields class WriteVirtual( "ext_autoload.php", String.Format( "'{0}' => $extensionPath . 'Classes/Tasks/{1}',", taskFieldsNamingStrategy.GetExtbaseClassName( Subject, task.TaskFields ).ToLower(), taskFieldsNamingStrategy.GetExtbaseFileName( Subject, task.TaskFields ) ) ); } // Add the autoloader for our class WriteVirtual( "ext_autoload.php", String.Format( "'{0}' => $extensionPath . 'Classes/Tasks/{1}',", taskNamingStrategy.GetExtbaseClassName( Subject, task ).ToLower(), taskNamingStrategy.GetExtbaseFileName( Subject, task ) ) ); // Register the scheduler task itself string registerTaskTemplate = "$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks']['{_taskClassName}'] = array(" + " 'extension' => '{_extensionKey}'," + " 'title' => 'LLL:EXT:{_extensionKey}/Resources/Private/Language/locallang_be.xml:{_taskName}'," + " 'description' => 'LLL:EXT:{_extensionKey}/Resources/Private/Language/locallang_be.xml:{_taskDescription}'" + ( ( null != task.TaskFields ) ? ",'additionalFields' => '" + taskFieldsNamingStrategy.GetExtbaseClassName( Subject, task.TaskFields ).ToLower() + "'" : string.Empty ) + ");"; string taskName = String.Format( "{0}.name", task.Name.ToLower() ); string taskDescription = String.Format( "{0}.description", task.Name.ToLower() ); WriteVirtual( "ext_localconf.php", registerTaskTemplate.FormatSmart( new { _extensionKey = Subject.Key, _taskClassName = taskNamingStrategy.GetExtbaseClassName( Subject, task ), _taskName = taskName, _taskDescription = taskDescription } ) ); // Write language constants WriteVirtual( "Resources/Private/Language/locallang_be.xml", string.Format( "<label index=\"{0}\">{1}</label>", taskName, task.Title ) ); WriteVirtual( "Resources/Private/Language/locallang_be.xml", string.Format( "<label index=\"{0}\">{1}</label>", taskDescription, task.Description ) ); }
/// <summary> /// Resolves all tasks defined in a given parsed fragment. /// </summary> /// <param name="parsedFragment"></param> /// <returns></returns> /// <exception cref="ParserException">Task has no name!</exception> public static List<Task> Resolve( Fragment parsedFragment ) { IEnumerable<Fragment> taskFragments = parsedFragment.Fragments.Where( p => p.Keyword == Keywords.ExtensionDirectives.DeclareTask ); if( !taskFragments.Any() ) return null; List<Task> tasks = new List<Task>(); foreach( Fragment taskFragment in taskFragments ) { // Construct the plugin with the given name Task task = new Task {Name = taskFragment.Parameters, SourceFragment = taskFragment}; // Resolve task foreach( Fragment taskParameter in taskFragment.Fragments ) { if( taskParameter.Keyword == Keywords.Description ) { task.Description = taskParameter.Parameters; } else if( taskParameter.Keyword == Keywords.Title ) { task.Title = taskParameter.Parameters; } else if( taskParameter.Keyword == Keywords.Implementation ) { task.Implementation = taskParameter.Parameters; } else if( taskParameter.Keyword == Keywords.ServiceDirectives.AdditionalFields ) { task.AdditionalFieldsClass = taskParameter.Parameters; task.TaskFields = new TaskFields { Implementation = taskParameter.Parameters }; } } // If no name was defined, throw if( string.IsNullOrEmpty( task.Name ) ) { throw new ParserException( "Service has no name!", parsedFragment.SourceDocument ); } if( null != task.TaskFields ) { task.TaskFields.Name = task.Name; } tasks.Add( task ); } return tasks; }
/// <summary> /// Generates the task class name for a given task. /// </summary> /// <param name="extension"></param> /// <param name="task"></param> /// <returns></returns> public static string GetTaskFileName( Extension extension, Task task ) { return String.Format( "{0}Task.php", UpperCamelCase( task.Name ) ); }
/// <summary> /// Generates the task file name that must be used for the implementation of a task. /// </summary> /// <param name="extension"></param> /// <param name="task"></param> /// <returns></returns> public static string GetTaskImplementationFileName( Extension extension, Task task ) { return String.Format( "{0}{1}TaskImplementation.php", UpperCamelCase( extension.Key ), UpperCamelCase( task.Name ) ); }
/// <summary> /// Generates the task class name for a given task. /// </summary> /// <param name="extension"></param> /// <param name="task"></param> /// <returns></returns> public static string GetTaskClassName( Extension extension, Task task ) { return String.Format( "Tx_{0}_Tasks_{1}Task", UpperCamelCase( extension.Key ), UpperCamelCase( task.Name ) ); }