/**
  * Edits a organisation
  *
  * @param string $id
  */
 public function editAction($id)
 {
     $organisation = Organisation::findFirstByid($id);
     if (!$organisation) {
         $this->flash->error("organisation was not found");
         return $this->dispatcher->forward(array("controller" => "organisation", "action" => "index"));
     }
     $LoginList = \PRIME\Controllers\GetController::getLoginList();
     $this->view->setVar('loginList', $LoginList);
     $this->view->id = $organisation->id;
     $this->tag->setDefault("id", $organisation->id);
     $this->tag->setDefault("name", $organisation->name);
     $database = OrgDatabase::findFirstByorganisation_id($id);
     $this->tag->setDefault("db_id", $database->id);
     $this->tag->setDefault("db_host", $database->db_host);
     $this->tag->setDefault("db_username", $database->db_username);
     $this->tag->setDefault("db_password", $database->db_password);
     $this->tag->setDefault("db_name", $database->db_name);
     $this->view->setVar("organisation_id", $organisation->id);
     $data = Login::find("organisation_id= " . $organisation->id);
     $this->view->setVar("logins", $data);
     $data = DataConnector::find("organisation_id= " . $organisation->id);
     $this->view->setVar("data_connectors", $data);
     $this->view->setVar("themeList", $this->getThemeList());
 }
 public function RefreshTokenAction($data_connector_id)
 {
     $data_connector = DataConnector::findFirstByid($data_connector_id);
     $parameters = (array) json_decode($data_connector->parameters, true);
     if (array_key_exists('auth', $parameters)) {
         $provider = new $this->provider_name(['clientId' => $parameters['auth']['client_id'], 'clientSecret' => $parameters['auth']['client_secret'], 'redirectUri' => "http://" . $_SERVER['HTTP_HOST'] . "/Authenticators/" . $this->dispatcher->getControllerName()]);
     }
     $storage_data = (array) json_decode($data_connector->storage, true);
     $grant = new \League\OAuth2\Client\Grant\RefreshToken();
     $token = $provider->getAccessToken($grant, ['refresh_token' => $storage_data['refresh_token']]);
     if ($this->authorizationHeader == null) {
         $this->authorizationHeader = $provider->authorizationHeader;
     }
     $storage_data['Authorization'] = $this->authorizationHeader . " " . $token->accessToken;
     $data_connector->storage = json_encode($storage_data);
     $data_connector->save();
     return '<h1>Refreshing Token Was Successful</h1>';
 }
 public function updateAction($data_connector_id)
 {
     set_time_limit(500);
     $data_connector = DataConnector::findFirstByid($data_connector_id);
     $parameters = (array) json_decode($data_connector->parameters, true);
     $parm_in = array();
     $parm_in["query"]['folder'] = $parameters['google_parm']["folder"];
     $folder_structure = json_decode($this->getResultsOverrideAction($data_connector_id, "GET", $parameters['google_parm']["macro_url"], json_encode($parm_in), true));
     $data = array();
     foreach ($folder_structure as $l1key => $l1value) {
         if (property_exists($l1value, "type")) {
         } else {
             foreach ($l1value->children as $l2key => $l2value) {
                 if (property_exists($l2value, "type")) {
                     $newController = new \PRIME\DataConnectors\Google\DriveFileController();
                     $newController->initialize();
                     $data[$l1key][$l2key] = $newController->updateAction(1, $l2value->id);
                     $this->writeMysql($data_connector_id, $data[$l1key][$l2key]);
                 }
             }
         }
     }
     return;
 }
 public function writeMysql($data_connector_id, $data, $queryType = "override", $primary_key = "auto")
 {
     $data_connector = DataConnector::findFirstByid($data_connector_id);
     $database = OrgDatabase::findFirstByorganisation_id($data_connector->organisation_id);
     $connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array('host' => $database->db_host, 'username' => $database->db_username, 'password' => $database->db_password, 'dbname' => $database->db_name));
     if ($queryType == "override") {
         $sql = "DROP TABLE IF EXISTS " . preg_replace("/[^A-Za-z0-9 ]/", "_", $data_connector->type) . "_" . $data_connector_id;
     }
     $sql = "CREATE TABLE IF NOT EXISTS " . preg_replace("/[^A-Za-z0-9 ]/", "_", $data_connector->type) . "_" . $data_connector_id . "(";
     foreach ($data['headings'] as $key => $column_name) {
         $type = gettype($data['0'][$key]);
         if ('string' == gettype($data['0'][$key])) {
             if (is_numeric($data['0'][$key])) {
                 if ((int) $data['0'][$key] == (double) $data['0'][$key]) {
                     $type = "integer";
                 } else {
                     $type = "double";
                 }
             } else {
                 if (strtotime($data['0'][$key]) != false) {
                     $type = "date";
                 } else {
                 }
             }
         }
         if ($type == "integer") {
             $sql = $sql . "`" . $column_name . "` int DEFAULT NULL, ";
         } elseif ($type == "double") {
             $sql = $sql . "`" . $column_name . "` real DEFAULT NULL, ";
         } elseif ($type == "date") {
             $sql = $sql . "`" . $column_name . "` datetime DEFAULT NULL, ";
         } else {
             $sql = $sql . "`" . $column_name . "` varchar(255) DEFAULT NULL, ";
         }
     }
     if ($primary_key == "auto") {
         $sql = $sql . "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY";
     } elseif ($primary_key == "first") {
         $sql = $sql . "PRIMARY KEY (`" . reset($data['headings']) . "`)";
     } else {
         $sql = $sql . "PRIMARY KEY (" . $primary_key . ")";
     }
     $sql = $sql . ");";
     $connection->query($sql);
     $rows = array();
     $sql = "INSERT INTO " . preg_replace("/[^A-Za-z0-9 ]/", "_", $data_connector->type) . "_" . $data_connector_id . " (`" . implode("`,`", $data['headings']) . "`) VALUES ";
     foreach ($data as $row) {
         if (count($data['headings']) == count($row)) {
             $rows[] = "('" . implode("','", $row) . "')";
         }
     }
     array_shift($rows);
     $sql = $sql . implode(", ", $rows) . " ON DUPLICATE KEY UPDATE ";
     $duplicate_values = array();
     foreach ($data['headings'] as $column_name) {
         $duplicate_values[] = "`" . $column_name . "` =VALUES(`" . $column_name . "`)";
     }
     $sql = $sql . implode(" ,", $duplicate_values) . ";";
     $connection->query($sql);
 }