public function duplicate($id)
 {
     DB::startTransaction();
     if (!DB::query("insert into " . $this->tableName() . " (name, user_id, url) select concat(name,' copy') as name, user_id, url from " . $this->tableName() . " where cloaker_id='" . DB::quote($id) . "'")) {
         DB::rollback();
         return false;
     }
     $new_id = DB::insertId();
     if (!$new_id) {
         DB::rollback();
         return false;
     }
     if (!CloakerOptionModel::model()->duplicate($id, $new_id)) {
         DB::rollback();
         return false;
     }
     if (!CloakerHostnameModel::model()->duplicate($id, $new_id)) {
         DB::rollback();
         return false;
     }
     if (!CloakerIpModel::model()->duplicate($id, $new_id)) {
         DB::rollback();
         return false;
     }
     if (!CloakerRefererModel::model()->duplicate($id, $new_id)) {
         DB::rollback();
         return false;
     }
     if (!CloakerUaModel::model()->duplicate($id, $new_id)) {
         DB::rollback();
         return false;
     }
     DB::commit();
     return $new_id;
 }
function setCloakerOption($cloaker, $name, $value)
{
    $opt = CloakerOptionModel::model()->getRowFromPk(array('cloaker_id' => $cloaker->id(), 'name' => $name));
    if (!$opt) {
        $opt = CloakerOptionModel::model();
        $opt->cloaker_id = $cloaker->id();
        $opt->name = $name;
        $opt->value = $value;
        $opt->useRuleSet('new');
    } else {
        $opt->useRuleSet('edit');
        $opt->value = $value;
    }
    $opt->save();
}