public function pjActionClean()
 {
     $this->checkLogin();
     if (!$this->isAdmin()) {
         $this->set('status', 2);
         return;
     }
     if (isset($_POST['clean_step'])) {
         if ($_POST['clean_step'] == 1) {
             $pjMultiLangModel = pjMultiLangModel::factory();
             $arr = pjMultiLangModel::factory()->select('t1.id')->join('pjField', 't2.id=t1.foreign_id', 'left')->where('t1.model', 'pjField')->where('t2.id IS NULL')->findAll()->getDataPair(null, 'id');
             if (!empty($arr)) {
                 $pjMultiLangModel->reset()->whereIn('id', $arr)->eraseAll();
                 $this->pjActionUpdateFieldsIndex();
             }
         }
         if ($_POST['clean_step'] == 2) {
             if (isset($_POST['field_id']) && !empty($_POST['field_id'])) {
                 pjFieldModel::factory()->whereIn('id', $_POST['field_id'])->eraseAll();
                 pjMultiLangModel::factory()->where('model', 'pjField')->whereIn('foreign_id', $_POST['field_id'])->eraseAll();
                 $this->pjActionUpdateFieldsIndex();
             }
         }
         pjUtil::redirect($_SERVER['PHP_SELF'] . "?controller=pjLocale&action=pjActionClean");
     }
     # Step 1
     $step1_arr = pjMultiLangModel::factory()->select('t1.id')->join('pjField', 't2.id=t1.foreign_id', 'left')->where('t1.model', 'pjField')->where('t2.id IS NULL')->findAll()->getDataPair(null, 'id');
     $this->set('step1_arr', $step1_arr);
     # Step 2
     $keys = $start = $data = array();
     pjToolkit::readDir($data, PJ_APP_PATH);
     foreach ($data as $file) {
         $ext = pjToolkit::getFileExtension($file);
         if ($ext !== 'php') {
             continue;
         }
         $string = file_get_contents($file);
         if ($string !== FALSE) {
             preg_match_all('/__\\(\\s*\'(\\w+)\'\\s*(?:,\\s*(true|false))?\\)/i', $string, $matches);
             if (!empty($matches[1])) {
                 foreach ($matches[1] as $k => $m) {
                     if (!empty($matches[2][$k]) && strtolower($matches[2][$k]) == 'true') {
                         $start[] = $m;
                     } else {
                         $keys[] = $m;
                     }
                 }
             }
         }
     }
     $keys = array_unique($keys);
     $keys = array_values($keys);
     $start = array_unique($start);
     $start = array_values($start);
     if (!empty($keys) || !empty($start)) {
         $field_arr = pjFieldModel::factory()->whereNotIn('t1.key', $keys)->whereNotIn("SUBSTRING_INDEX(t1.key, '_ARRAY_', 1)", $start)->orderBy("FIELD(t1.type, 'backend', 'frontend', 'arrays'), t1.key ASC", false)->findAll()->getData();
         $this->set('field_arr', $field_arr);
     }
     $this->appendJs('pjLocale.js', $this->getConst('PLUGIN_JS_PATH'));
 }