'This username is already taken. Please try another one.'); public $twotier_percent = '-1.00'; public $is_aff_rep = 0; public $xml_container; public $reason_deny=''; public function Webmaster($id = null, $key='id') { global $conn, $ADODB_FETCH_MODE, $minpayoutsteps; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $this->table = TBL_PREFIX."webmasters"; $sql = "SELECT * FROM $this->table WHERE id = -1"; $result = $conn->Execute($sql); $obj_vars = $result->FetchObj(); if (array_key_exists($key, $obj_vars)) { $query = "SELECT * from $this->table where $key='$id'"; $result = $conn->GetAll($query); if (@! is_array($result[0])) return 0; $row = $result[0]; foreach ($row as $property_name=>$value) { $this->$property_name = $value; } $this->password = encordec($this->password); $this->email = encordec($this->email); } $sql = "select points from ".TBL_PREFIX."rewards_points where `webmaster`='$this->id'"; $this->points = $conn->GetOne($sql); if($this->points != '') $this->wm_points_exist = true; $query = "SELECT distinct(master_site) AS id FROM ".TBL_PREFIX."sites WHERE owner='$this->id'"; $result = $conn->GetAll($query); foreach($result as $row) $this->owner_sites .= $row['id'].","; $this->owner_sites = @substr($this->owner_sites,0,-1); $this->gl_key = md5(serialize($this).PROGRAM_URL.$_SERVER["REMOTE_ADDR"].PROGRAM_PATH.date("Y-m-d H")); if(isset($_SESSION['lang'])) { if (is_file(XMLS_PATH.'lang/'.$_SESSION['lang'].'/container.xml')) { $this->xml_container = simplexml_load_file(XMLS_PATH.'lang/'.$_SESSION['lang']."/container.xml"); } else { $this->xml_container = simplexml_load_file(XMLS_PATH."lang/en/container.xml"); } } else { $this->xml_container = simplexml_load_file(XMLS_PATH."lang/en/container.xml"); } if (strlen($minpayoutsteps)>10) { $this->minpay_array=explode(',',$minpayoutsteps); } return 1; } public function read() { return $this->Webmaster($this->id, 'id'); } public function read_username($username) { if (!$username) return 0; return $this->Webmaster($username, 'username'); } public function save() { global $conn; $sql = "SELECT * FROM $this->table WHERE id = ".$this->id; $result = $conn->Execute($sql); $obj_vars = $result->FetchObj(); foreach($obj_vars as $var=>$val) if (! isset($this->$var)) $this->$var = ''; $this->password = encdec($this->password); $this->email = encdec($this->email); $updateSQL = $conn->GetUpdateSQL($result, get_object_vars($this), true); if ($updateSQL) $conn->Execute($updateSQL); $this->password = encordec($this->password); $this->email = encordec($this->email); } public function update_wm_points() { global $conn; $sql = "UPDATE `".TBL_PREFIX."rewards_points` SET `points`= '$this->points' WHERE `webmaster`='$this->id'"; $conn->Execute($sql); return 1; } public function create_wm_points() { global $conn; $sql = "INSERT INTO `".TBL_PREFIX."rewards_points` (`webmaster`, `points`) VALUES('$this->id', '$this->points')"; $conn->Execute($sql); $this->wm_points_exist = true; return 1; } public function update($properties,$save_it=1) { global $conn; unset($properties['id']); $ret = array(); $sql = "SELECT COUNT(*) FROM $this->table WHERE username='$properties[username]'"; $username_used = $conn->GetOne($sql); if ((int)$username_used>0) { unset($properties['username']); $ret[] = -2; } $this->verify_payment_info($properties); $columns = $conn->MetaColumns($this->table); foreach($columns as $column) if ($column->type=='timestamp')$this->{$column->name} = ''; foreach($properties as $property=>$value) { if ($property == 'allowed_products') { if (in_array(strval(0), $value)) { foreach ($value as $k=>$v) { if ($k!='0') $allowed_products_arr[]=$v; } $value = $allowed_products_arr; } } if (is_array($value)) $value = implode(",", $value); if (@$this->$property != $value) { $this->$property = $value; } } if ($save_it) { $this->save(); if($this->wm_points_exist) $this->update_wm_points(); elseif($this->points != '') $this->create_wm_points(); $this->registerIPayoutEmail(); } return $ret; } public function create($properties) { global $conn,$auto_approve; //adding date_registered to the passed $_POST variables $properties ["date_registered"] = date("Y-m-d"); $this->approved = $auto_approve; $sql = "SELECT * FROM $this->table WHERE id = -1"; $result = $conn->Execute($sql); $obj_vars = $result->FetchObj(); foreach($obj_vars as $var=>$val) if (! isset($this->$var)) $this->$var = ''; if ($conn->no_autoincrement) $this->id = $conn->GenID("seq_".$this->table,100001); $insertSQL = $conn->GetInsertSQL($result, get_object_vars($this)); $conn->Execute($insertSQL); if (! $this->id) {$this->id = $conn->Insert_ID();} $this->update($properties); //$this->setPayRates(); } public function printForm($new=1) { global $conn; require_once(FUNCTIONS_PATH."lists_funcs.php"); if ($new) $form = implode('',file(self::fixLangTemplate("new_webmaster.html"))); $form = implode('',file(self::fixLangTemplate("update_webmaster.html"))); $asArray = get_object_vars($this); foreach($asArray as $field=>$value) $form = str_replace('{'.$field.'}',$this->$field,$form); $form = str_replace('{ID}',"",$form); if ($this->active) $form = str_replace('{active_select}',"\n\n",$form); else $form = str_replace('{active_select}',"\n\n",$form); if ($new) $form = str_replace('{submit}',"",$form); else $form = str_replace('{submit}',"",$form); echo "$form"; } public function verify_payment_info($properties) { $email = ''; foreach ($this->monitored_fields as $key) { if($key == 'email' or $key == 'password') $key = encordec($key); if (isset($properties[$key]) && $this->$key!=$properties[$key]) $email .="$key field changed from '".$this->$key."' to '".$properties[$key]."'
\n"; $this->{"old_".$key} = $this->$key; $this->{"new_".$key} = $properties[$key]; } if ($email!='' && $this->ch_details) { $this->message = $email; $this->subject = 'Payment Details Change'; $this->send_email($this->ch_details_email_template); } } /** * headers can be set at the top of the template like this: * {header} * Subject: Welcome to program_name.com! * Return-Path: support@program_name.com * From: "Program Name.com" * {/header} * * @param string $email_html * @return string */ public function parse_headers($email_html) { preg_match_all("/{(header)}([\s\S.]*){\/(header)}/", $email_html, $arr_header); preg_match_all("/([^:]*):(.*)/",$arr_header[2][0], $arr_mail_headers); foreach ($arr_mail_headers[1] as $key=>$value) $this->mailHeaders[trim($value)] = trim($arr_mail_headers[2][$key]); return str_replace($arr_header[0][0], '', $email_html); } /** * Sends email to the webmster. It gets the webmaster parameters, and replaces the tags named as the parameters. * For example {id} tag will be replaced by the $webmaster->id parameter * * @param string $template * @param boolean $instant */ public function send_email($template, $instant = 0) { global $program_name; require_once(CLASSES_PATH."mail_to_db.class.php"); @include(CONFIG_PATH."payout_config.php"); $email_html = @implode("", @file(OUTER_TEMPLATES_PATH.$template)); $asArray = get_object_vars($this); foreach($asArray as $field=>$value) $email_html = str_replace('{'.$field.'}', $this->$field, $email_html); $this->subject = "$this->subject for $program_name"; $email_html = $this->parse_headers($email_html); if ($this->mailHeaders['From']=='' && $this->mailHeaders['from']=='') $this->mailHeaders['From'] = "\"".PROGRAM_NAME."\" <$webmasters_support_email>"; if ($this->mailHeaders['Subject']!='' || $this->mailHeaders['subject']!='') $this->subject = $this->mailHeaders['Subject'].$this->mailHeaders['subject']; foreach ($this->mailHeaders as $key=>$value) if (!preg_match("/subject|from$/i", $key)) $mailHeader .="$key: $value\n"; $mailHeader = "From: ".$this->mailHeaders['From'].$this->mailHeaders['from']."\n".$mailHeader; $to = "\"$this->fname $this->lname\" <$this->email>"; //if ($this->mailHeaders['From'].$this->mailHeaders['from']!='') $to=''; // what is this for? i see no logic in this - i had problems in ticket 8394 // "Changed payment info Notifications" and "Brute Force Notifications" were not working because of this if ($instant) { mail($to, $this->subject, $email_html,"$mailHeader"."Content-type: text/html; charset=iso-8859-1"); } else { $mail = new MailDB($to, $this->subject,$email_html,"$mailHeader"."X-Priority: 1",time()); } } /** * Sends confirmation email to the webmster, and adds "confirm_link" as class property, * which will be later replace the {confirm_link} tag in the conmfirmation template. * The method also defines the email subject accordingly. * */ public function send_confirmation_email() { $hash = md5($this->id.$this->username.$this->password.$this->email.$this->fname.$this->lname); $this->confirm_link = PROGRAM_URL.'/wmreg/confirm.php?w='.$this->id.'&hash='.$hash; $this->subject = 'Confirmation email'; $this->send_email($this->wm_join_confirmation_mail_template, 1); } public function verify_registration($array) { global $conn; foreach($array as $public => $value) { $this->$public = $value; $$public = $value; $len = $public.'_len'; $$len = @strlen($value); } $reg_errors = ''; if(isset($_SESSION['lang'])) { if (is_file(XMLS_PATH.'lang/'.$_SESSION['lang'].'/container.xml')) { $this->_xml_container = simplexml_load_file(XMLS_PATH.'lang/'.$_SESSION['lang']."/container.xml"); } else { $this->_xml_container = simplexml_load_file(XMLS_PATH."lang/en/container.xml"); } } else { $this->_xml_container = simplexml_load_file(XMLS_PATH."lang/en/container.xml"); } ## Company name check if($company_len < 3) { $this->company = ''; $reg_errors .= $this->_xml_container->errors->company_name_short."
\n"; } ## Website URL check if(!preg_match("/^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/*/i", $this->website)) { $this->website = ''; $reg_errors .= $this->_xml_container->errors->incorrect_url."
\n"; } ## Email check if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$", $email)) { $this->email = ''; $reg_errors .= $this->_xml_container->errors->incorrect_email."
\n"; } ## First name check if(!preg_match("/^.{2,}$/", $fname)) { $this->fname = ''; $reg_errors .= $this->_xml_container->errors->invalid_fname."
\n"; } ## Last name check if(!preg_match("/^.{2,}$/", $lname)) { $this->lname = ''; $reg_errors .= $this->_xml_container->errors->invalid_lname."
\n"; } ## Phone number check if($phone_len < 3) { $this->phone = ''; $reg_errors .= $this->_xml_container->errors->invalid_phone."
\n"; } ## icq check if(strlen($icq) && !preg_match("/^\d*$/", $icq)) { $this->icq = ''; $reg_errors .= $this->_xml_container->errors->invalid_icq."
\n"; } ## Beneficiary check if($payto_len < 3) { $this->payto = ''; $reg_errors .= $this->_xml_container->errors->invalid_beneficiary.".
\n"; } ## Addreess check if($address_len < 3) { $this->address = ''; $reg_errors .= $this->_xml_container->errors->incorrect_address."
\n"; } ## City check if($city_len < 3) { $this->city = ''; $reg_errors .= $this->_xml_container->errors->incorrect_city."
\n"; } if($country == 'US') { if(!eregi("^[A-Z]{2}$", $state)) $reg_errors .= $this->_xml_container->errors->select_state."
\n"; if(!eregi("^[0-9]{5}$", $zip)) { $this->zip = ''; $reg_errors .= "Invalid ZIP code.
\n"; } if($taxid_len < 9) $reg_errors .= $this->_xml_container->errors->invalid_taxid."
\n"; } else { if($zip_len < 2) { $this->zip = ''; $reg_errors .= $this->_xml_container->errors->invalid_zip."
\n"; } } $payment_methods = array('paxum', 'cheque', 'ipayout', 'epassporte', 'wire', 'paypal', 'revupcard'); ## Check payment method if(!in_array(strtolower($payment_method), $payment_methods)) $reg_errors .= $this->_xml_container->errors->select_payment_method."
\n"; ## Check i-Payout if(preg_match("/ipayout/i",$payment_method) && !eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $wm_ipayout_email)) { $this->wm_ipayout_email = ''; $reg_errors .= $this->_xml_container->errors->invalid_ipayout."
\n"; } ## Check Paxum if(preg_match("/paxum/i",$payment_method) && !eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $wm_paxum_email)) { $this->wm_paxum_email = ''; $reg_errors .= $this->_xml_container->errors->invalid_paxum."
\n"; } ## Check ePassporte if(preg_match("/Epassporte/i",$payment_method) && !eregi("^[_\.0-9a-z-]+(@epassporte\.com)$", $wm_epassporte_email)) { $this->wm_epassporte_email = ''; $reg_errors .= $this->_xml_container->errors->invalid_epassporte."
\n"; } ## Check RevUpCard if(preg_match("/revupcard/i",$payment_method) && strlen($revupcardid)<15) { $this->revupcardid = ''; $reg_errors .= $this->_xml_container->errors->invalid_revup."
\n"; } ## Check Wire if(preg_match("/Wire/i",$payment_method)) { if(!eregi("^[0-9]{1,}$", $wire_account_number)) { $this->wire_account_number = ''; $reg_errors .= $this->_xml_container->errors->invalid_account_number."
\n"; } /* if($wire_swift_len < 3) { $this->wire_swift = ''; $reg_errors .= "Invalid SWIFT code.
\n"; } if($wire_aba_len < 3) { $this->wire_aba = ''; $reg_errors .= "Invalid ABA code.
\n"; }*/ if($wire_bank_name_len < 3) { $this->wire_bank_name = ''; $reg_errors .= $this->_xml_container->errors->invalid_bank_name."
\n"; } if($wire_bank_city_len < 3) { $this->wire_bank_city = ''; $reg_errors .= $this->_xml_container->errors->invalid_bank_city."
\n"; } if($wire_bank_country_len < 3) { $this->wire_bank_country = ''; $reg_errors .= $this->_xml_container->errors->invalid_bank_country."
\n"; } } if ($day!='' && $month!='' && $year!='') { $this->datebirth = date("Y-m-d", strtotime("$year-$month-$day")); if (strtotime("$year-$month-$day")>strtotime("-18 year")) { $reg_errors .= $this->_xml_container->errors->invalid_birthdate."
\n"; } } if($minpay+0 < 50) $reg_erros .= $this->_xml_container->errors->invalid_amount."
\n"; ## Username check $sql = "SELECT COUNT(*) FROM $this->table WHERE username='$username'"; $username_used = $conn->GetOne($sql); if($username_used+0 > 0) { $this->username = ''; $reg_errors .= $this->_xml_container->errors->username_used."
\n"; } elseif($username_len < 4 || $username_len > 12) { $this->username = ''; $reg_errors .= $this->_xml_container->errors->username_lenght."
\n"; } ## Password check if($password_len < 6 || $password_len > 12) { $this->password = ''; $this->password2 = ''; $reg_errors .= $this->_xml_container->errors->password_lenght."
\n"; ## Password match } elseif ($password != $password2) { $this->password = ''; $this->password2 = ''; $reg_errors .= $this->_xml_container->errors->passwords_match."
\n"; } if($reg_errors == '') { $this->data_correct = true; } else { $this->reg_errors = $reg_errors; } } public function fix_address() { require_once(CLASSES_PATH."state.class.php"); require_once(CLASSES_PATH."country.class.php"); $country = new Country($this->country,'iso_2'); $state = new State($this->state); $this->update(array('full_country' => $country->name, 'full_state' => $state->name, 'name' => "$this->fname $this->lname")); unset($country); unset($state); } /** * Register i-Payout email * */ public function registerIPayoutEmail() { global $conn; if ($this->payment_method != 'ipayout' OR !$this->wm_ipayout_email OR $this->wm_ipayout_email == $this->wm_ipayout_registered) { return false; } require_once(CLASSES_PATH . 'ipayout.class.php'); $iPayout = new IPayout(); $result = $iPayout->registerWebmaster($this); if ($result) { $this->wm_ipayout_registered = $this->wm_ipayout_email; $this->save(); } } public function adminForm($by_admin='1') { global $conn, $fraud_fields; require_once(FUNCTIONS_PATH."lists_funcs.php"); $form = @implode('',@file(self::fixLangTemplate($this->form_template_file))); $payment_history_template = @implode("", @file(self::fixLangTemplate($this->payment_history_template_file))); $this->countries_select = wm_countries_select($this->country, ''); $this->states_select = states_select($this->state); if (!in_array($this->minpay, $this->minpay_array)) $this->minpay_array[] = $this->minpay; $this->minpay_select = minpay_select($this->minpay, $this->minpay_array); (!empty($this->xml_container->masscontainer->yes))?$yes = $this->xml_container->masscontainer->yes : $yes = 'Yes'; (!empty($this->xml_container->masscontainer->no))?$no = $this->xml_container->masscontainer->no : $no = 'No'; (!empty($this->xml_container->masscontainer->none))?$none = $this->xml_container->masscontainer->none : $none = 'None'; $this->massmail_select = custom_select(array(1=>$yes, 0=>$no), $this->massmail, null); $this->signup_mails_select = custom_select(array(1=>$yes, 0=>$no), $this->signup_mails, null); $this->ch_details_select = custom_select(array(1=>$yes, 0=>$no), $this->ch_details, null); $this->brute_force_select = custom_select(array(1=>$yes, 0=>$no), $this->brute_force, null); $this->webmaster_id = $this->id; $this->password = encordec($this->password); $this->email = encordec($this->email); //data global $doc; $make_xml = new Make_Xml($doc, 'data'); $asArray = get_object_vars($this); foreach($asArray as $field=>$value) { if (is_array($this->$field)) continue; $node = $make_xml->addRow($make_xml->ext_node, $field); @$make_xml->addValue($node, $this->$field); } //listing the payment history $titles = array('th_collected_since','th_payout_period', 'th_payout'); $widths = array(80,180,''); $alignment = array('left','left','left'); $totals = array(); $sql = "select * from `". TBL_PREFIX ."payout` where webmaster='$this->id' order by end_date"; $res = $conn->GetAll($sql); // hide payout for last period (#8698) $q = "SELECT start_date, end_date, processed FROM ".$tbl_prefix."payout_dates where end_dateSelectLimit($q, 1); $hide_start = $hide_date->fields[start_date]; $hide_end = $hide_date->fields[end_date]; foreach ($res as $row) { // hide payout for last period (#8698) if($row['start_date']==$hide_start || $row['end_date']==$hide_end) continue; $sql = "select ADDDATE(max(end_date), INTERVAL 1 DAY) from ". TBL_PREFIX ."payout where webmaster='$this->id' and start_date<'$row[start_date]'"; $sql_trn = "select min(trn_date) from ". TBL_PREFIX ."transactions where webmaster='$this->id' and trn_date>'0000-00-00'"; $table_row = array(); $first_date = $conn->GetOne($sql); if (!$first_date) $first_date = $conn->GetOne($sql_trn); if (strtotime($first_date)>strtotime($row['start_date'])) $first_date = $row['start_date']; $table_row[] = $first_date; $prefix = ""; if ($by_admin) $prefix = ""; $suffix = ""; $table_row[] = $prefix.$row['start_date']." -- ".$row['end_date'].$suffix; $table_row[] = $row['payout']; if (array_key_exists("payment_method", $row)) { $table_row[] = ''.$row['payment_method']; $titles[3] = 'th_payment_method'; $widths[3] = 80; $alignment[3] = 'right'; $totals[3]=''; } if (array_key_exists("min_payout", $row)) { $table_row[] = ''.$row['min_payout']; $titles[4] = 'th_minimum_payout'; $widths[4] = 60; $alignment[4] = 'right'; $totals[4]=''; } $totals[0]=''; $totals[1]=''; $totals[2]+=0+$row['payout']; $table[] = $table_row; } ksort($totals); include_once(FUNCTIONS_PATH."tables_funcs.php"); $payment_history = build_xml_data($table,$widths,$alignment,$titles,$totals,'100%','wm_payment_history'); if ($payment_history=='') $payment_history = "No payments have been calculated yet."; if ($by_admin) { (!empty($this->xml_container->masscontainer->activate))?$activate = $this->xml_container->masscontainer->activate : $activate = 'Activate'; (!empty($this->xml_container->masscontainer->freeze))?$freeze = $this->xml_container->masscontainer->freeze : $freeze = 'Freeze'; if ($this->frozen) $this->freeze_activate = ''; else $this->freeze_activate = ''; $this->sites_select = sites_select(null,null,null,null,null,1); $form = str_replace('onSubmit="return validate(this)"','',$form); // Removes javascript form check $allowed_products_array = array(); $allowed_products_array = explode(",", $this->allowed_products); $q = "select t1.*, t2.id as siteId, t2.title as siteTitle from ". TBL_PREFIX ."products as t1 left join ". TBL_PREFIX ."sites as t2 on t1.site=t2.id where t1.active='1' and t1.deleted='0' order by t1.site, t1.id"; $res = $conn->GetAll($q); $products[0]=(!empty($this->xml_container->masscontainer->defaults))?$this->xml_container->masscontainer->defaults :'Defaults'; foreach ($res as $key=>$value) { $products[$value['id']] = $value['siteId']."-".$value['siteTitle']." / ".$value['id']."-".$value['title']; if ($value['visible']) $visible_products[] = $value['id']; } if (!(count($allowed_products_array)>0 && $allowed_products_array[0]!='')) $allowed_products_array['Defaults'] = '0'; $this->allowed_products_select = custom_checkbox_new($products, $allowed_products_array, "allowed_products"); $this->allowed_products_height = (count($products)>100)?"100":count($products)+1; $aff_reps = get_aff_reps(); foreach ($aff_reps as $key=>$value)$aff_reps[$key] = $key." - ".$value; $this->aff_rep_select = custom_select($aff_reps, $this->aff_rep, null, $none); $this->ma_select = webmasters_select($this->ma, null, $none); $this->consoles_select = custom_select(array(1=>$yes, 0=>$no), $this->consoles); // hiperlink to referred webmaster if ($this->ma > 0) { $form = str_replace('{ma}',''.$this->ma.'',$form); } else { $form = str_replace('{ma}','',$form); } $asArray = get_object_vars($this); $fraud_array = explode('|',$fraud_fields); foreach($fraud_array as $id=>$field) { $form = str_replace('{'.$field.'_wm_fraud}', 'wm_fraud', $form); $node = $make_xml->addRow($make_xml->ext_node, $field.'_wm_fraud'); $make_xml->addValue($node, 1); } foreach($asArray as $field=>$value) { //$form = str_replace('{'.$field.'}', $this->$field,$form); //$form = str_replace('{'.$field.'_wm_fraud}', '',$form); if (is_array($this->$field)) continue; $node = $make_xml->addRow($make_xml->ext_node, $field); $make_xml->addValue($node, $this->$field); if(!in_array($field, $fraud_array)) { $node = $make_xml->addRow($make_xml->ext_node, $field.'_wm_fraud'); $make_xml->addValue($node, ''); } } } /* else { $admin_tags = get_object_vars($this); foreach ($admin_tags as $tag=>$variable) { //$form = str_replace($tag,'',$form); $node = $make_xml->addRow($make_xml->ext_node, $tag); $make_xml->addValue($node, ''); } } */ //$form=str_replace('{payment_history}',$payment_history,$form); //payment history $node = $make_xml->addRow($make_xml->ext_node, 'payment_history'); $make_xml->addValue($node, $payment_history); //show the form $node = $make_xml->addRow($make_xml->ext_node, 'edit_webmaster'); $make_xml->addValue($node, 1); //return $form; } public function rightsForm() { global $conn; include_once (CLASSES_PATH."wm_rights.class.php"); $rights = new wm_rights($this->id); $form = $rights->rightsForm(); return $form; } public function updateRights($wm_rights) { global $conn; include_once (CLASSES_PATH."wm_rights.class.php"); $rights = new wm_rights($this->id); $form = $rights->rightsForm(); $form = $rights->update($wm_rights); return $form; } public function toString($delimiter = "\n") { $asArray = get_object_vars($this); foreach ($asArray as $key=>$val) $str.="$key = $val".$delimiter; return $str; } /** * * Checks if the program is allowed for this webmaster and if not replaces it with the default one * * @return array */ public function getPrograms($site='all', $tour='all', $console=-1) { global $conn; if (!$site) $site='all'; if (!$tour) $tour='all'; $query = "SELECT * FROM ".TBL_PREFIX."programs WHERE bonus_program=0 AND visible=1 order by id"; $programs = $conn->GetAll($query); $allowed_programs = array(); $special_programs = array(); foreach ($programs as $program) { $is_good = 1; $current = $program; $current['webmaster'] = explode(',',$current['webmaster']); $current['site'] = explode(',', $current['site']); $current['tour'] = explode(',', $current['tour']); if (! is_array($current)) $is_good=0; // No such program in the database if (! in_array($this->id,$current['webmaster']) and ! in_array('all',$current['webmaster'])) $is_good=0; // Webmaster is not in the list and program not for everyone if (! in_array($site,$current['site']) and ! in_array('all',$current['site'])) $is_good=0; // Site not in the program and program not for all sites if (! in_array($tour,$current['tour']) and ! in_array('all',$current['tour'])) $is_good=0; // Tour not in the program and program not for all tours //if ($current['consoles']>=0 and (($current['consoles']==0 and $console>0) || ($current['consoles']==1 and $console==0))) $is_good=0; // There is special console conditions that does not match the link code if ($current['replace_with']) $is_good=0; // Program deactivated and replaced if ($is_good) { $allowed_programs[$program['id']]=$program; //after all previous checks - check whether this webmaster has special program assigned and hide other programs if(in_array($this->id,$current['webmaster'])) $special_programs[$program['id']]=$program; } } if(is_array($special_programs) && sizeof($special_programs)>=1) $allowed_programs = $special_programs; return $allowed_programs; } public function validateProgram($program, $site='all', $tour='all', $console=-1, $trn_date='CURRENT_DATE') { global $conn, $default_program; $old_mode = $conn->fetchMode; $conn->fetchMode = 2; //$this->aff_rep_table is defined in transaction.class.php in method get_config() $prefix = ""; if($this->aff_rep_table) $prefix = "aff_rep_"; /* Checking for a bonus program available for this combination of input parameters */ if ($trn_date!='CURRENT_DATE') $trn_date = "'".$trn_date."'"; $query = "SELECT * from ".TBL_PREFIX.$prefix."programs WHERE bonus_program=1 and $trn_date between start_date and end_date ORDER BY id"; $bonus_programs = $conn->GetAssoc($query); if (is_array($bonus_programs) and count($bonus_programs)>0) { foreach ($bonus_programs as $bprogram=>$properties) { if ($properties['replace_program']>0 and $properties['replace_program']!=$program) continue; $bonus_program = $properties; $bonus_program['id'] = $bprogram; $bonus_program['webmaster'] = explode(',',$properties['webmaster']); $bonus_program['site'] = explode(',',$properties['site']); $bonus_program['tour'] = explode(',',$properties['tour']); if (! in_array($this->id,$bonus_program['webmaster']) and ! in_array('all',$bonus_program['webmaster'])) continue; // Webmaster is not in the list and program not for everyone if (! in_array($site,$bonus_program['site']) and ! in_array('all',$bonus_program[site])) continue; // Site not in the program and program not for all sites if (! in_array($tour,$bonus_program['tour']) and ! in_array('all',$bonus_program[tour])) continue; // Tour not in the program and program not for all tours //if ($bonus_program['consoles']>=0 and (($bonus_program['consoles']==0 and $console>0) || ($bonus_program['consoles']==1 and $console==0))) continue; // There is special console conditions that does not match the link code $conn->fetchMode = $old_mode; $program = $bonus_program['id']; return $program; // Bonus program is returned } } /* End of bonus program checking */ $query = "SELECT * FROM ".TBL_PREFIX.$prefix."programs WHERE bonus_program=0 order by id"; $programs = $conn->GetAssoc($query); $conn->fetchMode = $old_mode; if ($programs[$program]['replace_with']>0) $program = $programs[$program]['replace_with']; // If a program is disabled and replaced the new one will be used $current = $programs[$program]; $current['webmaster'] = explode(',',$current['webmaster']); $current['site'] = explode(',', $current['site']); $current['tour'] = explode(',', $current['tour']); if (! is_array($current)) return $default_program; // No such program in the database if (! in_array($this->id,$current[webmaster]) and ! in_array('all',$current['webmaster'])) return $default_program; // Webmaster is not in the list and program not for everyone if (! in_array($site,$current['site']) and ! in_array('all',$current['site'])) return $default_program; // Site not in the program and program not for all sites if (! in_array($tour,$current['tour']) and ! in_array('all',$current['tour'])) return $default_program; // Tour not in the program and program not for all tours //if ($current['consoles']>=0 and (($current['consoles']==0 and $console>0) || ($current['consoles']==1 and $console==0))) return $default_program; // There is special console conditions that does not match the link code if ($current['replace_with']) return $current['replace_with']; // Program deactivated and replaced return $program; // Program is good } public function getRates($program, $site='all', $tour='all', $console=-1, $original_program, $product, $trn_date='CURRENT_DATE') { global $conn, $twotier_percent; if (! $product or ! $program) return array(); $old_mode = $conn->fetchMode; $conn->fetchMode = 2; //$this->aff_rep_table is defined in transaction.class.php in method get_config() $prefix = ""; if($this->aff_rep_table) { $prefix = "aff_rep_"; //get the proper program id from the mpa3_aff_rep_programs, ad it may differ from the sale's program id, which is valid for mpa3_programs table only $sql = "SELECT id from ".TBL_PREFIX.$prefix."programs WHERE bonus_program=1 and CURRENT_DATE between start_date and end_date ORDER BY id"; $program = $conn->GetOne($sql); if (!$program) { $sql = "select id from ".TBL_PREFIX.$prefix."programs where webmaster='$this->id' and site='$site' and tour='$tour'"; $program = $conn->GetOne($sql); } if (!$program) { $sql = "select id from ".TBL_PREFIX.$prefix."programs where webmaster='$this->id' and site='$site' and tour='all'"; $program = $conn->GetOne($sql); } if (!$program) { $sql = "select id from ".TBL_PREFIX.$prefix."programs where webmaster='$this->id' and site='all' and tour='all'"; $program = $conn->GetOne($sql); } if (!$program) { $sql = "select id from ".TBL_PREFIX.$prefix."programs where site='$site' and tour='$tour' and webmaster='all'"; $program = $conn->GetOne($sql); } if (!$program) { $sql = "select id from ".TBL_PREFIX.$prefix."programs where site='$site' and tour='all' and webmaster='all'"; $program = $conn->GetOne($sql); } if (!$program) { $sql = "select id from ".TBL_PREFIX.$prefix."programs where site='all' and webmaster='all' and tour='all'"; $program = $conn->GetOne($sql); } $original_program = $program; } // We should validate the program again in case of cheating or in case bonus program was assogned and expired at the time of sign up // or When the sign up appened we have a bonus program active if ($original_program!=$program and $original_program>0) $program = $this->validateProgram($original_program, $site, $tour, $console, $trn_date); else $program = $this->validateProgram($program, $site, $tour, $console, $trn_date); //$products_programs = unserialize($conn->GetOne("select products_programs from ".TBL_PREFIX."programs where id=$program")); $sql = "select * from ".TBL_PREFIX.$prefix."programs where id=$program"; $programs = $conn->GetRow($sql); $products_programs = unserialize(stripslashes($programs['products_programs'])); unset($programs['id']); unset($programs['title']); unset($programs['description']); unset($programs['webmaster']); unset($programs['site']); unset($programs['tour']); unset($programs['consoles']); unset($programs['insert_time']); if ($products_programs['all']>0) $product = 'all'; $rates = $conn->GetAll("SELECT * from ".TBL_PREFIX."basic_programs where id=".($products_programs[$product]+0)); if ($rates[0]['console_payrate']>0 && $console>0)$rates = $conn->GetAll("SELECT * from ".TBL_PREFIX."basic_programs where id=".$rates[0]['console_payrate']); $rates[0]['program'] = $program; $conn->fetchMode = $old_mode; $rate_2tier = $conn->GetOne("select twotier_percent from ".TBL_PREFIX."webmasters where id=".$this->ma); if ($rate_2tier < 0) $rate_2tier = $twotier_percent; $return_array = array_merge(array('rate_2tier' => $rate_2tier), $rates[0], $programs); $empty_array = array(); foreach ($return_array as $key=>$value) if ($key!='program') $empty_array[$key]=0; else $empty_array[$key]=$return_array[$key]; $empty_array['program'] = $return_array['program']; $empty_array['original_program'] = $return_array['original_program']; //check if webmaster account is inhouse and if yes - set payout to 0 if($this->inhouse==1) { $empty_array['insert_time'] = date("Y-m-d H:i:s"); return $empty_array; } if (is_array($rates[0])) return $return_array; else return $empty_array; } public function getPayRates($site=0, $table='config') { global $conn; if ($table == 'config') { $query = "SELECT * from ". TBL_PREFIX ."config_bonus where bsdate<=now() and bedate>=now()"; $result = $conn->GetAll($query); $source = 'bonus'; } if (! is_array($result[0])) { $query = "SELECT * from ".TBL_PREFIX."$table where siteid=$site and webmaster=".$this->id; $result = $conn->GetAll($query); $source = 'site_webmaster_specific'; } if (! is_array($result[0])) { $query = "SELECT * from ".TBL_PREFIX."$table where siteid=0 and wm_common='0' and webmaster=".$this->id; $result = $conn->GetAll($query); $source = 'webmaster_global'; } if (! is_array($result[0])) { $query = "SELECT * from ".TBL_PREFIX."$table where siteid=$site and webmaster=100000"; $result = $conn->GetAll($query); $source = 'site_global'; } if (! is_array($result[0])) { $query = "SELECT * from ".TBL_PREFIX."$table where siteid=0 and webmaster=100000"; $result = $conn->GetAll($query); $source = 'global'; } $row = $result[0]; unset($row['webmaster']); $rates = array(); foreach($row as $key=>$val) $rates[$key] = $val; $rates['source'] = $source; return $rates; } public function getAffRepPayRates($site=0) { return $this->getPayRates($site, 'aff_rep_config'); } public function updatePayRates($rates, $site=0, $table='config') { global $conn; require_once(CLASSES_PATH."rates.class.php"); $rates['wm_common'] = 0; $wrates = new Rates($site,$this->id, $table); $wrates->update($rates,0); $wrates->fetchNumbersForSave(); $wrates->save(); if ($site==0) { $query = "select id from ".TBL_PREFIX."sites"; $result = $conn->GetAll($query); foreach ($result as $s) { $wrates->siteid = $s[id]; $wrates->save(); } } } public function updateAffRepPayRates($rates, $site=0) { $this->updatePayRates($rates, $site, 'aff_rep_config'); } public function setPayRates($table='config') { global $conn; $query = "SELECT * from ".TBL_PREFIX."$table where webmaster=100000"; $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; $res = $conn->GetAll($query); foreach ($res as $row) { $rates = array(); $sql = "SELECT * FROM ".TBL_PREFIX."$table WHERE siteid=-1 and webmaster=0"; $result = $conn->Execute($sql); $row[webmaster] = $this->id; $insertSQL = $conn->GetInsertSQL($result, $row); $conn->Execute($insertSQL); } } public function setAffRepPayRates() { $this->setPayRates('aff_rep_config'); } public function clearPayRates($site, $table='config') { global $conn; include_once (CLASSES_PATH."rates.class.php"); $wrates = new Rates($site,$this->id, $table); return $wrates->del(); } public function clearAffRepPayRates($site) { global $conn; if ($site) $site_criteria = "and siteid='$site'"; $sql = "DELETE FROM ". TBL_PREFIX ."aff_rep_programs WHERE webmaster='$this->id' $site_criteria"; $conn->Execute($sql); return $conn->Affected_Rows(); } public function payRatesForm($site, $table='config') { global $conn; include_once (CLASSES_PATH."rates.class.php"); $rates = new Rates($site, $this->id, $table); //load the payrates with the getPayRates method as this is the one that is used on signup, //and is showing the actual rates that the signup will credit the webmaster with foreach ($this->getPayRates($site, $table) as $key => $value) $rates->$key = $value; $form = $rates->Form(); $misc = "\n\n\nid>"; //custom node global $doc; $make_xml = new Make_Xml($doc, 'data'); $node = $make_xml->addRow($make_xml->ext_node, 'edit_payrates'); $make_xml->addValue($node, 1); $node = $make_xml->addRow($make_xml->ext_node, 'misc'); $make_xml->addValue($node, $misc); } public function affRepPayRatesForm($site, $table='aff_rep_config') { global $conn; include_once (CLASSES_PATH."rates.class.php"); include_once (FUNCTIONS_PATH."lists_funcs.php"); $aff_rep_program_selector = @implode("", @file(self::fixLangTemplate("admin_aff_rep_program_selector.html"))); $programsArr = array ( '-1'=> ($this->xml_container->masscontainer->none)?$this->xml_container->masscontainer->none :"None", '0' => ($this->xml_container->masscontainer->per_unique)?$this->xml_container->masscontainer->per_unique :"Per Unique", '1' => ($this->xml_container->masscontainer->per_signup)?$this->xml_container->masscontainer->per_signup :"Per Signup", '2' => ($this->xml_container->masscontainer->partnership)?$this->xml_container->masscontainer->partnership :"Partnership", '3' => ($this->xml_container->masscontainer->per_activ_member)?$this->xml_container->masscontainer->per_activ_member :"Per Active Member" ); $rates = new Rates($site, $this->id, $table); //load the payrates with the getPayRates method as this is the one that is used on signup, //and is showing the actual rates that the signup will credit the webmaster with foreach ($this->getPayRates($site, $table) as $key => $value) $rates->$key = $value; $form = $rates->Form(); $aff_rep_program_selector = str_replace("{use_program_select}",custom_select($programsArr, $rates->use_program),$aff_rep_program_selector); $misc = $aff_rep_program_selector."\n\n\nid>"; //custom node global $doc; $make_xml = new Make_Xml($doc, 'data'); $node = $make_xml->addRow($make_xml->ext_node, 'aff_rates'); $make_xml->addValue($node, 1); $node = $make_xml->addRow($make_xml->ext_node, 'misc'); $make_xml->addValue($node, $misc); } public function XSellRatesForm() { global $conn; include_once (CLASSES_PATH."xsell_pay_rates.class.php"); $rates = new XSellPayRate($this->id); $rates->Form(); //custom node global $doc; $make_xml = new Make_Xml($doc, 'data'); $node = $make_xml->addRow($make_xml->ext_node, 'xsell_payrates'); $make_xml->addValue($node, 1); } public function updateXSellRates($ez_rates) { global $conn; require_once(CLASSES_PATH."xsell_pay_rates.class.php"); $rates = new XSellPayRate($this->id); $rates->update($ez_rates); } public function getXSellRates() { global $conn; require_once(CLASSES_PATH."xsell_pay_rates.class.php"); $rates = new XSellPayRate($this->id); return $rates; } public function CascadingOrderForm() { global $conn; include_once (CLASSES_PATH."cascading_order.class.php"); $c_order = new CascadingOrder($this->id); //custom node global $doc; $make_xml = new Make_Xml($doc, 'data'); $node = $make_xml->addRow($make_xml->ext_node, 'wm_cascading_order'); $make_xml->addValue($node, 1); $node = $make_xml->addRow($make_xml->ext_node, 'cascading_order'); $make_xml->addValue($node, $c_order->order_select()); $node = $make_xml->addRow($make_xml->ext_node, 'geo_cascading_order'); $make_xml->addValue($node, $c_order->geo_order_select()); $node = $make_xml->addRow($make_xml->ext_node, 'misc'); $make_xml->addValue($node, "id>"); } public function updateCascadingOrder($order) { global $conn; require_once(CLASSES_PATH."cascading_order.class.php"); $co = array(); $gco = array(); $alt_co = array(); $alt_gco = array(); foreach ($_POST as $key=>$value) { if (!preg_match("/.*order_\d+.*$/", $key)) continue; $alt = preg_replace("/.*order_(\d+).*$/", "$1", $key); $processor = preg_replace("/.*order_\d+_(.*)$/", "$1", $key); /* $co = explode('|','|'.$_POST['order_'.$alt]); unset($co[0]); $gco = explode('|','|'.$_POST['geo_order_'.$alt]); unset($gco[0]); */ if ($alt) { if (preg_match("/geo_order/", $key))$alt_gco[$processor] = $value; else $alt_co[$processor] = $value; } else { if (preg_match("/geo_order/", $key))$gco[$processor] = $value; else $co[$processor] = $value; } } $c_order = new CascadingOrder($this->id); $c_order->update( array( 'order'=>$co, 'geo_order'=>$gco ) ); if ($order['clear']!='') { $c_order->clear(); } if (count($alt_co)>0) { //updating the alt_cascading $c_order = new CascadingOrder($this->id,0,1); $c_order->update( array( 'order'=>$co, 'geo_order'=>$gco ) ); if ($order['clear']!='') { $c_order->clear(); } } } public function authenticate() { global $conn; global $_COOKIE; global $_POST; if ($this->disabled || $this->frozen) { $this->reason_deny = 'disabled_or_frozen'; return 0; } if ($this->username=='' || $this->password=='') { $this->reason_deny = 'rejected'; return 0; } if ($this->brute_force>=$this->brute_force_attempts && strtotime($this->date_edited." + $this->lock_time seconds")>time()) { $this->reason_deny = 'brute_force'; return 0; } if (@$_COOKIE['wm_username'] == $this->username and @$_COOKIE['wm_password']==$this->password and !$this->disabled and !$this->frozen) { return 1; } // Customized to recognize md5 encrypted passwords in the database if ($_POST['wm_username'] == $this->username and ($_POST['wm_password']==$this->password or md5($_POST['wm_password'])==$this->password) and !$this->disabled and !$this->frozen) { if (!$this->id || !$this->approved) { $this->reason_deny = 'not_approved'; return 0; } setcookie ("wm_id", $this->id,0); setcookie ("wm_username", $_POST['wm_username'],0); setcookie ("wm_password", $_POST['wm_password'],0); if($this->brute_force) $this->brute_force=1; $this->update(array('password' => $_POST['wm_password'])); return 1; } $this->logout(0); if($this->brute_force) $this->brute_force++; if($this->brute_force>=$this->brute_force_attempts) { $this->subject = 'Brute force attack'; $this->send_email($this->brute_force_email_template); } $this->save(); $this->reason_deny = "not_authorized"; return 0; } public function logout($redirect = 1) { setcookie ("wm_id", '',time()-3600); setcookie ("wm_username",'',time()-3600); setcookie ("wm_password", '',time()-3600); if ($redirect) header("Location: webmasters.php?action=login_default&logout=1"); } public function remember($action) { global $_POST; if($action == "set") { $cookie = $_POST['wm_username']."|".$_POST['wm_password']."|".'checked'; setcookie("remember", $cookie, time()+2678400, '/'); } else { setcookie("remember", "", time()-3600, '/'); } } public function getPayout() { } public function disabled($w) { // Checks if webmaster is disabled, returns TRUE if yes. // Used in hit.phpchecks if webmaster is disabled // Peter global $conn; $sql = "SELECT disabled from $this->table where id=$w"; $res = $conn->GetRow($sql); if($res[0]==1) return true; else return false; } public function fixLangTemplate($fileName) { if(isset($_SESSION['lang'])) { if ($_SESSION['lang'] != 'en') { if (is_file(INNER_TEMPLATES_PATH.$_SESSION['lang'].'/'.$fileName)) { $exportFormFile = INNER_TEMPLATES_PATH.$_SESSION['lang'].'/'.$fileName; } else { $exportFormFile = INNER_TEMPLATES_PATH.$fileName; } } else { $exportFormFile = INNER_TEMPLATES_PATH.$fileName; } } else { $exportFormFile = INNER_TEMPLATES_PATH.$fileName; } return $exportFormFile; } } ?> CarnalCash.com » Terms & Conditions
 
NEWS
August 13, 2019
Carnal Media Launches New Dad/Son Site, GayCest.com

Los Angeles - Carnal Media, the owner of The GunzBlazing Network, just launched their next blockbuster site; GayCest.com. This is their 4th site launch this year. This site launch comes on the heels of the fastest growing site of 2019, FunSizeBoys.com. Carnal Media goes even deeper into the world of dad/son fantasy with GayCest.com. Gaycest.com is an adult fantasy website depicting fictional relationships between voluntary participants in taboo dad son role play.

[READ MORE]
July 19, 2019
Carnal Media Lands Tech Expert Deniz Bilgin To Head Up Explosive Growth

Los Angeles - Carnal Media is expanding again after their recent acquisition of the Gunzblazing Network with the hiring of industry veteran Deniz Bilgin as head of tech and development. Deniz most notably was the brains and muscle that built one of top twink studios in the world, HelixStudios. Over his 15 years at HelixStudios he grew from Senior Developer to IT Director, and then later to Director of Operations.

[READ MORE]
July 12, 2019
Carnal Media Signs Twink Star Austin L. Young To Exclusive Agreement

Los Angeles - Carnal Media has re-signed twink superstar Austin L Young as an exclusive model, and is now working to promote the exclusive model site AustinLYoung.com within the Carnal Media Network. Austin brings his youthful sexiness, outstanding performances and raw sexual appeal to a fast growing team that just added Bishop Angus as an exclusive model. Austin's model site allows his fan base to follow him in all his adult work and even subscribe to his regular updates on his JustFor.Fans page directly through his site.

[READ MORE]
July 05, 2019
Carnal Media Continues Momentum Signing Bishop Angus As An Exclusive Model

Los Angeles - Carnal Media (Having recently purchased the Gunzblazing Network) continues its growth and momentum with the signing of Bishop Angus as an exclusive model. With the signing of Bishop Angus as Carnal Media's first Exclusive model, Carnal also debuted the BishopAngus.com model site. The BishopAngus.com model site brings together Bishop's work in porn plus his JustFor.Fans work into 1 site where fans can follow a model and all their work.

[READ MORE]
May 30, 2019
Carnal Media Hires Industry Star Ewan French to Lead Affiliate Team!

Carnal Media and the Gunzblazing Network is excited to announce the hiring of longtime industry leader, Ewan French as their Affiliate Manager.

Carnal Media has recently launched 3 sites including the fast-growing FunSizeBoys.com that debuted last week, plus the first of its kind furry live-action + comic + story site GrowlBoys.com, and the much talked about BoyForSale.com. The Carnal team continues to grow as does the product lineup with the product offerings rapidly expanding. Carnal Media has a FOURTH SITE which will debut in the month of June!!

[READ MORE]
May 20, 2019
Announcing FunSizeBoys.com
Celebrating Gay Size Difference!

Carnal Media and the Gunzblazing network is excited to debut its latest site offering, FunSizeBoys.com, a site that showcases and celebrates very tall guys paired with very small guys. Fun Size Boys explores hot encounters between the very tall and the very small, celebrating the thrill of seeing the ends of the curve coming together. The short, "fun size" boys are discovered by tall, "king size" men, and both love nothing more than the idea of hooking up with the other extreme! The shorter guys ride the monster cocks of the big men, climb their big bodies, and take their big loads, all while enjoying the thrill of being fucked by a giant!

[READ MORE]
May 03, 2019
Carnal Media Hires Danny GO Amid Rapid Growth

Carnal Media and the GunzBlazing network is thrilled to announce the hiring of long-time industry insider, Danny GO. Danny brings years of experience on all levels of the adult industry, both in front of the camera and behind the scenes. For Carnal Media, Danny will lead efforts on Carnal's revolutionary new site, www.GrowlBoys.com, as Affiliate/Event Manager. GrowlBoys offers Daddy/son fantasy with a sexy, mythological twist on furries, pup play, and transformation fantasies.

[READ MORE]
April 25, 2019
Announcing a Groundbreaking
New Website GrowlBoys.com

We at Carnal Media are proud to unveil our latest, groundbreaking website to our growing, narrative-based catalogue: GrowlBoys.com! After years of passion and planning, GrowlBoys offers Daddy/son fantasy (and we mean that literally!) with a sexy, mythological twist on furries, pup play, and transformation erotica. Never before has a website brought such a creative and diverse offering!

[READ MORE]
December 7th, 2018
Dear Affiliate,

We are proud to announce that we have formed a new company, Carnal Media, which has just purchased the Gunz Blazing Network. We will also produce several of our own websites and market them in the network going forward.

Gunz Blazing is a historic network with more than two dozen websites and a solid reputation of trust with affiliates that spans more than two decades.

[READ MORE]


Terms & Conditions

By advertising sites owned by CarnalCash, you are agreeing to comply with the following terms and conditions. Failure to comply with these terms and conditions may result in permanent termination from the program, including suspension of all commission payments.

You must be over the age of 18 to participate in the CarnalCash program.

Illegal Activities

You may not promote our sites or position our content in association with child pornography, bestiality, rape, torture or stolen content.

Absolutely no spamming! This includes unsolicited emails, instant messages, chat room messages and newsgroups.

Re-Watermarking Videos

All Tube Submitting affiliates must reach out to our affiliate manager ewan@carnalmedia.com to approve the domain, watermarking and video cuts you will do. You are NOT permitted to re-watermark any promotional video content from CarnalCash without going through our approval process.

Webmasters found to be doing so will be given the opportunity to work with us as Tube Submitters. Refusal to cooperate and coordinate tube submitting with our team will result in suspension.

Cheating

You cheat - you lose! This includes the use of scripts or any other method of artificially generating traffic or sales.

False Advertising

You may not use our advertising materials to advertise a website or page that does not contain our content.

Password Sharing Sites

You may not advertise our websites on pages that promote unauthorized paysite user name and password sharing.

Payment Terms

All payments are made in US Dollars. Payments are made every two weeks by check, Paxum, ACH (for US webmasters) and wire transfers (for non-US webmasters).
Wire/ACH Costs:

ACH -   Free
Wires - $30

Trial Memberships

We reserve the right to remove trial-membership sale options from the join/sign-up pages of sites within the CarnalCash program at any time.

Technology

CarnalCash will not be held responsible for technical failures resulting in downtime or delays that affect the performance of the CarnalCash program or our sites.

Restrictions on Paid Inclusion Advertising

You are not permitted to register or bid on a CarnalCash paysite name or other phrases or marks used by CarnalCash (collectively the CarnalCash Marks) with any paid inclusion search engine provider including but not limited to Google and MSN. This includes separating the CarnalCash Marks into individual words, for example the domain "www.hotbarebacking.com" into "hot barebacking". This also includes any variants, misspellings or derivatives which are clearly designed to imitate a CarnalCash Mark, such as "Gunsblazing" or "hotbearbacking." Doing so will result in withholding of payouts and termination of your CarnalCash account without compensation. If you are uncertain of what these terms or words are you should ask your account representative.

Termination

We reserve the right to cancel this Agreement at any time and at the discretion of the Program Manager.

Upon termination of this agreement or our request, all material related to CarnalCash must be removed from your sites.

You may terminate this agreement at any time by emailing support@blazingsupport.com