]> git.stg.codes - stg.git/commitdiff
Merge remote-tracking branch 'temp/ticket37' into ticket
authorElena Mamontova <helenh463@gmail.com>
Thu, 21 Jul 2016 12:58:13 +0000 (15:58 +0300)
committerElena Mamontova <helenh463@gmail.com>
Thu, 21 Jul 2016 12:58:13 +0000 (15:58 +0300)
1  2 
projects/stargazer/plugins/store/files/file_store.cpp
projects/stargazer/plugins/store/firebird/firebird_store_tariffs.cpp

index 96add48fe14a4b2de738ea617add82770e7fe265,71f570717a208767404b7e6f3e2d98ae9a450f4b..d4b29ad9c488b939dd00526b71aa86784494f437
@@@ -67,16 -67,6 +67,16 @@@ const int pt_mega = 1024 * 1024
  namespace
  {
  PLUGIN_CREATOR<FILES_STORE> fsc;
 +
 +bool CheckAndCreate(const std::string & dir, mode_t mode)
 +{
 +if (access(dir.c_str(), F_OK) == 0)
 +    return true;
 +if (mkdir(dir.c_str(), mode) == 0)
 +    return true;
 +return false;
 +}
 +
  }
  
  extern "C" STORE * GetStore();
@@@ -254,33 -244,8 +254,33 @@@ if (workDir.size() && workDir[workDir.s
      workDir.resize(workDir.size() - 1);
      }
  usersDir = workDir + "/users/";
 +if (!CheckAndCreate(usersDir, GetConfModeDir()))
 +    {
 +    errorStr = usersDir + " doesn't exist. Failed to create.";
 +    printfd(__FILE__, "%s\n", errorStr.c_str());
 +    return -1;
 +    }
  tariffsDir = workDir + "/tariffs/";
 +if (!CheckAndCreate(tariffsDir, GetConfModeDir()))
 +    {
 +    errorStr = tariffsDir + " doesn't exist. Failed to create.";
 +    printfd(__FILE__, "%s\n", errorStr.c_str());
 +    return -1;
 +    }
  adminsDir = workDir + "/admins/";
 +if (!CheckAndCreate(adminsDir, GetConfModeDir()))
 +    {
 +    errorStr = adminsDir + " doesn't exist. Failed to create.";
 +    printfd(__FILE__, "%s\n", errorStr.c_str());
 +    return -1;
 +    }
 +servicesDir = workDir + "/services/";
 +if (!CheckAndCreate(servicesDir, GetConfModeDir()))
 +    {
 +    errorStr = servicesDir + " doesn't exist. Failed to create.";
 +    printfd(__FILE__, "%s\n", errorStr.c_str());
 +    return -1;
 +    }
  
  return 0;
  }
@@@ -445,24 -410,6 +445,24 @@@ STG_LOCKER lock(&mutex)
  
  tariffList->swap(files);
  
 +return 0;
 +}
 +//-----------------------------------------------------------------------------
 +int FILES_STORE::GetServicesList(std::vector<std::string> * list) const
 +{
 +std::vector<std::string> files;
 +
 +if (GetFileList(&files, storeSettings.GetServicesDir(), S_IFREG, ".serv"))
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "Failed to open '" + storeSettings.GetServicesDir() + "': " + std::string(strerror(errno));
 +    return -1;
 +    }
 +
 +STG_LOCKER lock(&mutex);
 +
 +list->swap(files);
 +
  return 0;
  }
  //-----------------------------------------------------------------------------
@@@ -1518,6 -1465,11 +1518,11 @@@ if (conf.ReadString("Period", &str, "mo
      td->tariffConf.period = TARIFF::MONTH;
  else
      td->tariffConf.period = TARIFF::StringToPeriod(str);
+ if (conf.ReadString("ChangePolicy", &str, "allow") < 0)
+     td->tariffConf.changePolicy = TARIFF::ALLOW;
+ else
+     td->tariffConf.changePolicy = TARIFF::StringToChangePolicy(str);
  return 0;
  }
  //-----------------------------------------------------------------------------
@@@ -1579,118 -1531,9 +1584,119 @@@ std::string fileName = storeSettings.Ge
      cf.WriteDouble("Free", td.tariffConf.free);
      cf.WriteString("TraffType", TARIFF::TraffTypeToString(td.tariffConf.traffType));
      cf.WriteString("Period", TARIFF::PeriodToString(td.tariffConf.period));
+     cf.WriteString("ChangePolicy", TARIFF::ChangePolicyToString(td.tariffConf.changePolicy));
      }
  
 +return 0;
 +}
 +//-----------------------------------------------------------------------------*/
 +int FILES_STORE::AddService(const std::string & name) const
 +{
 +std::string fileName;
 +strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), name.c_str());
 +
 +if (Touch(fileName))
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "Cannot create file " + fileName;
 +    printfd(__FILE__, "FILES_STORE::AddService - failed to add service '%s'\n", name.c_str());
 +    return -1;
 +    }
 +
 +return 0;
 +}
 +//-----------------------------------------------------------------------------*/
 +int FILES_STORE::DelService(const std::string & name) const
 +{
 +std::string fileName;
 +strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), name.c_str());
 +if (unlink(fileName.c_str()))
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "unlink failed. Message: '";
 +    errorStr += strerror(errno);
 +    errorStr += "'";
 +    printfd(__FILE__, "FILES_STORE::DelAdmin - unlink failed. Message: '%s'\n", strerror(errno));
 +    }
 +return 0;
 +}
 +//-----------------------------------------------------------------------------*/
 +int FILES_STORE::SaveService(const SERVICE_CONF & conf) const
 +{
 +std::string fileName;
 +
 +strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), conf.name.c_str());
 +
 +    {
 +    CONFIGFILE cf(fileName, true);
 +
 +    int e = cf.Error();
 +
 +    if (e)
 +        {
 +        STG_LOCKER lock(&mutex);
 +        errorStr = "Cannot write service " + conf.name + ". " + fileName;
 +        printfd(__FILE__, "FILES_STORE::SaveService - failed to save service '%s'\n", conf.name.c_str());
 +        return -1;
 +        }
 +
 +    cf.WriteString("name", conf.name);
 +    cf.WriteString("comment", conf.comment);
 +    cf.WriteDouble("cost", conf.cost);
 +    cf.WriteInt("pay_day", conf.payDay);
 +    }
 +
 +return 0;
 +}
 +//-----------------------------------------------------------------------------
 +int FILES_STORE::RestoreService(SERVICE_CONF * conf, const std::string & name) const
 +{
 +std::string fileName;
 +strprintf(&fileName, "%s/%s.serv", storeSettings.GetServicesDir().c_str(), name.c_str());
 +CONFIGFILE cf(fileName);
 +
 +if (cf.Error())
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "Cannot open " + fileName;
 +    printfd(__FILE__, "FILES_STORE::RestoreService - failed to restore service '%s'\n", name.c_str());
 +    return -1;
 +    }
 +
 +if (cf.ReadString("name", &conf->name, name))
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "Error in parameter 'name'";
 +    printfd(__FILE__, "FILES_STORE::RestoreService - name read failed for service '%s'\n", name.c_str());
 +    return -1;
 +    }
 +
 +if (cf.ReadString("comment", &conf->comment, ""))
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "Error in parameter 'comment'";
 +    printfd(__FILE__, "FILES_STORE::RestoreService - comment read failed for service '%s'\n", name.c_str());
 +    return -1;
 +    }
 +
 +if (cf.ReadDouble("cost", &conf->cost, 0.0))
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "Error in parameter 'cost'";
 +    printfd(__FILE__, "FILES_STORE::RestoreService - cost read failed for service '%s'\n", name.c_str());
 +    return -1;
 +    }
 +
 +unsigned short value = 0;
 +if (cf.ReadUShortInt("pay_day", &value, 0))
 +    {
 +    STG_LOCKER lock(&mutex);
 +    errorStr = "Error in parameter 'pay_day'";
 +    printfd(__FILE__, "FILES_STORE::RestoreService - pay day read failed for service '%s'\n", name.c_str());
 +    return -1;
 +    }
 +conf->payDay = value;
 +
  return 0;
  }
  //-----------------------------------------------------------------------------
index 138a9ed92a8a72a2c13086b168e0ccf286165b0e,eef976c63375c6fcbe5070738e6b21c2eb79b699..cdee539855eec910fbfd8defd3b111929e38baed
@@@ -150,7 -150,7 +150,7 @@@ tr
      int32_t id;
      st->Get(1, id);
      st->Close();
-     if (schemaVersion > 0)
+     if (schemaVersion == 1)
          {
          st->Prepare("update tb_tariffs set \
                  fee = ?, \
          st->Set(5, TARIFF::PeriodToString(td.tariffConf.period));
          st->Set(6, id);
          }
+     else if (schemaVersion > 1)
+             {
+             st->Prepare("update tb_tariffs set \
+                     fee = ?, \
+                     free = ?, \
+                     passive_cost = ?, \
+                     traff_type = ?, \
+                     period = ?, \
+                     change_policy = ? \
+                     where pk_tariff = ?");
+             st->Set(1, td.tariffConf.fee);
+             st->Set(2, td.tariffConf.free);
+             st->Set(3, td.tariffConf.passiveCost);
+             st->Set(4, td.tariffConf.traffType);
+             st->Set(5, TARIFF::PeriodToString(td.tariffConf.period));
+             st->Set(6, TARIFF::ChangePolicyToString(td.tariffConf.changePolicy));
+             st->Set(7, id);
+             }
      else
          {
          st->Prepare("update tb_tariffs set \
@@@ -282,9 -300,12 +300,11 @@@ tr
      st->Get(3, td->tariffConf.fee);
      st->Get(4, td->tariffConf.free);
      st->Get(5, td->tariffConf.passiveCost);
 -    //st->Get(6, td->tariffConf.traffType);
      td->tariffConf.traffType = TARIFF::IntToTraffType(Get<int>(st, 6));
      if (schemaVersion > 0)
          td->tariffConf.period = TARIFF::StringToPeriod(Get<std::string>(st, 7));
+     if (schemaVersion > 1)
+         td->tariffConf.changePolicy = TARIFF::StringToChangePolicy(Get<std::string>(st, 8));
      st->Close();
      st->Prepare("select * from tb_tariffs_params where fk_tariff = ?");
      st->Set(1, id);