public static function validateExternalRaterCode($a_ref_id, $a_code)
 {
     if (!isset($_SESSION["360_extrtr"][$a_ref_id])) {
         $svy = new self($a_ref_id);
         $svy->loadFromDB();
         if ($svy->canStartSurvey(null, true) && $svy->get360Mode() && $svy->isAnonymousKey($a_code)) {
             $anonymous_id = $svy->getAnonymousIdByCode($a_code);
             if ($anonymous_id) {
                 if (sizeof($svy->getAppraiseesToRate(null, $anonymous_id))) {
                     $_SESSION["360_extrtr"][$a_ref_id] = true;
                     return true;
                 }
             }
         }
         $_SESSION["360_extrtr"][$a_ref_id] = false;
         return false;
     }
     return $_SESSION["360_extrtr"][$a_ref_id];
 }
 public static function factory($constructedChartData, $loadFromDB = true)
 {
     $chartObj = new self();
     if (isset($constructedChartData['chart_id'])) {
         $chartObj->setId((int) $constructedChartData['chart_id']);
         if ($loadFromDB) {
             $chartObj->loadFromDB();
             $chartObj->prepareData();
             $chartObj->shiftStringColumnUp();
         }
     }
     // Main data (steps 1-3 of chart constructor)
     $chartObj->setwpDataTableId($constructedChartData['wpdatatable_id']);
     $chartObj->setTitle($constructedChartData['chart_title']);
     $chartObj->setEngine($constructedChartData['chart_engine']);
     $chartObj->setType($constructedChartData['chart_type']);
     $chartObj->setSelectedColumns($constructedChartData['selected_columns']);
     $chartObj->setRangeType($constructedChartData['range_type']);
     if (isset($constructedChartData['range_data'])) {
         $chartObj->setRowRange($constructedChartData['range_data']);
     }
     $chartObj->setFollowFiltering((bool) $constructedChartData['follow_filtering']);
     // Render data (step 4 or chart constructor)
     $chartObj->setShowTitle(WDTTools::defineDefaultValue($constructedChartData, 'show_title', ''));
     $chartObj->setWidth(WDTTools::defineDefaultValue($constructedChartData, 'width', 400));
     $chartObj->setHeight(WDTTools::defineDefaultValue($constructedChartData, 'height', 400));
     $chartObj->setShowGrid(WDTTools::defineDefaultValue($constructedChartData, 'show_grid', true));
     $chartObj->setShowLegend(WDTTools::defineDefaultValue($constructedChartData, 'show_legend', true));
     $chartObj->setMajorAxisLabel(WDTTools::defineDefaultValue($constructedChartData, 'horizontal_axis_label', ''));
     $chartObj->setMinorAxisLabel(WDTTools::defineDefaultValue($constructedChartData, 'vertical_axis_label', ''));
     if (!empty($constructedChartData['series_data'])) {
         $chartObj->setUserDefinedSeriesData($constructedChartData['series_data']);
     }
     $chartObj->loadChildWPDataTable();
     return $chartObj;
 }