function saveBase($formvars = array()) { global $SERVER_EXTENSIONS; $mdb = $this->mdb; // add all missing keys to array fixFormVars($formvars, array('IDbase', 'basename', 'crypt_key', 'IDclient', 'timezone', 'dst')); $return_to_edit = false; // adjust crypt key if it is not valid if (strlen($formvars['crypt_key']) != 32 || !ctype_xdigit($formvars['crypt_key'])) { $formvars['crypt_key'] = randomHex(32); $return_to_edit = true; $this->notifs['key_generated'] = true; } // From MOMENT.JS (moment.fn.zone): If the input is less than 16 and greater than -16, it will interpret your input as hours instead. // Because of that, we don't let user enter offset in this range. if ($formvars['timezone'] > -16 && $formvars['timezone'] < 16) { $formvars['timezone'] = 0; } if ($formvars['dst'] > 2 || $formvars['dst'] < 0) { $formvars['dst'] = 0; } // inserting new if ($formvars['IDbase'] <= 0) { $baseid = $this->generateReallyUniqueBaseId(50); if ($baseid == '') { die('System error: Couldn\'t generate unique BaseID!'); } if (strlen($formvars['basename']) <= 0) { $formvars['basename'] = 'Base ' . date('y-m-d H:i:s', time()); } $mdb->insert('base', array('IDaccount' => $_SESSION['IDaccount'], 'baseid' => $baseid, 'basename' => $formvars['basename'], 'timezone' => $formvars['timezone'], 'dst' => $formvars['dst'], 'crypt_key' => $formvars['crypt_key'])); $this->notifs['base_added'] = true; $formvars['IDbase'] = $mdb->insertId(); // continue as we were updating... $return_to_edit = true; } else { $mdb->update('base', array('basename' => $formvars['basename'], 'crypt_key' => $formvars['crypt_key'], 'timezone' => $formvars['timezone'], 'dst' => $formvars['dst']), "IDbase = %i AND IDaccount = %i", $formvars['IDbase'], $_SESSION['IDaccount']); $this->notifs['base_updated'] = true; } // insert/update linked clients table // delete all and add new, that's easier than updating :) $mdb->delete('base_client', "IDbase = %i AND IDbase IN (SELECT IDbase FROM base WHERE IDaccount = %i)", $formvars['IDbase'], $_SESSION['IDaccount']); // add link, securelly settype($formvars['IDclient'], 'array'); $available_IDclients = $mdb->queryOneColumn("IDclient", "SELECT IDclient FROM client WHERE IDaccount = %i", $_SESSION['IDaccount']); foreach ($available_IDclients as $IDclient) { if (in_array($IDclient, $formvars['IDclient'])) { $mdb->insert("base_client", array('IDbase' => $formvars['IDbase'], 'IDclient' => $IDclient)); } } // Handle Server Extensions management // first lets check if we own this IDbase... easiest way, not the smartest $is_my_base = $this->getBase($formvars['IDbase']); if (count($is_my_base) <= 0) { return false; } // Android GCM is here? if (isset($SERVER_EXTENSIONS['se_android_gcm']) && $SERVER_EXTENSIONS['se_android_gcm']['enabled'] == 1) { $se_mdb = new MeekroDB(mysql_host, mysql_username, mysql_password, $SERVER_EXTENSIONS['se_android_gcm']['mysql_database']); // insert, on duplicate update $se_mdb->insertUpdate('base_config', array('IDbase' => $formvars['IDbase'], 'disable_status_change_event' => isset($formvars['se_android_gcm_disable_status_change_event']) ? '1' : '0', 'disable_new_data_event' => isset($formvars['se_android_gcm_disable_new_data_event']) ? '1' : '0')); } return array('return_to_edit' => $return_to_edit, 'IDbase' => $formvars['IDbase']); }
function saveClient($formvars = array()) { global $SERVER_EXTENSIONS; $mdb = $this->mdb; // add all missing keys to array fixFormVars($formvars, array('IDclient', 'clientname', 'IDbase')); $return_to_edit = false; // inserting new if ($formvars['IDclient'] <= 0) { $auth_token = $this->generateReallyUniqueAuthToken(50); if ($auth_token == '') { die('System error: Couldn\'t generate unique Auth Token!'); } if (strlen($formvars['clientname']) <= 0) { $formvars['clientname'] = 'Client ' . date('y-m-d H:i:s', time()); } $mdb->insert('client', array('IDaccount' => $_SESSION['IDaccount'], 'auth_token' => $auth_token, 'clientname' => $formvars['clientname'])); $this->notifs['client_added'] = true; $formvars['IDclient'] = $mdb->insertId(); // continue as we were updating... $return_to_edit = true; } else { $mdb->update('client', array('clientname' => $formvars['clientname']), "IDclient = %i AND IDaccount = %i", $formvars['IDclient'], $_SESSION['IDaccount']); $this->notifs['client_updated'] = true; } // insert/update linked bases table // delete all and add new, that's easier than updating :) $mdb->delete('base_client', "IDclient = %i AND IDclient IN (SELECT IDclient FROM client WHERE IDaccount = %i)", $formvars['IDclient'], $_SESSION['IDaccount']); // add link, securelly settype($formvars['IDbase'], 'array'); $available_IDbases = $mdb->queryOneColumn("IDbase", "SELECT IDbase FROM base WHERE IDaccount = %i", $_SESSION['IDaccount']); foreach ($available_IDbases as $IDbase) { if (in_array($IDbase, $formvars['IDbase'])) { $mdb->insert("base_client", array('IDbase' => $IDbase, 'IDclient' => $formvars['IDclient'])); } } // Handle Server Extensions management // first lets check if we own this IDbase... easiest way, not the smartest $is_my_client = $this->getClient($formvars['IDclient']); if (count($is_my_client) <= 0) { return false; } // Android GCM is here? if (isset($SERVER_EXTENSIONS['se_android_gcm']) && $SERVER_EXTENSIONS['se_android_gcm']['enabled'] == 1) { $se_mdb = new MeekroDB(mysql_host, mysql_username, mysql_password, $SERVER_EXTENSIONS['se_android_gcm']['mysql_database']); // insert, on duplicate update $se_mdb->insertUpdate('client_config', array('IDclient' => $formvars['IDclient'], 'disable_status_change_event' => isset($formvars['se_android_gcm_disable_status_change_event']) ? '1' : '0', 'disable_new_data_event' => isset($formvars['se_android_gcm_disable_new_data_event']) ? '1' : '0')); } return array('return_to_edit' => $return_to_edit, 'IDclient' => $formvars['IDclient']); }