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;
 }