public function uploadAction() { $user = Zend_Auth::getInstance()->getIdentity(); $result = false; // move upload file if ($this->getRequest()->isPost() && !empty($_FILES)) { // check extension $name = $_FILES['upload']['name']; if (strpos(strrev($name), strrev('.sqlite')) !== 0) { $this->status->setStatusMessage(t('There was a problem with file types <code>' . $name . '</code>')); return; } $name = implode('.', array($user->id, $user->last_name, $user->first_name, date('Y-m-d'), $_FILES['upload']['name'])); $path = rtrim(Globals::$BASE_PATH, '/') . '/files_sync/'; if (!file_exists($path) && !mkdir($path, 0777, true)) { // make storage dir $this->status->setStatusMessage(t('There was a problem creating <code>' . $path . '</code>')); return; } $result = move_uploaded_file($_FILES['upload']['tmp_name'], $path . $name); if (!$result) { $this->status->setStatusMessage(t('There was a problem moving files <code>' . $path . $name . '</code>')); return; } } // create entry for file if ($result) { // source info $db = SyncCompare::getDesktopConnectionParams('_app', $path . $name); try { $_app = new ITechTable($db); $_app = $_app->fetchAll()->current(); //look for previous sync time $previous_files = new SyncFile(); $previous = $previous_files->getAdapter()->query("SELECT * FROM syncfile WHERE application_id = '" . $_app->app_id . "' AND timestamp_completed IS NOT NULL ORDER BY timestamp_completed DESC LIMIT 1"); $previous_timestamp = $_app->init_timestamp; //first time if ($previous) { $previous = $previous->fetchAll(); if ($previous) { $previous_timestamp = $previous[0]['timestamp_completed']; } } $save = array('filename' => $name, 'filepath' => $path, 'application_id' => $_app->app_id, 'application_version' => 1, 'timestamp_last_sync' => $previous_timestamp); // dest info $syncFile = new SyncFile(); $result = $syncFile->insert($save); if ($result) { $newname = $result . '.' . $name; $good = rename($path . $name, $path . $newname); if ($good) { $syncFile->update(array('filename' => $newname), 'id = ' . $result); } } if (!$result) { $msg = "Could not save file."; $this->status->setStatusMessage($msg); } else { $this->status->setStatusMessage(t('Sync database file uploaded.')); $this->_redirect('sync/search/fid/' . $result); // .'/startjob/1/outputType/text' search for db changes } } catch (Exception $e) { $msg = t('Invalid desktop database file'); } } }