$modx->loadClass('FileHelper', $core_path . 'model/', true, true); $modx->loadClass('Element', $core_path . 'model/', true, true); $modx->loadClass('ElementHelper', $core_path . 'model/', true, true); $modx->loadClass('ElementSync', $core_path . 'model/', true, true); // Path to the element sync json file $element_sync_file = MODX_BASE_PATH . $modx->getOption('elementhelper.element_sync_file_path', null, 'site/elements/element_sync.json'); // Initialize the classes $element_helper = new ElementHelper($modx); $element_sync = new ElementSync($modx, $element_sync_file); $element_types = array('modTemplate' => $modx->getOption('elementhelper.template_path', null, 'site/elements/templates/'), 'modChunk' => $modx->getOption('elementhelper.chunk_path', null, 'site/elements/chunks/'), 'modSnippet' => $modx->getOption('elementhelper.snippet_path', null, 'site/elements/snippets/'), 'modPlugin' => $modx->getOption('elementhelper.plugin_path', null, 'site/elements/plugins/')); $category_whitelist = array_map('trim', explode(',', $modx->getOption('elementhelper.category_whitelist', null, ''))); $element_blacklist = array_map('trim', explode(',', $modx->getOption('elementhelper.element_blacklist', null, ''))); // Loop through the element types foreach ($element_types as $type => $type_path) { $log_prefix = sprintf('[ElementHelper] %s: ', $type); $file_list = FileHelper::get_directory_file_list(MODX_BASE_PATH . $type_path); // Move onto the next element type if it has no files if (empty($file_list)) { $modx->log(MODX_LOG_LEVEL_INFO, $log_prefix . 'No files.'); continue; } // Process the files for this element type foreach ($file_list as $file_path) { $file = FileHelper::get_file_meta($file_path); $element = Element::get($modx, $type, $file['name']); // If the file is not in the sync if (!$element_sync->has_element($type, $file['name'])) { // If the element doesn't exist if (!$element) { // Create the element $element = Element::create($modx, $type, $file['name']);