<?php /* For licensing terms, see /license.txt */
/**
 * Cron script to list unused, but defined, language variables.
 *
 * @package chamilo.cron.lang
 */
/**
 * Includes and declarations.
 */
die();
require_once __DIR__.'/../../inc/global.inc.php';
$path = api_get_path(SYS_LANG_PATH).'english';
ini_set('memory_limit', '128M');
/**
 * Main code.
 */
$terms = [];
$list = SubLanguageManager::get_lang_folder_files_list($path);
foreach ($list as $entry) {
    $file = $path.'/'.$entry;
    if (is_file($file)) {
        $terms = array_merge($terms, SubLanguageManager::get_all_language_variable_in_file($file, true));
    }
}
// get only the array keys (the language variables defined in language files)
$defined_terms = array_flip(array_keys($terms));
$terms = null;
echo count($defined_terms)." terms were found in language files<br />";

// now get all terms found in all PHP files of Chamilo (this takes some
// time and memory)
$usedTerms = [];
$l = strlen(api_get_path(SYS_PATH));
$files = getAllPhpFiles(api_get_path(SYS_PATH));
$files[] = api_get_path(SYS_PATH).'main/install/data.sql';
// Browse files
foreach ($files as $file) {
    //echo 'Analyzing '.$file."<br />";
    $shortFile = substr($file, $l);
    //echo 'Analyzing '.$shortFile."<br />";
    $lines = file($file);
    $isDataSQL = false;
    if (substr($file, -21) === 'main/install/data.sql') {
        $isDataSQL = true;
    }
    // Browse lines inside file $file
    foreach ($lines as $line) {
        if ($isDataSQL) {
            // Check main/install/data.sql
            // Should recognize stuff like
            // INSERT INTO settings_current (variable, type, category, selected_value, title, comment) VALUES ('enable_profile_user_address_geolocalization', 'radio', 'User', 'false', 'EnableProfileUsersAddressGeolocalizationTitle', 'EnableProfileUsersAddressGeolocalizationComment');
            // INSERT INTO settings_options (variable, value, display_text) VALUES ('enable_profile_user_address_geolocalization', 'true', 'Yes');
            // ('show_teacher_data',NULL,'radio','Platform','true','ShowTeacherDataTitle','ShowTeacherDataComment',NULL,NULL, 1),
            $res = 0;
            $myTerms = [];
            $res = preg_match_all('/\'(\w*)\',/', $line, $myTerms);
            if ($res > 0) {
                foreach ($myTerms[1] as $term) {
                    if (substr($term, 0, 4) == 'lang') {
                        $term = substr($term, 4);
                    }
                    $usedTerms[$term] = $shortFile;
                }
            }
        } else {
            $myTerms = [];
            $res = preg_match_all('/get_lang\(\'(\\w*)\'\)/', $line, $myTerms);
            if ($res > 0) {
                foreach ($myTerms[1] as $term) {
                    if (substr($term, 0, 4) == 'lang') {
                        $term = substr($term, 4);
                    }
                    $usedTerms[$term] = $shortFile;
                }
            } else {
                $res = 0;
                $myTerms = [];
                // Should catch:
                // {{ 'CopyTextToClipboard' | get_lang }}
                // {{ "HelloX" | get_lang | format(show_user_info.user_info.complete_name) }}
                // {{ "StudentCourseProgressX" | get_lang | format(item.student_info.progress) }}
                $res = preg_match_all('/\{\s*[\'"](\w*)[\'"]\s*\|\s*get_lang\s*(\|\s*\w*(\s*\([\w_\.,\s]*\))?\s*)?\}/', $line, $myTerms);
                if ($res > 0) {
                    foreach ($myTerms[1] as $term) {
                        if (substr($term, 0, 4) == 'lang') {
                            $term = substr($term, 4);
                        }
                        $usedTerms[$term] = $shortFile;
                    }
                }
                // {{ display.panel('PersonalDataResponsibleOrganizationTitle' | get_lang , personal_data.responsible ) }}
                // {{ display.panel('PersonalDataIntroductionTitle' | get_lang , 'PersonalDataIntroductionText' | get_lang) }}
                $myTerms = [];
                $res = preg_match_all('/\{\s*[\w\.]*\([\'"](\w*)[\'"]\s*\|\s*get_lang\s*(,\s*[\w_\.,\s\|\'"]*\s*)?\)\s*\}/', $line, $myTerms);
                if ($res > 0) {
                    foreach ($myTerms[1] as $term) {
                        if (substr($term, 0, 4) == 'lang') {
                            $term = substr($term, 4);
                        }
                        $usedTerms[$term] = $shortFile;
                    }
                }
            }
        }
    }
    flush();
}

// Compare defined terms VS used terms. Used terms should be smaller than
// defined terms, and this should prove the concept that there are much
// more variables than what we really use
if (count($usedTerms) < 1) {
    die("No used terms<br />\n");
} else {
    echo "The following terms were defined but never used: <br />\n<table>";
}
$i = 1;
foreach ($defined_terms as $term => $file) {
    // remove "lang" prefix just in case
    if (substr($term, 0, 4) == 'lang') {
        $term = substr($term, 4);
    }
    if (!isset($usedTerms[$term])) {
        echo "<tr><td>$i</td><td>$term</td></tr>\n";
        $i++;
    }
}
echo "</table>\n";
