+
@@ -0,0 +1,9 @@
|
|||||||
|
AddDefaultCharset utf-8
|
||||||
|
|
||||||
|
RewriteEngine on
|
||||||
|
RewriteBase /
|
||||||
|
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
|
||||||
|
RewriteRule ^(.*)$ index.php
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
$print:
|
||||||
|
array(16) {
|
||||||
|
["id"]=>
|
||||||
|
string(1) "4"
|
||||||
|
["name"]=>
|
||||||
|
string(14) "MININT-15MK94U"
|
||||||
|
["model"]=>
|
||||||
|
string(10) "HP LJ 3030"
|
||||||
|
["unit"]=>
|
||||||
|
string(9) "0000-0445"
|
||||||
|
["inventar"]=>
|
||||||
|
string(7) "3-21333"
|
||||||
|
["sn"]=>
|
||||||
|
string(10) "CNBF033770"
|
||||||
|
["floor"]=>
|
||||||
|
string(10) "9 этаж"
|
||||||
|
["id_fl"]=>
|
||||||
|
string(1) "5"
|
||||||
|
["department"]=>
|
||||||
|
string(18) "Аналитики"
|
||||||
|
["id_dep"]=>
|
||||||
|
string(1) "9"
|
||||||
|
["status"]=>
|
||||||
|
string(15) "В работе"
|
||||||
|
["id_st"]=>
|
||||||
|
string(1) "1"
|
||||||
|
["cartrige"]=>
|
||||||
|
string(3) "12a"
|
||||||
|
["id_cart"]=>
|
||||||
|
string(1) "2"
|
||||||
|
["img"]=>
|
||||||
|
string(0) ""
|
||||||
|
["functions"]=>
|
||||||
|
array(4) {
|
||||||
|
[0]=>
|
||||||
|
array(3) {
|
||||||
|
["id"]=>
|
||||||
|
string(1) "1"
|
||||||
|
["name"]=>
|
||||||
|
string(12) "Печать"
|
||||||
|
["description"]=>
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
[1]=>
|
||||||
|
array(3) {
|
||||||
|
["id"]=>
|
||||||
|
string(1) "3"
|
||||||
|
["name"]=>
|
||||||
|
string(34) "Сканирование на ПК"
|
||||||
|
["description"]=>
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
[2]=>
|
||||||
|
array(3) {
|
||||||
|
["id"]=>
|
||||||
|
string(1) "4"
|
||||||
|
["name"]=>
|
||||||
|
string(40) "Сканирование на почту"
|
||||||
|
["description"]=>
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
[3]=>
|
||||||
|
array(3) {
|
||||||
|
["id"]=>
|
||||||
|
string(1) "5"
|
||||||
|
["name"]=>
|
||||||
|
string(49) "Двустороннее сканирование"
|
||||||
|
["description"]=>
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$_POST:
|
||||||
|
array(11) {
|
||||||
|
["name"]=>
|
||||||
|
string(15) "MININT-15MK94U1"
|
||||||
|
["unit"]=>
|
||||||
|
string(10) "0000-04452"
|
||||||
|
["model"]=>
|
||||||
|
string(11) "HP LJ 30303"
|
||||||
|
["sn"]=>
|
||||||
|
string(11) "CNBF0337704"
|
||||||
|
["inventar"]=>
|
||||||
|
string(8) "3-213335"
|
||||||
|
["id_floor"]=>
|
||||||
|
string(1) "1"
|
||||||
|
["id_department"]=>
|
||||||
|
string(1) "1"
|
||||||
|
["id_cartrige"]=>
|
||||||
|
string(1) "1"
|
||||||
|
["id_status"]=>
|
||||||
|
string(1) "2"
|
||||||
|
["id_functions"]=>
|
||||||
|
array(3) {
|
||||||
|
[0]=>
|
||||||
|
string(1) "1"
|
||||||
|
[1]=>
|
||||||
|
string(1) "3"
|
||||||
|
[2]=>
|
||||||
|
string(1) "4"
|
||||||
|
}
|
||||||
|
["submit"]=>
|
||||||
|
string(0) ""
|
||||||
|
}
|
||||||
|
|
||||||
|
checking
|
||||||
|
$up:
|
||||||
|
array(10) {
|
||||||
|
[1]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(23) "Имя принтера"
|
||||||
|
["old_data"]=>
|
||||||
|
string(14) "MININT-15MK94U"
|
||||||
|
["new_data"]=>
|
||||||
|
string(15) "MININT-15MK94U1"
|
||||||
|
}
|
||||||
|
[2]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(29) "Модель принтера"
|
||||||
|
["old_data"]=>
|
||||||
|
string(10) "HP LJ 3030"
|
||||||
|
["new_data"]=>
|
||||||
|
string(11) "HP LJ 30303"
|
||||||
|
}
|
||||||
|
[3]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(32) "Номер UNIT принтера"
|
||||||
|
["old_data"]=>
|
||||||
|
string(9) "0000-0445"
|
||||||
|
["new_data"]=>
|
||||||
|
string(10) "0000-04452"
|
||||||
|
}
|
||||||
|
[4]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(50) "Инвентарный номер принтера"
|
||||||
|
["old_data"]=>
|
||||||
|
string(7) "3-21333"
|
||||||
|
["new_data"]=>
|
||||||
|
string(8) "3-213335"
|
||||||
|
}
|
||||||
|
[5]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(44) "Серийный номер принтера"
|
||||||
|
["old_data"]=>
|
||||||
|
string(10) "CNBF033770"
|
||||||
|
["new_data"]=>
|
||||||
|
string(11) "CNBF0337704"
|
||||||
|
}
|
||||||
|
[6]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(8) "Этаж"
|
||||||
|
["old_data"]=>
|
||||||
|
string(1) "5"
|
||||||
|
["new_data"]=>
|
||||||
|
string(1) "1"
|
||||||
|
}
|
||||||
|
[7]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(10) "Отдел"
|
||||||
|
["old_data"]=>
|
||||||
|
string(1) "9"
|
||||||
|
["new_data"]=>
|
||||||
|
string(1) "1"
|
||||||
|
}
|
||||||
|
[8]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(16) "Картридж"
|
||||||
|
["old_data"]=>
|
||||||
|
string(1) "2"
|
||||||
|
["new_data"]=>
|
||||||
|
string(1) "1"
|
||||||
|
}
|
||||||
|
[9]=>
|
||||||
|
array(3) {
|
||||||
|
["object"]=>
|
||||||
|
string(12) "Статус"
|
||||||
|
["old_data"]=>
|
||||||
|
string(1) "1"
|
||||||
|
["new_data"]=>
|
||||||
|
string(1) "2"
|
||||||
|
}
|
||||||
|
[10]=>
|
||||||
|
array(2) {
|
||||||
|
["object"]=>
|
||||||
|
string(29) "Функции удалили"
|
||||||
|
["old_data"]=>
|
||||||
|
string(1) "5"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
function __autoload($class_name){
|
||||||
|
|
||||||
|
$array_path = array(
|
||||||
|
'/models/',
|
||||||
|
'/controllers/',
|
||||||
|
'/components/'
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($array_path as $path){
|
||||||
|
$path = ROOT . $path . $class_name . '.php';
|
||||||
|
if (is_file($path)){
|
||||||
|
include_once $path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of Date
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class Date {
|
||||||
|
//put your code here
|
||||||
|
public static function changeDateToUnix($date){
|
||||||
|
|
||||||
|
$arr_date = explode("-", $date);
|
||||||
|
$U_date = mktime(0,0,0,$arr_date[0],$arr_date[1],$arr_date[2]);
|
||||||
|
|
||||||
|
return $U_date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function changeLocaleDate($date){
|
||||||
|
|
||||||
|
$translate = array(
|
||||||
|
"am" => "дп",
|
||||||
|
"pm" => "пп",
|
||||||
|
"AM" => "ДП",
|
||||||
|
"PM" => "ПП",
|
||||||
|
"Monday" => "Понедельник",
|
||||||
|
"Mon" => "Пн",
|
||||||
|
"Tuesday" => "Вторник",
|
||||||
|
"Tue" => "Вт",
|
||||||
|
"Wednesday" => "Среда",
|
||||||
|
"Wed" => "Ср",
|
||||||
|
"Thursday" => "Четверг",
|
||||||
|
"Thu" => "Чт",
|
||||||
|
"Friday" => "Пятница",
|
||||||
|
"Fri" => "Пт",
|
||||||
|
"Saturday" => "Суббота",
|
||||||
|
"Sat" => "Сб",
|
||||||
|
"Sunday" => "Воскресенье",
|
||||||
|
"Sun" => "Вс",
|
||||||
|
"January" => "Января",
|
||||||
|
"Jan" => "Янв",
|
||||||
|
"February" => "Февраля",
|
||||||
|
"Feb" => "Фев",
|
||||||
|
"March" => "Марта",
|
||||||
|
"Mar" => "Мар",
|
||||||
|
"April" => "Апреля",
|
||||||
|
"Apr" => "Апр",
|
||||||
|
"May" => "Мая",
|
||||||
|
"May" => "Мая",
|
||||||
|
"June" => "Июня",
|
||||||
|
"Jun" => "Июн",
|
||||||
|
"July" => "Июля",
|
||||||
|
"Jul" => "Июл",
|
||||||
|
"August" => "Августа",
|
||||||
|
"Aug" => "Авг",
|
||||||
|
"September" => "Сентября",
|
||||||
|
"Sep" => "Сен",
|
||||||
|
"October" => "Октября",
|
||||||
|
"Oct" => "Окт",
|
||||||
|
"November" => "Ноября",
|
||||||
|
"Nov" => "Ноя",
|
||||||
|
"December" => "Декабря",
|
||||||
|
"Dec" => "Дек",
|
||||||
|
"st" => "ое",
|
||||||
|
"nd" => "ое",
|
||||||
|
"rd" => "е",
|
||||||
|
"th" => "ое"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
return strtr($date, $translate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: andrey
|
||||||
|
* Date: 14.04.16
|
||||||
|
* Time: 18:33
|
||||||
|
*/
|
||||||
|
class Db{
|
||||||
|
|
||||||
|
public static function getConnection(){
|
||||||
|
|
||||||
|
$paramsPath = ROOT.'/config/db_params.php';
|
||||||
|
$params = include($paramsPath);
|
||||||
|
|
||||||
|
$dsn = "mysql:host={$params['host']};dbname={$params['dbname']}";
|
||||||
|
$db = new PDO($dsn, $params['user'], $params['password']);
|
||||||
|
|
||||||
|
$db->exec('SET NAMES utf8'); //задаём кодировку ввода/вывода БД
|
||||||
|
|
||||||
|
return $db;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of Icecast
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class Icecast {
|
||||||
|
|
||||||
|
public static function getConnection(){
|
||||||
|
|
||||||
|
$paramsPath = ROOT.'/config/icecast.php';
|
||||||
|
$params = include($paramsPath);
|
||||||
|
$radio = [];
|
||||||
|
$radio['host'] = $params['icecast_host']; // Сервер, на котором висит Icecast
|
||||||
|
$radio['ip'] = $params['icecast_ip']; // Сервер, на котором висит Icecast
|
||||||
|
$radio['port'] = $params['icecast_port']; // Порт
|
||||||
|
|
||||||
|
return $radio;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of Images
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class Images {
|
||||||
|
//put your code here
|
||||||
|
public static function uploadImg(){
|
||||||
|
|
||||||
|
if (!copy($_FILES['img']['tmp_name'], ROOT.IMG_PRN.$_FILES['img']['name']))
|
||||||
|
echo 'Error upload image';
|
||||||
|
else
|
||||||
|
return IMG_PRN.$_FILES['img']['name'];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function updatePrintImg($id_prn, $link_img){
|
||||||
|
//формирование запроса и обновление данных в базе
|
||||||
|
$db = Db::getConnection();
|
||||||
|
//внесение денных об изменениях принтера в бд
|
||||||
|
$stmt = $db->prepare("UPDATE print set img=:img WHERE id = :id");
|
||||||
|
$stmt->bindParam(':id', $id_prn, PDO::PARAM_INT);
|
||||||
|
$stmt->bindParam(':img', $link_img);
|
||||||
|
|
||||||
|
return $stmt->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function checkAndDeleteImg($id_prn){
|
||||||
|
|
||||||
|
$info_prn = Printer::getPrintByIDFullData($id_prn);
|
||||||
|
if(!$info_prn['img'] == ""){
|
||||||
|
$filename = $info_prn['img'];
|
||||||
|
rename(ROOT.$filename, ROOT.$filename."_old"); //переименование старого изображения
|
||||||
|
//unlink(ROOT.$filename); //удаление старого изображения
|
||||||
|
//echo $info_prn['img'];
|
||||||
|
//echo ROOT.$filename."old";
|
||||||
|
//var_dump($info_prn['img']);
|
||||||
|
return true;
|
||||||
|
}else return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of Ldap
|
||||||
|
*
|
||||||
|
* @author azashchepkin
|
||||||
|
*/
|
||||||
|
class Ldap {
|
||||||
|
|
||||||
|
/*
|
||||||
|
public function __construct() {
|
||||||
|
$this->ldaphost = LDAP_HOST;
|
||||||
|
$this->ldapport = LDAP_PORT;
|
||||||
|
$this->base = LDAP_BASE;
|
||||||
|
$this->filter = LDAP_FILTER;
|
||||||
|
$this->domain = LDAP_DOMAIN;
|
||||||
|
}*/
|
||||||
|
//put your code here
|
||||||
|
public static function LdapAuth($username, $pass){
|
||||||
|
|
||||||
|
$paramsPath = ROOT.'/config/ldap_config.php';
|
||||||
|
$params = include($paramsPath);
|
||||||
|
|
||||||
|
$login = $username.$params['ldap_domain'];
|
||||||
|
$password = $pass;
|
||||||
|
//подсоединяемся к LDAP серверу
|
||||||
|
$ldap = ldap_connect($params['ldap_host'], $params['ldap_port']) or die("Cant connect to LDAP Server");
|
||||||
|
//Включаем LDAP протокол версии 3
|
||||||
|
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||||
|
if ($ldap){
|
||||||
|
// Пытаемся войти в LDAP при помощи введенных логина и пароля
|
||||||
|
$bind = ldap_bind($ldap,$login,$password);
|
||||||
|
if ($bind)
|
||||||
|
{
|
||||||
|
// Проверим, является ли пользователь членом указанной группы.
|
||||||
|
$result = ldap_search($ldap,$params['ldap_base'],$params['ldap_filter'].$username);//"(||(memberOf=".$memberof.")(".$filter.$username."))"
|
||||||
|
// Получаем количество результатов предыдущей проверки
|
||||||
|
$result_ent = ldap_get_entries($ldap,$result);
|
||||||
|
//return $result_ent;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ('Вы ввели неправильный логин или пароль. попробуйте еще раз<br /> <a href="index.php">Вернуться назад</a>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Если пользователь найден, то пропускаем его дальше и перебрасываем на main.php
|
||||||
|
if ($result_ent['count'] != 0)
|
||||||
|
{
|
||||||
|
$_SESSION['user_id'] = $username;
|
||||||
|
$_SESSION['name_en'] = $result_ent[0]['cn'][0];
|
||||||
|
$_SESSION['name'] = $result_ent[0]['extensionattribute1'][0];
|
||||||
|
$_SESSION['surname'] = $result_ent[0]['extensionattribute2'][0];
|
||||||
|
$_SESSION['middle_name'] = $result_ent[0]['extensionattribute3'][0];
|
||||||
|
$_SESSION['full_name'] = $result_ent[0]['extensionattribute4'][0];
|
||||||
|
$_SESSION['city'] = $result_ent[0]['l'][0];
|
||||||
|
$_SESSION['position'] = $result_ent[0]['title'][0];
|
||||||
|
$_SESSION['department'] = $result_ent[0]['extensionattribute7'][0];
|
||||||
|
$_SESSION['mail'] = $result_ent[0]['mail'][0];
|
||||||
|
$_SESSION['phone'] = $result_ent[0]['telephonenumber'][0];
|
||||||
|
$_SESSION['georol'] = $result_ent[0]['renaissancegeorole'][0];
|
||||||
|
$_SESSION['photo'] = $result_ent[0]['jpegphoto'][0];
|
||||||
|
/*Фото из ad
|
||||||
|
$photo = $result_ent[0]['jpegphoto'][0];
|
||||||
|
$img = imagecreatefromstring($photo);
|
||||||
|
header("Content-type: image/jpeg");
|
||||||
|
imagejpeg($img,NULL,100);
|
||||||
|
echo "<img src=/index.php />";
|
||||||
|
|
||||||
|
echo "<pre>";
|
||||||
|
var_dump($result_ent);
|
||||||
|
echo "</pre>";*/
|
||||||
|
//header('Location: main.php');
|
||||||
|
//exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
die('К сожалению, вам доступ закрыт<br /> <a href="index.php">Вернуться назад</a>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of Mail
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class Mail {
|
||||||
|
//put your code here
|
||||||
|
public static function getOrderCartriges($list_print, $from){
|
||||||
|
//
|
||||||
|
$message = '<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>Заказ картриджей</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>Добрый день.<br />
|
||||||
|
КБ «Ренессанс Кредит» (ООО)<br />
|
||||||
|
Адрес: г. Курск, ул. Радищева 5.<br />
|
||||||
|
Необходимы картриджи для: </p>
|
||||||
|
<p>';
|
||||||
|
for($i=0; $i < count($list_print); $i++){
|
||||||
|
if($list_print[$i]['is_color'] == 1){
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (black) (2 шт.)<br />";
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (blue) (2 шт.)<br />";
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (yellow) (2 шт.)<br />";
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (magenta) (2 шт.)<br />";
|
||||||
|
}else $message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (2 шт.)<br />";
|
||||||
|
}
|
||||||
|
|
||||||
|
$message .= '</p><p>График работы: Пн-Пт. 9:00 - 18:00. <br />
|
||||||
|
Контактные номера: <br />
|
||||||
|
Захаренко Евгений <br />
|
||||||
|
+7 (495) 783-46-00 доб. 15015 <br />
|
||||||
|
Защепкин Андрей <br />
|
||||||
|
+7 (495) 783-46-00 доб. 15000 <br />
|
||||||
|
Галин Владислав <br />
|
||||||
|
+7 (495) 783-46-00 доб. 15025 </p>
|
||||||
|
';
|
||||||
|
$ord = self::getMail('Заказ картриджей', $message, $from);
|
||||||
|
(!$ord) ? $mess = "don't geting" : $mess = "OK";
|
||||||
|
return $mess;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static function getMail($subject, $message, $from){
|
||||||
|
|
||||||
|
$paramsPath = ROOT.'/config/unit_information.php';
|
||||||
|
$params = include($paramsPath);
|
||||||
|
|
||||||
|
// отправка нескольким адресатам
|
||||||
|
$to = $params['email_support'] . ', '; // кому отправляем
|
||||||
|
//$to .= 'friend2@yourmail.ru' . ', '; // Внимание! Так пишем второй и тд адреса
|
||||||
|
// не забываем запятую. Даже в последнем контакте лишней не будет
|
||||||
|
// Для начинающих! $to .= точка в этом случае для Дописывания в переменную
|
||||||
|
|
||||||
|
// содержание письма
|
||||||
|
/*$subject = "Тема сообщения";
|
||||||
|
$message = '
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<title>Тема страницы</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>А здесь ваше сообщение</p>
|
||||||
|
</body>
|
||||||
|
</html>';*/
|
||||||
|
|
||||||
|
// устанавливаем тип сообщения Content-type, если хотим
|
||||||
|
$headers = 'MIME-Version: 1.0' . "\r\n";
|
||||||
|
$headers .= "Content-type: text/html; charset=utf-8 \r\n";
|
||||||
|
|
||||||
|
// дополнительные данные
|
||||||
|
$headers .= "From: ".$from['name']." <".$from['email'].">\r\n"; // от кого
|
||||||
|
$headers .= "Cc: #ITKursk@rencredit.ru" . "\r\n"; // копия сообщения на этот адрес
|
||||||
|
//$headers .= "Bcc: yournick-archive@yourmail.ru\r\n"; // скрытая копия сообщения на этот
|
||||||
|
mail($to, $subject, $message, $headers);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getLinkOrd($list_print){
|
||||||
|
|
||||||
|
$paramsPath = ROOT.'/config/unit_information.php';
|
||||||
|
$params = include($paramsPath);
|
||||||
|
|
||||||
|
// отправка нескольким адресатам
|
||||||
|
$to = $params['email_support']; // кому отправляем
|
||||||
|
$message = "КБ «Ренессанс Кредит» (ООО)%0aАдрес: г. Курск, ул. Радищева 5.%0aНеобходимы картриджи для:%0a%0a";
|
||||||
|
for($i=0; $i < count($list_print); $i++){
|
||||||
|
if($list_print[$i]['is_color'] == 1){
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (black) (2 шт.)%0a";
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (blue) (2 шт.)%0a";
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (yellow) (2 шт.)%0a";
|
||||||
|
$message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (magenta) (2 шт.)%0a";
|
||||||
|
}else $message .= "".$list_print[$i]['model']." ".$list_print[$i]['unit']." (2 шт.)%0a";
|
||||||
|
}
|
||||||
|
$message .= "%0aГрафик работы: Пн-Пт. 9:00 - 18:00.%0aКонтактные номера:%0aЗахаренко Евгений%0a+7 (495) 783-46-00 доб. 15015%0aЗащепкин Андрей%0a+7 (495) 783-46-00 доб. 15000%0aГалин Владислав%0a+7 (495) 783-46-00 доб. 15025";
|
||||||
|
|
||||||
|
$ord = self::getLinkMail("Заказ картриджей", $message, $to);
|
||||||
|
//(!$ord) ? $mess = "don't geting" : $mess = "OK";
|
||||||
|
return $ord;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getRequests($print_id, $description){
|
||||||
|
|
||||||
|
$paramsPath = ROOT.'/config/unit_information.php';
|
||||||
|
$params = include($paramsPath);
|
||||||
|
$print = Printer::getPrintByID($print_id);
|
||||||
|
// отправка нескольким адресатам
|
||||||
|
$to = $params['email_support']; // кому отправляем
|
||||||
|
$message = "КБ «Ренессанс Кредит» (ООО)%0aАдрес: г. Курск, ул. Радищева 5.%0a%0a";
|
||||||
|
$message .= "Проблемы с принтером ".$print['model']." ".$print['unit'].". ".$description."%0a";
|
||||||
|
$message .= "%0aГрафик работы: Пн-Пт. 9:00 - 18:00.%0aКонтактные номера:%0aЗахаренко Евгений%0a+7 (495) 783-46-00 доб. 15015%0aЗащепкин Андрей%0a+7 (495) 783-46-00 доб. 15000%0aГалин Владислав%0a+7 (495) 783-46-00 доб. 15025";
|
||||||
|
|
||||||
|
$request = self::getLinkMail("Проблемы с принтером ".$print['model']." ".$print['unit'], $message, $to);
|
||||||
|
//(!$ord) ? $mess = "don't geting" : $mess = "OK";
|
||||||
|
return $request;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static function getLinkMail($subject, $body, $to){
|
||||||
|
|
||||||
|
$subject = "?subject=".$subject;
|
||||||
|
$body = "&body=".$body;
|
||||||
|
$cc = "&cc=%23ITKursk%40rencredit.ru";
|
||||||
|
|
||||||
|
$link = "<a href='mailto:".$to.$subject.$body.$cc."'>Link</a>";
|
||||||
|
|
||||||
|
return $link;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*array(13) {
|
||||||
|
["link"]=>
|
||||||
|
string(30) "http://prints.local/cartriges/"
|
||||||
|
["user_id"]=>
|
||||||
|
string(12) "azashchepkin"
|
||||||
|
["name_en"]=>
|
||||||
|
string(19) "Zashchepkin, Andrey"
|
||||||
|
["name"]=>
|
||||||
|
string(16) "Защепкин"
|
||||||
|
["surname"]=>
|
||||||
|
string(12) "Андрей"
|
||||||
|
["middle_name"]=>
|
||||||
|
string(26) "Александрович"
|
||||||
|
["full_name"]=>
|
||||||
|
string(56) "Защепкин Андрей Александрович"
|
||||||
|
["city"]=>
|
||||||
|
string(10) "Курск"
|
||||||
|
["position"]=>
|
||||||
|
string(62) "Специалист технической поддержки"
|
||||||
|
["department"]=>
|
||||||
|
string(60) "Отдел информационных технологий"
|
||||||
|
["mail"]=>
|
||||||
|
string(25) "azashchepkin@rencredit.ru"
|
||||||
|
["phone"]=>
|
||||||
|
string(5) "15000"
|
||||||
|
["georol"]=>
|
||||||
|
string(16) "GR.RC.Курск"
|
||||||
|
}*/
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Класс для генерации постраничной навигации
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Pagination
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @var Ссылок навигации на страницу
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $max = 10;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @var Ключ для GET, в который пишется номер страницы
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $index = 'page';
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @var Текущая страница
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $current_page;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @var Общее количество записей
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $total;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @var Записей на страницу
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private $limit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Запуск необходимых данных для навигации
|
||||||
|
* @param integer $total - общее количество записей
|
||||||
|
* @param integer $limit - количество записей на страницу
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public function __construct($total, $currentPage, $limit, $index)
|
||||||
|
{
|
||||||
|
# Устанавливаем общее количество записей
|
||||||
|
$this->total = $total;
|
||||||
|
|
||||||
|
# Устанавливаем количество записей на страницу
|
||||||
|
$this->limit = $limit;
|
||||||
|
|
||||||
|
# Устанавливаем ключ в url
|
||||||
|
$this->index = $index;
|
||||||
|
|
||||||
|
# Устанавливаем количество страниц
|
||||||
|
$this->amount = $this->amount();
|
||||||
|
|
||||||
|
# Устанавливаем номер текущей страницы
|
||||||
|
$this->setCurrentPage($currentPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Для вывода ссылок
|
||||||
|
*
|
||||||
|
* @return HTML-код со ссылками навигации
|
||||||
|
*/
|
||||||
|
public function get()
|
||||||
|
{
|
||||||
|
# Для записи ссылок
|
||||||
|
$links = null;
|
||||||
|
|
||||||
|
# Получаем ограничения для цикла
|
||||||
|
$limits = $this->limits();
|
||||||
|
|
||||||
|
$html = '<ul class="pagination">';
|
||||||
|
# Генерируем ссылки
|
||||||
|
for ($page = $limits[0]; $page <= $limits[1]; $page++) {
|
||||||
|
# Если текущая это текущая страница, ссылки нет и добавляется класс active
|
||||||
|
if ($page == $this->current_page) {
|
||||||
|
$links .= '<li class="active"><a href="#">' . $page . '</a></li>';
|
||||||
|
} else {
|
||||||
|
# Иначе генерируем ссылку
|
||||||
|
$links .= $this->generateHtml($page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Если ссылки создались
|
||||||
|
if (!is_null($links)) {
|
||||||
|
# Если текущая страница не первая
|
||||||
|
if ($this->current_page > 1)
|
||||||
|
# Создаём ссылку "На первую"
|
||||||
|
$links = $this->generateHtml(1, '<') . $links;
|
||||||
|
|
||||||
|
# Если текущая страница не первая
|
||||||
|
if ($this->current_page < $this->amount)
|
||||||
|
# Создаём ссылку "На последнюю"
|
||||||
|
$links .= $this->generateHtml($this->amount, '>');
|
||||||
|
}
|
||||||
|
|
||||||
|
$html .= $links . '</ul>';
|
||||||
|
|
||||||
|
# Возвращаем html
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Для генерации HTML-кода ссылки
|
||||||
|
* @param integer $page - номер страницы
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private function generateHtml($page, $text = null)
|
||||||
|
{
|
||||||
|
# Если текст ссылки не указан
|
||||||
|
if (!$text)
|
||||||
|
# Указываем, что текст - цифра страницы
|
||||||
|
$text = $page;
|
||||||
|
|
||||||
|
$currentURI = rtrim($_SERVER['REQUEST_URI'], '/') . '/';
|
||||||
|
$currentURI = preg_replace('~/page-[0-9]+~', '', $currentURI);
|
||||||
|
# Формируем HTML код ссылки и возвращаем
|
||||||
|
return
|
||||||
|
'<li><a href="' . $currentURI . $this->index . $page . '">' . $text . '</a></li>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Для получения, откуда стартовать
|
||||||
|
*
|
||||||
|
* @return массив с началом и концом отсчёта
|
||||||
|
*/
|
||||||
|
private function limits()
|
||||||
|
{
|
||||||
|
# Вычисляем ссылки слева (чтобы активная ссылка была посередине)
|
||||||
|
$left = $this->current_page - round($this->max / 2);
|
||||||
|
|
||||||
|
# Вычисляем начало отсчёта
|
||||||
|
$start = $left > 0 ? $left : 1;
|
||||||
|
|
||||||
|
# Если впереди есть как минимум $this->max страниц
|
||||||
|
if ($start + $this->max <= $this->amount)
|
||||||
|
# Назначаем конец цикла вперёд на $this->max страниц или просто на минимум
|
||||||
|
$end = $start > 1 ? $start + $this->max : $this->max;
|
||||||
|
else {
|
||||||
|
# Конец - общее количество страниц
|
||||||
|
$end = $this->amount;
|
||||||
|
|
||||||
|
# Начало - минус $this->max от конца
|
||||||
|
$start = $this->amount - $this->max > 0 ? $this->amount - $this->max : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Возвращаем
|
||||||
|
return
|
||||||
|
array($start, $end);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Для установки текущей страницы
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private function setCurrentPage($currentPage)
|
||||||
|
{
|
||||||
|
# Получаем номер страницы
|
||||||
|
$this->current_page = $currentPage;
|
||||||
|
|
||||||
|
# Если текущая страница боле нуля
|
||||||
|
if ($this->current_page > 0) {
|
||||||
|
# Если текунщая страница меньше общего количества страниц
|
||||||
|
if ($this->current_page > $this->amount)
|
||||||
|
# Устанавливаем страницу на последнюю
|
||||||
|
$this->current_page = $this->amount;
|
||||||
|
} else
|
||||||
|
# Устанавливаем страницу на первую
|
||||||
|
$this->current_page = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Для получеия общего числа страниц
|
||||||
|
*
|
||||||
|
* @return число страниц
|
||||||
|
*/
|
||||||
|
private function amount()
|
||||||
|
{
|
||||||
|
# Делим и возвращаем
|
||||||
|
return round($this->total / $this->limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Router{
|
||||||
|
|
||||||
|
private $routes;
|
||||||
|
|
||||||
|
public function __construct(){
|
||||||
|
$routerPath = ROOT.'/config/routes.php';
|
||||||
|
$this->routes = require($routerPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* return request string
|
||||||
|
*/
|
||||||
|
private function getURI(){
|
||||||
|
if(!empty($_SERVER['REQUEST_URI'])){
|
||||||
|
return trim($_SERVER['REQUEST_URI'], '/');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function run(){
|
||||||
|
//получить строку запроса
|
||||||
|
$uri = $this->getURI();
|
||||||
|
|
||||||
|
//проверить наличие запроса в routes.php
|
||||||
|
|
||||||
|
foreach($this->routes as $uriPattern => $path){
|
||||||
|
|
||||||
|
//сравниваем $urlPattern и $url
|
||||||
|
if(preg_match("~$uriPattern~", $uri)){
|
||||||
|
|
||||||
|
//получаем внутренний путь из внешнего согласно правилу
|
||||||
|
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
|
||||||
|
|
||||||
|
//определить контлоллер, экшен и параметры
|
||||||
|
$segments = explode('/', $internalRoute);
|
||||||
|
|
||||||
|
$controllerName = array_shift($segments).'Controller';
|
||||||
|
$controllerName = ucfirst($controllerName);
|
||||||
|
|
||||||
|
$actionName = 'action'.ucfirst(array_shift($segments));
|
||||||
|
|
||||||
|
$parameters = $segments;
|
||||||
|
|
||||||
|
//подключить файл класса контроллера
|
||||||
|
|
||||||
|
$controllerFile = ROOT.'/controllers/'.$controllerName.'.php';
|
||||||
|
|
||||||
|
if(file_exists($controllerFile)){
|
||||||
|
include_once ($controllerFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
$controllerObject = new $controllerName;
|
||||||
|
|
||||||
|
if(!method_exists($controllerObject,$actionName)) {
|
||||||
|
$er = $uri;
|
||||||
|
require_once (ROOT . TMPL . 'error.php');
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
$result = call_user_func_array(array($controllerObject, $actionName),$parameters);
|
||||||
|
|
||||||
|
if($result != null){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
return array(
|
||||||
|
|
||||||
|
'name'=>'Unit',
|
||||||
|
'email_support'=>'support@unit-org.ru', //support@unit-org.ru
|
||||||
|
'number'=>'8800'
|
||||||
|
);
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: andrey
|
||||||
|
* Date: 14.04.16
|
||||||
|
* Time: 18:57
|
||||||
|
*/
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'host' => 'localhost',
|
||||||
|
'dbname' => 'db_prints',
|
||||||
|
'user' => 'mysql',
|
||||||
|
'password' => 'mysql',
|
||||||
|
);
|
||||||
|
|
||||||
|
// $db->exec('SET NAMES utf8'); //задаём кодировку ввода/вывода БД*/
|
||||||
|
?>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
return array(
|
||||||
|
'icecast_host' => 'dsk7681',
|
||||||
|
'icecast_ip' => '10.20.4.219',
|
||||||
|
'icecast_port' => '8000',
|
||||||
|
);
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'ldap_host' => 'LDAP_B7.RCCF.RU', //, LDAP_M1.RCCF.RU',
|
||||||
|
'ldap_port' => '389',
|
||||||
|
'ldap_base' => 'OU=Accounts, DC=rccf, DC=ru',
|
||||||
|
'ldap_filter' => 'sAMAccountName=',
|
||||||
|
'ldap_domain' => '@rccf.ru',
|
||||||
|
);
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: Andrey
|
||||||
|
* Date: 01.04.2016
|
||||||
|
* Time: 18:04
|
||||||
|
*/
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'imgupload' => 'images/upload',
|
||||||
|
'user/login' => 'user/login',
|
||||||
|
'user/logout' => 'user/logout',
|
||||||
|
'printers' => 'printers/index',
|
||||||
|
'printer/add' => 'printers/add',
|
||||||
|
'printer/([0-9]+)' => 'printers/view/$1',
|
||||||
|
'printer/edit/([0-9]+)' => 'printers/edit/$1',
|
||||||
|
'cartriges/action' => 'cartriges/actions',
|
||||||
|
'cartriges/orders' => 'cartriges/orders',
|
||||||
|
'cartriges/reaction/([0-9]+)' => 'cartriges/reaction/$1',
|
||||||
|
'cartriges/add/public/([0-9]+)' => 'cartriges/public/$1',
|
||||||
|
'cartriges/add' => 'cartriges/add',
|
||||||
|
'cartriges/Zeroning' => 'cartriges/Zeroning',
|
||||||
|
'cartriges' => 'cartriges/index',
|
||||||
|
'phonebook/admactiv/([0-9]+)' => 'phonebook/activ/$1',
|
||||||
|
'phonebook/admsearch' => 'phonebook/admsearch',
|
||||||
|
'phonebook/admedit' => 'phonebook/edit',
|
||||||
|
'phonebook/admedit/([0-9]+)' => 'phonebook/edit/$1',
|
||||||
|
'phonebook/admdelete/([0-9]+)' => 'phonebook/delete/$1',
|
||||||
|
'phonebook/save' => 'phonebook/save',
|
||||||
|
'phonebook/update' => 'phonebook/update',
|
||||||
|
'phonebook/search' => 'phonebook/search',
|
||||||
|
'phonebook' => 'phonebook/index',
|
||||||
|
'unit/newactionrequest' => 'unit/newactionrequest',
|
||||||
|
'unit/actionrequest/([0-9]+)' => 'unit/actionrequest/$1',
|
||||||
|
'unit/actionrequest' => 'unit/actionrequest',
|
||||||
|
'unit/createrequest' => 'unit/createrequest',
|
||||||
|
'unit/requesttobase' => 'unit/requesttobase',
|
||||||
|
'unit/requests/page-([0-9]+)' => 'unit/index/$1',
|
||||||
|
'unit/requests' => 'unit/index',
|
||||||
|
'unit' => 'unit/index',
|
||||||
|
|
||||||
|
|
||||||
|
//'radio/statistics/([=0-9]+)' => 'radio/statistics',
|
||||||
|
//'radio/statistics/?_=([0-9]+)' => 'radio/statistics',
|
||||||
|
'radio/statistics' => 'radio/statistics',
|
||||||
|
'radio' => 'radio/index',
|
||||||
|
|
||||||
|
'' => 'site/index',
|
||||||
|
/*'product/([0-9]+)' => 'product/view/$1',
|
||||||
|
'catalog' => 'catalog/index',
|
||||||
|
'category/([0-9]+)/page-([0-9]+)' => 'catalog/category/$1/$2',
|
||||||
|
'category/([0-9]+)' => 'catalog/category/$1',
|
||||||
|
'cart/add/([0-9]+)' => 'cart/add/$1',
|
||||||
|
'cart/addAjax/([0-9]+)' => 'cart/addAjax/$1',
|
||||||
|
'cart' => 'cart/index',
|
||||||
|
'user/register' => 'user/register',
|
||||||
|
'user/login' => 'user/login',
|
||||||
|
'user/logout' => 'user/logout',
|
||||||
|
'cabinet/edit' => 'cabinet/edit',
|
||||||
|
'cabinet' => 'cabinet/index',
|
||||||
|
'contacts' => 'site/contact',
|
||||||
|
|
||||||
|
'news/([0-9]*)' => 'news/view',
|
||||||
|
'news' => 'news/index',
|
||||||
|
'articles' => 'articles/list',
|
||||||
|
'news/archive' => 'news/archive',
|
||||||
|
|
||||||
|
* 'news/([0-9]+)' => 'news/view/$1',
|
||||||
|
'news' => 'news/index', */
|
||||||
|
);
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of cartriges
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class CartrigesController {
|
||||||
|
//put your code here
|
||||||
|
public static $title = " Картриджи";
|
||||||
|
|
||||||
|
public function actionIndex(){ //главная страница раздела картриджей
|
||||||
|
|
||||||
|
$title = self::$title;
|
||||||
|
|
||||||
|
$summ_cart = Cartriges::getSumAllCarteiges();
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
|
||||||
|
$messages = Cartriges::ActionCartriges($_POST, $_SESSION);
|
||||||
|
/*echo "<pre>";
|
||||||
|
print_r ($_POST);
|
||||||
|
print_r ($_SESSION['user_id']);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once (ROOT . TMPL . 'cartriges.php');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionActions(){ //действия с картриджами (доставка\замена)
|
||||||
|
|
||||||
|
if(!isset($_POST['submit'])) @$_SESSION['link'] = $_SERVER['HTTP_REFERER'];
|
||||||
|
|
||||||
|
$act_error = 0;
|
||||||
|
|
||||||
|
$action = $_GET['act'];
|
||||||
|
|
||||||
|
if(empty($action)) $act_error = 1;
|
||||||
|
|
||||||
|
$title = self::$title."| Действия";
|
||||||
|
|
||||||
|
//echo "hello user ".$action."-action";
|
||||||
|
|
||||||
|
$cartriges = Cartriges::getActivCartriges();
|
||||||
|
require_once (ROOT . TMPL . 'action_cartriges.php');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function actionAdd(){ //добавление картриджа
|
||||||
|
|
||||||
|
$title = self::$title."| Добавление";
|
||||||
|
|
||||||
|
|
||||||
|
if(isset($_POST['addcartrige'])){
|
||||||
|
|
||||||
|
echo "get add new cartrige in base";
|
||||||
|
(!Cartriges::addCartriges($_POST)) ? $messages = "Картридж добавлен" : $messages = "error";
|
||||||
|
$cartriges = Cartriges::getAllCartriges();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$cartriges = Cartriges::getAllCartriges();
|
||||||
|
}
|
||||||
|
$cartrridges_history = Cartriges::getHistoryCartridges(9);
|
||||||
|
require_once (ROOT . TMPL . 'addcartrige.php');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionPublic($id){
|
||||||
|
|
||||||
|
//self::checkAdmin();
|
||||||
|
|
||||||
|
$pub = Cartriges::changeIsPublic($id);
|
||||||
|
//var_dump($_SESSION);
|
||||||
|
//var_dump($_POST);
|
||||||
|
//var_dump($_FILES);
|
||||||
|
//var_dump($id);
|
||||||
|
if($pub){
|
||||||
|
header ('Location: '.DOMEN .'/cartriges/add');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static function actionReaction($id){ //активация\деактивация картриджа
|
||||||
|
|
||||||
|
Cartriges::reactivCartriges($id);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function actionOrders(){ //заказ картриджей
|
||||||
|
|
||||||
|
$title = self::$title."| Заказ";
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
$summ_cart = Cartriges::getSumAllCarteiges();
|
||||||
|
$cartriges = Cartriges::getActivCartriges();
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
//show and running code for order
|
||||||
|
$list = Cartriges::orderCartriges($_POST);
|
||||||
|
$data_ord = json_encode($_POST);
|
||||||
|
/*$from = array(
|
||||||
|
'name'=>''.$_SESSION["full_name"].'',
|
||||||
|
'email'=>''.$_SESSION["mail"].'',
|
||||||
|
);*/
|
||||||
|
$a = Mail::getLinkOrd($list);
|
||||||
|
//echo $a;
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($_SESSION);
|
||||||
|
echo "</pre>";*/
|
||||||
|
}
|
||||||
|
$save = filter_input(INPUT_POST, 'save_order');
|
||||||
|
if(isset($save)){
|
||||||
|
$data = json_decode(filter_input(INPUT_POST, 'data'), true);
|
||||||
|
|
||||||
|
$saving = Unit::saveOrder($_SESSION["user_id"], $data);//добавить в базу заявок
|
||||||
|
//var_dump($create_action);
|
||||||
|
if(!$saving){
|
||||||
|
$message = "error";
|
||||||
|
}else {
|
||||||
|
$message = "ok";
|
||||||
|
//header("Location: ".$_SERVER['HTTP_REFERER']."");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$access = "Ошибка доступа";
|
||||||
|
}
|
||||||
|
require_once (ROOT . TMPL . 'cartriges_order.php');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function actionZeroning(){
|
||||||
|
Cartriges::resetToZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of ImagesController
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class ImagesController {
|
||||||
|
//put your code here
|
||||||
|
public function actionUpload(){
|
||||||
|
|
||||||
|
$_SESSION['link'] = $_SERVER['HTTP_REFERER'];
|
||||||
|
|
||||||
|
if(isset($_POST['upload'])) {
|
||||||
|
$id_prn = $_POST['print_id'];
|
||||||
|
if(!Images::checkAndDeleteImg($id_prn)) echo "Ошибка загрузки изображения";// проверка наличия изображения у принтера и удаление из файловой системы
|
||||||
|
else{
|
||||||
|
$link_img = Images::uploadImg($_POST);
|
||||||
|
|
||||||
|
if($link_img == "Error upload image") echo "Ошибка загрузки изображения";
|
||||||
|
else{
|
||||||
|
if(!Images::updatePrintImg($id_prn, $link_img)) echo "Ошибка загрузки изображения";
|
||||||
|
else header("Location: ".$_SESSION['link']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
echo "<pre>";
|
||||||
|
var_dump($_SESSION);
|
||||||
|
echo "<br />----------------------<br />";
|
||||||
|
var_dump($_POST);
|
||||||
|
echo "<br />----------------------<br />";
|
||||||
|
var_dump($_FILES);
|
||||||
|
echo "</pre>";
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* array(13) {
|
||||||
|
["link"]=>
|
||||||
|
string(35) "http://prints.local/printer/edit/49"
|
||||||
|
["user_id"]=>
|
||||||
|
string(12) "azashchepkin"
|
||||||
|
["name_en"]=>
|
||||||
|
string(19) "Zashchepkin, Andrey"
|
||||||
|
["name"]=>
|
||||||
|
string(16) "Защепкин"
|
||||||
|
["surname"]=>
|
||||||
|
string(12) "Андрей"
|
||||||
|
["middle_name"]=>
|
||||||
|
string(26) "Александрович"
|
||||||
|
["full_name"]=>
|
||||||
|
string(56) "Защепкин Андрей Александрович"
|
||||||
|
["city"]=>
|
||||||
|
string(10) "Курск"
|
||||||
|
["position"]=>
|
||||||
|
string(62) "Специалист технической поддержки"
|
||||||
|
["department"]=>
|
||||||
|
string(60) "Отдел информационных технологий"
|
||||||
|
["mail"]=>
|
||||||
|
string(25) "azashchepkin@rencredit.ru"
|
||||||
|
["phone"]=>
|
||||||
|
string(5) "15000"
|
||||||
|
["georol"]=>
|
||||||
|
string(16) "GR.RC.Курск"
|
||||||
|
}
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
array(2) {
|
||||||
|
["print_id"]=>
|
||||||
|
string(2) "49"
|
||||||
|
["upload"]=>
|
||||||
|
string(0) ""
|
||||||
|
}
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
array(1) {
|
||||||
|
["img"]=>
|
||||||
|
array(5) {
|
||||||
|
["name"]=>
|
||||||
|
string(13) "error wfm.png"
|
||||||
|
["type"]=>
|
||||||
|
string(9) "image/png"
|
||||||
|
["tmp_name"]=>
|
||||||
|
string(39) "C:\OpenServer\userdata\temp\php5D63.tmp"
|
||||||
|
["error"]=>
|
||||||
|
int(0)
|
||||||
|
["size"]=>
|
||||||
|
int(50663)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class PhonebookController{
|
||||||
|
|
||||||
|
public static $title = " Телефонный справочник";
|
||||||
|
|
||||||
|
public function actionIndex(){
|
||||||
|
|
||||||
|
$title = self::$title;
|
||||||
|
|
||||||
|
$list = Phonebook::gelAllPhoneList();
|
||||||
|
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($list);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'phonebook.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionSearch(){
|
||||||
|
|
||||||
|
$title = self::$title . " | Поиск";
|
||||||
|
|
||||||
|
if(!empty($_POST)){
|
||||||
|
$searching = $_POST['searching'];
|
||||||
|
}
|
||||||
|
if(!empty($searching)){
|
||||||
|
$value = Phonebook::gerResultSearch($searching);
|
||||||
|
}
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($list);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'phonebook_search.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionSave(){
|
||||||
|
|
||||||
|
Phonebook::getExcelList();
|
||||||
|
|
||||||
|
header("Location: ".$_SERVER['HTTP_REFERER']."");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionUpdate(){
|
||||||
|
|
||||||
|
$data = $_POST;
|
||||||
|
|
||||||
|
$upd = Phonebook::save($data);
|
||||||
|
if(!empty($upd) || isset($upd['save'])){
|
||||||
|
|
||||||
|
if($upd){
|
||||||
|
header("Location: ".$_SERVER['HTTP_REFERER']."");
|
||||||
|
}else return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionAdmsearch(){
|
||||||
|
|
||||||
|
$title = self::$title . " | Поиск adm";
|
||||||
|
|
||||||
|
$error = false;
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
|
||||||
|
if(isset($_POST['submit']) || !empty($_POST['searching'])){
|
||||||
|
$searching = $_POST['searching'];
|
||||||
|
$list = Phonebook::gerResultSearch($searching, 1);
|
||||||
|
}else{
|
||||||
|
$list = Phonebook::gelAllPhoneList(0);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$error = "access denied";
|
||||||
|
}
|
||||||
|
|
||||||
|
$subardination = Phonebook::getSubordination();
|
||||||
|
$parents = Phonebook::getParents();
|
||||||
|
$departments = Phonebook::getDepatmnents();
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'phonebook_admsearch.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionActiv($id){
|
||||||
|
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
$pub = Phonebook::changeIsActiv($id);
|
||||||
|
//var_dump($_SESSION);
|
||||||
|
//var_dump($_POST);
|
||||||
|
//var_dump($_FILES);
|
||||||
|
//var_dump($id);
|
||||||
|
if($pub){
|
||||||
|
header ('Location: http://'.DOMEN .'/phonebook/admsearch');
|
||||||
|
}
|
||||||
|
}else $error = "access denied";
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'phonebook_admsearch.php');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionAdd(){
|
||||||
|
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
|
||||||
|
}else{
|
||||||
|
$error = "access denied";
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'phonebook_add.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionEdit($id){
|
||||||
|
|
||||||
|
$title = self::$title . " | Редактирование";
|
||||||
|
$message = false;
|
||||||
|
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
if(isset($_POST['save'])){
|
||||||
|
$update = Phonebook::save($_POST);
|
||||||
|
(!$update) ? $message = "Error" : $message = "Good";
|
||||||
|
}
|
||||||
|
$info = Phonebook::getElementByID($id);
|
||||||
|
$subardination = Phonebook::getSubordination();
|
||||||
|
$parents = Phonebook::getParents();
|
||||||
|
$departments = Phonebook::getDepatmnents();
|
||||||
|
}else{
|
||||||
|
$error = "access denied";
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'phonebook_edit.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionDelete($id){
|
||||||
|
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
|
||||||
|
}else{
|
||||||
|
$error = "access denied";
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'phonebook_del.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created on 03.10.2016
|
||||||
|
* By NetBeans IDE 8.1
|
||||||
|
* Author: Andrey Zashchepkin
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* ******** Contacts:*********
|
||||||
|
* my e-mails - yaslonane@yandex.ru
|
||||||
|
* - andrey@zashchepkin.ru
|
||||||
|
* - info@zashchepkin.ru
|
||||||
|
* my site zashchepkin.ru
|
||||||
|
* ******** end contacts *********
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Copyright zashchepkin.ru © 2016. All Rights Reserved.
|
||||||
|
* License https://opensource.org/licenses/mit-license.php MIT License (MIT)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Description of PrintersController
|
||||||
|
*
|
||||||
|
* @author andrey
|
||||||
|
* */
|
||||||
|
class PrintersController {
|
||||||
|
//put your code here
|
||||||
|
|
||||||
|
public static $title = " Принтеры";
|
||||||
|
|
||||||
|
public function actionIndex(){
|
||||||
|
|
||||||
|
$title = self::$title;
|
||||||
|
|
||||||
|
$printList = Printer::getListPrinters();
|
||||||
|
|
||||||
|
if($printList == 0) $error = 1;
|
||||||
|
|
||||||
|
$floor = Printer::getAllFloors();
|
||||||
|
$department = Printer::getAllDepartments();
|
||||||
|
$cartrige = Printer::getAllCartriges();
|
||||||
|
$status = Printer::getAllStatuses();
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'printers.php');
|
||||||
|
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($status);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function actionAdd(){
|
||||||
|
|
||||||
|
$title = self::$title;
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
|
||||||
|
//echo "save!!!";
|
||||||
|
|
||||||
|
//insert in base new printer and geting her id
|
||||||
|
//forvard in page edit/[id]
|
||||||
|
$id = Printer::insertPrint($_POST, true);
|
||||||
|
//echo $id;
|
||||||
|
header("Location: /printer/edit/".$id);
|
||||||
|
/*$upbd = printer::updatePrint($print['id'], $_POST);
|
||||||
|
|
||||||
|
$save = Printer::setHistoryChange($up, $print['id'], $_SESSION['user_id']);
|
||||||
|
if(!$upbd) $_SESSION['message'] = "Error";
|
||||||
|
else $_SESSION['message'] = "good";*/
|
||||||
|
}else{
|
||||||
|
$title = self::$title." | Добавление";
|
||||||
|
|
||||||
|
//$printList = Printer::getListPrinters();
|
||||||
|
|
||||||
|
//if($printList == 0) $error = 1;
|
||||||
|
|
||||||
|
$floor = Printer::getAllFloors();
|
||||||
|
$department = Printer::getAllDepartments();
|
||||||
|
$cartrige = Printer::getAllCartriges();
|
||||||
|
$status = Printer::getAllStatuses();
|
||||||
|
$functions = Printer::getAllFunctions();
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'add_prn.php');
|
||||||
|
|
||||||
|
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($status);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function actionView($id){
|
||||||
|
|
||||||
|
$print = Printer::getPrintByID($id);
|
||||||
|
|
||||||
|
$title = self::$title." | ".$print['name'];
|
||||||
|
|
||||||
|
$history = Printer::getHistoryChangeByID($id);
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'info.php');
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($histiry);
|
||||||
|
echo "</pre>";*/
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function actionEdit($id){
|
||||||
|
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
$floor = Printer::getAllFloors();
|
||||||
|
$department = Printer::getAllDepartments();
|
||||||
|
$cartrige = Printer::getAllCartriges();
|
||||||
|
$status = Printer::getAllStatuses();
|
||||||
|
$functions = Printer::getAllFunctions();
|
||||||
|
$print = Printer::getPrintByIDFullData($id);
|
||||||
|
|
||||||
|
$title = self::$title." | Редактирование | ".$print['name'];
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($print);
|
||||||
|
echo "</pre>";
|
||||||
|
echo "kek";
|
||||||
|
echo "<pre>";
|
||||||
|
var_dump($_POST);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
$up = printer::checkDataUpdatePrint($print, $_POST);
|
||||||
|
|
||||||
|
$upbd = printer::updatePrint($print['id'], $_POST);
|
||||||
|
|
||||||
|
$save = Printer::setHistoryChange($up, $print['id'], $_SESSION['user_id']);
|
||||||
|
if(!$upbd) $_SESSION['message'] = "Error";
|
||||||
|
else $_SESSION['message'] = "good";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if(isset($_POST['submitimg'])){
|
||||||
|
echo "<pre>";
|
||||||
|
var_dump($_SESSION);
|
||||||
|
echo "<br />----------------------<br />";
|
||||||
|
var_dump($_POST);
|
||||||
|
echo "</pre>";
|
||||||
|
}*/
|
||||||
|
$print = Printer::getPrintByIDFullData($id);
|
||||||
|
}else{
|
||||||
|
$access = "Ошибка доступа";
|
||||||
|
}
|
||||||
|
require_once (ROOT. TMPL. 'edit_print.php');
|
||||||
|
|
||||||
|
unset($_SESSION['message']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of RadioController
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class RadioController {
|
||||||
|
//put your code here
|
||||||
|
public static $title = " Радио";
|
||||||
|
|
||||||
|
public function actionIndex(){ //главная страница раздела картриджей
|
||||||
|
|
||||||
|
$title = self::$title;
|
||||||
|
|
||||||
|
$radioList = Radio::radioList();
|
||||||
|
$statistic = Radio::getStatistic();
|
||||||
|
|
||||||
|
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($statistic);
|
||||||
|
echo "</pre>";*/
|
||||||
|
//echo $this->host_ice .":". $this->port_ice;
|
||||||
|
|
||||||
|
require_once (ROOT . TMPL . 'radio.php');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionStatistics(){
|
||||||
|
|
||||||
|
$statistic = Radio::getStatistic();
|
||||||
|
$string = "<table class='table'>
|
||||||
|
<tr>
|
||||||
|
<th>Название</th>
|
||||||
|
<th> Слушать </td>
|
||||||
|
<th>Слушателей<br>сейчас</th>
|
||||||
|
<th>Композиция</th>
|
||||||
|
</tr>";
|
||||||
|
for($i=0; count($statistic)>$i; $i++){
|
||||||
|
$string .= "<tr>";
|
||||||
|
$string .= "<td>".$statistic[$i]['stream']."</td>";
|
||||||
|
$string .="<td><a target=_blanc href='http://dsk7681:8000".$statistic[$i]['stream'].".m3u'><img border='0' width='24' src='http://dsk7681/frame/images/radio1.gif'></a></td>";
|
||||||
|
$string .="<td>".$statistic[$i]['quantity_listens']."</td>";
|
||||||
|
$string .="<td>".$statistic[$i]['title']."</td>";
|
||||||
|
$string .="</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$string .="</table>";
|
||||||
|
echo $string;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SiteController{
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* вывод главной страницы
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static $title = " Главная";
|
||||||
|
|
||||||
|
public function actionIndex(){
|
||||||
|
|
||||||
|
//$categories = array(); //инициализируем переменную для вывода списка категорий
|
||||||
|
//$categories = Category::getCategoriesList(); // вызываем метод получения массива категорий из модели категории
|
||||||
|
/* выводим дерево категорий
|
||||||
|
$x = new Category(); // вызываем класс
|
||||||
|
$a = $x->treeCategory(); // выбираем из базы список категорий и подкатегорий
|
||||||
|
$categories2 = category::create_tree($a, 0); // вызываем функцию и строим дерево
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
//$latestProduct = array();
|
||||||
|
//$latestProduct = Product::getLatestProducts();
|
||||||
|
$title = self::$title;
|
||||||
|
|
||||||
|
$summ_cart = Cartriges::getSumAllCarteiges();
|
||||||
|
|
||||||
|
$printList = Printer::getRandPrint(3);
|
||||||
|
|
||||||
|
require_once(ROOT . TMPL .'index.php');
|
||||||
|
/*echo "Home<br>";
|
||||||
|
|
||||||
|
if(user::checkAuth() == false){
|
||||||
|
echo "Авторизуйтесь!!!";
|
||||||
|
}else{
|
||||||
|
echo "<img src='https://intranet.rencredit.ru/my/User%20Photos/Profile%20Pictures/".$_SESSION['user_id']."_LThumb.jpg' class='img-circle'/>";
|
||||||
|
|
||||||
|
|
||||||
|
echo "<pre>";
|
||||||
|
var_dump($_SESSION);
|
||||||
|
echo "</pre>";
|
||||||
|
echo "<a href='/user/logout'>Exit</a>";
|
||||||
|
}*/
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionContact(){
|
||||||
|
|
||||||
|
$userEmail = '';
|
||||||
|
$userText = '';
|
||||||
|
$result = false;
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
|
||||||
|
$userEmail = $_POST['userEmail'];
|
||||||
|
$userText = $_POST['userText'];
|
||||||
|
|
||||||
|
$errors = false;
|
||||||
|
|
||||||
|
if(!user::checkEmail($userEmail)){
|
||||||
|
$errors[] = 'Not valid E-mail';
|
||||||
|
}
|
||||||
|
|
||||||
|
if($errors == false){
|
||||||
|
$adminEmail = 'yaslonane@yandex.ru';
|
||||||
|
$message = "Текст: {$userText}. От {$userEmail}";
|
||||||
|
$subject = 'subject mail TEST';
|
||||||
|
$result = mail($adminEmail, $subject, $message, "From: System message from zaa46.xyz <info@zaa46.xyz>"); /* {$userEmail} */
|
||||||
|
$result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require (ROOT . TMPL . 'contact.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* конец вывода главной страницы
|
||||||
|
*/
|
||||||
|
}
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of UnitController
|
||||||
|
*
|
||||||
|
* @author adm_azashchepkin
|
||||||
|
*/
|
||||||
|
class UnitController {
|
||||||
|
//put your code here
|
||||||
|
public static $title = " Unit";
|
||||||
|
|
||||||
|
public function actionIndex($page = 1){
|
||||||
|
|
||||||
|
$title = self::$title . " | Список обращений";
|
||||||
|
|
||||||
|
$requests = Unit::getRequests($page);
|
||||||
|
$total = Unit::getTotalRequests();
|
||||||
|
|
||||||
|
$pagination = new Pagination($total, $page, Product::SHOW_BY_DEFAULT, 'page-');
|
||||||
|
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($requests);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'requests.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionCreaterequest(){
|
||||||
|
|
||||||
|
$title = self::$title . " | Создание запроса";
|
||||||
|
|
||||||
|
$error = false;
|
||||||
|
$message = false;
|
||||||
|
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
|
||||||
|
$printers = Printer::getListPrinters('all');
|
||||||
|
$create = filter_input(INPUT_POST,'create');
|
||||||
|
if(isset($create)){
|
||||||
|
$user_id = filter_input(INPUT_POST,'username');
|
||||||
|
$print_id = filter_input(INPUT_POST,'print_id');
|
||||||
|
$description = filter_input(INPUT_POST,'text');
|
||||||
|
|
||||||
|
$lnk = Mail::getRequests($print_id, $description);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
$save = filter_input(INPUT_POST, 'save_request');
|
||||||
|
if(isset($save)){
|
||||||
|
$user = filter_input(INPUT_POST,'user_id');
|
||||||
|
$print = filter_input(INPUT_POST,'print_id');
|
||||||
|
$desc = filter_input(INPUT_POST,'description');
|
||||||
|
$saving = Unit::setRequest($user, $print, $desc);//добавить в базу заявок
|
||||||
|
$create_action = Unit::createNewAction($saving, 0, $user);
|
||||||
|
//var_dump($create_action);
|
||||||
|
if(!$saving){
|
||||||
|
$message = "error";
|
||||||
|
}else {
|
||||||
|
$message = "ok";
|
||||||
|
//header("Location: ".$_SERVER['HTTP_REFERER']."");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$error = "access denied";
|
||||||
|
}
|
||||||
|
require_once (ROOT. TMPL. 'create_request.php');
|
||||||
|
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($status);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionRequesttobase(){
|
||||||
|
//$printers = Printer::getListPrinters('all');
|
||||||
|
$save = filter_input(INPUT_POST, 'save_request');
|
||||||
|
if(isset($save)){
|
||||||
|
$user_id = filter_input(INPUT_POST,'user_id');
|
||||||
|
$print_id = filter_input(INPUT_POST,'print_id');
|
||||||
|
$description = filter_input(INPUT_POST,'description');
|
||||||
|
$saving = Unit::setRequest($user_id, $print_id, $description);//добавить в базу заявок
|
||||||
|
if(!$saving){
|
||||||
|
$message = "error";
|
||||||
|
}else {
|
||||||
|
$message = "ok";
|
||||||
|
header("Location: ".$_SERVER['HTTP_REFERER']."");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo $message;
|
||||||
|
return true;
|
||||||
|
/*echo "<pre>";
|
||||||
|
var_dump($status);
|
||||||
|
echo "</pre>";*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionActionrequest($id = NULL){
|
||||||
|
$title = self::$title . " | Действия по обращению";
|
||||||
|
$error = "";
|
||||||
|
if(user::checkAdmin() == true){
|
||||||
|
//action if authorization is successful
|
||||||
|
if($id === NULL){
|
||||||
|
header("Location: http://".DOMEN."/unit/requests");
|
||||||
|
}else{
|
||||||
|
$list = Unit::getRequestByID($id);
|
||||||
|
$act = Unit::getAllActionByIDRequest($id);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$error = "access denied";
|
||||||
|
}
|
||||||
|
//require_once (ROOT. TMPL. 'create_request.php');
|
||||||
|
require_once (ROOT. TMPL. 'action_request.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionNewactionrequest(){
|
||||||
|
|
||||||
|
$act = Unit::setNewActions();
|
||||||
|
|
||||||
|
$docs = filter_input(INPUT_POST, 'docs');
|
||||||
|
$request_id = filter_input(INPUT_POST, 'request_id');
|
||||||
|
|
||||||
|
$indoc = Unit::setNewDocs($act, $request_id, $docs);
|
||||||
|
|
||||||
|
if($indoc == true) header("Location: http://".DOMEN."/unit/actionrequest/".$request_id."");
|
||||||
|
|
||||||
|
//return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of UserController
|
||||||
|
*
|
||||||
|
* @author andrey
|
||||||
|
*/
|
||||||
|
class UserController {
|
||||||
|
//put your code here
|
||||||
|
|
||||||
|
//public static function actionIndex{
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
/* public function actionRegister(){
|
||||||
|
|
||||||
|
$name = '';
|
||||||
|
$email = '';
|
||||||
|
$password = '';
|
||||||
|
$result = false;
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
|
||||||
|
$name = $_POST['name'];
|
||||||
|
$email = $_POST['email'];
|
||||||
|
$password = $_POST['password'];
|
||||||
|
|
||||||
|
$errors = false;
|
||||||
|
|
||||||
|
if(!user::checkName($name)){
|
||||||
|
$errors[] = 'Warning!!! It\'s name short 2 elements';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!User::checkPassword($password)){
|
||||||
|
$errors[] = 'Warning!!! It\'s password short 6 elements';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!User::checkEmail($email)){
|
||||||
|
$errors[] = 'Warning!!! It\'s e-mail dont valid';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(user::checkEmailExists($email)){
|
||||||
|
$errors[] = 'Sorry, this is e-mail is using';
|
||||||
|
}
|
||||||
|
|
||||||
|
if($errors == false){
|
||||||
|
$result = (user::register($name, $password, $email));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
require_once (ROOT. TMPL. 'register.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public function actionLogin(){
|
||||||
|
if(!isset($_POST['submit'])) $_SESSION['link'] = $_SERVER['HTTP_REFERER'];
|
||||||
|
$username = '';
|
||||||
|
$password = '';
|
||||||
|
|
||||||
|
$errors = false;
|
||||||
|
|
||||||
|
if(isset($_POST['submit'])){
|
||||||
|
$username = $_POST['login'];
|
||||||
|
$password = $_POST['password'];
|
||||||
|
|
||||||
|
$errors = false;
|
||||||
|
|
||||||
|
$auth = Ldap::LdapAuth($username, $password);
|
||||||
|
header("location: ".$_SESSION['link']."");
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once (ROOT . TMPL . 'login.php');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function actionLogout(){
|
||||||
|
|
||||||
|
@session_start();
|
||||||
|
unset($_SESSION['user_id']);
|
||||||
|
unset($_SESSION['name']);
|
||||||
|
header("Location: ".$_SERVER['HTTP_REFERER']."");
|
||||||
|
session_destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<IfModule mod_php4.c>
|
||||||
|
php_flag engine Off
|
||||||
|
</IfModule>
|
||||||
|
<IfModule mod_php5.c>
|
||||||
|
php_flag engine Off
|
||||||
|
</IfModule>
|
||||||
|
<IfModule mod_php6.c>
|
||||||
|
php_flag engine Off
|
||||||
|
</IfModule>
|
||||||
|
<IfModule mod_cgi.c>
|
||||||
|
Options -ExecCGI
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
RemoveHandler .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc
|
||||||
|
RemoveType .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc
|
||||||
|
SetHandler None
|
||||||
|
SetHandler default-handler
|
||||||
|
|
||||||
|
# Remove both lines below if you want to render HTML files from the upload folder
|
||||||
|
AddType text/plain .html
|
||||||
|
AddType text/plain .htm
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,575 @@
|
|||||||
|
"11973";"Àáäðÿøèòîâà, Ãóëèÿ";"50857";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11901";"Àáðàøêèíà, Òàòüÿíà";"50887";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11983";"Àáðîñèìîâà, Îëüãà";"50308";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11922";"Àáðîñèìîâà, Òàòüÿíà";"50817";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25167";"Àãååâà, Àíàñòàñèÿ";"50017";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11979";"Àêæèãèòîâà, Èëüâèðà";"50030";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11321";"Àêìàëîâà, Íàâáàõîð";"50417";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10857";"Àëåêñåâíèíà, Àííà";"50138";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11808";"Àëåêñååâà, Àë¸íà";"50483";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11265";"Àëåêñååíêî, Àëåêñåé";"50223";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11742";"Àëìàìåòîâà, Àëüáèíà";"50213";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10322";"Àëôåðîâà, Ëþäìèëà";"50252";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11281";"Àëÿáüåâà, Êèðà";"50387";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10011";"Àëÿáüåâà, Íàòàëüÿ";"50191";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11270";"Àë¸íêèíà, Åëåíà";"50051";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"128";"Àíäðååâà, Þëèÿ";"50636";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11874";"Àíîñîâà, Þëèÿ";"50870";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11787";"Àíîõèíà, Ëþáîâü";"50833";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11891";"Àíòîíåö, Àëèíà";"50570";"Loans+Activation";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11734";"Àíòîíîâà, Èðèíà";"50753";"Loans+Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11238";"Àíòîíîâà, Íàòàëüÿ";"50185";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10367";"Àíòîíîâà, Òàòüÿíà";"50289";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11438";"Àïàåâà, Äèàíà";"50500";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11730";"Àïîíàñåíêî, Åêàòåðèíà";"50295";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10922";"Àðõèïîâà, Àëåíà";"50668";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11610";"Àñëàìîâà, Íàòàëüÿ";"50739";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11040";"Àôàíàñüåâà, Îëüãà";"50591";"Reception";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11918";"Àôèøèíà, Ìàðèíà";"50863";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11348";"Áàáèíà, Åêàòåðèíà";"50441";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10968";"Áàáóðèíà, Êñåíèÿ";"50550";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10924";"Áàêóíèíà, Ñâåòëàíà";"50666";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11649";"Áàëäèíà, Èðèíà";"50413";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11027";"Áàðàíîâñêàÿ, Àííà";"50341";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10892";"Áàðûøåâà, Àííà";"50421";"Loans+Card+Deposit+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"195";"Áàòêàåâà, Ðåãèíà";"50610";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10183";"Áàõëû÷¸âà, Åêàòåðèíà";"50182";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11433";"Áåãëàðÿí, Íðàíå";"50371";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11819";"Áåçãèíà, Ñâåòëàíà";"50321";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11708";"Áåçúÿçûêàÿ, Èðèíà";"50055";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11690";"Áåêåòîâà, ßíà";"50127";"Loans+Card+Activation+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11801";"Áåêÿí, Èííà";"50357";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"2091";"Áåëèê, Äàðüÿ";"50627";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11875";"Áåëûõ, Âàñèëèñà 0.5";"50571";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11842";"Áåëÿåâà, Àíæåëèêà";"50838";"Loans+Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11944";"Áåëÿêîâà, Åêàòåðèíà";"50782";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11907";"Áåëÿíèíà, Íàòàëüÿ";"50892";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11613";"Áåðèäçå, Èâàí";"50683";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11867";"Áèðþêîâà, Èðèíà";"50871";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10697";"Áîáðåøîâà, Ýëëà";"50053";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10913";"Áîáðîâñêàÿ, Ìàðèíà";"50615";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"122";"Áîãàòûðåâ, Âèòàëèé";"50544";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25225";"Áîãàòûðåâà, Åëåíà";"50354";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11989";"Áîãà÷åâà, Îëüãà";"50194";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11854";"Áîäóð, Àëèíà 0.5";"50635";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11658";"Áîëäûðåâà, Ìàðèÿ";"50755";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11966";"Áîíäàðåâà, Ñâåòëàíà";"50432";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11773";"Áîðèñîâà, Åëåíà";"50079";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11004";"Áîðèñîâà, Ìàðãàðèòà";"50715";"Expert Calls";"1013 CS Expert Platform";"";
|
||||||
|
"10";"Áîðîíèíà, Îëüãà";"50584";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10114";"Áîñîëàåâà, Ñâåòëàíà";"50042";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25222";"Áîÿðêèíà, Ìàðèíà";"50367";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11442";"Áðîäÿãèíà, Âèêòîðèÿ 0.75";"50429";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25229";"Áóçåíêîâà, Ìàðèíà";"50362";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11920";"Áóêðååâà, Åëåíà 0.75";"50804";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10057";"Áóêðååâà, Þëèÿ";"50109";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11876";"Áóëãàêîâ, Âèòàëèé";"50869";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10993";"Áóòóñîâ, Íèêîëàé";"50527";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"8014";"Áûêîâà, Íàòàëüÿ";"54037";"Loans CA Help CC";"8001 CA Penza";"1 Avaya CMS";
|
||||||
|
"11148";"Âàâèëîâà, Òàòüÿíà";"50199";"Loans+Card+Activation+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11294";"Âàëèóëèíà, Ìàðèÿ";"50397";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11393";"Âàëü÷óê, Âèêòîðèÿ";"50065";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10300";"Âàñèíà, Îëüãà";"50166";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"2108";"Âàñÿêèíà, Îëüãà";"50533";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11933";"Âàõðóøåâà, Àëåíà";"50279";"Presell+Outsource";"";"1 Avaya CMS";
|
||||||
|
"10751";"Âåíþêîâà, Ñâåòëàíà";"50257";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11955";"Âèíîãðàäîâà, Åëèçàâåòà";"50153";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"14";"Âèðÿñîâà, Àíàñòàñèÿ";"50608";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11976";"Âèøíÿêîâà, Ëþáîâü";"50038";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10252";"Âëàñîâà, Òàòüÿíà";"50003";"Loans+Card+Deposit+Activ.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10075";"Âîëêîâà, Òàòüÿíà Exp.";"50130";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11910";"Âîëêîâà, Òàòüÿíà";"50549";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11080";"Âîëîáóåâ, Àðñåíèé";"50270";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10337";"Âîëîáóåâà, Àííà";"50091";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11288";"Âîëîâèêîâà, Âåðà";"50395";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10241";"Âîëîøèíà, Êàðèíý";"50176";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11464";"Âîëüíèêîâà, Ìàðèíà";"50360";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11864";"Âîðîíîâà, Àëåíà";"50864";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25228";"Âûäðèí, Âëàäèñëàâ";"50391";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11930";"Âûõðèñòþê, Ìàðèÿ";"50747";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10994";"Ãàáåäàâà, Ìàéÿ";"50556";"Loans+Card+Activation+Metlife";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10316";"Ãàëóøêà, Îëåñÿ";"50243";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25212";"Ãàëóøêèíà, Ñâåòëàíà";"50425";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11219";"Ãàíèíà, Òàòüÿíà";"50312";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10049";"Ãåéêî, Òàòüÿíà";"50867";"Loans+Card+Deposit+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11400";"Ãåðàñåâà, Åêàòåðèíà";"50073";"Loans+Card+Presell (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25199";"Ãëàçêîâà, Ìàðèÿ";"50349";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10325";"Ãëåáîâà, Àëåíà";"50256";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10973";"Ãëåáîâñêîâ, Àíäðåé";"50602";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11857";"Ãëóõîâà, Âèêòîðèÿ";"50849";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11082";"Ãëóùåíêî, Äìèòðèé";"50035";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10215";"Ãîëîâà, Ïîëèíà";"50152";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11399";"Ãîëîâàíîâà, Ôåðóçà";"50224";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"18";"Ãîëîâèíà, Òàòüÿíà";"50537";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11347";"Ãîëîëîáîâà, Þëèÿ";"50439";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11844";"Ãîëîïÿòîâà, Èðèíà";"50805";"Loans+Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11418";"Ãðàíêèíà, Îëüãà";"50254";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10297";"Ãðèäèíà, Íàòàëèÿ";"50209";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11605";"Ãðîìîâ, Íèêîëàé 0.75";"50642";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10699";"Ãðóäèíêèí, Äìèòðèé";"50498";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10261";"Ãðóäêèíà, Òàòüÿíà";"50234";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11623";"Ãðóøèíà, Êàðèíà";"50119";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11481";"Ãðûçóíêîâà, Ñâåòëàíà";"50649";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10978";"Ãóäàíîâà, Ðèììà";"50286";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10303";"Ãóëåâñêàÿ, Âèêòîðèÿ";"50136";"Expert Public";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11932";"Ãóíäîðîâà, Èðèíà";"50446";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"164";"Ãóñàðîâà, Åëåíà";"50542";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11429";"Ãóñüêîâà, Íàòàëüÿ";"50244";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"20";"Äàö, Èðèíà";"50613";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10347";"Äàøêèíà, Àëñó";"50272";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11940";"Äåáåðäååâà, Âàñèëÿ";"50227";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"20256";"Äåáåðäååâà, Ãóçåëü";"50573";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11688";"Äåâÿòêèíà, Íàòàëüÿ";"50779";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11670";"Äåì÷åíêî, Êðèñòèíà";"50764";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10988";"Äåíèñîâà, Èíãà";"50488";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"23";"Äåíèñîâà, Ìàðèÿ";"50545";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11816";"Äæîðàåâà, Ìàðèíà";"50302";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10014";"Äèâàâèíà, Àíæåëà";"50010";"Loans+Card+Deposit+Activ.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11614";"Äìèòðåíêî, Åëåíà";"50671";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11330";"Äìèòðèåâà, Þëèÿ";"50430";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10692";"Äîáðûíèíà, Äàðüÿ";"50048";"Loans+Card+Deposit+Activ.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11958";"Äîêàøåíêî, Íàòàëüÿ";"50365";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11783";"Äîëãàíîâà, Äàðüÿ";"50823";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"";
|
||||||
|
"11413";"Äîëãàøîâà, Îëüãà";"50496";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11701";"Äîëæåíêî, Åêàòåðèíà";"50788";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11807";"Äîëæåíêîâà, Íàòàëüÿ";"50465";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11631";"Äîðîôååâ, Âëàäèìèð";"50008";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10053";"Äðîáûøåâà, Åâãåíèÿ";"50067";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25227";"Äðóæèíèí, Äìèòðèé";"50386";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11676";"Äðóæèíèíà, Ìàðèÿ";"50767";"Loans";"1012 CS Penza Platform";"";
|
||||||
|
"25181";"Äðóæèíèíà, Ñâåòëàíà";"50251";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11405";"Äóáèíà, Èëüìèðà";"50331";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11401";"Äóâàëêèíà, Îëüãà";"50122";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10223";"Äóäàíîâà, Ñâåòëàíà";"50049";"Loans+Card+Deposit+Activ.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11525";"Äóäíèêîâà, Ñâåòëàíà";"50020";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"26";"Äóí÷åâà, Îêñàíà";"50625";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11988";"Äóðíåâà, Íàòàëüÿ";"50114";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11709";"Äûìóðà, Àííà";"50478";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"2041";"Äÿòëîâà, Îëüãà";"50009";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11902";"Åãîðîâ, Ñòàíèñëàâ";"50738";"Presell+Out+Outsource";"1015 CS Cross Out";"";
|
||||||
|
"27";"Åãîðîâà, Ìàðãàðèòà";"50581";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10025";"Åëàãèíà, Êðèñòèíà";"50029";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11878";"Åëüíèêîâà, Êðèñòèíà";"50879";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"68";"Åíèêååâà, Àíòîíèíà";"50621";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11993";"Åíèêååâà, Þëèÿ";"50477";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"29";"Åðåìèíà, Þëèÿ";"50543";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11941";"Åðìîøèí, Ìèõàèë";"50359";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10026";"Åôàíîâà, Êñåíèÿ";"50898";"Expert Public";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"30";"Åôðåìîâà, Èííà";"50603";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11176";"Åùèíà, Ýëèíà";"50041";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11444";"Æàðêîâà, Ýëüâèðà";"50477";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10820";"Æàòêèíà, Íàäåæäà";"50617";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10017";"Æåëåçíÿêîâà, Âàðâàðà";"50189";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11782";"Æåëóäêîâà, Àíàñòàñèÿ";"50487";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11950";"Æèãà÷åâ, Àíòîí";"50021";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11889";"Æèäêîâà, Îêñàíà";"50389";"Loans+Activation";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11753";"Æèíêî, Åëåíà";"50812";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11840";"Æèðîâà, Àííà";"50131";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11663";"Æìàêèíà, Ñîôüÿ";"50763";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11616";"Æóêîâà, Àíàñòàñèÿ";"50454";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"32";"Æóêîâà, Îëüãà";"50623";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11625";"Æóëèíà, Íàòàëüÿ";"50052";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11866";"Æóðàâëåâà, Êðèñòèíà";"50862";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11407";"Çàáêîâà, Äàðüÿ";"50085";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11776";"Çàâîä÷èêîâà, Àíàñòàñèÿ";"50348";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11722";"Çàâîëîêà, Äàðüÿ";"50792";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11904";"Çàãðåáèíà, Àëåêñàíäðà";"50748";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11936";"Çàéöåâà, Ëèäèÿ";"50785";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10877";"Çàéöåâà, Îëüãà";"50237";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"2053";"Çàëÿëóòäèíîâà, Ìàðãàðèòà";"50096";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10894";"Çàõàðîâà, Òàòüÿíà";"50654";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11828";"Çâÿãèíà, Îëüãà";"50340";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11899";"Çâÿãèíöåâà, Àíàñòàñèÿ";"50381";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11345";"Çäåñåâ, Àëåêñàíäð";"50436";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11355";"Çèíîâüåâà, Ìàðèíà";"50247";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10878";"Çëîáèíà, Èðèíà";"50356";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11013";"Çîëîòóõèíà, Èðèíà";"50710";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11923";"Çóáêîâà, Àíàñòàñèÿ 0.5";"50241";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11364";"Çóåâà, Àëèíà";"50464";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11772";"Çÿáëèêîâ, Äìèòðèé";"50319";"Loans+Card+Presell (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11952";"Çÿáëèöåâà, Ìàðèÿ";"50416";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10029";"Èâàíîâà, Àíàñòàñèÿ 0.5";"50378";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11916";"Èâàíîâà, Íàäåæäà";"50890";"Presell+Out";"1015 CS Cross Out";"";
|
||||||
|
"11954";"Èâàí÷èõèíà, Àíàñòàñèÿ";"50339";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11823";"Èçîòîâà, Àëåêñàíäðà";"50780";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10919";"Èçîòîâà, Òàòüÿíà";"50672";"Loans+Card+Deposit+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"2044";"Èçþìèí, Íèêîëàé";"50555";"Presell+Out";"1015 CS Cross Out";"";
|
||||||
|
"11596";"Èçþìèíà, Êñåíèÿ";"50512";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11555";"Èëüåíêî, Àíàñòàñèÿ";"50698";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11617";"Èñàåâà, Þëèÿ";"50643";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11762";"Êàáàíîâà, Êðèñòèíà";"50712";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11648";"Êàáîñêèíà, Ãàëèíà";"50390";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11759";"Êàäêèíà, Íàäåæäà";"50802";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11978";"Êàëèíèíà, Þëèÿ";"50326";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11880";"Êàëèíè÷åíêî, Âëàäèñëàâ";"50868";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11725";"Êàëèòóðèíà, Åëåíà";"50490";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11956";"Êàëìûêîâà, Åâãåíèÿ";"50410";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25165";"Êàëóãèíà, Îëüãà";"50162";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11635";"Êàëü÷åíêî, Åêàòåðèíà";"50742";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"179";"Êàëÿêèíà, Âàëåðèÿ";"50565";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11590";"Êàìåíåâà, Êñåíèÿ";"50076";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"38";"Êàïóñòèíà, Ñâåòëàíà";"50592";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11313";"Êàðà÷åâöåâà, Àëåêñàíäðà";"50174";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11850";"Êàñüÿíîâà, Åâãåíèÿ";"50850";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"20630";"Êà÷íîâà, Îëüãà";"50601";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25226";"Êà÷óðèíà, Ñâåòëàíà";"50383";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11656";"Êàùååâà, Ìàðèíà";"50681";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10982";"Êåðæåíîâà, Ãàëèÿ";"50756";"Loans+Card+Activation+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10189";"Êèïóðîâà, Èðèíà";"50201";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10100";"Êèðååâà, Åêàòåðèíà";"50039";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11626";"Êèñåëåâà, Âåðîíèêà";"50447";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11490";"Êèñåëåâà, Íàòàëèÿ";"50140";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11892";"Êèñåëåâà, Þëèÿ";"50467";"Loans+Activation";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11799";"Êèñòèíà, Åëèçàâåòà";"50342";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11049";"Êëèìîâà, Èðèíà";"50123";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"8028";"Êëþ÷íèêîâà, Òàòüÿíà";"54050";"Loans CA Help CC";"8001 CA Penza";"1 Avaya CMS";
|
||||||
|
"11445";"Êëþøèíà, Ìàðèíà 0.75";"50379";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10781";"Êíÿçåâ, Äìèòðèé";"50472";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11505";"Êîáû÷åâà, Åëåíà";"50656";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11789";"Êîâòóí, Îêñàíà 0.75";"50831";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11912";"Êîâøîâà, Åêàòåðèíà";"50679";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11491";"Êîãóò, Íàòàëüÿ";"50143";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"2140";"Êîäîðêèíà, Þëèÿ";"50648";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11604";"Êîäîðîâà, Âèêòîðèÿ 0.5";"50735";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11746";"Êîæèí, Àíäðåé";"50664";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11034";"Êîçëîâ, Àëåêñàíäð";"50154";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11217";"Êîçëîâ, Ñåðãåé";"50299";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"2055";"Êîçëîâà, Àëåñÿ";"50547";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10971";"Êîçëîâöåâà, Åëåíà";"50538";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11446";"Êîçíîâà, Ëþáîâü";"";"";"1012 CS Penza Platform";"";
|
||||||
|
"11898";"Êîçüìåíêî, Âàëåðèÿ 0.5";"50327";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"44";"Êîêîðåâà, Þëèÿ";"50588";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11577";"Êîëåñíèêîâà, Åëåíà";"50734";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11547";"Êîëåñíèêîâà, Êñåíèÿ";"50523";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"2006";"Êîëîòèëîâà, Ìàðèÿ";"50535";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11609";"Êîìàðèöêèõ, Òàòüÿíà";"50737";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11964";"Êîíäðàòüåâà, Ñâåòëàíà";"50514";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11846";"Êîííîâà, Êðèñòèíà 0.5";"50661";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11414";"Êîíîâàëîâà, Íàòàëèÿ";"50236";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"46";"Êîíîâàëîâà, Ýëüçèðà";"50536";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11924";"Êîíüêîâà, Òàòüÿíà";"50276";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11990";"Êîðæåíåâñêàÿ, Ìàðèÿ";"50139";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11685";"Êîðíàóõîâà, Íàäåæäà";"50774";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25162";"Êîðíåâ, Àëåêñåé";"50229";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11939";"Êîðíåé÷óê, Àëåêñåé";"50240";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11081";"Êîðîëåâà, Þëèÿ";"50207";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11619";"Êîðîñòåëåâà, Îêñàíà";"50693";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11314";"Êîðîòååâà, Þëèÿ";"50214";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10033";"Êîð÷àãèíà, Êðèñòèíà";"50278";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11126";"Êîñèíîâà, Èðèíà";"50026";"Reception";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10995";"Êîñòèíà, Àëåâòèíà";"50557";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11913";"Êîñòèíà, Ñâåòëàíà";"50882";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11447";"Êîñûðåâà, Íàäåæäà";"50499";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11362";"Êîòåíêî, Èííà";"50455";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10070";"Êðàéíîâà, Îëüãà";"50077";"Loans+Card+Deposit+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11906";"Êðàìèí, Êîíñòàíòèí";"50883";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25178";"Êðàñíèêîâà, Àíàñòàñèÿ";"50232";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11879";"Êðàñíèêîâà, Åëåíà";"50459";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11162";"Êðåòóøåâà, Àííà";"50197";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11298";"Êðèâîøåèíà, Åëåíà";"50407";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25065";"Êóâàéöåâà, Èðèíà";"50539";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10885";"Êóäèíîâà, Þëèÿ";"50576";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11607";"Êóäðÿøîâ, Ìàêñèì 0.5";"50680";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11957";"Êóçèíà, Èðèíà";"50440";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"244";"Êóçíåöîâ, Àëåêñàíäð";"50106";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10357";"Êóçíåöîâà, Àííà";"50281";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"49";"Êóçíåöîâà, Ãàëèíà";"50566";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11540";"Êóçíåöîâà, Åëåíà";"50685";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10983";"Êóçíåöîâà, Æàííà";"50701";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11371";"Êóçíåöîâà, Ëþáîâü";"50363";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11017";"Êóçíåöîâà, Îëüãà";"50720";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11747";"Êóçíåöîâà, ßíà 0.9";"50796";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10292";"Êóçüìèíà, Åêàòåðèíà";"50186";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25148";"Êóçüìè÷åâà, Íàòàëüÿ";"50815";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10608";"Êóëèêîâà, Åêàòåðèíà";"50444";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"25166";"Êóðêîâà, Ãàëèíà";"50148";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10445";"Êóðÿåâà, Ãóçåëü";"50382";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11818";"Ëàïåíêîâà, Ëþäìèëà";"50696";"Loans+Card";"1011 CS Kursk Platform";"";
|
||||||
|
"11271";"Ëàñòóðèíà, Åêàòåðèíà 0.75";"50101";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11986";"Ëåáåäåâà, Àíãåëèíà";"50203";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11822";"Ëåîíîâà, Þëèÿ";"50765";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10779";"Ëåïèíà, Îëüãà";"50206";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10018";"Ëèòâèíîâà, Ìàðèíà";"50121";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10027";"Ëèòâèíîâà, Íàòàëèÿ";"50309";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11244";"Ëîçîâñêàÿ, Òàòüÿíà";"50061";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11960";"Ëîìàíîâè÷, Îëüãà";"50163";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"54";"Ëîìà÷åâà, Àëåíà";"50604";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11718";"Ëóáèíåö, Ýëüâèðà";"50217";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"2033";"Ëóêüÿíîâà, Íàòàëüÿ";"50525";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"2048";"Ëóêüÿíîâà, Îëüãà";"50634";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11127";"Ëóíåâà, Êñåíèÿ";"50033";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"2045";"Ëóòêîâà, Íàòàëüÿ";"50013";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11761";"Ëþáàâèíà, Îëüãà";"50358";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11628";"Ëÿãèíà, Ìàðèÿ";"50088";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11863";"Ìàçèíà, Íàòàëüÿ";"50861";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"8043";"Ìàçûêèíà, Àëåíà";"54064";"Loans CA Help CC";"8001 CA Penza";"1 Avaya CMS";
|
||||||
|
"11909";"Ìàêàéäà, Äàðüÿ";"50777";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11689";"Ìàêàðîâà, Ëþäìèëà";"50486";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"25152";"Ìàëàøåâè÷, Îêñàíà";"50196";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"57";"Ìàëèíèíà, Êðèñòèíà";"50574";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25232";"Ìàëêîâà, Äàðüÿ";"50370";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10305";"Ìàëüêîâà, Åëåíà";"50031";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11404";"Ìàëü÷èêîâà, Îëüãà";"50159";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"59";"Ìàðêîâà, Þëèÿ";"50593";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"2037";"Ìàðòûíîâà, Èííà";"50025";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"176";"Ìàñëîâà, Ãàëèíà";"50630";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11791";"Ìàñòÿíèíà, Îëüãà";"50485";"Loans+Card+Activation+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10343";"Ìàòåóø, Ìàðãàðèòà";"50268";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11853";"Ìàòêóðáàíîâà, Çîÿ";"50855";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11068";"Ìàòîðèíà, Åëåíà";"50142";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11078";"Ìàòðîñîâà, Ìàðèÿ";"50195";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"2035";"Ìà÷àëîâà, Ëþáîâü";"50628";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25169";"Ìàøêèí, Ìàêñèì";"50248";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10193";"Ìàþðîâà, Åêàòåðèíà";"50205";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11974";"Ìàþðîâà, Êðèñòèíà";"50027";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25186";"Ìåäâåäåâà, Äàðüÿ";"50293";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"42";"Ìåäâåäåâà, Åêàòåðèíà";"50521";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11949";"Ìåçåíöåâà, Þëèÿ";"50806";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11726";"Ìåëüíèêîâà, Åëåíà";"50730";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10705";"Ìåíüøîâà, Ëþäìèëà";"50516";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11729";"Ìåðçëÿêîâ, Àëåêñàíäð";"50629";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11745";"Ìåðêóëîâà, Äèàíà";"50726";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11926";"Ìåùåðÿêîâà, Åëåíà";"50893";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11790";"Ìåùåðÿêîâà, Íàòàëüÿ";"50834";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11012";"Ìèëîñòíàÿ, Èðèíà";"50709";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"61";"Ìèëÿéêèíà, Åêàòåðèíà";"50579";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11652";"Ìèíàñÿí, Êðèñòèíà";"50517";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"152";"Ìèíååâà, Îëüãà";"50564";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11826";"Ìèðîíîâ, Èãîðü 0.5";"50423";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11291";"Ìèðîíîâà, Îëüãà";"50393";"Loans+Presell";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10006";"Ìèõàéëîâà, Íàòàëüÿ";"50754";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10032";"Ìèõàéëîâà, Îëåñÿ";"50037";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25188";"Ìèøèíà, Îëüãà";"50322";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11128";"Ìîâñóìîâà, Âèêòîðèÿ";"50068";"Loans+Card+Deposit+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11496";"Ìîèñååâà, Þëèÿ";"50366";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11502";"Ìîêøàíîâ, Èëüÿ";"50374";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11862";"Ìîðîçîâà, Åêàòåðèíà";"50427";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11764";"Ìîðîçîâà, Èðèíà";"50700";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11512";"Ìîðîçîâà, Þëèÿ";"50510";"Loans+Card+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11678";"Ìóõàìåòäæàíîâà, Òàòüÿíà";"50647";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11965";"Ìÿñíèêîâà, Êñåíèÿ";"50814";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11385";"Íàçàðîâà, Âèêòîðèÿ";"50258";"Loans+Card+Activation+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11784";"Íàìàêîíîâà, Ìàðèÿ";"50827";"Loans+Card+Presell (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11308";"Íàñîíîâà, Åëåíà";"50411";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11039";"Íàóìêèíà, Òàòüÿíà";"50294";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11971";"Íåâëþòîâà, Èëüìèðà";"50046";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25231";"Íåñÿåâà, Àííà";"50392";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"2142";"Íèêèòèí, Àíòîí";"50600";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11591";"Íèêèôîðîâà, Îêñàíà";"50094";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"25185";"Íèêîëàåâà, Åâãåíèÿ";"50125";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11280";"Íèêîëàåâà, Ñâåòëàíà";"50385";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11970";"Íèêóëèíà, Þëèÿ";"50851";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11315";"Íîñîâà, Çîÿ";"50415";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11682";"Íîñîâà, Íàòàëüÿ";"50776";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10970";"Íîõðèíà, Þëèÿ";"50519";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11881";"Îáîæàåâà, Ìàðèÿ";"50865";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10675";"Îâñÿííèêîâà, Åêàòåðèíà";"50481";"Expert Public";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11184";"Îëåéíèê, Èðèíà";"50178";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11406";"Îðåøêèíà, Åêàòåðèíà";"50494";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"73";"Îñèíà, Òàòüÿíà";"50546";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11474";"Ïàðàìîíîâà, Ìàðèÿ";"50598";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"2147";"Ïàòêèí, Äàíèëà";"50158";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11201";"Ïàùåíêî, Àíäðåé";"50280";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11116";"Ïàùåíêî, Åâãåíèé";"50301";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11972";"Ïåðåêîñîâà, Åêàòåðèíà";"50854";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11293";"Ïåòåëèí, Êîíñòàíòèí";"50401";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10760";"Ïåòðîâà, Èðèíà";"50561";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11684";"Ïåøêîâ, Èëüÿ";"50736";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"20623";"Ïèâêèíà, Åëåíà";"50614";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"2004";"Ïèãëîâà, Þëèÿ";"50554";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25200";"Ïèëèïåö, ßíà";"50338";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"20608";"Ïîäúÿ÷åâà, ßíà 0.75";"50522";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25220";"Ïîäûáàéëî, Äàðüÿ";"50456";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25214";"Ïîæèäàåâà, Ñâåòëàíà";"50451";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11882";"Ïîçäíÿêîâ, Äìèòðèé";"50877";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11398";"Ïîçäíÿ÷êèíà, Ìàðèíà";"50002";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10028";"Ïîëåæàåâà, Êðèñòèíà";"50198";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25171";"Ïîëèâàíîâà, Åëåíà";"50269";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11813";"Ïîëèîíîâà, Àëåíà";"50719";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25172";"Ïîëóõèíà, Äèàíà";"50245";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"174";"Ïîëÿêîâà, Êðèñòèíà";"50548";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11283";"Ïîëÿêîâà, Ñâåòëàíà";"50620";"Expert Public";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"25216";"Ïîëÿêîâà, ßíà";"50424";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25221";"Ïîïåíêî, Åâãåíèÿ";"50722";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11639";"Ïîïîâà, Ìàðèíà 0.75";"50260";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11943";"Ïîïîâà, Ìàðèÿ";"50722";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11968";"Ïîïîâà, Òàòüÿíà";"50515";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11070";"Ïîïîâà, Þëèÿ";"50155";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10034";"Ïîïóãàåâà, Îëüãà";"50768";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11359";"Ïîðøíåâà, Íàòàëüÿ";"50250";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11934";"Ïðåñíÿêîâà, Êðèñòèíà 0.75";"50056";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11424";"Ïðèãîäà, Íàäåæäà";"50263";"Loans+Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25198";"Ïðèëåïêî, Ìàðèíà";"50343";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11323";"Ïðèñÿæíàÿ, Àíàñòàñèÿ";"50419";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"80";"Ïðîíèíà, Èðèíà";"50637";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11817";"Ïðîíèíà, Ìàðèÿ";"50528";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10021";"Ïðîíèíà, Íèíà";"50445";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10702";"Ïðîíñêàÿ, Þëèÿ";"50502";"Loans+Card+Deposit+Activ.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11975";"Ïðîíüêèíà, Ëþäìèëà";"50511";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"163";"Ïóñòîâàëîâà, Àëåíà";"50640";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"81";"Ïóñòûãèíà, Ñâåòëàíà";"50618";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25223";"Ïó÷êèíà, Åêàòåðèíà";"";"";"1012 CS Penza Platform";"";
|
||||||
|
"25187";"Ðàåâñêàÿ, Ëèëèÿ";"50320";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11071";"Ðàçèíüêîâà, Îëüãà";"50164";"Loans+Card+Deposit+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25147";"Ðåâèíà, Àííà";"50769";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11420";"Ðîãà÷êîâà, Âåðà";"50120";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11977";"Ðîæêîâ, Åâãåíèé";"50860";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11468";"Ðîìàêèíà, Òàòüÿíà";"50388";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25215";"Ðòèùåâà, Âèêòîðèÿ";"50437";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25230";"Ðóñõàíîâà, Àëèÿ";"50373";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11317";"Ðÿáöåâà, Íèíà 0.5";"50422";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11396";"Ðÿäîâîé, Àíòîí";"50473";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25179";"Ðÿçàíîâà, Èðèíà";"50125";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11023";"Ñàâåëüåâà, Îëüãà";"50723";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"2136";"Ñàâèí, Íèêîëàé 0.5";"50631";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"8058";"Ñàâîñüêèíà, Åëåíà";"54127";"Loans CA Help CC";"8001 CA Penza";"1 Avaya CMS";
|
||||||
|
"2047";"Ñàâ÷èêîâà, Äàðüÿ";"50622";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11316";"Ñàçîíîâ, Åâãåíèé";"50128";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10050";"Ñàëîâà, Þëèÿ";"50837";"Loans+Card+Deposit+Clever";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11851";"Ñàëïàãàðîâ, Ìóõàììàä 0.5";"50859";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11600";"Ñàìàêàåâà, Ðåãèíà";"50438";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11419";"Ñàìàðêèíà, Ñâåòëàíà";"50111";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11967";"Ñàìáóð, Îëüãà";"50853";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11959";"Ñàìîëêèíà, Òàòüÿíà";"50242";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11629";"Ñàìîõâàëîâà, Íàòàëüÿ";"50108";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11999";"Ñàðàåâà, Àíãåëèíà";"50828";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11024";"Ñàðêèñÿí, Ëèàíà";"50714";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11800";"Ñàôàðîâà, Ãóëèñÿ";"50361";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11694";"Ñàôîíîâ, Åâãåíèé";"50783";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11962";"Ñà÷åíêîâà, Åâãåíèÿ";"50828";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11218";"Ñâèòíåâà, Åëåíà";"50311";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11036";"Ñåäîâà, Íàòàëüÿ";"50267";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"2024";"Ñåäîâà, Ñâåòëàíà";"50599";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11545";"Ñåêðåòîâà, Åêàòåðèíà";"50695";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11299";"Ñåëåçíåâà, Åêàòåðèíà";"50402";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25183";"Ñåëþêèíà, Îëüãà";"50259";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25196";"Ñåëþêèíà, Òàòüÿíà";"50325";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11329";"Ñåìåíîâà, Àííà 0.5";"50431";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11987";"Ñåðãååâ, Àðòåì";"50172";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10738";"Ñåðåáðÿêîâà, Àííà";"50552";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11757";"Ñèäîðîâà, Àíàñòàñèÿ";"50808";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25195";"Ñèëàåâà, Òàòüÿíà";"50330";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11156";"Ñèìîíîâà, Àííà";"50177";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11295";"Ñèìîíîâà, Ìàðèÿ";"50400";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11267";"Ñèíèöèíà, Åêàòåðèíà";"50266";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10614";"Ñêîðíÿêîâ, Èâàí";"50335";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11448";"Ñêðèïêèíà, Àíàñòàñèÿ";"50394";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11492";"Ñêðèïêèíà, Ñâåòëàíà";"50212";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11641";"Ñëàäêîâà, Äàðüÿ";"50743";"Loans+Activation";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"90";"Ñëóêèíà, Åëåíà";"50560";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11937";"Ñìèðíîâà, Àííà";"50231";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"2145";"Ñìèðíîâà, Èðèíà";"50100";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11982";"Ñìèðíîâà, Ìàðèíà";"50489";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11425";"Ñìèðíîâà, Îëüãà";"50124";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10280";"Ñìîëüêèíà, Þëèÿ";"50134";"Loans+Card+Deposit+Activ.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11361";"Ñîêëàêîâà, Àííà";"50462";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11896";"Ñîëäàòåíêî, Àëåêñàíäð";"50384";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25224";"Ñîëäàòåíêîâà, Îëüãà";"50372";"Loans+Card (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11763";"Ñîëäàòîâà, Îëåñÿ";"50676";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11740";"Ñîëäàòîâà, Þëèÿ";"50572";"Loans+Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11202";"Ñîðîêèí, Àëåêñàíäð";"50283";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"151";"Ñïèðèäîíîâ, Åâãåíèé";"50568";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10024";"Ñòåïàíîâà, Íàòàëüÿ";"50380";"Loans";"1011 CS Kursk Platform";"";
|
||||||
|
"25168";"Ñòðåëêîâà, ßíà";"50288";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11157";"Ñóááîòèíà, Íàòàëüÿ";"50179";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11721";"Ñóäîðãèí, Äìèòðèé";"50794";"Loans+Card+Presell (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10772";"Ñóïðóí, Ìàðèÿ";"50345";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11927";"Ñóòÿãèí, Ñåðãåé";"50895";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"94";"Ñóõàíîâ, Àëåêñåé";"50638";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11261";"Ñóõèíèí, Ìèõàèë";"50092";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"10149";"Ñóõîâà, Åëåíà";"50063";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11848";"Ñó÷êèíà, Íàòàëüÿ";"50034";"Loans+Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11942";"Ñûïêî, Àíàñòàñèÿ";"50540";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11767";"Ñûðûõ, Þëèÿ";"50791";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"4001";"Òàéôóëîâà, Ôàòèìà";"50220";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11620";"Òàòàðèíîâà, Þëèÿ";"50408";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11666";"Òåëüíîâà, Êðèñòèíà";"50323";"Loans+Card+Presell (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10346";"Òåðèíà, Åêàòåðèíà";"50271";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11511";"Òèìîôååâà, Íàòàëüÿ";"50513";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11820";"Òèøèíà, Âèêòîðèÿ";"50398";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25173";"Òêà÷åâ, Àëåêñàíäð";"50277";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11919";"Òêà÷åíêî, Àíàñòàñèÿ";"50751";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11508";"Òîëñòèêîâà, Íàòàëüÿ";"50594";"Loans+Card+Activation+Metlife";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10012";"Òîíêèõ, Âëàäèìèð";"50305";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11827";"Òðåòüÿêîâà, Àííà";"50562";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11477";"Òðèôîíîâà, Ìàðèÿ";"50452";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11806";"Òðîôèìîâà, Àíàñòàñèÿ";"50558";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10080";"Òðóáàðîâà, Åêàòåðèíà";"50167";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25213";"Òóï÷èé, Ìàðèíà";"50435";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11567";"Óâàðîâà, Åêàòåðèíà";"50347";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"12000";"Óäàëîâà, Ñâåòëàíà";"50060";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10638";"Ôàäååâà, Òàòüÿíà";"50457";"Loans+Card+Deposit+Activ.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11815";"Ôåäîðîâà, Äàðüÿ";"50686";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11667";"Ôåäîñüêèíà, Àííà";"50403";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10690";"Ôåäîòîâà, Êñåíèÿ";"50306";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11579";"Ôåäóëååâà, Àííà 0.75";"50692";"Loans+Card+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25177";"Ôåîêòèñòîâà, Àíàñòàñèÿ";"50303";"Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11318";"Ôèëàòîâà, Íàòàëüÿ";"50165";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11391";"Ôèëèìîíîâà, Àííà";"50482";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11643";"Ôèëèíà, Àíàñòàñèÿ";"50750";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11991";"Ôèëèïîâà, Àííà";"50060";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11276";"Ôèðñòîâà, Òàòüÿíà";"50333";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11185";"Ôîìåíêî, Àíãåëèíà";"50175";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"189";"Ôîìè÷åâà, ßíà";"50590";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11427";"Ôðîëîâ, Äìèòðèé 0.5";"50344";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11928";"Ôðîëîâà, Ìàðèÿ";"50060";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10427";"Ôóðìàíîâ, Âëàäèìèð";"50355";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11570";"Ô¸äîðîâà, Þëèÿ";"50160";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"139";"Õàéðîâà, Êðèñòèíà";"50611";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11186";"Õàðëàíîâà, Îêñàíà";"50225";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"100";"Õðàìîâà, Àíàñòàñèÿ";"50595";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10475";"Õðàìîâà, Àíãåëèíà";"50069";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11411";"Õðàìîâà, Êñåíèÿ";"50495";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11821";"Õðàìöîâà, Ìàðèÿ";"50265";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11824";"Õðÿïèíà, Òàòüÿíà";"50781";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11953";"Öîé, Îëüãà";"50531";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25153";"Öûáóëîâà, Âàëåðèÿ";"50208";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11535";"×àéêà, Ìàðèíà 0.5";"50690";"Loans+Card+Clever";"1012 CS Penza Platform";"";
|
||||||
|
"25219";"×àïëûãèí, Âÿ÷åñëàâ";"50453";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11621";"×àïëûãèíà, Îëüãà";"50697";"Loans+Card+Clever";"1011 CS Kursk Platform";"";
|
||||||
|
"10095";"×åáîòàðåâ, Àëåêñåé";"50147";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11595";"×åêàøåâà, Àíàñòàñèÿ";"50016";"Loans+Card+Activation+Metlife";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11845";"×åðâÿêîâà, Îëüãà";"50284";"Loans+Activation";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11187";"×åðíèêîâ, Àëåêñàíäð";"50171";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11528";"×åðíèêîâà, Ìàðãàðèòà";"50667";"Loans+Card+Activation+Metl.+Cl.";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10376";"×åðíûõ, Îëüãà";"50296";"Loans+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11886";"×åðíûøåâà, Þëèÿ";"50530";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11449";"×èæàíîâà, Åêàòåðèíà";"50418";"Loans+Card+Presell+Outsour.Easy";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10987";"×èðêèíà, Èðèíà";"50006";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"10022";"×èñòÿêîâà, Åëåíà";"50732";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11172";"×èñòÿêîâà, Íàäåæäà";"50211";"Loans+Card+Activation+Metl.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11622";"×óëêîâ, Àëåêñàíäð";"50721";"Loans+Card";"1011 CS Kursk Platform";"";
|
||||||
|
"11594";"×óìà÷åíêî, Àíàñòàñèÿ 0.5";"50364";"Loans+Card";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11029";"Øàâêóíîâà, Åëåíà";"50707";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11981";"Øàêèðçàíîâà, Êñåíèÿ";"50104";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11048";"Øàìàíèíà, Òàòüÿíà";"50011";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11008";"Øàïîâàëîâà, Íàòàëüÿ";"50716";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"108";"Øàðîâ, Ñåðãåé";"50639";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11543";"Øàðîíîâà, Ñâåòëàíà";"50689";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11030";"Øàòàëîâà, Íàòàëüÿ";"50718";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"25197";"Øàõáàíîâà, Ýëüìèðà";"50352";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11804";"Øâà÷óíîâ, Àíäðåé";"50255";"Loans+Card";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"11646";"Øåâ÷åíêî, Àëåíà";"50058";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11744";"Øåâ÷åíêî, Èðèíà";"50745";"Loans+Card+Activation+Metlife";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"10921";"Øåíöåâ, Àëåêñåé";"50674";"Loans+Card+Presell+Outsource";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"25193";"Øåñòåðèíà, Ñâåòëàíà";"50336";"Presell";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"25146";"Øèáàðøèí, Äìèòðèé";"50659";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"2141";"Øèëîâà, Åëåíà";"50578";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11644";"Øèíäèíà, Àíàñòàñèÿ";"50461";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11961";"Øèð÷êîâà, Àëåíà";"50062";"Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"10120";"Øèøîâà, Àëåêñàíäðà";"50169";"Loans+Card+Deposit+Activ.+Cl.";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11760";"Øîõèíà, Àíàñòàñèÿ";"50221";"Loans+Card+Presell (Easy)";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"2002";"Øóáöîâà, Îëüãà";"50609";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11297";"Øóêàéëî, Ïîëèíà 0.5";"50404";"Loans+Card+Deposit+Clever";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11032";"Øóìàêîâà, Àííà";"50705";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11033";"Øóìàêîâà, Åëåíà";"50708";"Expert Written";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11645";"Øóòîâà, Òàòüÿíà";"50729";"Expert Calls";"1013 CS Expert Platform";"1 Avaya CMS";
|
||||||
|
"11947";"Ùåðáàêîâ, Äìèòðèé";"50711";"Loans";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"110";"Ùåòèíèíà, Ëþäìèëà";"50524";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11374";"Ùåòèíèíà, Þëèÿ";"50081";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"11814";"Þíååâà, Åêàòåðèíà";"50246";"Presell+Out";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"20651";"Þíêèí, Èëüÿñ";"50596";"Loans+Presell+Outsource";"1012 CS Penza Platform";"1 Avaya CMS";
|
||||||
|
"141";"Þðëîâà, Þëèÿ";"50520";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"11140";"Þð÷åíêî, Ëþáîâü";"50110";"Reception";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
"20642";"Þôåðîâà, Ýëüâèðà";"50641";"Presell+Out+Outsource";"1015 CS Cross Out";"1 Avaya CMS";
|
||||||
|
"25218";"ßíüøèíà, Êàðèíà";"50426";"Loans";"1011 CS Kursk Platform";"1 Avaya CMS";
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
391
|
||||||
|
104
|
||||||
|
75
|
||||||
|
5
|
||||||
|
|
After Width: | Height: | Size: 445 KiB |
@@ -0,0 +1 @@
|
|||||||
|
03ARzCQLZWY3pj1lF1k0nTWwjp2whL31yX=jOk430bzC5m8Cdal1SQopBwnQv1X1ZkPnb2NVzsZncxQjsF3Q7ACGDR3Q41kOEk=J0vFdG6I2NDzCr5Ttj1chWQVzvwVGF30hIdwf9vwjzC5bh1jal1CMc92Mmp2wZhL31X1kQ3Q3Q3Q3E1l1k0nTWwjG3NXzeBGDY31X=jOk=xNtfHBwhG3NXzBGDY31dX7jaJtj1mzC5bejQOke2QIFv0hI31X1GkPcLWw3RCPktj1fAamQh9sQoF3wkbk156I2GXR3GyL2GfTSkQD6dwyL2GfTfMjFZ3Nyp2wV9B56L2MXfzsNkTWwWTSQD6dwbXisNXHv1l1f0XR3a0cLWwjzC5L1jOk7sWsD6WQfF2w6I2ND5zC5btj16I2GXR3Geop30kbSykZ2OiGjiQI1kOk1mwXRWNvzZ31XejOkZBMv630D56WQfF2wkbk1T1kOAk03Nkbk13Q3Q3Q3QQktj1fRdwnY31X=Tj5btj1hRFMJzC5fb8Cal1fwyG3NkXvONkisNXHmsXzBGDY3G1X=jOk1xNtHBwhG23NXzBGDY31X1kQ3tQ3Q3Q31l1k0nTWwEjG3NkbCYctj1tzCb5RpuYl1fGkbk1i6duQmN2Yktj1XT2NyRzmwXRWNkbSal1CMBkbk1i6uQmN2YktjD1iFWwXR60nTWwjzKC5Jtj1bRdGD6WQfSF2wkbfaDAjOk=WsZXT2Nkbfal1CG3pdywD6WQfF2wkbSODANjOk=WsiFWwXzfUlY1SQD6dwfF3NXR3GhyT30cLWNkbSykZ2ZOiGjQI1kOkbdwhR460nTWwjzC5Ttj1thzC5k1jNLija81kO6kZ2NnTWsfRdwnY3e1XajOkAmwcL2MvzfsNozC5Ttj1hRFwXkF31Xij5btj1hRFQZhRdwkbk1i6uQmN2hYktj1LFdwbR60nThWwjzfUl1SQD6dwyzT30cLWNkbCal1k0bbHsGkbSyb=jOk0vi1X1CQLZWY3pj1l1rk0nTWwjzC5Jtj1tszC5k1j1l1kwn6dGdVYmwbzC5btj1nzfYUl1SQopBwnQmsDprv0yT30cLWNkbk1b31kOk1mwXRWNcL2QQoIWwjzC5kN3Q3Q3NQ3zkOk1mwXRWNDpd2QfYW0kbSyk=j1lY1kwnY2Mkbk1i6uQSmN2Yktj1fRdwnY3r1X1xYotj1cQ2QXLd2MvzsNozC5ctj1oaRdGcR3ND6WQfF2wkkbCYTtj1chWQVzv4wVG30hI31gVj1rY62NkRpQo6dGyT30c9LWNkbk1n6dQIF314l1SwkbfaTtj1WR6YwVG30hI2QoF3wkbbSODAjOk1xNtHBwhSG3NcL2QoIWwjzC5yTtj1cQ2QXL2Mvzs9NoT30cLWNkbk1JZdxYTcCaktj1i6W0kBbCODAjOk=xNtHBwfhG3NcL2QoIWwjzC95kev0ktj1vL2NXzeC5kN3Q3Q3Q3zkOkY1mwXRWNvzdGDp2wfoRWNkbSyJ=jOk0vF1X1CQLZWY3pj1l1bk0nTWwjzC5ctj1trzC5k1j1l1kwn6dGfVYmwbzC5btj1nzfQUl1kwIzmsXzBGDYY31XZjal1CGtG2M65hdGIRdwf9vwjzfUrT
|
||||||
@@ -0,0 +1,399 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 4.5.4.1deb2ubuntu2
|
||||||
|
-- http://www.phpmyadmin.net
|
||||||
|
--
|
||||||
|
-- Хост: localhost
|
||||||
|
-- Время создания: Окт 14 2016 г., 16:11
|
||||||
|
-- Версия сервера: 5.7.15-0ubuntu0.16.04.1
|
||||||
|
-- Версия PHP: 7.0.8-0ubuntu0.16.04.3
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- База данных: `print`
|
||||||
|
--
|
||||||
|
DROP DATABASE `print`;
|
||||||
|
CREATE DATABASE IF NOT EXISTS `print` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
||||||
|
USE `print`;
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Структура таблицы `cartridges`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `cartridges`;
|
||||||
|
CREATE TABLE `cartridges` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`date` date NOT NULL,
|
||||||
|
`k_sp3500xe` tinyint(4) NOT NULL,
|
||||||
|
`k_12` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_285` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_505` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_5945` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_209` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_83` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_oki_drum` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_oki_tuba` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_color` tinyint(4) DEFAULT NULL,
|
||||||
|
`k_205` tinyint(4) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Дамп данных таблицы `cartridges`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `cartridges` (`id`, `date`, `k_sp3500xe`, `k_12`, `k_285`, `k_505`, `k_5945`, `k_209`, `k_83`, `k_oki_drum`, `k_oki_tuba`, `k_color`, `k_205`) VALUES
|
||||||
|
(188, '2016-05-31', 0, 12, 6, 4, 3, 4, 4, 2, 2, 1, 5),
|
||||||
|
(189, '2016-05-31', 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(190, '2016-06-06', 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(191, '2016-06-06', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(192, '2016-06-08', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(193, '2016-06-08', 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(194, '2016-06-10', 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(195, '0000-00-00', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(196, '2016-06-09', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(197, '2016-06-14', 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(198, '2016-06-14', 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(199, '2016-06-15', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(200, '2016-06-15', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(201, '2016-06-16', 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(202, '2016-06-16', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(203, '2016-06-16', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(204, '2016-06-16', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(205, '2016-06-16', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(206, '2016-06-16', 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0),
|
||||||
|
(207, '2016-06-20', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(208, '2016-06-22', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(209, '2016-06-22', 0, 0, 6, 1, 0, 2, 0, 0, 0, 0, 0),
|
||||||
|
(210, '2016-06-22', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(211, '2016-06-23', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(212, '2016-06-24', 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(213, '2016-06-28', 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(214, '2016-06-28', 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(215, '2016-06-29', -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(216, '2016-06-29', 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(217, '2016-06-29', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(218, '2016-06-29', 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(219, '2016-06-29', 0, 0, -2, 0, 0, -1, 0, 0, 0, 0, 0),
|
||||||
|
(220, '2016-07-01', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(221, '2016-07-01', 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(222, '2016-07-04', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(223, '2016-07-06', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(224, '2016-07-07', 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(225, '2016-07-08', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(226, '2016-07-08', 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(227, '2016-07-11', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(228, '2016-07-12', 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 0),
|
||||||
|
(229, '0000-00-00', 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(230, '2016-07-12', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(231, '2016-07-13', 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(232, '2016-07-18', 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(233, '2016-07-18', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(234, '2016-07-18', -1, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(235, '2016-07-18', 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(236, '0000-00-00', 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(237, '2016-07-19', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(238, '2016-07-19', 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(239, '2016-07-25', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(240, '2016-07-27', 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(241, '2016-07-27', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(242, '2016-07-25', 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0),
|
||||||
|
(243, '2016-07-28', 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(244, '2016-07-28', 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(245, '2016-07-28', 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(246, '2016-07-29', 0, 4, 6, 2, 0, 0, 2, 0, 0, 0, 0),
|
||||||
|
(247, '0000-00-00', 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0),
|
||||||
|
(248, '0000-00-00', 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0),
|
||||||
|
(249, '2016-07-29', 0, 2, 1, 0, 0, 4, 0, 0, 0, 0, 0),
|
||||||
|
(250, '2016-08-01', 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(251, '2016-08-04', 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0),
|
||||||
|
(252, '2016-08-05', 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(253, '2016-08-05', 0, 0, -6, 0, 0, -4, 0, 0, 0, 0, 0),
|
||||||
|
(254, '2016-08-09', -1, 1, 9, 1, 0, 6, 0, 0, 0, 0, 0),
|
||||||
|
(255, '2016-08-15', 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0),
|
||||||
|
(256, '2016-08-16', 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(257, '2016-08-19', 0, 0, 0, 2, 0, 4, 0, 0, 0, 2, 0),
|
||||||
|
(258, '0000-00-00', 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0),
|
||||||
|
(259, '0000-00-00', 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(260, '2016-08-22', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(261, '2016-08-24', 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(262, '0000-00-00', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0),
|
||||||
|
(263, '2016-08-24', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(264, '2016-08-25', 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(265, '2016-08-29', 0, -1, 0, 0, 0, -2, 0, 0, 0, 0, 0),
|
||||||
|
(266, '2016-08-29', 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(267, '2016-08-31', 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(268, '2016-09-02', 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(269, '2016-09-06', 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(270, '2016-09-07', -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||||
|
(271, '2016-09-12', 0, 6, -2, 1, 3, -5, -2, 0, 1, 0, 0),
|
||||||
|
(272, '2016-09-16', 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(273, '2016-09-16', 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0),
|
||||||
|
(274, '2016-09-16', 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Структура таблицы `cartriges`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `cartriges`;
|
||||||
|
CREATE TABLE `cartriges` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`name` varchar(50) NOT NULL,
|
||||||
|
`action` tinyint(1) NOT NULL DEFAULT '1'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Дамп данных таблицы `cartriges`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `cartriges` (`id`, `name`, `action`) VALUES
|
||||||
|
(1, 'sp3500xe', 1),
|
||||||
|
(2, '12a', 1),
|
||||||
|
(3, '285a', 1),
|
||||||
|
(4, '505', 1),
|
||||||
|
(5, '5945', 1),
|
||||||
|
(6, '209', 1),
|
||||||
|
(7, '83', 1),
|
||||||
|
(8, 'oki drum', 1),
|
||||||
|
(9, 'oki tuba', 1),
|
||||||
|
(10, 'color', 1),
|
||||||
|
(11, '205', 1);
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Структура таблицы `departments`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `departments`;
|
||||||
|
CREATE TABLE `departments` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`name` char(50) CHARACTER SET utf8 DEFAULT '0',
|
||||||
|
`action` tinyint(1) NOT NULL DEFAULT '1'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Дамп данных таблицы `departments`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `departments` (`id`, `name`, `action`) VALUES
|
||||||
|
(1, 'склад', 1),
|
||||||
|
(2, 'IT', 1),
|
||||||
|
(3, 'АХО', 1),
|
||||||
|
(4, 'Директор', 1),
|
||||||
|
(5, 'СБ', 1),
|
||||||
|
(6, 'HR_(админы)', 1),
|
||||||
|
(7, 'HR', 1),
|
||||||
|
(8, 'ОРП', 0),
|
||||||
|
(9, 'Аналитики', 1),
|
||||||
|
(10, 'ГОК', 1),
|
||||||
|
(11, 'Call-Center', 1),
|
||||||
|
(12, 'Collection', 1),
|
||||||
|
(13, 'BackOffice', 1),
|
||||||
|
(14, 'ОСКО', 1),
|
||||||
|
(15, 'Переговорка', 1);
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Структура таблицы `floor`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `floor`;
|
||||||
|
CREATE TABLE `floor` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`name` varchar(50) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Дамп данных таблицы `floor`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `floor` (`id`, `name`) VALUES
|
||||||
|
(1, '1 этаж'),
|
||||||
|
(2, '2 этаж'),
|
||||||
|
(3, '3 этаж'),
|
||||||
|
(4, '4 этаж'),
|
||||||
|
(5, '9 этаж');
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Структура таблицы `print`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `print`;
|
||||||
|
CREATE TABLE `print` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`name` char(50) NOT NULL DEFAULT '0',
|
||||||
|
`model` char(50) NOT NULL DEFAULT '0',
|
||||||
|
`sn` char(50) NOT NULL DEFAULT '0',
|
||||||
|
`floor` char(50) DEFAULT NULL,
|
||||||
|
`unit` varchar(50) NOT NULL DEFAULT '0',
|
||||||
|
`inventar` varchar(50) NOT NULL DEFAULT '0',
|
||||||
|
`kartrig` char(50) NOT NULL DEFAULT '0',
|
||||||
|
`department` char(50) DEFAULT NULL,
|
||||||
|
`status` int(11) NOT NULL,
|
||||||
|
`functionals` tinytext,
|
||||||
|
`img` varchar(255) NOT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Дамп данных таблицы `print`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `print` (`id`, `name`, `model`, `sn`, `floor`, `unit`, `inventar`, `kartrig`, `department`, `status`, `functionals`, `img`) VALUES
|
||||||
|
(1, 'PRN0175', 'HP LJM1212', 'CNG9D5K03G', '1', '0055-7357', 'аренда', '85A', 'ГОК', 1, 'Печать, ксерокопия', ''),
|
||||||
|
(2, 'DSK0173', 'HP LJ 3030', 'CNBF180826', '1', '0000-0297', '3-21191', '12A', 'ГОК', 1, 'Печать, ксерокопия', ''),
|
||||||
|
(3, 'dsk96579', 'HP LJ 3030', 'CNBF181260', '4', '0003-3724', '3-21445', '12A', 'ОСКО', 1, '', ''),
|
||||||
|
(4, 'MININT-15MK94U', 'HP LJ 3030', 'CNBF033770', '5', '0000-0445', '3-21333', '12A', 'Аналитики', 1, '', ''),
|
||||||
|
(5, 'PRN0089', 'HP LJM4345', 'CN1N137307', '4', '0046-0980', '1-14040', 'Q5945A', 'Collection', 1, '', ''),
|
||||||
|
(6, 'PRN0082', 'oki mb460', 'AL08036096', '1', '0040-1056', 'аренда', 'туба polytoner PTO-460', 'ГОК', 1, '', ''),
|
||||||
|
(7, 'PRN0082', 'Samsung SCX-4824FN', 'sn-none', '1', '0040-4552', 'аренда', '209', '', 4, '', ''),
|
||||||
|
(8, 'dsk0000', 'HP LJ 3020', 'CNBF043705', '2', '0000-0176', '3-21441', '12A', 'none', 3, NULL, ''),
|
||||||
|
(9, 'DKUR0151', 'HP LJ 3030', 'CNBF033911', '2', '0000-5280', '3-21330', '12A', 'СБ', 1, NULL, ''),
|
||||||
|
(10, 'dsk0000', 'HP LJ 3030', 'CNBF105587', '2', '0000-3949', '3-21338', '12A', 'Call-Center', 3, '', ''),
|
||||||
|
(11, 'PRN0085', 'HP LJM1212', 'CNG9C8B03X', '2', '0006-7042', 'аренда', '85A', 'АХО', 1, NULL, ''),
|
||||||
|
(12, 'PRN0084', 'oki mb460', 'AL09039882', '', '0040-1058', 'аренда', 'туба polytoner PTO-460', '', 5, '', ''),
|
||||||
|
(13, 'prn0104', 'HP LJ 3055', 'CNCJ135105', '4', '0004-1742', 'аренда', '12A', 'Collection', 1, NULL, ''),
|
||||||
|
(14, 'PRN0116', 'Samsung SCX-4833', 'Z5P7BJIC40005MY', '1', '0043-8500', 'аренда', '205', 'Call-Center', 1, '', ''),
|
||||||
|
(15, 'PRN0032', 'Samsung SCX-4824FN', '6568BALZB01062M', '2', '0006-0514', 'аренда', '209', 'Call-Center', 1, '', ''),
|
||||||
|
(16, 'PRN0083', 'oki mb460', 'al03029587', '4', '0040-1057', 'аренда', 'туба polytoner PTO-460', 'Call-Center', 1, '', ''),
|
||||||
|
(17, 'PRN0084', 'Samsung SCX-4824FN', 'sn-none', '2', '0005-4938', 'аренда', '209', 'Call-Center', 4, NULL, ''),
|
||||||
|
(19, 'PRN0141', 'HP LJM1212', 'CNG9D8M19R', '2', '0050-9235', 'аренда', '85A', 'Call-Center', 1, '', ''),
|
||||||
|
(20, 'PRN0092', 'HP Color LaserJet CP2025n', 'CNHSN03557', '3', '0007-3604', '3-26541', 'color', 'IT', 1, NULL, ''),
|
||||||
|
(21, 'PRN0117', 'Samsung SCX-5637FR', 'Z5W3BJIC700002H', '3', '0043-8502', 'аренда', '205', 'OpenSpaсe', 1, 'печать, сканирование на e-mail, ксерокопия', 'scx5637.jpeg'),
|
||||||
|
(22, 'dsk0981', 'HP LJ 3030', 'CNBF180698', '4', '0000-0062', '3-21332', '12A', 'Collection', 1, NULL, ''),
|
||||||
|
(23, 'dsk1550', 'HP LJ 3030', 'CNBF145994', '4', '0000-0162', '3-21280', '12A', 'Переговорка', 1, NULL, ''),
|
||||||
|
(24, 'prn0091', 'HP LJM1212', 'CNG9C8B044', '4', '0006-7041', 'аренда', '85A', 'Директор', 1, NULL, ''),
|
||||||
|
(25, 'PRN0120', 'Samsung SCX-5637FR', 'Z5W3BJDC60003QD', '1', '0043-8440', 'аренда', '205', 'Call-Center', 1, '', ''),
|
||||||
|
(26, 'DSK4719', 'HP LJ 3020', 'CNBF012454', '5', '0000-5428', '3-21202', '12A', 'BackOffice', 1, NULL, ''),
|
||||||
|
(27, 'PRN0173', 'HP LJM1212', 'CNJ8F3N4R4', '2', '0053-3585', 'аренда', '85A', 'Call-Center', 1, NULL, ''),
|
||||||
|
(28, 'PRN0090', 'HP LJM4345', 'CNDVB33GBG', '1', '0005-4922', '1-14064', 'Q5945A', 'ГОК', 1, '', ''),
|
||||||
|
(29, 'PRN0047', 'HP LJ 2035', 'CNCK514977', '5', '0006-0613', 'аренда', '505А', 'BackOffice', 1, NULL, ''),
|
||||||
|
(31, 'PRN0111', 'Samsung SCX-4833', 'Z5P7BJIC4000CQA', '', '0043-8439', 'аренда', '205', '', 3, '', ''),
|
||||||
|
(32, 'PRN0115', 'Samsung SCX-4833', 'Z5P7BJIC40005EW', '', '0043-8501', 'аренда', '205', '', 5, '', ''),
|
||||||
|
(33, 'dsk0651', 'HP LJ 3030', 'CNBF146225', '5', '0045-5575', '3-21256', '12A', 'HR', 1, NULL, ''),
|
||||||
|
(34, 'PRN0094', 'Samsung SCX-4824FN', '6568BALZB01138X', '5', '0006-0627', 'аренда', '209', 'HR_(админы)', 1, NULL, ''),
|
||||||
|
(35, 'PRN0178', 'HP LJ M1522', 'VNHTB1HGY1', '', '0005-2237', '3-26756', '36A', '', 3, '', ''),
|
||||||
|
(36, 'dsk0000', 'HP LJ 3030', 'CNBF105615', 'none', '0000-0652', '3-21206', '12A', 'none', 3, NULL, ''),
|
||||||
|
(37, 'dsk0000', 'HP LJ 3030', 'CNBF170999', 'none', '0000-0409', '3-21247', '12A', 'none', 3, NULL, ''),
|
||||||
|
(38, 'dsk0000', 'HP LJ 3030', 'CNBF160377', 'none', '0000-2888', '?', '12A', 'none', 3, NULL, ''),
|
||||||
|
(39, 'prn0083', 'Samsung SCX-4824FN', '-', '2', '-', '-', '209', 'Call-Center', 4, NULL, ''),
|
||||||
|
(40, 'prn0180', 'HP LJM1212', 'CNG9D8R04N', '2', '0043-8493', '?', '85A', 'Call-Center', 1, NULL, ''),
|
||||||
|
(41, 'PRN0185', 'Ricoh Aficio SP 3510SF', 'T332Q602704', '2', '0045-1758', 'аренда', 'sp3500xe', 'Call-Center', 1, NULL, ''),
|
||||||
|
(42, 'prn0183', 'HP m127fn', 'CNB9H5Y7S1', '5', '0072-9776', 'аренда', '83a', 'HR', 1, '', ''),
|
||||||
|
(43, 'prn0115', 'Samsung scx-4833fp', 'Z5P7BJIC4001F9W', '5', '0040-1219', '', '205', 'BackOffice', 1, '', '');
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Структура таблицы `status`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `status`;
|
||||||
|
CREATE TABLE `status` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`name` char(50) NOT NULL DEFAULT '0'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Дамп данных таблицы `status`
|
||||||
|
--
|
||||||
|
|
||||||
|
INSERT INTO `status` (`id`, `name`) VALUES
|
||||||
|
(1, 'В работе'),
|
||||||
|
(2, 'В ремонте'),
|
||||||
|
(3, 'На складе (рабочий)'),
|
||||||
|
(4, 'На складе (списан)'),
|
||||||
|
(6, 'Подмена (установлен)'),
|
||||||
|
(7, 'Подмена (снят)');
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Индексы сохранённых таблиц
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Индексы таблицы `cartridges`
|
||||||
|
--
|
||||||
|
ALTER TABLE `cartridges`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Индексы таблицы `cartriges`
|
||||||
|
--
|
||||||
|
ALTER TABLE `cartriges`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Индексы таблицы `departments`
|
||||||
|
--
|
||||||
|
ALTER TABLE `departments`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Индексы таблицы `floor`
|
||||||
|
--
|
||||||
|
ALTER TABLE `floor`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Индексы таблицы `print`
|
||||||
|
--
|
||||||
|
ALTER TABLE `print`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD KEY `status` (`status`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Индексы таблицы `status`
|
||||||
|
--
|
||||||
|
ALTER TABLE `status`
|
||||||
|
ADD PRIMARY KEY (`id`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT для сохранённых таблиц
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT для таблицы `cartridges`
|
||||||
|
--
|
||||||
|
ALTER TABLE `cartridges`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=275;
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT для таблицы `cartriges`
|
||||||
|
--
|
||||||
|
ALTER TABLE `cartriges`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12;
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT для таблицы `departments`
|
||||||
|
--
|
||||||
|
ALTER TABLE `departments`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=16;
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT для таблицы `floor`
|
||||||
|
--
|
||||||
|
ALTER TABLE `floor`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT для таблицы `print`
|
||||||
|
--
|
||||||
|
ALTER TABLE `print`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=44;
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT для таблицы `status`
|
||||||
|
--
|
||||||
|
ALTER TABLE `status`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
Self Extractor execution begins.
|
||||||
|
Window class registered.
|
||||||
|
Extracting files.
|
||||||
|
Dialog: Preparing to install...
|
||||||
|
Extracting to: \\dsk1111\d$\Install\Nice\Nice WFM
|
||||||
|
Self Extractor execution begins.
|
||||||
|
Window class registered.
|
||||||
|
Extracting files.
|
||||||
|
Dialog: Preparing to install...
|
||||||
|
Extracting to: \\dsk1111\d$\Install\Nice\Nice WFM
|
||||||
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 202 KiB |
|
After Width: | Height: | Size: 202 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 275 KiB |
|
After Width: | Height: | Size: 191 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 239 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: Andrey
|
||||||
|
* Date: 01.04.2016
|
||||||
|
* Time: 17:37
|
||||||
|
*/
|
||||||
|
|
||||||
|
// front controller
|
||||||
|
|
||||||
|
|
||||||
|
// 1. Общие настройки
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
// 2. Подключение файлов системы
|
||||||
|
|
||||||
|
define('ROOT', dirname(__FILE__)); //инициализируем константу содержащую расположение директории сайта на сервере
|
||||||
|
define('TMPL', '/views/default/'); //инициализируем константу содержащую путь до текущего оформления сайта
|
||||||
|
define('DOMEN', 'prints.local'); //инициализируем константу содержащую путь до текущего оформления сайта
|
||||||
|
define('IMG_PRN', '/images/print/'); //инициализируем константу содержащую путь до текущего оформления сайта
|
||||||
|
define('LIB', '/lib'); //инициализируем константу содержащую путь до текущего оформления сайта
|
||||||
|
|
||||||
|
require_once(ROOT . '/components/Autoload.php');
|
||||||
|
|
||||||
|
|
||||||
|
// 3. Подключение к БД
|
||||||
|
|
||||||
|
|
||||||
|
// 4. Вызов router
|
||||||
|
|
||||||
|
$router = new Router(); //вызываем класс роутер
|
||||||
|
$router->run(); //
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
var MultiSelect = (function (GLOB) {
|
||||||
|
// Добавить элементы в поле назначения:
|
||||||
|
function moveItems(btn, srcSelect, dstSelect) {
|
||||||
|
btn.onclick = function () {
|
||||||
|
var i;
|
||||||
|
for (i = srcSelect.options.length - 1; i >= 0; i -= 1) {
|
||||||
|
if (srcSelect.options[i].selected) {
|
||||||
|
dstSelect.add(new Option(srcSelect.options[i].text, srcSelect.options[i].value));
|
||||||
|
srcSelect.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// Подготовка данных к отправке:
|
||||||
|
function formSubmit(element) {
|
||||||
|
// Ф-ция делает все элеметы спика select выбраными:
|
||||||
|
function makeSelect(element) {
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < element.options.length; i += 1) {
|
||||||
|
element.options[i].selected = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Ниже мы всего лишь кроссбрауз. устанавливаем слушатель
|
||||||
|
// события отправки формы:
|
||||||
|
if (GLOB.document.addEventListener) {
|
||||||
|
element.form.addEventListener("submit", function () {
|
||||||
|
makeSelect(element);
|
||||||
|
}, true);
|
||||||
|
} else if (GLOB.document.attachEvent) {
|
||||||
|
element.form.attachEvent("onsubmit", function () {
|
||||||
|
makeSelect(element);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
element.form.onsubmit = function () {
|
||||||
|
makeSelect(element);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return function (srcSelect, dstSelect, takeBtn, dropBtn) {
|
||||||
|
return {
|
||||||
|
init : function (srcSelect, dstSelect, takeBtn, dropBtn) {
|
||||||
|
moveItems(takeBtn, srcSelect, dstSelect);
|
||||||
|
moveItems(dropBtn, dstSelect, srcSelect);
|
||||||
|
formSubmit(dstSelect);
|
||||||
|
}
|
||||||
|
}.init(srcSelect, dstSelect, takeBtn, dropBtn);
|
||||||
|
};
|
||||||
|
}(this));
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
$(function(){
|
||||||
|
|
||||||
|
//Живой поиск
|
||||||
|
$('.searching').bind("change keyup input click", function() {
|
||||||
|
if(this.value.length >= 2){
|
||||||
|
$.ajax({
|
||||||
|
type: 'post',
|
||||||
|
url: "phonebook/search", //Путь к обработчику
|
||||||
|
data: {'searching':this.value},
|
||||||
|
response: 'text',
|
||||||
|
success: function(data){
|
||||||
|
$(".search_result").html(data).fadeIn(); //Выводим полученые данные в списке
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*$(".search_result").hover(function(){
|
||||||
|
$(".who").blur(); //Убираем фокус с input
|
||||||
|
})
|
||||||
|
|
||||||
|
//При выборе результата поиска, прячем список и заносим выбранный результат в input
|
||||||
|
$(".search_result").on("click", "li", function(){
|
||||||
|
s_user = $(this).text();
|
||||||
|
//$(".who").val(s_user).attr('disabled', 'disabled'); //деактивируем input, если нужно
|
||||||
|
$(".search_result").fadeOut();
|
||||||
|
})*/
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<IfModule mod_php4.c>
|
||||||
|
php_flag engine Off
|
||||||
|
</IfModule>
|
||||||
|
<IfModule mod_php5.c>
|
||||||
|
php_flag engine Off
|
||||||
|
</IfModule>
|
||||||
|
<IfModule mod_php6.c>
|
||||||
|
php_flag engine Off
|
||||||
|
</IfModule>
|
||||||
|
<IfModule mod_cgi.c>
|
||||||
|
Options -ExecCGI
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
RemoveHandler .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc
|
||||||
|
RemoveType .cgi .pl .py .pyc .pyo .phtml .php .php3 .php4 .php5 .php6 .pcgi .pcgi3 .pcgi4 .pcgi5 .pchi6 .inc
|
||||||
|
SetHandler None
|
||||||
|
SetHandler default-handler
|
||||||
|
|
||||||
|
# Remove both lines below if you want to render HTML files from the upload folder
|
||||||
|
AddType text/plain .html
|
||||||
|
AddType text/plain .htm
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>CKFinder Changelog</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 id="ckfinder-changelog">CKFinder Changelog</h1>
|
||||||
|
<p><a href="http://cksource.com/ckfinder">CKFinder</a></p>
|
||||||
|
<p>Copyright (c) 2007-2016, CKSource - Frederico Knabben. All rights reserved.</p>
|
||||||
|
<h2 id="version-3-4-1">Version 3.4.1</h2>
|
||||||
|
<h3 id="new-features">New Features</h3>
|
||||||
|
<ul>
|
||||||
|
<li class="net">Added support for FTP storage.</li></ul>
|
||||||
|
<h3 id="fixed-issues">Fixed Issues</h3>
|
||||||
|
<ul>
|
||||||
|
<li class="net">Improved Thumbnail command performance.</li></ul>
|
||||||
|
<h3 id="localization-updates">Localization Updates</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Updated: Greek and Turkish.</li></ul>
|
||||||
|
<h2 id="version-3-4">Version 3.4</h2>
|
||||||
|
<h3 id="new-features">New Features</h3>
|
||||||
|
<ul>
|
||||||
|
<li>The <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-settings_change_GROUP_NAME"><code>settings:change:GROUP:NAME</code></a> event has a new parameter: <code>previousValue</code>.</li><li>Added the <a href="https://cksource.com/ckfinder/demo#compact-ui">Compact View</a> for displaying files in columns (not supported in IE9).</li><li>The <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Config-cfg-defaultViewType"><code>defaultViewType</code></a> configuration option accepts a new value: <code>compact</code>.</li><li>Added the <code>width</code> parameter for columns defined for List View in the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-listView_columns"><code>listView:columns</code></a> event.</li><li>Added the "OK" button to information dialogs (those created using the <code>dialog:info</code> request).</li><li class="net">Improved configuration validation.</li><li class="net">Added progress tracking for time-consuming operations.</li><li class="net">Added support for IIS virtual directories in the local storage adapter.</li></ul>
|
||||||
|
<h3 id="fixed-issues">Fixed Issues</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Added the missing <code>command:before:FileUpload</code>, <code>command:ok:FileUpload</code> and <code>command:error:FileUpload</code> events for uploading files.</li><li>Fixed focus in the settings panel when changing the view type.</li><li>Fixed double <code>toolbar:reset:Main:folder</code> event in compact mode when the user selects a folder in the files pane.</li><li>Fixed keyboard navigation for disabled context menu items.</li><li>Removed the possibility to invoke the Delete File command by keyboard inside a folder with <code>ACL FILE_DELETE</code> set to <code>false</code>.</li><li>Removed the possibility to invoke the Rename File command by keyboard inside a folder with <code>ACL FILE_RENAME</code> set to <code>false</code>.</li><li>Fixed drag&drop uploads in List View.</li><li>Updated Javascript code prettifier for samples.</li><li class="php">Fixed file permission issue occurring during file upload on some IIS server configurations.</li><li class="net">Fixed HTML file extension matching.</li><li class="net">Fixed URL generation for resized images in backends that use the Proxy command.</li><li class="net">Added missing file size field to the SaveImage command response.</li><li class="net">Improved thumbnail caching.</li></ul>
|
||||||
|
<h3 id="localization-updates">Localization Updates</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Added: Swiss German (thanks to <a href="https://twitter.com/mirogrenda">Miro Grenda</a>!) and Ukrainian (thanks to Holovin Yevhen Nikolayevich!).</li><li>Updated: Chinese, Czech, Esperanto, French, German, Kurdish, Latvian, Polish, Russian, Slovakian, Spanish and Turkish.</li></ul>
|
||||||
|
<h2 id="version-3-3-1">Version 3.3.1</h2>
|
||||||
|
<h3 id="fixed-issues">Fixed Issues</h3>
|
||||||
|
<ul>
|
||||||
|
<li class="net">Fixed performance issue in folders with more than 1000 files.</li></ul>
|
||||||
|
<h2 id="version-3-3">Version 3.3</h2>
|
||||||
|
<h3 id="new-features">New Features</h3>
|
||||||
|
<ul>
|
||||||
|
<li class="php">Added support for Microsoft Azure Storage.</li><li class="net">Added a stable version of the ASP.NET connector.</li><li class="net">Added support for Microsoft Azure Storage.</li><li class="net">Added support for Amazon S3 Storage.</li></ul>
|
||||||
|
<h3 id="backward-incompatible-changes">Backward Incompatible Changes</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Language files have undergone a major reorganization. Obsolete keys were removed.</li><li>Events related to rendering columns in the files pane were changed: <code>listView:file:column:NAME</code>, <code>listView:folder:column:NAME</code>.</li></ul>
|
||||||
|
<h3 id="fixed-issues">Fixed Issues</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Performance improvements for rendering the files pane with thousands of items.</li><li>Thumbnail slider enabled in list view when loading CKFinder.</li><li>Choosing files with double click does not fetch the file URL for some remote backends.</li><li>Invalid time when parsing time in the 12-hour clock system.</li><li class="php">Image Edit: Saving an image that exceeds <code>maxWidth</code>/<code>maxHeight</code> throws an error.</li></ul>
|
||||||
|
<h3 id="localization-updates">Localization Updates</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Added: Bosnian.</li><li>Updated: Brazilian Portuguese, Czech, Esperanto, French, German, Italian, Kurdish, Latvian, Persian, Polish, Russian, Spanish and Swedish.</li></ul>
|
||||||
|
<h2 id="version-3-2-1">Version 3.2.1</h2>
|
||||||
|
<h3 id="fixed-issues">Fixed Issues</h3>
|
||||||
|
<ul>
|
||||||
|
<li>In widget mode (in Internet Explorer/Edge only) the CSRF protection was too strict and did not allow for actions that should be allowed.</li></ul>
|
||||||
|
<h2 id="version-3-2">Version 3.2</h2>
|
||||||
|
<h3 id="new-features">New Features</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Added new view for files pane: a list view with file details.</li><li>Added sorting of files in files pane by name, date and size.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Config-cfg-listViewIconSize"><code>listViewIconSize</code></a> configuration option.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Config-cfg-defaultSortBy"><code>defaultSortBy</code></a> configuration option.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Config-cfg-defaultSortByOrder"><code>defaultSortByOrder</code></a> configuration option.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Config-cfg-defaultViewType"><code>defaultViewType</code></a> configuration option.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-listView_columns"><code>listView:columns</code></a> event.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-listView_file_column_NAME"><code>listView:file:column:NAME</code></a> event.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-listView_folder_column_NAME"><code>listView:folder:column:NAME</code></a> event.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-resources_show_before"><code>resources:show:before</code></a> event.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-dialog_close_NAME"><code>dialog:close:NAME</code></a> event.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-request-file_getActive"><code>file:getActive</code></a> request.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-request-csrf_getToken"><code>csrf:getToken</code></a> request.</li><li>Added the <code>sendPostAsJson</code> parameter to the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-request-command_send"><code>command:send</code></a> request</li><li>The <code>view</code> parameter for the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-request-page_create"><code>page:create</code></a> request is now optional.</li></ul>
|
||||||
|
<h3 id="fixed-issues">Fixed Issues</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Individual settings views have a proper name in the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-view_NAME"><code>view:NAME</code></a> event instead of a single <code>Setting</code>.</li><li>Compact mode: Keyboard navigation in breadcrumbs is inverted for RTL languages.</li><li>Fixed an issue that prevented to move or copy over 250 files on a default PHP installation.</li><li>Fixed wrong error message for an empty file name.</li><li>Fixed detection of swipe direction when opening panels on touch screen devices.</li><li>Compact mode: Focus on filter box is lost when typing.</li><li>Thumbnails are not refreshed after editing an image.</li><li>Files filter is not refreshed after clicking a folder.</li><li>Focus is lost after moving files.</li><li>The toolbar is unnecessarily rendered when lazy loading of a folder finishes and a file was selected.</li></ul>
|
||||||
|
<h3 id="localization-updates">Localization Updates</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Added: Esperanto.</li></ul>
|
||||||
|
<h2 id="version-3-1">Version 3.1</h2>
|
||||||
|
<h3 id="security-updates">Security Updates</h3>
|
||||||
|
<p>As a result of security testing and hacking that we did on CKFinder 3 we discovered some potential security concerns in the server-side part of the application.
|
||||||
|
These issues affected actions that only authenticated users could perform solely in locations specified in your CKFinder backends configuration, but since
|
||||||
|
in some cases it was possible to skip ACL checks or file extension checks, <strong>an upgrade is highly recommended</strong>.</p>
|
||||||
|
<h3 id="new-features">New Features</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Improved accessibility. Added compatibility with screen readers.</li><li>Reworked keyboard navigation in the entire application. Implemented custom <kbd>Tab</kbd> key support to resolve inconsistency between browsers.</li><li>Added the Keyboard Shortcuts dialog window — press <kbd>?</kbd> to open it.</li><li>Greatly improved application performance when loading files from remote locations (e.g. Amazon S3).</li><li>Improved performance by reducing the number of situations when the entire files pane is reloaded.</li><li>Improved performance by caching files on subsequent clicks of the folder.</li><li>Added Microsoft Edge compatibility.</li><li>Added preview of PDF files in the gallery.</li><li>Added drag and drop support for files onto folders and breadcrumbs in compact mode.</li><li>Added busy dialog and progress tracking for time-consuming operations.</li><li>Added Proxy command support. It is now possible to view files stored outside the document root or in remote backends in the gallery.</li><li class="php">Added the <a href="http://docs.cksource.com/ckfinder3-php/commands.html#command_proxy"><code>Proxy</code></a> command and the corresponding <a href="http://docs.cksource.com/ckfinder3-php/configuration.html#backend_option_useProxyCommand"><code>useProxyCommand</code></a> backend configuration option.</li><li>Reworked the Choose Scaled dialog window.</li><li>Edit Image feature now warns against closing without saving changes.</li><li>Added the <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-request-folder_getIcon"><code>folder:getIcon</code></a> request.</li><li>Removed Maximize/Minimize buttons in popup mode as the browser provides native controls for it.</li><li class="php">Improved performance by caching file previews.</li><li class="php">Added the <a href="http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_cache"><code>cache</code></a> option that configures cache lifetime for various CKFinder components.</li><li class="php">Added the <a href="http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_tempDirectory"><code>tempDirectory</code></a> option that configures the path to the temporary files folder used by CKFinder.</li><li class="php">Added the <a href="http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_sessionWriteClose"><code>sessionWriteClose</code></a> option that configures whether the connector should close write access to the session to avoid performance issues.</li><li class="php">Added the <a href="http://docs.cksource.com/ckfinder3-php/commands.html#command_operation"><code>Operation</code></a> command that tracks the progress of operation in time-consuming connector commands.</li></ul>
|
||||||
|
<h3 id="backward-incompatible-changes">Backward Incompatible Changes</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Context menu API has undergone major changes. See the updated <a href="http://docs.cksource.com/ckfinder3/#!/guide/dev_contextmenu-section-ckfinder-3.1%2B">context menu documentation</a>.</li><li>Toolbar API events <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-toolbar_reset_NAME"><code>toolbar:reset:NAME</code></a> and <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-event-toolbar_reset_NAME_EVENT"><code>toolbar:reset:NAME:EVENT</code></a> - <code>data.toolbar</code> is now a <code>Backbone.Collection</code>, not an array.</li><li>The <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Application-request-file_getIcon"><code>file:getIcon</code></a> request no longer has the <code>extension</code> parameter. Pass the <code>file</code> parameter instead.</li></ul>
|
||||||
|
<h3 id="fixed-issues">Fixed Issues</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Compact mode: Breadcrumb was hidden when entering a folder with many files.</li><li>Compact mode: There was no way to enter a folder on Android.</li><li>Compact mode: Broken border around CKFinder when viewing the top level folder with resource types.</li><li>Edit Image: Loading an image was not working when the domain name contained a dash character.</li><li>Edit Image: Context menu item was enabled when the user had no permissions to edit the file.</li><li>Edit Image: Resize option was not available in compact mode.</li><li>Edit Image: Reset button should have been disabled if there was nothing to reset.</li><li>Edit Image: Fixed validation of provided values in the edit image controls.</li><li>Edit Image: There was no information about failing to save a file.</li><li>Edit Image: It was possible to crop an area bigger than the edited image.</li><li>Edit Image: Fixed progress bar behavior.</li><li>Filter input: Clearing filter input did not result in showing all files in IE9.</li><li>Filter input: Filter should remember its state if it is still active.</li><li>Focusing elements: Focus in context menu and toolbar did not cycle.</li><li>Focusing elements: Focus was lost after resizing an image.</li><li>Focusing elements: Focus was not remembered when returning to the files pane.</li><li>Focusing elements: Pressing <kbd>Tab</kbd> should focus the first item in a component (file, folder, toolbar button), not the container.</li><li>Focusing elements: Lock focus chain within the settings panel.</li><li>Scrolling files: Scrolling on mobile devices was troublesome and sometimes did not work at all.</li><li>Scrolling files: Files were unnecessarily selected on scroll on mobile devices.</li><li>Thumbnails: Problem with thumbnails in widgets/popups when <a href="http://docs.cksource.com/ckfinder3/#!/api/CKFinder.Config-cfg-connectorPath"><code>connectorPath</code></a> did not include the domain.</li><li>Thumbnails: Thumbnails loaded with a significant delay for a larger number of files.</li><li>Thumbnails: Thumbnails were not refreshed in certain scenarios.</li><li>iOS/Safari: Thumbnails were not shown.</li><li>iOS/Safari: Popup sample did not work.</li><li>iOS/Safari: The configured height of the widget was ignored, instead CKFinder height depended on the number of files inside.</li><li>iOS/Safari: Downloading files did not work.</li><li>Setting global configuration did not work for widgets and popups.</li><li>There was no Close button available after file upload.</li><li>It should not be possible to move dialog windows.</li><li>Fixed various UI glitches in the RTL interface.</li><li>Video or image sometimes overlapped file preview controls in file preview.</li><li>Delete files confirmation dialog did not appear when the files pane was scrolled.</li><li>Changed the confusing empty folder message in the read-only mode.</li><li>Removed the notification about correctly uploaded file in IE9.</li><li>Resolved an issue with validating license names that started with <code>www[0-9]</code> or that contained upper case letters.</li><li>In certain scenarios not all available toolbar buttons were shown in CKFinder.</li><li>Fixed the look of the "More" drop-down in the toolbar.</li><li class="php">Empty <code>directory</code> key in the backend definition resulted in a double slash in the file URL.</li></ul>
|
||||||
|
<h3 id="localization-updates">Localization Updates</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Added: Basque, Kurdish.</li><li>Updated: Brazilian Portuguese, Chinese, Croatian, Czech, Danish, Esperanto, Estonian, French, German, Greek, Hungarian, Italian, Korean, Norwegian, Persian, Polish and Russian.</li></ul>
|
||||||
|
<h2 id="version-3-0">Version 3.0</h2>
|
||||||
|
<p>A brand new version of CKFinder, currently available only for PHP. For an overview of new features, see the <a href="http://cksource.com/blog/CKFinder-3.0-for-PHP-Released">announcement about CKFinder 3.0 for PHP</a>.</p>
|
||||||
|
<ul>
|
||||||
|
<li>New architecture based on jQuery, jQuery Mobile, Backbone, Marionette, and RequireJS.</li><li>Built-in image editor.</li><li>Customizable skins compatible with jQuery UI Themeroller.</li><li>Full responsiveness, great mobile support.</li><li>Cloud storage support (Amazon S3, Dropbox) and FTP connector.</li></ul>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,295 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>CKFinder License</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>CKFinder License Agreement, Version 3.1</h2>
|
||||||
|
|
||||||
|
<p>This document (“Agreement”) is a legal agreement between You, either an individual or a Legal Entity, and
|
||||||
|
CKSource sp. z o.o. sp.k., with its registered office in Warsaw, at ul. Zygmunta Słomińskiego 15 lok. 508, 00-195
|
||||||
|
Warsaw, Poland, NIP number 5252621537, REGON: 361766395 (“CKSource”), covering Your permissions to
|
||||||
|
reproduce and distribute the Software under the License terms defined hereby.</p>
|
||||||
|
|
||||||
|
<h3>1. Definitions</h3>
|
||||||
|
|
||||||
|
<p>“Agreement Name” shall mean the name used to reference this Agreement in any context, which
|
||||||
|
is “CKFinder License Agreement 3.1” or “CKFinder License 3.1”.</p>
|
||||||
|
|
||||||
|
<p>“Software” or “CKFinder” shall mean the copyrighted material owned by CKSource,
|
||||||
|
subject to the terms of this License. The Software is publicly, uniquely, and in its entirety recognizable
|
||||||
|
by the “CKFinder” name (“Software Name”).</p>
|
||||||
|
|
||||||
|
<p>“Software Release” or “Release” shall mean a set of files distributed by CKSource, or
|
||||||
|
anyone authorized to distribute it, that represents the Software. A Release is uniquely identified by the
|
||||||
|
Software Name and a code. Such code is generally referenced as the Software version or revision number, or a
|
||||||
|
combination of both.</p>
|
||||||
|
|
||||||
|
<p>“Release Date” shall mean the day that CKSource started distributing a Release.</p>
|
||||||
|
|
||||||
|
<p>“Product” shall mean a single computer program or one or more websites (“Program”)
|
||||||
|
(i) owned by You, or (ii) to which the owner grants You the permission to act in behalf of the owner for the
|
||||||
|
purposes of this Agreement. A Program family or a group of Programs does not constitute a Product for the
|
||||||
|
scope of this Agreement. A Program that goes in competition with the Software in the marketplace does not
|
||||||
|
constitute a valid Product for the scope of this Agreement.</p>
|
||||||
|
|
||||||
|
<p>“Development Server” shall mean a computer with one or more computer central processing units
|
||||||
|
(CPU’s) that operates for the exclusive purpose of software development or software testing.</p>
|
||||||
|
|
||||||
|
<p>“Development Activity” shall mean the act of interacting with the Software or one of its
|
||||||
|
Releases, in any number of Products owned or produced by You, with the intent of installation,
|
||||||
|
customization, configuration, testing, documentation, or any other software development activity related to
|
||||||
|
the Software.</p>
|
||||||
|
|
||||||
|
<p>“Developer” shall mean an authorized person designated by You to perform Development
|
||||||
|
Activities.</p>
|
||||||
|
|
||||||
|
<p>“Production Website” shall mean a Product with the Software installed, which already had
|
||||||
|
Development Activities performed, and that has been delivered to end-users for production usage. Maintenance
|
||||||
|
activities performed on Production Websites, excluding software development activities related to the
|
||||||
|
Software, are not considered Development Activities.</p>
|
||||||
|
|
||||||
|
<p>“Hostname” shall mean a unique name by which a website is reachable in a network. This includes,
|
||||||
|
but is not limited to, a website IP address. (For example, if a website is reachable by the Internet
|
||||||
|
address “<a href="http://www.example.com/">http://www.example.com/</a>”, the Hostname
|
||||||
|
is “<a href="http://www.example.com/">www.example.com</a>”.)</p>
|
||||||
|
|
||||||
|
<p>“Legal Entity” shall mean the union of the acting entity and all other entities that control, are
|
||||||
|
controlled by, or are under common control of that entity. For the purposes of this definition, "control"
|
||||||
|
means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by
|
||||||
|
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii)
|
||||||
|
beneficial ownership of such entity.</p>
|
||||||
|
|
||||||
|
<p>“Effective Date” means the date on which the Legal Evidence is made effective.</p>
|
||||||
|
|
||||||
|
<p>“You” (or “Your”) shall mean an individual or a Legal Entity exercising permissions
|
||||||
|
granted by the License and accepting this Agreement.</p>
|
||||||
|
|
||||||
|
<h3>2. Grant of License</h3>
|
||||||
|
|
||||||
|
<p>Subject to the terms of this Agreement, CKSource hereby grants You, in one of the License Models described in
|
||||||
|
Section 4, a non-exclusive, perpetual, irrevocable, royalty free, worldwide license (“License”)
|
||||||
|
to use, reproduce, modify, and distribute a Software Release in a collective work assembled with the
|
||||||
|
Product.</p>
|
||||||
|
|
||||||
|
<p>You should carefully read the following terms and conditions before using, installing, copying, or
|
||||||
|
distributing the Software. Unless otherwise agreed in writing by CKSource, your use, installation, copying,
|
||||||
|
or distribution of the Software indicates your acceptance of this License.</p>
|
||||||
|
|
||||||
|
<h3>3. Scope of License</h3>
|
||||||
|
|
||||||
|
<p>All rights of any kind to the Software, which are not expressly granted in this Agreement, are entirely and
|
||||||
|
exclusively reserved to and by CKSource. The Software is protected by applicable national and international
|
||||||
|
laws and treaties.</p>
|
||||||
|
|
||||||
|
<p>You may use, install, copy, and distribute the Software solely as provided in this Agreement. You may not
|
||||||
|
rent, lease, loan, sublicense, reverse engineer, decompile, disassemble, or create derivative works based on
|
||||||
|
the Software, in whole or in part, nor permit anyone else to do so.</p>
|
||||||
|
|
||||||
|
<p>It is agreed that in exchange for the license set forth herein, you will pay a license fee (“License
|
||||||
|
Fee”). The fee value will be specified by CKSource at the moment of the purchase.</p>
|
||||||
|
|
||||||
|
<h3>4. License Models</h3>
|
||||||
|
|
||||||
|
<p>The Software may be assembled with the Product and redistributed in respect of one, and only one, of the
|
||||||
|
following models (“License Models”) of Your choice:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>a) (“Basic”) Assembling the Software into a Product distributed as a single website (“Site”).
|
||||||
|
The Site URL (“URL”) must be specified at the moment of purchase. The license will not be
|
||||||
|
valid for sub-domains of the specified URL. This license includes 2 Developer licenses that cover
|
||||||
|
Development Activities exclusively related to the Site.
|
||||||
|
</li>
|
||||||
|
<li>b) (“Professional”) Assembling the Software with a maximum of 3 websites (“Professional
|
||||||
|
Sites”) owned or produced by You. Sites produced by third-parties with Software produced by You
|
||||||
|
are not included in this License Model. This license includes 5 Developer licenses that cover
|
||||||
|
Development Activities exclusively related to Professional Sites.
|
||||||
|
</li>
|
||||||
|
<li>c) (“Developer”) License granting Development Activities to a single Developer
|
||||||
|
Person.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>A valid Developer license is required for every single Developer Person. Developer licenses cannot be shared
|
||||||
|
among different Developer Persons. Non-Development Activities on Production Websites do not require
|
||||||
|
Developer licenses.</p>
|
||||||
|
|
||||||
|
<p>License Fee values may differ depending on the license model.</p>
|
||||||
|
|
||||||
|
<h3>5. Unlicensed Copies</h3>
|
||||||
|
|
||||||
|
<p>If You did not pay License Fee, You may use unlicensed copies of CKFinder for the exclusive purpose of
|
||||||
|
demonstration. In this case You will be using CKFinder in "demo mode". Without derogating from the
|
||||||
|
forgoing, You may not use CKFinder in "demo mode" for commercial purposes. CKFinder shall only be
|
||||||
|
used for evaluation purposes and may not be used or disclosed for any other purposes, including, without
|
||||||
|
limitation, for external distribution. You may not remove the demo notices from the interface nor disable
|
||||||
|
the ability to display such notices or otherwise modify CKFinder. Product support, if any, is not offered
|
||||||
|
for CKFinder in "demo mode".</p>
|
||||||
|
|
||||||
|
<h3>6. Agreement Acceptance</h3>
|
||||||
|
|
||||||
|
<p>This Agreement is automatically accepted by both parties as long as You are in possession of legal evidence (“Legal
|
||||||
|
Evidence”) that the acceptance has taken place. The Legal Evidence can be represented by (i) a copy of
|
||||||
|
this Agreement signed by You and CKSource or (ii) a valid Certificate of License Ownership, provided by
|
||||||
|
CKSource and addressed to You. The Legal Evidence must precisely indicate this Agreement Name, the Software
|
||||||
|
Name, the License Model You have chosen, and the following restrictive information, if applicable:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>a) If You have chosen the Basic License Model, the Site Hostname must be indicated in the Legal
|
||||||
|
Evidence. This Agreement will be valid for the Software assembled with the Site publicized under the
|
||||||
|
Site Hostname only. Other Sites are excluded from this Agreement as long as a Legal Evidence is not
|
||||||
|
produced for each of these Sites.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Legal Evidences for different combinations of License Models, Sites, and Products will not restrict each
|
||||||
|
other and will not interfere in the rights granted to You by each of them.</p>
|
||||||
|
|
||||||
|
<p>Legal Evidences are not transferable to different Sites and Products.</p>
|
||||||
|
|
||||||
|
<h3>7. Limitation on Releases</h3>
|
||||||
|
|
||||||
|
<p>This agreement is valid for all Releases of the Software with Release Dates within or before the 365 days
|
||||||
|
that follow the Effective Date (“Upgrade Period”). CKSource has no obligation to provide you any
|
||||||
|
Release that is not released for general distribution to other CKSource licensees. Nothing in this Agreement
|
||||||
|
shall be construed to obligate CKSource to provide additional Releases to You under any circumstances.</p>
|
||||||
|
|
||||||
|
<h3>8. Support</h3>
|
||||||
|
|
||||||
|
<p>CKSource shall provide support for Developers covered by valid Developer licenses for the period of 365 days
|
||||||
|
following the Effective Date (“Support Period”). Support shall be limited to electronic
|
||||||
|
messaging access. CKSource shall keep You informed, either per CKSource readiness or by following your
|
||||||
|
request, including changes to it, about the rules and procedures that You must perform to enjoy support
|
||||||
|
under the terms of this Agreement. Support topics shall be limited to the following (each a “Support
|
||||||
|
Request”):</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>a) problem solving,</li>
|
||||||
|
<li>b) bug reporting,</li>
|
||||||
|
<li>c) and documentation clarification.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>The number of Support Requests that CKSource is entitled to accept from You is limited to 2 per month if You
|
||||||
|
have chosen the Basic license model, or 5 per month if You have chosen the Professional license model.
|
||||||
|
CKSource may refuse Support Requests that exceed these limits.</p>
|
||||||
|
|
||||||
|
<p>CKSource is not in any way obliged to perform bug fixing or custom development activities as a result of a
|
||||||
|
Support Request.</p>
|
||||||
|
|
||||||
|
<h3>9. License Key</h3>
|
||||||
|
|
||||||
|
<p>Following a valid License purchase, a unique license key (the "License Key") may be provided to
|
||||||
|
You, which allows Software activation. The License Key is subject to the restrictions set forth in this
|
||||||
|
License and may not be disclosed or distributed in any way. The disclosure or distribution of the License
|
||||||
|
Key shall constitute a breach of this License, the effect of which shall be the automatic termination and
|
||||||
|
revocation of any and all rights granted herein.</p>
|
||||||
|
|
||||||
|
<h3>10. Source Code</h3>
|
||||||
|
|
||||||
|
<p>The original source code ("Source Code") of the Software may be distributed by CKSource alongside
|
||||||
|
its executable version, or as an integral part of it. You may modify and compile the Source Code. The Source
|
||||||
|
Code or its modified version can be copied and distributed exclusively within the scope of this license, as
|
||||||
|
defined in the "License Model" terms of this license, as long as a valid license has been
|
||||||
|
purchased for the distribution target. CKSource retains all rights over the Source Code and all its modified
|
||||||
|
versions. Redistributions of the Source Code and modified versions of it must contain the original headers
|
||||||
|
and copyright notices. Modifications to the Source Code must be explicitly and entirely identified in the
|
||||||
|
Source Code files. This section of the license supersedes all modification restrictions imposed by other
|
||||||
|
sections. You are not allowed to remove copyright notices nor make changes to the license validation code
|
||||||
|
present in the Source Code.</p>
|
||||||
|
|
||||||
|
<h3>11. License Fee</h3>
|
||||||
|
|
||||||
|
<p>In consideration for the License granted in this Agreement during the term of this Agreement, You agreed to
|
||||||
|
pay to CKSource a one time fee (“License Fee”).</p>
|
||||||
|
|
||||||
|
<p>In consideration for the Software upgrades access and support services provided during the Upgrade Period and
|
||||||
|
Support Period, You shall pay a yearly fee (“Annual Support and Upgrade Fee”).</p>
|
||||||
|
|
||||||
|
<p>The License Fee and the Annual Support and Upgrade Fee amount shall be specified by CKSource at the moment of
|
||||||
|
the purchase as a single unified price.</p>
|
||||||
|
|
||||||
|
<p>The fees listed in this Agreement do not include taxes. If CKSource is required to pay any sales, use,
|
||||||
|
property, excise, value added, gross receipts, withholding or other taxes levied on the Software or support
|
||||||
|
under this Agreement or on Your use thereof, then such taxes shall be billed to and paid by You. This
|
||||||
|
Section does not apply to taxes based on CKSource net income, franchise taxes or CKSource’s employer
|
||||||
|
contributions and taxes.</p>
|
||||||
|
|
||||||
|
<p>You understand that CKSource uses third-party paying agents to process selected payments. You understand that
|
||||||
|
until payments are not received and verified by the paying agent, this Agreement is not valid.</p>
|
||||||
|
|
||||||
|
<p>All payments made hereunder are nonrefundable. You may not withhold or set off any amounts due under this
|
||||||
|
Agreement. Failure to pay any fee when due shall constitute a material breach of this Agreement. In
|
||||||
|
addition, if You fail to make any payments when due for support, upon written notice to You, CKSource shall
|
||||||
|
cease providing support.</p>
|
||||||
|
|
||||||
|
<h3>12. Automatic Renewal</h3>
|
||||||
|
|
||||||
|
<p>You may opt to automatically extend the expiration date for both the Upgrade Period and Support Period by
|
||||||
|
successive cycles of 365 days (each one a “Renewal”). In such case, you agree to pay a fee for
|
||||||
|
each Renewal at the beginning of each cycle. The annual Renewal fee shall be informed by CKSource at the
|
||||||
|
moment of the purchase and optionally agreed by you.</p>
|
||||||
|
|
||||||
|
<p>If you opted to have automatic Renewals, CKSource shall send you a payment request for the Renewal fee at any
|
||||||
|
moment following the first day of each Renewal period. You shall perform the full payment in 30 calendar
|
||||||
|
days following the payment request.</p>
|
||||||
|
|
||||||
|
<p>Both parties can discontinue the automatic Renewals by written notification to the other party before the
|
||||||
|
beginning of extension cycles.</p>
|
||||||
|
|
||||||
|
<h3>13. Reservation of Rights and Ownership</h3>
|
||||||
|
|
||||||
|
<p>CKSource reserves all rights not expressly granted to You in this Agreement. The Software is protected by
|
||||||
|
copyright and other intellectual property laws and treaties. CKSource owns the title, copyright, and other
|
||||||
|
intellectual property rights in the Software. The Software is licensed, not sold. This Agreement does not
|
||||||
|
grant you any rights to the Software's trademarks or services.</p>
|
||||||
|
|
||||||
|
<h3>14. Termination</h3>
|
||||||
|
|
||||||
|
<p>Without prejudice to any other rights, this Agreement automatically terminates if You fail to comply with the
|
||||||
|
terms and conditions of this Agreement. You may terminate this Agreement at any time without cause. In case
|
||||||
|
of termination, in any circumstance, payments issued by You will not be reimbursed.</p>
|
||||||
|
|
||||||
|
<p>You shall immediately discontinue distribution of Product, assembled with the Software, upon expiration or
|
||||||
|
termination of this Agreement.</p>
|
||||||
|
|
||||||
|
<h3>15. Warranty</h3>
|
||||||
|
|
||||||
|
<p>CKSource warrants that it has full title and ownership to the Software and has the authority to grant the
|
||||||
|
license hereunder. To the best of CKSource's knowledge the Software does not infringe upon the
|
||||||
|
intellectual property rights of any third party and that CKSource did not receive any notice regarding any
|
||||||
|
alleged infringement thereof.</p>
|
||||||
|
|
||||||
|
<h3>16. Disclaimer of Warranties</h3>
|
||||||
|
|
||||||
|
<p>With the exclusion of warranties explicitly mentioned in Section 15, the Software and its related material
|
||||||
|
are provided “AS IS” and without warranty of any kind. CKSource expressly disclaims all other
|
||||||
|
warranties, expressed or implied, including, but not limited to, the implied warranties of merchantability
|
||||||
|
and fitness for a particular purpose.</p>
|
||||||
|
|
||||||
|
<h3>17. Exclusion of Incidental, Consequential and Certain Other Damages</h3>
|
||||||
|
|
||||||
|
<p>TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL CKSOURCE BE LIABLE FOR ANY SPECIAL,
|
||||||
|
INCIDENTAL, PUNITIVE, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES
|
||||||
|
FOR LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS INTERRUPTION, FOR PERSONAL INJURY,
|
||||||
|
FOR LOSS OF PRIVACY, FOR FAILURE TO MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR
|
||||||
|
NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER) ARISING OUT OF OR IN ANY WAY RELATED TO
|
||||||
|
THE USE OF OR INABILITY TO USE THE SOFTWARE, THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT OR OTHER
|
||||||
|
SERVICES, INFORMATON, SOFTWARE, AND RELATED CONTENT THROUGH THE SOFTWARE OR OTHERWISE ARISING OUT OF THE USE
|
||||||
|
OF THE SOFTWARE, OR OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION OF THIS AGREEMENT, EVEN IN THE EVENT
|
||||||
|
OF THE FAULT, TORT (INCLUDING NEGLIGENCE), MISREPRESENTATION, STRICT LIABILITY, BREACH OF CONTRACT, AND EVEN
|
||||||
|
IF THE OWNER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
|
||||||
|
|
||||||
|
<h3>18. Limitation of Liability</h3>
|
||||||
|
|
||||||
|
<p>In no event shall CKSource’s liability exceed the license fee paid, if any.</p>
|
||||||
|
|
||||||
|
<h3>19. Governing Law and Venue</h3>
|
||||||
|
|
||||||
|
<p>This Agreement shall be construed and controlled by the laws of Poland, and You and CKSource further consent
|
||||||
|
to exclusive jurisdiction by the courts of Poland.</p>
|
||||||
|
|
||||||
|
<p>END OF AGREEMENT TERMS</p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>CKFinder Readme</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 id="ckfinder-3-for-php">CKFinder 3 for PHP</h1>
|
||||||
|
<p>Thank you for choosing CKFinder.</p>
|
||||||
|
<h2 id="feedback">Feedback</h2>
|
||||||
|
<p>Use <a href="https://github.com/ckfinder/ckfinder/issues">https://github.com/ckfinder/ckfinder/issues</a> to report issues in CKFinder 3 (and its documentation) or submit
|
||||||
|
feature requests.</p>
|
||||||
|
<p>If you are unsure what information to provide when reporting a bug, check <a href="http://docs.cksource.com/ckfinder3/#!/guide/dev_issues_readme">http://docs.cksource.com/ckfinder3/#!/guide/dev_issues_readme</a></p>
|
||||||
|
<h2 id="translations">Translations</h2>
|
||||||
|
<p>In order to submit translations for CKFinder please visit <a href="https://github.com/ckfinder/ckfinder-translations">https://github.com/ckfinder/ckfinder-translations</a></p>
|
||||||
|
<h2 id="documentation">Documentation</h2>
|
||||||
|
<p>CKFinder is made from two parts: the client side part and the server side connector(s).</p>
|
||||||
|
<p>The client side part is common across all distributions (PHP and ASP.NET, Java in the future), while
|
||||||
|
the server side parts are different for each language, that's why there are multiple documentation websites available.</p>
|
||||||
|
<h3 id="ckfinder-3-documentation-http-docs-cksource-com-ckfinder3-">CKFinder 3 Documentation - <a href="http://docs.cksource.com/ckfinder3/">http://docs.cksource.com/ckfinder3/</a></h3>
|
||||||
|
<p>This website contains documentation about the client side part of CKFinder, common for all versions of CKFinder 3
|
||||||
|
and includes information about:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Integrating CKFinder with your website or with CKEditor.</li>
|
||||||
|
<li>Client side configuration options.</li>
|
||||||
|
<li>API documentation.</li>
|
||||||
|
<li>Tutorials about creating JavaScript plugins.</li>
|
||||||
|
<li>Tutorials about creating skins.</li>
|
||||||
|
</ul>
|
||||||
|
<h3 id="ckfinder-3-for-php-documentation-http-docs-cksource-com-ckfinder3-php-">CKFinder 3 for PHP Documentation - <a href="http://docs.cksource.com/ckfinder3-php/">http://docs.cksource.com/ckfinder3-php/</a></h3>
|
||||||
|
<p>This website contains documentation about the PHP connector for CKFinder 3 and includes information about:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Enabling the PHP connector.</li>
|
||||||
|
<li>Configuring the PHP connector.</li>
|
||||||
|
<li>Tutorials about creating PHP plugins.</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="license">License</h2>
|
||||||
|
<p>Copyright (c) 2007-2016, CKSource - Frederico Knabben. All rights reserved.</p>
|
||||||
|
<p>To purchase a license for CKFinder visit <a href="http://cksource.com/ckfinder">http://cksource.com/ckfinder</a></p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2007-2016, CKSource - Frederico Knabben. All rights reserved.
|
||||||
|
For licensing, see LICENSE.html or http://cksource.com/ckfinder/license
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
|
||||||
|
<title>CKFinder 3 - File Browser</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script src="ckfinder.js"></script>
|
||||||
|
<script>
|
||||||
|
CKFinder.start();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2007-2016, CKSource - Frederico Knabben. All rights reserved.
|
||||||
|
For licensing, see LICENSE.html or http://cksource.com/ckfinder/license
|
||||||
|
*/
|
||||||
|
|
||||||
|
var config = {};
|
||||||
|
|
||||||
|
// Set your configuration options below.
|
||||||
|
|
||||||
|
// Examples:
|
||||||
|
// config.language = 'pl';
|
||||||
|
// config.skin = 'jquery-mobile';
|
||||||
|
|
||||||
|
CKFinder.define( config );
|
||||||
@@ -0,0 +1,175 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CKFinder Configuration File
|
||||||
|
*
|
||||||
|
* For the official documentation visit http://docs.cksource.com/ckfinder3-php/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*============================ PHP Error Reporting ====================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/debugging.html
|
||||||
|
|
||||||
|
// Production
|
||||||
|
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
|
||||||
|
ini_set('display_errors', 0);
|
||||||
|
|
||||||
|
// Development
|
||||||
|
// error_reporting(E_ALL);
|
||||||
|
// ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
/*============================ General Settings =======================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html
|
||||||
|
|
||||||
|
$config = array();
|
||||||
|
|
||||||
|
/*============================ Enable PHP Connector HERE ==============================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_authentication
|
||||||
|
|
||||||
|
$config['authentication'] = function () {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*============================ License Key ============================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_licenseKey
|
||||||
|
|
||||||
|
$config['licenseName'] = '';
|
||||||
|
$config['licenseKey'] = '';
|
||||||
|
|
||||||
|
/*============================ CKFinder Internal Directory ============================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_privateDir
|
||||||
|
|
||||||
|
$config['privateDir'] = array(
|
||||||
|
'backend' => 'default',
|
||||||
|
'tags' => '.ckfinder/tags',
|
||||||
|
'logs' => '.ckfinder/logs',
|
||||||
|
'cache' => '.ckfinder/cache',
|
||||||
|
'thumbs' => '.ckfinder/cache/thumbs',
|
||||||
|
);
|
||||||
|
|
||||||
|
/*============================ Images and Thumbnails ==================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_images
|
||||||
|
|
||||||
|
$config['images'] = array(
|
||||||
|
'maxWidth' => 1600,
|
||||||
|
'maxHeight' => 1200,
|
||||||
|
'quality' => 80,
|
||||||
|
'sizes' => array(
|
||||||
|
'small' => array('width' => 480, 'height' => 320, 'quality' => 80),
|
||||||
|
'medium' => array('width' => 600, 'height' => 480, 'quality' => 80),
|
||||||
|
'large' => array('width' => 800, 'height' => 600, 'quality' => 80)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/*=================================== Backends ========================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_backends
|
||||||
|
|
||||||
|
$config['backends'][] = array(
|
||||||
|
'name' => 'default',
|
||||||
|
'adapter' => 'local',
|
||||||
|
'baseUrl' => '/ckfinder/userfiles/',
|
||||||
|
// 'root' => '', // Can be used to explicitly set the CKFinder user files directory.
|
||||||
|
'chmodFiles' => 0777,
|
||||||
|
'chmodFolders' => 0755,
|
||||||
|
'filesystemEncoding' => 'UTF-8',
|
||||||
|
);
|
||||||
|
|
||||||
|
/*================================ Resource Types =====================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_resourceTypes
|
||||||
|
|
||||||
|
$config['defaultResourceTypes'] = '';
|
||||||
|
|
||||||
|
$config['resourceTypes'][] = array(
|
||||||
|
'name' => 'Files', // Single quotes not allowed.
|
||||||
|
'directory' => 'files',
|
||||||
|
'maxSize' => 0,
|
||||||
|
'allowedExtensions' => '7z,aiff,asf,avi,bmp,csv,doc,docx,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pptx,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xlsx,zip',
|
||||||
|
'deniedExtensions' => '',
|
||||||
|
'backend' => 'default'
|
||||||
|
);
|
||||||
|
|
||||||
|
$config['resourceTypes'][] = array(
|
||||||
|
'name' => 'Images',
|
||||||
|
'directory' => 'images',
|
||||||
|
'maxSize' => 0,
|
||||||
|
'allowedExtensions' => 'bmp,gif,jpeg,jpg,png',
|
||||||
|
'deniedExtensions' => '',
|
||||||
|
'backend' => 'default'
|
||||||
|
);
|
||||||
|
|
||||||
|
/*================================ Access Control =====================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_roleSessionVar
|
||||||
|
|
||||||
|
$config['roleSessionVar'] = 'CKFinder_UserRole';
|
||||||
|
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_accessControl
|
||||||
|
$config['accessControl'][] = array(
|
||||||
|
'role' => '*',
|
||||||
|
'resourceType' => '*',
|
||||||
|
'folder' => '/',
|
||||||
|
|
||||||
|
'FOLDER_VIEW' => true,
|
||||||
|
'FOLDER_CREATE' => true,
|
||||||
|
'FOLDER_RENAME' => true,
|
||||||
|
'FOLDER_DELETE' => true,
|
||||||
|
|
||||||
|
'FILE_VIEW' => true,
|
||||||
|
'FILE_CREATE' => true,
|
||||||
|
'FILE_RENAME' => true,
|
||||||
|
'FILE_DELETE' => true,
|
||||||
|
|
||||||
|
'IMAGE_RESIZE' => true,
|
||||||
|
'IMAGE_RESIZE_CUSTOM' => true
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
/*================================ Other Settings =====================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html
|
||||||
|
|
||||||
|
$config['overwriteOnUpload'] = false;
|
||||||
|
$config['checkDoubleExtension'] = true;
|
||||||
|
$config['disallowUnsafeCharacters'] = false;
|
||||||
|
$config['secureImageUploads'] = true;
|
||||||
|
$config['checkSizeAfterScaling'] = true;
|
||||||
|
$config['htmlExtensions'] = array('html', 'htm', 'xml', 'js');
|
||||||
|
$config['hideFolders'] = array('.*', 'CVS', '__thumbs');
|
||||||
|
$config['hideFiles'] = array('.*');
|
||||||
|
$config['forceAscii'] = false;
|
||||||
|
$config['xSendfile'] = false;
|
||||||
|
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_debug
|
||||||
|
$config['debug'] = false;
|
||||||
|
|
||||||
|
/*==================================== Plugins ========================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_plugins
|
||||||
|
|
||||||
|
$config['pluginsDirectory'] = __DIR__ . '/plugins';
|
||||||
|
$config['plugins'] = array();
|
||||||
|
|
||||||
|
/*================================ Cache settings =====================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_cache
|
||||||
|
|
||||||
|
$config['cache'] = array(
|
||||||
|
'imagePreview' => 24 * 3600,
|
||||||
|
'thumbnails' => 24 * 3600 * 365,
|
||||||
|
'proxyCommand' => 0
|
||||||
|
);
|
||||||
|
|
||||||
|
/*============================ Temp Directory settings ================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_tempDirectory
|
||||||
|
|
||||||
|
$config['tempDirectory'] = sys_get_temp_dir();
|
||||||
|
|
||||||
|
/*============================ Session Cause Performance Issues =======================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_sessionWriteClose
|
||||||
|
|
||||||
|
$config['sessionWriteClose'] = true;
|
||||||
|
|
||||||
|
/*================================= CSRF protection ===================================*/
|
||||||
|
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_csrfProtection
|
||||||
|
|
||||||
|
$config['csrfProtection'] = true;
|
||||||
|
|
||||||
|
/*============================== End of Configuration =================================*/
|
||||||
|
|
||||||
|
// Config must be returned - do not change it.
|
||||||
|
return $config;
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* CKFinder
|
||||||
|
* ========
|
||||||
|
* http://cksource.com/ckfinder
|
||||||
|
* Copyright (c) 2007-2016, CKSource - Frederico Knabben. All rights reserved.
|
||||||
|
*
|
||||||
|
* The software, this file and its contents are subject to the CKFinder
|
||||||
|
* License. Please read the license.txt file before using, installing, copying,
|
||||||
|
* modifying or distribute this file or part of its contents. The contents of
|
||||||
|
* this file is part of the Source Code of CKFinder.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once __DIR__ . '/vendor/autoload.php';
|
||||||
|
|
||||||
|
use CKSource\CKFinder\CKFinder;
|
||||||
|
|
||||||
|
$ckfinder = new CKFinder(__DIR__ . '/../../../config.php');
|
||||||
|
|
||||||
|
$ckfinder->run();
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload.php @generated by Composer
|
||||||
|
|
||||||
|
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
||||||
|
|
||||||
|
return ComposerAutoloaderInitc8ccb46a47efb4379a7eebb3f851e19d::getLoader();
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common;
|
||||||
|
|
||||||
|
use Aws\Common\Facade\Facade;
|
||||||
|
use Guzzle\Service\Builder\ServiceBuilder;
|
||||||
|
use Guzzle\Service\Builder\ServiceBuilderLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class for interacting with web service clients
|
||||||
|
*/
|
||||||
|
class Aws extends ServiceBuilder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string Current version of the SDK
|
||||||
|
*/
|
||||||
|
const VERSION = '2.8.31';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new service locator for the AWS SDK
|
||||||
|
*
|
||||||
|
* You can configure the service locator is four different ways:
|
||||||
|
*
|
||||||
|
* 1. Use the default configuration file shipped with the SDK that wires class names with service short names and
|
||||||
|
* specify global parameters to add to every definition (e.g. key, secret, credentials, etc)
|
||||||
|
*
|
||||||
|
* 2. Use a custom configuration file that extends the default config and supplies credentials for each service.
|
||||||
|
*
|
||||||
|
* 3. Use a custom config file that wires services to custom short names for services.
|
||||||
|
*
|
||||||
|
* 4. If you are on Amazon EC2, you can use the default configuration file and not provide any credentials so that
|
||||||
|
* you are using InstanceProfile credentials.
|
||||||
|
*
|
||||||
|
* @param array|string $config The full path to a .php or .js|.json file, or an associative array of data
|
||||||
|
* to use as global parameters to pass to each service.
|
||||||
|
* @param array $globalParameters Global parameters to pass to every service as it is instantiated.
|
||||||
|
*
|
||||||
|
* @return Aws
|
||||||
|
*/
|
||||||
|
public static function factory($config = null, array $globalParameters = array())
|
||||||
|
{
|
||||||
|
if (!$config) {
|
||||||
|
// If nothing is passed in, then use the default configuration file with credentials from the environment
|
||||||
|
$config = self::getDefaultServiceDefinition();
|
||||||
|
} elseif (is_array($config)) {
|
||||||
|
// If an array was passed, then use the default configuration file with parameter overrides
|
||||||
|
$globalParameters = $config;
|
||||||
|
$config = self::getDefaultServiceDefinition();
|
||||||
|
}
|
||||||
|
|
||||||
|
$loader = new ServiceBuilderLoader();
|
||||||
|
$loader->addAlias('_aws', self::getDefaultServiceDefinition())
|
||||||
|
->addAlias('_sdk1', __DIR__ . '/Resources/sdk1-config.php');
|
||||||
|
|
||||||
|
return $loader->load($config, $globalParameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the full path to the default service builder definition file
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getDefaultServiceDefinition()
|
||||||
|
{
|
||||||
|
return __DIR__ . '/Resources/aws-config.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the configuration for the service builder
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getConfig()
|
||||||
|
{
|
||||||
|
return $this->builderConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables the facades for the clients defined in the service builder
|
||||||
|
*
|
||||||
|
* @param string|null $namespace The namespace that the facades should be mounted to. Defaults to global namespace
|
||||||
|
*
|
||||||
|
* @return Aws
|
||||||
|
* @deprecated "Facades" are being removed in version 3.0 of the SDK.
|
||||||
|
*/
|
||||||
|
public function enableFacades($namespace = null)
|
||||||
|
{
|
||||||
|
Facade::mountFacades($this, $namespace);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,283 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Aws\Common\Aws;
|
||||||
|
use Aws\Common\Credentials\CredentialsInterface;
|
||||||
|
use Aws\Common\Enum\ClientOptions as Options;
|
||||||
|
use Aws\Common\Exception\InvalidArgumentException;
|
||||||
|
use Aws\Common\Exception\TransferException;
|
||||||
|
use Aws\Common\RulesEndpointProvider;
|
||||||
|
use Aws\Common\Signature\EndpointSignatureInterface;
|
||||||
|
use Aws\Common\Signature\SignatureInterface;
|
||||||
|
use Aws\Common\Signature\SignatureListener;
|
||||||
|
use Aws\Common\Waiter\WaiterClassFactory;
|
||||||
|
use Aws\Common\Waiter\CompositeWaiterFactory;
|
||||||
|
use Aws\Common\Waiter\WaiterFactoryInterface;
|
||||||
|
use Aws\Common\Waiter\WaiterConfigFactory;
|
||||||
|
use Guzzle\Common\Collection;
|
||||||
|
use Guzzle\Http\Exception\CurlException;
|
||||||
|
use Guzzle\Http\QueryAggregator\DuplicateAggregator;
|
||||||
|
use Guzzle\Service\Client;
|
||||||
|
use Guzzle\Service\Description\ServiceDescriptionInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract AWS client
|
||||||
|
*/
|
||||||
|
abstract class AbstractClient extends Client implements AwsClientInterface
|
||||||
|
{
|
||||||
|
/** @var CredentialsInterface AWS credentials */
|
||||||
|
protected $credentials;
|
||||||
|
|
||||||
|
/** @var SignatureInterface Signature implementation of the service */
|
||||||
|
protected $signature;
|
||||||
|
|
||||||
|
/** @var WaiterFactoryInterface Factory used to create waiter classes */
|
||||||
|
protected $waiterFactory;
|
||||||
|
|
||||||
|
/** @var DuplicateAggregator Cached query aggregator*/
|
||||||
|
protected $aggregator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function getAllEvents()
|
||||||
|
{
|
||||||
|
return array_merge(Client::getAllEvents(), array(
|
||||||
|
'client.region_changed',
|
||||||
|
'client.credentials_changed',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param CredentialsInterface $credentials AWS credentials
|
||||||
|
* @param SignatureInterface $signature Signature implementation
|
||||||
|
* @param Collection $config Configuration options
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException if an endpoint provider isn't provided
|
||||||
|
*/
|
||||||
|
public function __construct(CredentialsInterface $credentials, SignatureInterface $signature, Collection $config)
|
||||||
|
{
|
||||||
|
// Bootstrap with Guzzle
|
||||||
|
parent::__construct($config->get(Options::BASE_URL), $config);
|
||||||
|
$this->credentials = $credentials;
|
||||||
|
$this->signature = $signature;
|
||||||
|
$this->aggregator = new DuplicateAggregator();
|
||||||
|
|
||||||
|
// Make sure the user agent is prefixed by the SDK version
|
||||||
|
$this->setUserAgent('aws-sdk-php2/' . Aws::VERSION, true);
|
||||||
|
|
||||||
|
// Add the event listener so that requests are signed before they are sent
|
||||||
|
$dispatcher = $this->getEventDispatcher();
|
||||||
|
$dispatcher->addSubscriber(new SignatureListener($credentials, $signature));
|
||||||
|
|
||||||
|
if ($backoff = $config->get(Options::BACKOFF)) {
|
||||||
|
$dispatcher->addSubscriber($backoff, -255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __call($method, $args)
|
||||||
|
{
|
||||||
|
if (substr($method, 0, 3) === 'get' && substr($method, -8) === 'Iterator') {
|
||||||
|
// Allow magic method calls for iterators (e.g. $client->get<CommandName>Iterator($params))
|
||||||
|
$commandOptions = isset($args[0]) ? $args[0] : null;
|
||||||
|
$iteratorOptions = isset($args[1]) ? $args[1] : array();
|
||||||
|
return $this->getIterator(substr($method, 3, -8), $commandOptions, $iteratorOptions);
|
||||||
|
} elseif (substr($method, 0, 9) == 'waitUntil') {
|
||||||
|
// Allow magic method calls for waiters (e.g. $client->waitUntil<WaiterName>($params))
|
||||||
|
return $this->waitUntil(substr($method, 9), isset($args[0]) ? $args[0]: array());
|
||||||
|
} else {
|
||||||
|
return parent::__call(ucfirst($method), $args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an endpoint for a specific region from a service description
|
||||||
|
* @deprecated This function will no longer be updated to work with new regions.
|
||||||
|
*/
|
||||||
|
public static function getEndpoint(ServiceDescriptionInterface $description, $region, $scheme)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$service = $description->getData('endpointPrefix');
|
||||||
|
$provider = RulesEndpointProvider::fromDefaults();
|
||||||
|
$result = $provider(array(
|
||||||
|
'service' => $service,
|
||||||
|
'region' => $region,
|
||||||
|
'scheme' => $scheme
|
||||||
|
));
|
||||||
|
return $result['endpoint'];
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
throw new InvalidArgumentException($e->getMessage(), 0, $e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCredentials()
|
||||||
|
{
|
||||||
|
return $this->credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCredentials(CredentialsInterface $credentials)
|
||||||
|
{
|
||||||
|
$formerCredentials = $this->credentials;
|
||||||
|
$this->credentials = $credentials;
|
||||||
|
|
||||||
|
// Dispatch an event that the credentials have been changed
|
||||||
|
$this->dispatch('client.credentials_changed', array(
|
||||||
|
'credentials' => $credentials,
|
||||||
|
'former_credentials' => $formerCredentials,
|
||||||
|
));
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSignature()
|
||||||
|
{
|
||||||
|
return $this->signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRegions()
|
||||||
|
{
|
||||||
|
return $this->serviceDescription->getData('regions');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRegion()
|
||||||
|
{
|
||||||
|
return $this->getConfig(Options::REGION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setRegion($region)
|
||||||
|
{
|
||||||
|
$config = $this->getConfig();
|
||||||
|
$formerRegion = $config->get(Options::REGION);
|
||||||
|
$global = $this->serviceDescription->getData('globalEndpoint');
|
||||||
|
$provider = $config->get('endpoint_provider');
|
||||||
|
|
||||||
|
if (!$provider) {
|
||||||
|
throw new \RuntimeException('No endpoint provider configured');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only change the region if the service does not have a global endpoint
|
||||||
|
if (!$global || $this->serviceDescription->getData('namespace') === 'S3') {
|
||||||
|
|
||||||
|
$endpoint = call_user_func(
|
||||||
|
$provider,
|
||||||
|
array(
|
||||||
|
'scheme' => $config->get(Options::SCHEME),
|
||||||
|
'region' => $region,
|
||||||
|
'service' => $config->get(Options::SERVICE)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->setBaseUrl($endpoint['endpoint']);
|
||||||
|
$config->set(Options::BASE_URL, $endpoint['endpoint']);
|
||||||
|
$config->set(Options::REGION, $region);
|
||||||
|
|
||||||
|
// Update the signature if necessary
|
||||||
|
$signature = $this->getSignature();
|
||||||
|
if ($signature instanceof EndpointSignatureInterface) {
|
||||||
|
/** @var EndpointSignatureInterface $signature */
|
||||||
|
$signature->setRegionName($region);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dispatch an event that the region has been changed
|
||||||
|
$this->dispatch('client.region_changed', array(
|
||||||
|
'region' => $region,
|
||||||
|
'former_region' => $formerRegion,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function waitUntil($waiter, array $input = array())
|
||||||
|
{
|
||||||
|
$this->getWaiter($waiter, $input)->wait();
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getWaiter($waiter, array $input = array())
|
||||||
|
{
|
||||||
|
return $this->getWaiterFactory()->build($waiter)
|
||||||
|
->setClient($this)
|
||||||
|
->setConfig($input);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setWaiterFactory(WaiterFactoryInterface $waiterFactory)
|
||||||
|
{
|
||||||
|
$this->waiterFactory = $waiterFactory;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getWaiterFactory()
|
||||||
|
{
|
||||||
|
if (!$this->waiterFactory) {
|
||||||
|
$clientClass = get_class($this);
|
||||||
|
// Use a composite factory that checks for classes first, then config waiters
|
||||||
|
$this->waiterFactory = new CompositeWaiterFactory(array(
|
||||||
|
new WaiterClassFactory(substr($clientClass, 0, strrpos($clientClass, '\\')) . '\\Waiter')
|
||||||
|
));
|
||||||
|
if ($this->getDescription()) {
|
||||||
|
$waiterConfig = $this->getDescription()->getData('waiters') ?: array();
|
||||||
|
$this->waiterFactory->addFactory(new WaiterConfigFactory($waiterConfig));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->waiterFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getApiVersion()
|
||||||
|
{
|
||||||
|
return $this->serviceDescription->getApiVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
* @throws \Aws\Common\Exception\TransferException
|
||||||
|
*/
|
||||||
|
public function send($requests)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
return parent::send($requests);
|
||||||
|
} catch (CurlException $e) {
|
||||||
|
$wrapped = new TransferException($e->getMessage(), null, $e);
|
||||||
|
$wrapped->setCurlHandle($e->getCurlHandle())
|
||||||
|
->setCurlInfo($e->getCurlInfo())
|
||||||
|
->setError($e->getError(), $e->getErrorNo())
|
||||||
|
->setRequest($e->getRequest());
|
||||||
|
throw $wrapped;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that the duplicate query string aggregator is used so that
|
||||||
|
* query string values are sent over the wire as foo=bar&foo=baz.
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function createRequest(
|
||||||
|
$method = 'GET',
|
||||||
|
$uri = null,
|
||||||
|
$headers = null,
|
||||||
|
$body = null,
|
||||||
|
array $options = array()
|
||||||
|
) {
|
||||||
|
$request = parent::createRequest($method, $uri, $headers, $body, $options);
|
||||||
|
$request->getQuery()->setAggregator($this->aggregator);
|
||||||
|
return $request;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Aws\Common\Credentials\CredentialsInterface;
|
||||||
|
use Aws\Common\Signature\SignatureInterface;
|
||||||
|
use Aws\Common\Waiter\WaiterFactoryInterface;
|
||||||
|
use Aws\Common\Waiter\WaiterInterface;
|
||||||
|
use Guzzle\Service\ClientInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface that all AWS clients implement
|
||||||
|
*/
|
||||||
|
interface AwsClientInterface extends ClientInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns the AWS credentials associated with the client
|
||||||
|
*
|
||||||
|
* @return CredentialsInterface
|
||||||
|
*/
|
||||||
|
public function getCredentials();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the credentials object associated with the client
|
||||||
|
*
|
||||||
|
* @param CredentialsInterface $credentials Credentials object to use
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setCredentials(CredentialsInterface $credentials);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the signature implementation used with the client
|
||||||
|
*
|
||||||
|
* @return SignatureInterface
|
||||||
|
*/
|
||||||
|
public function getSignature();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of available regions and region data
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getRegions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the name of the region to which the client is configured to send requests
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getRegion();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the region to which the client is configured to send requests
|
||||||
|
*
|
||||||
|
* @param string $region Name of the region
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setRegion($region);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the waiter factory being used by the client
|
||||||
|
*
|
||||||
|
* @return WaiterFactoryInterface
|
||||||
|
*/
|
||||||
|
public function getWaiterFactory();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the waiter factory to use with the client
|
||||||
|
*
|
||||||
|
* @param WaiterFactoryInterface $waiterFactory Factory used to create waiters
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setWaiterFactory(WaiterFactoryInterface $waiterFactory);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait until a resource is available or an associated waiter returns true
|
||||||
|
*
|
||||||
|
* @param string $waiter Name of the waiter
|
||||||
|
* @param array $input Values used as input for the underlying operation and to control the waiter
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function waitUntil($waiter, array $input = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a named waiter object
|
||||||
|
*
|
||||||
|
* @param string $waiter Name of the waiter
|
||||||
|
* @param array $input Values used as input for the underlying operation and to control the waiter
|
||||||
|
*
|
||||||
|
* @return WaiterInterface
|
||||||
|
*/
|
||||||
|
public function getWaiter($waiter, array $input = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the API version of the client (e.g. 2006-03-01)
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getApiVersion();
|
||||||
|
}
|
||||||
@@ -0,0 +1,527 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Aws\Common\Credentials\Credentials;
|
||||||
|
use Aws\Common\Credentials\CredentialsInterface;
|
||||||
|
use Aws\Common\Credentials\NullCredentials;
|
||||||
|
use Aws\Common\Enum\ClientOptions as Options;
|
||||||
|
use Aws\Common\Exception\ExceptionListener;
|
||||||
|
use Aws\Common\Exception\InvalidArgumentException;
|
||||||
|
use Aws\Common\Exception\NamespaceExceptionFactory;
|
||||||
|
use Aws\Common\Exception\Parser\DefaultXmlExceptionParser;
|
||||||
|
use Aws\Common\Exception\Parser\ExceptionParserInterface;
|
||||||
|
use Aws\Common\Iterator\AwsResourceIteratorFactory;
|
||||||
|
use Aws\Common\RulesEndpointProvider;
|
||||||
|
use Aws\Common\Signature\EndpointSignatureInterface;
|
||||||
|
use Aws\Common\Signature\SignatureInterface;
|
||||||
|
use Aws\Common\Signature\SignatureV2;
|
||||||
|
use Aws\Common\Signature\SignatureV3Https;
|
||||||
|
use Aws\Common\Signature\SignatureV4;
|
||||||
|
use Guzzle\Common\Collection;
|
||||||
|
use Guzzle\Plugin\Backoff\BackoffPlugin;
|
||||||
|
use Guzzle\Plugin\Backoff\CurlBackoffStrategy;
|
||||||
|
use Guzzle\Plugin\Backoff\ExponentialBackoffStrategy;
|
||||||
|
use Guzzle\Plugin\Backoff\HttpBackoffStrategy;
|
||||||
|
use Guzzle\Plugin\Backoff\TruncatedBackoffStrategy;
|
||||||
|
use Guzzle\Service\Description\ServiceDescription;
|
||||||
|
use Guzzle\Service\Resource\ResourceIteratorClassFactory;
|
||||||
|
use Guzzle\Log\LogAdapterInterface;
|
||||||
|
use Guzzle\Log\ClosureLogAdapter;
|
||||||
|
use Guzzle\Plugin\Backoff\BackoffLogger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builder for creating AWS service clients
|
||||||
|
*/
|
||||||
|
class ClientBuilder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array Default client config
|
||||||
|
*/
|
||||||
|
protected static $commonConfigDefaults = array('scheme' => 'https');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array Default client requirements
|
||||||
|
*/
|
||||||
|
protected static $commonConfigRequirements = array(Options::SERVICE_DESCRIPTION);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The namespace of the client
|
||||||
|
*/
|
||||||
|
protected $clientNamespace;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array The config options
|
||||||
|
*/
|
||||||
|
protected $config = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array The config defaults
|
||||||
|
*/
|
||||||
|
protected $configDefaults = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array The config requirements
|
||||||
|
*/
|
||||||
|
protected $configRequirements = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ExceptionParserInterface The Parser interface for the client
|
||||||
|
*/
|
||||||
|
protected $exceptionParser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array Array of configuration data for iterators available for the client
|
||||||
|
*/
|
||||||
|
protected $iteratorsConfig = array();
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $clientClass;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $serviceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory method for creating the client builder
|
||||||
|
*
|
||||||
|
* @param string $namespace The namespace of the client
|
||||||
|
*
|
||||||
|
* @return ClientBuilder
|
||||||
|
*/
|
||||||
|
public static function factory($namespace = null)
|
||||||
|
{
|
||||||
|
return new static($namespace);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a client builder
|
||||||
|
*
|
||||||
|
* @param string $namespace The namespace of the client
|
||||||
|
*/
|
||||||
|
public function __construct($namespace = null)
|
||||||
|
{
|
||||||
|
$this->clientNamespace = $namespace;
|
||||||
|
|
||||||
|
// Determine service and class name
|
||||||
|
$this->clientClass = 'Aws\Common\Client\DefaultClient';
|
||||||
|
|
||||||
|
if ($this->clientNamespace) {
|
||||||
|
$this->serviceName = substr($this->clientNamespace, strrpos($this->clientNamespace, '\\') + 1);
|
||||||
|
$this->clientClass = $this->clientNamespace . '\\' . $this->serviceName . 'Client';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the config options
|
||||||
|
*
|
||||||
|
* @param array|Collection $config The config options
|
||||||
|
*
|
||||||
|
* @return ClientBuilder
|
||||||
|
*/
|
||||||
|
public function setConfig($config)
|
||||||
|
{
|
||||||
|
$this->config = $this->processArray($config);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the config options' defaults
|
||||||
|
*
|
||||||
|
* @param array|Collection $defaults The default values
|
||||||
|
*
|
||||||
|
* @return ClientBuilder
|
||||||
|
*/
|
||||||
|
public function setConfigDefaults($defaults)
|
||||||
|
{
|
||||||
|
$this->configDefaults = $this->processArray($defaults);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the required config options
|
||||||
|
*
|
||||||
|
* @param array|Collection $required The required config options
|
||||||
|
*
|
||||||
|
* @return ClientBuilder
|
||||||
|
*/
|
||||||
|
public function setConfigRequirements($required)
|
||||||
|
{
|
||||||
|
$this->configRequirements = $this->processArray($required);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the exception parser. If one is not provided the builder will use
|
||||||
|
* the default XML exception parser.
|
||||||
|
*
|
||||||
|
* @param ExceptionParserInterface $parser The exception parser
|
||||||
|
*
|
||||||
|
* @return ClientBuilder
|
||||||
|
*/
|
||||||
|
public function setExceptionParser(ExceptionParserInterface $parser)
|
||||||
|
{
|
||||||
|
$this->exceptionParser = $parser;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the configuration for the client's iterators
|
||||||
|
*
|
||||||
|
* @param array $config Configuration data for client's iterators
|
||||||
|
*
|
||||||
|
* @return ClientBuilder
|
||||||
|
*/
|
||||||
|
public function setIteratorsConfig(array $config)
|
||||||
|
{
|
||||||
|
$this->iteratorsConfig = $config;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the building logic using all of the parameters that have been
|
||||||
|
* set and falling back to default values. Returns an instantiate service
|
||||||
|
* client with credentials prepared and plugins attached.
|
||||||
|
*
|
||||||
|
* @return AwsClientInterface
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function build()
|
||||||
|
{
|
||||||
|
// Resolve configuration
|
||||||
|
$config = Collection::fromConfig(
|
||||||
|
$this->config,
|
||||||
|
array_merge(self::$commonConfigDefaults, $this->configDefaults),
|
||||||
|
(self::$commonConfigRequirements + $this->configRequirements)
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($config[Options::VERSION] === 'latest') {
|
||||||
|
$config[Options::VERSION] = constant("{$this->clientClass}::LATEST_API_VERSION");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($config['endpoint_provider'])) {
|
||||||
|
$config['endpoint_provider'] = RulesEndpointProvider::fromDefaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve the endpoint, signature, and credentials
|
||||||
|
$description = $this->updateConfigFromDescription($config);
|
||||||
|
$signature = $this->getSignature($description, $config);
|
||||||
|
$credentials = $this->getCredentials($config);
|
||||||
|
$this->extractHttpConfig($config);
|
||||||
|
|
||||||
|
// Resolve exception parser
|
||||||
|
if (!$this->exceptionParser) {
|
||||||
|
$this->exceptionParser = new DefaultXmlExceptionParser();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve backoff strategy
|
||||||
|
$backoff = $config->get(Options::BACKOFF);
|
||||||
|
if ($backoff === null) {
|
||||||
|
$retries = isset($config[Options::BACKOFF_RETRIES]) ? $config[Options::BACKOFF_RETRIES] : 3;
|
||||||
|
$backoff = $this->createDefaultBackoff($retries);
|
||||||
|
$config->set(Options::BACKOFF, $backoff);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($backoff) {
|
||||||
|
$this->addBackoffLogger($backoff, $config);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var AwsClientInterface $client */
|
||||||
|
$client = new $this->clientClass($credentials, $signature, $config);
|
||||||
|
$client->setDescription($description);
|
||||||
|
|
||||||
|
// Add exception marshaling so that more descriptive exception are thrown
|
||||||
|
if ($this->clientNamespace) {
|
||||||
|
$exceptionFactory = new NamespaceExceptionFactory(
|
||||||
|
$this->exceptionParser,
|
||||||
|
"{$this->clientNamespace}\\Exception",
|
||||||
|
"{$this->clientNamespace}\\Exception\\{$this->serviceName}Exception"
|
||||||
|
);
|
||||||
|
$client->addSubscriber(new ExceptionListener($exceptionFactory));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the UserAgentPlugin to append to the User-Agent header of requests
|
||||||
|
$client->addSubscriber(new UserAgentListener());
|
||||||
|
|
||||||
|
// Filters used for the cache plugin
|
||||||
|
$client->getConfig()->set(
|
||||||
|
'params.cache.key_filter',
|
||||||
|
'header=date,x-amz-date,x-amz-security-token,x-amzn-authorization'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Set the iterator resource factory based on the provided iterators config
|
||||||
|
$client->setResourceIteratorFactory(new AwsResourceIteratorFactory(
|
||||||
|
$this->iteratorsConfig,
|
||||||
|
new ResourceIteratorClassFactory($this->clientNamespace . '\\Iterator')
|
||||||
|
));
|
||||||
|
|
||||||
|
// Disable parameter validation if needed
|
||||||
|
if ($config->get(Options::VALIDATION) === false) {
|
||||||
|
$params = $config->get('command.params') ?: array();
|
||||||
|
$params['command.disable_validation'] = true;
|
||||||
|
$config->set('command.params', $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $client;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add backoff logging to the backoff plugin if needed
|
||||||
|
*
|
||||||
|
* @param BackoffPlugin $plugin Backoff plugin
|
||||||
|
* @param Collection $config Configuration settings
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
protected function addBackoffLogger(BackoffPlugin $plugin, Collection $config)
|
||||||
|
{
|
||||||
|
// The log option can be set to `debug` or an instance of a LogAdapterInterface
|
||||||
|
if ($logger = $config->get(Options::BACKOFF_LOGGER)) {
|
||||||
|
$format = $config->get(Options::BACKOFF_LOGGER_TEMPLATE);
|
||||||
|
if ($logger === 'debug') {
|
||||||
|
$logger = new ClosureLogAdapter(function ($message) {
|
||||||
|
trigger_error($message . "\n");
|
||||||
|
});
|
||||||
|
} elseif (!($logger instanceof LogAdapterInterface)) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
Options::BACKOFF_LOGGER . ' must be set to `debug` or an instance of '
|
||||||
|
. 'Guzzle\\Common\\Log\\LogAdapterInterface'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// Create the plugin responsible for logging exponential backoff retries
|
||||||
|
$logPlugin = new BackoffLogger($logger);
|
||||||
|
// You can specify a custom format or use the default
|
||||||
|
if ($format) {
|
||||||
|
$logPlugin->setTemplate($format);
|
||||||
|
}
|
||||||
|
$plugin->addSubscriber($logPlugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that an array (e.g. for config data) is actually in array form
|
||||||
|
*
|
||||||
|
* @param array|Collection $array The array data
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws InvalidArgumentException if the arg is not an array or Collection
|
||||||
|
*/
|
||||||
|
protected function processArray($array)
|
||||||
|
{
|
||||||
|
if ($array instanceof Collection) {
|
||||||
|
$array = $array->getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_array($array)) {
|
||||||
|
throw new InvalidArgumentException('The config must be provided as an array or Collection.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a configuration object from a service description
|
||||||
|
*
|
||||||
|
* @param Collection $config Config to update
|
||||||
|
*
|
||||||
|
* @return ServiceDescription
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
protected function updateConfigFromDescription(Collection $config)
|
||||||
|
{
|
||||||
|
$description = $config->get(Options::SERVICE_DESCRIPTION);
|
||||||
|
if (!($description instanceof ServiceDescription)) {
|
||||||
|
// Inject the version into the sprintf template if it is a string
|
||||||
|
if (is_string($description)) {
|
||||||
|
$description = sprintf($description, $config->get(Options::VERSION));
|
||||||
|
}
|
||||||
|
$description = ServiceDescription::factory($description);
|
||||||
|
$config->set(Options::SERVICE_DESCRIPTION, $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$config->get(Options::SERVICE)) {
|
||||||
|
$config->set(Options::SERVICE, $description->getData('endpointPrefix'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($iterators = $description->getData('iterators')) {
|
||||||
|
$this->setIteratorsConfig($iterators);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->handleRegion($config);
|
||||||
|
$this->handleEndpoint($config);
|
||||||
|
|
||||||
|
return $description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an appropriate signature object for a a client based on the
|
||||||
|
* "signature" configuration setting, or the default signature specified in
|
||||||
|
* a service description. The signature can be set to a valid signature
|
||||||
|
* version identifier string or an instance of Aws\Common\Signature\SignatureInterface.
|
||||||
|
*
|
||||||
|
* @param ServiceDescription $description Description that holds a signature option
|
||||||
|
* @param Collection $config Configuration options
|
||||||
|
*
|
||||||
|
* @return SignatureInterface
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
protected function getSignature(ServiceDescription $description, Collection $config)
|
||||||
|
{
|
||||||
|
// If a custom signature has not been provided, then use the default
|
||||||
|
// signature setting specified in the service description.
|
||||||
|
$signature = $config->get(Options::SIGNATURE) ?: $description->getData('signatureVersion');
|
||||||
|
|
||||||
|
if (is_string($signature)) {
|
||||||
|
if ($signature == 'v4') {
|
||||||
|
$signature = new SignatureV4();
|
||||||
|
} elseif ($signature == 'v2') {
|
||||||
|
$signature = new SignatureV2();
|
||||||
|
} elseif ($signature == 'v3https') {
|
||||||
|
$signature = new SignatureV3Https();
|
||||||
|
} else {
|
||||||
|
throw new InvalidArgumentException("Invalid signature type: {$signature}");
|
||||||
|
}
|
||||||
|
} elseif (!($signature instanceof SignatureInterface)) {
|
||||||
|
throw new InvalidArgumentException('The provided signature is not '
|
||||||
|
. 'a signature version string or an instance of '
|
||||||
|
. 'Aws\\Common\\Signature\\SignatureInterface');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow a custom service name or region value to be provided
|
||||||
|
if ($signature instanceof EndpointSignatureInterface) {
|
||||||
|
|
||||||
|
// Determine the service name to use when signing
|
||||||
|
$signature->setServiceName($config->get(Options::SIGNATURE_SERVICE)
|
||||||
|
?: $description->getData('signingName')
|
||||||
|
?: $description->getData('endpointPrefix'));
|
||||||
|
|
||||||
|
// Determine the region to use when signing requests
|
||||||
|
$signature->setRegionName($config->get(Options::SIGNATURE_REGION) ?: $config->get(Options::REGION));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getCredentials(Collection $config)
|
||||||
|
{
|
||||||
|
$credentials = $config->get(Options::CREDENTIALS);
|
||||||
|
|
||||||
|
if (is_array($credentials)) {
|
||||||
|
$credentials = Credentials::factory($credentials);
|
||||||
|
} elseif ($credentials === false) {
|
||||||
|
$credentials = new NullCredentials();
|
||||||
|
} elseif (!$credentials instanceof CredentialsInterface) {
|
||||||
|
$credentials = Credentials::factory($config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function handleRegion(Collection $config)
|
||||||
|
{
|
||||||
|
// Make sure a valid region is set
|
||||||
|
$region = $config[Options::REGION];
|
||||||
|
$description = $config[Options::SERVICE_DESCRIPTION];
|
||||||
|
$global = $description->getData('globalEndpoint');
|
||||||
|
|
||||||
|
if (!$global && !$region) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
'A region is required when using ' . $description->getData('serviceFullName')
|
||||||
|
);
|
||||||
|
} elseif ($global && !$region) {
|
||||||
|
$config[Options::REGION] = 'us-east-1';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function handleEndpoint(Collection $config)
|
||||||
|
{
|
||||||
|
// Alias "endpoint" with "base_url" for forwards compatibility.
|
||||||
|
if ($config['endpoint']) {
|
||||||
|
$config[Options::BASE_URL] = $config['endpoint'];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($config[Options::BASE_URL]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$endpoint = call_user_func(
|
||||||
|
$config['endpoint_provider'],
|
||||||
|
array(
|
||||||
|
'scheme' => $config[Options::SCHEME],
|
||||||
|
'region' => $config[Options::REGION],
|
||||||
|
'service' => $config[Options::SERVICE]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$config[Options::BASE_URL] = $endpoint['endpoint'];
|
||||||
|
|
||||||
|
// Set a signature if one was not explicitly provided.
|
||||||
|
if (!$config->hasKey(Options::SIGNATURE)
|
||||||
|
&& isset($endpoint['signatureVersion'])
|
||||||
|
) {
|
||||||
|
$config->set(Options::SIGNATURE, $endpoint['signatureVersion']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The the signing region if endpoint rule specifies one.
|
||||||
|
if (isset($endpoint['credentialScope'])) {
|
||||||
|
$scope = $endpoint['credentialScope'];
|
||||||
|
if (isset($scope['region'])) {
|
||||||
|
$config->set(Options::SIGNATURE_REGION, $scope['region']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createDefaultBackoff($retries = 3)
|
||||||
|
{
|
||||||
|
return new BackoffPlugin(
|
||||||
|
// Retry failed requests up to 3 times if it is determined that the request can be retried
|
||||||
|
new TruncatedBackoffStrategy($retries,
|
||||||
|
// Retry failed requests with 400-level responses due to throttling
|
||||||
|
new ThrottlingErrorChecker($this->exceptionParser,
|
||||||
|
// Retry failed requests due to transient network or cURL problems
|
||||||
|
new CurlBackoffStrategy(null,
|
||||||
|
// Retry failed requests with 500-level responses
|
||||||
|
new HttpBackoffStrategy(array(500, 503, 509),
|
||||||
|
// Retry requests that failed due to expired credentials
|
||||||
|
new ExpiredCredentialsChecker($this->exceptionParser,
|
||||||
|
new ExponentialBackoffStrategy()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function extractHttpConfig(Collection $config)
|
||||||
|
{
|
||||||
|
$http = $config['http'];
|
||||||
|
|
||||||
|
if (!is_array($http)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($http['verify'])) {
|
||||||
|
$config[Options::SSL_CERT] = $http['verify'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Aws\Common\Enum\ClientOptions as Options;
|
||||||
|
use Guzzle\Common\Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic client for interacting with an AWS service
|
||||||
|
*/
|
||||||
|
class DefaultClient extends AbstractClient
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Factory method to create a default client using an array of configuration options.
|
||||||
|
*
|
||||||
|
* The following array keys and values are available options:
|
||||||
|
*
|
||||||
|
* Credential options ((`key`, `secret`, and optional `token`) OR `credentials` is required):
|
||||||
|
*
|
||||||
|
* - key: AWS Access Key ID
|
||||||
|
* - secret: AWS secret access key
|
||||||
|
* - credentials: You can optionally provide a custom `Aws\Common\Credentials\CredentialsInterface` object
|
||||||
|
* - token: Custom AWS security token to use with request authentication. Please note that not all services accept temporary credentials. See http://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html
|
||||||
|
* - token.ttd: UNIX timestamp for when the custom credentials expire
|
||||||
|
* - credentials.cache.key: Optional custom cache key to use with the credentials
|
||||||
|
* - credentials.client: Pass this option to specify a custom `Guzzle\Http\ClientInterface` to use if your credentials require a HTTP request (e.g. RefreshableInstanceProfileCredentials)
|
||||||
|
*
|
||||||
|
* Region and endpoint options (Some services do not require a region while others do. Check the service specific user guide documentation for details):
|
||||||
|
*
|
||||||
|
* - region: Region name (e.g. 'us-east-1', 'us-west-1', 'us-west-2', 'eu-west-1', etc...)
|
||||||
|
* - scheme: URI Scheme of the base URL (e.g. 'https', 'http') used when endpoint is not supplied
|
||||||
|
* - endpoint: Allows you to specify a custom endpoint instead of building one from the region and scheme
|
||||||
|
*
|
||||||
|
* Generic client options:
|
||||||
|
*
|
||||||
|
* - signature: Overrides the signature used by the client. Clients will always choose an appropriate default signature. However, it can be useful to override this with a custom setting. This can be set to "v4", "v3https", "v2" or an instance of Aws\Common\Signature\SignatureInterface.
|
||||||
|
* - ssl.certificate_authority: Set to true to use the bundled CA cert or pass the full path to an SSL certificate bundle
|
||||||
|
* - curl.options: Associative of CURLOPT_* cURL options to add to each request
|
||||||
|
* - client.backoff.logger: `Guzzle\Log\LogAdapterInterface` object used to log backoff retries. Use 'debug' to emit PHP warnings when a retry is issued.
|
||||||
|
* - client.backoff.logger.template: Optional template to use for exponential backoff log messages. See `Guzzle\Plugin\Backoff\BackoffLogger` for formatting information.
|
||||||
|
*
|
||||||
|
* @param array|Collection $config Client configuration data
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public static function factory($config = array())
|
||||||
|
{
|
||||||
|
return ClientBuilder::factory()
|
||||||
|
->setConfig($config)
|
||||||
|
->setConfigDefaults(array(Options::SCHEME => 'https'))
|
||||||
|
->build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Aws\Common\Credentials\AbstractRefreshableCredentials;
|
||||||
|
use Aws\Common\Client\AwsClientInterface;
|
||||||
|
use Aws\Common\Exception\Parser\ExceptionParserInterface;
|
||||||
|
use Guzzle\Http\Exception\HttpException;
|
||||||
|
use Guzzle\Http\Message\RequestInterface;
|
||||||
|
use Guzzle\Http\Message\Response;
|
||||||
|
use Guzzle\Plugin\Backoff\BackoffStrategyInterface;
|
||||||
|
use Guzzle\Plugin\Backoff\AbstractBackoffStrategy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backoff logic that handles retrying requests when credentials expire
|
||||||
|
*/
|
||||||
|
class ExpiredCredentialsChecker extends AbstractBackoffStrategy
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array Array of known retrying exception codes
|
||||||
|
*/
|
||||||
|
protected $retryable = array(
|
||||||
|
'RequestExpired' => true,
|
||||||
|
'ExpiredTokenException' => true,
|
||||||
|
'ExpiredToken' => true
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ExceptionParserInterface Exception parser used to parse exception responses
|
||||||
|
*/
|
||||||
|
protected $exceptionParser;
|
||||||
|
|
||||||
|
public function __construct(ExceptionParserInterface $exceptionParser, BackoffStrategyInterface $next = null) {
|
||||||
|
$this->exceptionParser = $exceptionParser;
|
||||||
|
$this->next = $next;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function makesDecision()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getDelay($retries, RequestInterface $request, Response $response = null, HttpException $e = null)
|
||||||
|
{
|
||||||
|
if ($response && $response->isClientError()) {
|
||||||
|
|
||||||
|
$parts = $this->exceptionParser->parse($request, $response);
|
||||||
|
if (!isset($this->retryable[$parts['code']]) || !$request->getClient()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var AwsClientInterface $client */
|
||||||
|
$client = $request->getClient();
|
||||||
|
// Only retry if the credentials can be refreshed
|
||||||
|
if (!($client->getCredentials() instanceof AbstractRefreshableCredentials)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resign the request using new credentials
|
||||||
|
$client->getSignature()->signRequest($request, $client->getCredentials()->setExpiration(-1));
|
||||||
|
|
||||||
|
// Retry immediately with no delay
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Aws\Common\Exception\Parser\ExceptionParserInterface;
|
||||||
|
use Guzzle\Http\Exception\HttpException;
|
||||||
|
use Guzzle\Http\Message\RequestInterface;
|
||||||
|
use Guzzle\Http\Message\Response;
|
||||||
|
use Guzzle\Plugin\Backoff\BackoffStrategyInterface;
|
||||||
|
use Guzzle\Plugin\Backoff\AbstractBackoffStrategy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backoff logic that handles throttling exceptions from services
|
||||||
|
*/
|
||||||
|
class ThrottlingErrorChecker extends AbstractBackoffStrategy
|
||||||
|
{
|
||||||
|
/** @var array Whitelist of exception codes (as indexes) that indicate throttling */
|
||||||
|
protected static $throttlingExceptions = array(
|
||||||
|
'RequestLimitExceeded' => true,
|
||||||
|
'Throttling' => true,
|
||||||
|
'ThrottlingException' => true,
|
||||||
|
'ProvisionedThroughputExceededException' => true,
|
||||||
|
'RequestThrottled' => true,
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ExceptionParserInterface Exception parser used to parse exception responses
|
||||||
|
*/
|
||||||
|
protected $exceptionParser;
|
||||||
|
|
||||||
|
public function __construct(ExceptionParserInterface $exceptionParser, BackoffStrategyInterface $next = null)
|
||||||
|
{
|
||||||
|
$this->exceptionParser = $exceptionParser;
|
||||||
|
if ($next) {
|
||||||
|
$this->setNext($next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function makesDecision()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function getDelay(
|
||||||
|
$retries,
|
||||||
|
RequestInterface $request,
|
||||||
|
Response $response = null,
|
||||||
|
HttpException $e = null
|
||||||
|
) {
|
||||||
|
if ($response && $response->isClientError()) {
|
||||||
|
$parts = $this->exceptionParser->parse($request, $response);
|
||||||
|
return isset(self::$throttlingExceptions[$parts['code']]) ? true : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Aws\Common\Exception\InvalidArgumentException;
|
||||||
|
use Guzzle\Common\Event;
|
||||||
|
use Guzzle\Http\EntityBody;
|
||||||
|
use Guzzle\Service\Command\AbstractCommand as Command;
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares the body parameter of a command such that the parameter is more flexible (e.g. accepts file handles) with
|
||||||
|
* the value it accepts but converts it to the correct format for the command. Also looks for a "Filename" parameter.
|
||||||
|
*/
|
||||||
|
class UploadBodyListener implements EventSubscriberInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array The names of the commands of which to modify the body parameter
|
||||||
|
*/
|
||||||
|
protected $commands;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The key for the upload body parameter
|
||||||
|
*/
|
||||||
|
protected $bodyParameter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string The key for the source file parameter
|
||||||
|
*/
|
||||||
|
protected $sourceParameter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $commands The commands to modify
|
||||||
|
* @param string $bodyParameter The key for the body parameter
|
||||||
|
* @param string $sourceParameter The key for the source file parameter
|
||||||
|
*/
|
||||||
|
public function __construct(array $commands, $bodyParameter = 'Body', $sourceParameter = 'SourceFile')
|
||||||
|
{
|
||||||
|
$this->commands = $commands;
|
||||||
|
$this->bodyParameter = (string) $bodyParameter;
|
||||||
|
$this->sourceParameter = (string) $sourceParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function getSubscribedEvents()
|
||||||
|
{
|
||||||
|
return array('command.before_prepare' => array('onCommandBeforePrepare'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts filenames and file handles into EntityBody objects before the command is validated
|
||||||
|
*
|
||||||
|
* @param Event $event Event emitted
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function onCommandBeforePrepare(Event $event)
|
||||||
|
{
|
||||||
|
/** @var Command $command */
|
||||||
|
$command = $event['command'];
|
||||||
|
if (in_array($command->getName(), $this->commands)) {
|
||||||
|
// Get the interesting parameters
|
||||||
|
$source = $command->get($this->sourceParameter);
|
||||||
|
$body = $command->get($this->bodyParameter);
|
||||||
|
|
||||||
|
// If a file path is passed in then get the file handle
|
||||||
|
if (is_string($source) && file_exists($source)) {
|
||||||
|
$body = fopen($source, 'r');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare the body parameter and remove the source file parameter
|
||||||
|
if (null !== $body) {
|
||||||
|
$command->remove($this->sourceParameter);
|
||||||
|
$command->set($this->bodyParameter, EntityBody::factory($body));
|
||||||
|
} else {
|
||||||
|
throw new InvalidArgumentException("You must specify a non-null value for the {$this->bodyParameter} or {$this->sourceParameter} parameters.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Client;
|
||||||
|
|
||||||
|
use Guzzle\Common\Event;
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener used to append strings to the User-Agent header of a request based
|
||||||
|
* on the `ua.append` option. `ua.append` can contain a string or array of values.
|
||||||
|
*/
|
||||||
|
class UserAgentListener implements EventSubscriberInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string Option used to store User-Agent modifiers
|
||||||
|
*/
|
||||||
|
const OPTION = 'ua.append';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function getSubscribedEvents()
|
||||||
|
{
|
||||||
|
return array('command.before_send' => 'onBeforeSend');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds strings to the User-Agent header using the `ua.append` parameter of a command
|
||||||
|
*
|
||||||
|
* @param Event $event Event emitted
|
||||||
|
*/
|
||||||
|
public function onBeforeSend(Event $event)
|
||||||
|
{
|
||||||
|
$command = $event['command'];
|
||||||
|
if ($userAgentAppends = $command->get(self::OPTION)) {
|
||||||
|
$request = $command->getRequest();
|
||||||
|
$userAgent = (string) $request->getHeader('User-Agent');
|
||||||
|
foreach ((array) $userAgentAppends as $append) {
|
||||||
|
$append = ' ' . $append;
|
||||||
|
if (strpos($userAgent, $append) === false) {
|
||||||
|
$userAgent .= $append;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$request->setHeader('User-Agent', $userAgent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Aws\Common\Command;
|
||||||
|
|
||||||
|
use Guzzle\Http\Message\RequestInterface;
|
||||||
|
use Guzzle\Service\Description\Parameter;
|
||||||
|
use Guzzle\Service\Command\CommandInterface;
|
||||||
|
use Guzzle\Service\Command\LocationVisitor\Request\AbstractRequestVisitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Location visitor used to serialize AWS query parameters (e.g. EC2, SES, SNS, SQS, etc) as POST fields
|
||||||
|
*/
|
||||||
|
class AwsQueryVisitor extends AbstractRequestVisitor
|
||||||
|
{
|
||||||
|
private $fqname;
|
||||||
|
|
||||||
|
public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
|
||||||
|
{
|
||||||
|
$this->fqname = $command->getName();
|
||||||
|
$query = array();
|
||||||
|
$this->customResolver($value, $param, $query, $param->getWireName());
|
||||||
|
$request->addPostFields($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map nested parameters into the location_key based parameters
|
||||||
|
*
|
||||||
|
* @param array $value Value to map
|
||||||
|
* @param Parameter $param Parameter that holds information about the current key
|
||||||
|
* @param array $query Built up query string values
|
||||||
|
* @param string $prefix String to prepend to sub query values
|
||||||
|
*/
|
||||||
|
protected function customResolver($value, Parameter $param, array &$query, $prefix = '')
|
||||||
|
{
|
||||||
|
switch ($param->getType()) {
|
||||||
|
case 'object':
|
||||||
|
$this->resolveObject($param, $value, $prefix, $query);
|
||||||
|
break;
|
||||||
|
case 'array':
|
||||||
|
$this->resolveArray($param, $value, $prefix, $query);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$query[$prefix] = $param->filter($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom handling for objects
|
||||||
|
*
|
||||||
|
* @param Parameter $param Parameter for the object
|
||||||
|
* @param array $value Value that is set for this parameter
|
||||||
|
* @param string $prefix Prefix for the resulting key
|
||||||
|
* @param array $query Query string array passed by reference
|
||||||
|
*/
|
||||||
|
protected function resolveObject(Parameter $param, array $value, $prefix, array &$query)
|
||||||
|
{
|
||||||
|
// Maps are implemented using additional properties
|
||||||
|
$hasAdditionalProperties = ($param->getAdditionalProperties() instanceof Parameter);
|
||||||
|
$additionalPropertyCount = 0;
|
||||||
|
|
||||||
|
foreach ($value as $name => $v) {
|
||||||
|
if ($subParam = $param->getProperty($name)) {
|
||||||
|
// if the parameter was found by name as a regular property
|
||||||
|
$key = $prefix . '.' . $subParam->getWireName();
|
||||||
|
$this->customResolver($v, $subParam, $query, $key);
|
||||||
|
} elseif ($hasAdditionalProperties) {
|
||||||
|
// Handle map cases like &Attribute.1.Name=<name>&Attribute.1.Value=<value>
|
||||||
|
$additionalPropertyCount++;
|
||||||
|
$data = $param->getData();
|
||||||
|
$keyName = isset($data['keyName']) ? $data['keyName'] : 'key';
|
||||||
|
$valueName = isset($data['valueName']) ? $data['valueName'] : 'value';
|
||||||
|
$query["{$prefix}.{$additionalPropertyCount}.{$keyName}"] = $name;
|
||||||
|
$newPrefix = "{$prefix}.{$additionalPropertyCount}.{$valueName}";
|
||||||
|
if (is_array($v)) {
|
||||||
|
$this->customResolver($v, $param->getAdditionalProperties(), $query, $newPrefix);
|
||||||
|
} else {
|
||||||
|
$query[$newPrefix] = $param->filter($v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom handling for arrays
|
||||||
|
*
|
||||||
|
* @param Parameter $param Parameter for the object
|
||||||
|
* @param array $value Value that is set for this parameter
|
||||||
|
* @param string $prefix Prefix for the resulting key
|
||||||
|
* @param array $query Query string array passed by reference
|
||||||
|
*/
|
||||||
|
protected function resolveArray(Parameter $param, array $value, $prefix, array &$query)
|
||||||
|
{
|
||||||
|
static $serializeEmpty = array(
|
||||||
|
'SetLoadBalancerPoliciesForBackendServer' => 1,
|
||||||
|
'SetLoadBalancerPoliciesOfListener' => 1,
|
||||||
|
'UpdateStack' => 1
|
||||||
|
);
|
||||||
|
|
||||||
|
// For BC, serialize empty lists for specific operations
|
||||||
|
if (!$value) {
|
||||||
|
if (isset($serializeEmpty[$this->fqname])) {
|
||||||
|
if (substr($prefix, -7) === '.member') {
|
||||||
|
$prefix = substr($prefix, 0, -7);
|
||||||
|
}
|
||||||
|
$query[$prefix] = '';
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$offset = $param->getData('offset') ?: 1;
|
||||||
|
foreach ($value as $index => $v) {
|
||||||
|
$index += $offset;
|
||||||
|
if (is_array($v) && $items = $param->getItems()) {
|
||||||
|
$this->customResolver($v, $items, $query, $prefix . '.' . $index);
|
||||||
|
} else {
|
||||||
|
$query[$prefix . '.' . $index] = $param->filter($v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Command;
|
||||||
|
|
||||||
|
use Guzzle\Service\Command\OperationCommand;
|
||||||
|
use Guzzle\Http\Curl\CurlHandle;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds AWS JSON body functionality to dynamically generated HTTP requests
|
||||||
|
*/
|
||||||
|
class JsonCommand extends OperationCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function build()
|
||||||
|
{
|
||||||
|
parent::build();
|
||||||
|
|
||||||
|
// Ensure that the body of the request ALWAYS includes some JSON. By default, this is an empty object.
|
||||||
|
if (!$this->request->getBody()) {
|
||||||
|
$this->request->setBody('{}');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Never send the Expect header when interacting with a JSON query service
|
||||||
|
$this->request->removeHeader('Expect');
|
||||||
|
|
||||||
|
// Always send JSON requests as a raw string rather than using streams to avoid issues with
|
||||||
|
// cURL error code 65: "necessary data rewind wasn't possible".
|
||||||
|
// This could be removed after PHP addresses https://bugs.php.net/bug.php?id=47204
|
||||||
|
$this->request->getCurlOptions()->set(CurlHandle::BODY_AS_STRING, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Command;
|
||||||
|
|
||||||
|
use Guzzle\Service\Command\OperationCommand;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds AWS Query service serialization
|
||||||
|
*/
|
||||||
|
class QueryCommand extends OperationCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var AwsQueryVisitor
|
||||||
|
*/
|
||||||
|
protected static $queryVisitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var XmlResponseLocationVisitor
|
||||||
|
*/
|
||||||
|
protected static $xmlVisitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the aws.query visitor
|
||||||
|
*/
|
||||||
|
protected function init()
|
||||||
|
{
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
if (!self::$queryVisitor) {
|
||||||
|
self::$queryVisitor = new AwsQueryVisitor();
|
||||||
|
}
|
||||||
|
if (!self::$xmlVisitor) {
|
||||||
|
self::$xmlVisitor = new XmlResponseLocationVisitor();
|
||||||
|
}
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
|
$this->getRequestSerializer()->addVisitor('aws.query', self::$queryVisitor);
|
||||||
|
$this->getResponseParser()->addVisitor('xml', self::$xmlVisitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Aws\Common\Command;
|
||||||
|
|
||||||
|
use Guzzle\Service\Description\Operation;
|
||||||
|
use Guzzle\Service\Command\CommandInterface;
|
||||||
|
use Guzzle\Http\Message\Response;
|
||||||
|
use Guzzle\Service\Description\Parameter;
|
||||||
|
use Guzzle\Service\Command\LocationVisitor\Response\XmlVisitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class used for custom AWS XML response parsing of query services
|
||||||
|
*/
|
||||||
|
class XmlResponseLocationVisitor extends XmlVisitor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function before(CommandInterface $command, array &$result)
|
||||||
|
{
|
||||||
|
parent::before($command, $result);
|
||||||
|
|
||||||
|
// Unwrapped wrapped responses
|
||||||
|
$operation = $command->getOperation();
|
||||||
|
if ($operation->getServiceDescription()->getData('resultWrapped')) {
|
||||||
|
$wrappingNode = $operation->getName() . 'Result';
|
||||||
|
if (isset($result[$wrappingNode])) {
|
||||||
|
$result = $result[$wrappingNode] + $result;
|
||||||
|
unset($result[$wrappingNode]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accounts for wrapper nodes
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function visit(
|
||||||
|
CommandInterface $command,
|
||||||
|
Response $response,
|
||||||
|
Parameter $param,
|
||||||
|
&$value,
|
||||||
|
$context = null
|
||||||
|
) {
|
||||||
|
parent::visit($command, $response, $param, $value, $context);
|
||||||
|
|
||||||
|
// Account for wrapper nodes (e.g. RDS, ElastiCache, etc)
|
||||||
|
if ($param->getData('wrapper')) {
|
||||||
|
$wireName = $param->getWireName();
|
||||||
|
$value += $value[$wireName];
|
||||||
|
unset($value[$wireName]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter used when converting XML maps into associative arrays in service descriptions
|
||||||
|
*
|
||||||
|
* @param array $value Value to filter
|
||||||
|
* @param string $entryName Name of each entry
|
||||||
|
* @param string $keyName Name of each key
|
||||||
|
* @param string $valueName Name of each value
|
||||||
|
*
|
||||||
|
* @return array Returns the map of the XML data
|
||||||
|
*/
|
||||||
|
public static function xmlMap($value, $entryName, $keyName, $valueName)
|
||||||
|
{
|
||||||
|
$result = array();
|
||||||
|
foreach ($value as $entry) {
|
||||||
|
$result[$entry[$keyName]] = $entry[$valueName];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract credentials decorator
|
||||||
|
*/
|
||||||
|
class AbstractCredentialsDecorator implements CredentialsInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var CredentialsInterface Wrapped credentials object
|
||||||
|
*/
|
||||||
|
protected $credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new BasicAWSCredentials object, with the specified AWS
|
||||||
|
* access key and AWS secret key
|
||||||
|
*
|
||||||
|
* @param CredentialsInterface $credentials
|
||||||
|
*/
|
||||||
|
public function __construct(CredentialsInterface $credentials)
|
||||||
|
{
|
||||||
|
$this->credentials = $credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function serialize()
|
||||||
|
{
|
||||||
|
return $this->credentials->serialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function unserialize($serialized)
|
||||||
|
{
|
||||||
|
$this->credentials = new Credentials('', '');
|
||||||
|
$this->credentials->unserialize($serialized);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getAccessKeyId()
|
||||||
|
{
|
||||||
|
return $this->credentials->getAccessKeyId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getSecretKey()
|
||||||
|
{
|
||||||
|
return $this->credentials->getSecretKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getSecurityToken()
|
||||||
|
{
|
||||||
|
return $this->credentials->getSecurityToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getExpiration()
|
||||||
|
{
|
||||||
|
return $this->credentials->getExpiration();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function isExpired()
|
||||||
|
{
|
||||||
|
return $this->credentials->isExpired();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setAccessKeyId($key)
|
||||||
|
{
|
||||||
|
$this->credentials->setAccessKeyId($key);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setSecretKey($secret)
|
||||||
|
{
|
||||||
|
$this->credentials->setSecretKey($secret);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setSecurityToken($token)
|
||||||
|
{
|
||||||
|
$this->credentials->setSecurityToken($token);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function setExpiration($timestamp)
|
||||||
|
{
|
||||||
|
$this->credentials->setExpiration($timestamp);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract decorator to provide a foundation for refreshable credentials
|
||||||
|
*/
|
||||||
|
abstract class AbstractRefreshableCredentials extends AbstractCredentialsDecorator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the underlying credentials, refreshing if necessary.
|
||||||
|
*
|
||||||
|
* @return Credentials
|
||||||
|
*/
|
||||||
|
public function getCredentials()
|
||||||
|
{
|
||||||
|
if ($this->credentials->isExpired()) {
|
||||||
|
$this->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Credentials(
|
||||||
|
$this->credentials->getAccessKeyId(),
|
||||||
|
$this->credentials->getSecretKey(),
|
||||||
|
$this->credentials->getSecurityToken(),
|
||||||
|
$this->credentials->getExpiration()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getAccessKeyId()
|
||||||
|
{
|
||||||
|
if ($this->credentials->isExpired()) {
|
||||||
|
$this->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->credentials->getAccessKeyId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getSecretKey()
|
||||||
|
{
|
||||||
|
if ($this->credentials->isExpired()) {
|
||||||
|
$this->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->credentials->getSecretKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getSecurityToken()
|
||||||
|
{
|
||||||
|
if ($this->credentials->isExpired()) {
|
||||||
|
$this->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->credentials->getSecurityToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function serialize()
|
||||||
|
{
|
||||||
|
if ($this->credentials->isExpired()) {
|
||||||
|
$this->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->credentials->serialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to get new credentials
|
||||||
|
*/
|
||||||
|
abstract protected function refresh();
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Credentials;
|
||||||
|
|
||||||
|
use Guzzle\Cache\CacheAdapterInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credentials decorator used to implement caching credentials
|
||||||
|
*/
|
||||||
|
class CacheableCredentials extends AbstractRefreshableCredentials
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var CacheAdapterInterface Cache adapter used to store credentials
|
||||||
|
*/
|
||||||
|
protected $cache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string Cache key used to store the credentials
|
||||||
|
*/
|
||||||
|
protected $cacheKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CacheableCredentials is a decorator that decorates other credentials
|
||||||
|
*
|
||||||
|
* @param CredentialsInterface $credentials Credentials to adapt
|
||||||
|
* @param CacheAdapterInterface $cache Cache to use to store credentials
|
||||||
|
* @param string $cacheKey Cache key of the credentials
|
||||||
|
*/
|
||||||
|
public function __construct(CredentialsInterface $credentials, CacheAdapterInterface $cache, $cacheKey)
|
||||||
|
{
|
||||||
|
$this->cache = $cache;
|
||||||
|
$this->cacheKey = $cacheKey;
|
||||||
|
|
||||||
|
parent::__construct($credentials);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to get new credentials from cache or from the adapted object
|
||||||
|
*/
|
||||||
|
protected function refresh()
|
||||||
|
{
|
||||||
|
if (!$cache = $this->cache->fetch($this->cacheKey)) {
|
||||||
|
// The credentials were not found, so try again and cache if new
|
||||||
|
$this->credentials->getAccessKeyId();
|
||||||
|
if (!$this->credentials->isExpired()) {
|
||||||
|
// The credentials were updated, so cache them
|
||||||
|
$this->cache->save($this->cacheKey, $this->credentials, $this->credentials->getExpiration() - time());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// The credentials were found in cache, so update the adapter object
|
||||||
|
// if the cached credentials are not expired
|
||||||
|
if (!$cache->isExpired()) {
|
||||||
|
$this->credentials->setAccessKeyId($cache->getAccessKeyId());
|
||||||
|
$this->credentials->setSecretKey($cache->getSecretKey());
|
||||||
|
$this->credentials->setSecurityToken($cache->getSecurityToken());
|
||||||
|
$this->credentials->setExpiration($cache->getExpiration());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,352 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Credentials;
|
||||||
|
|
||||||
|
use Aws\Common\Enum\ClientOptions as Options;
|
||||||
|
use Aws\Common\Exception\InvalidArgumentException;
|
||||||
|
use Aws\Common\Exception\RequiredExtensionNotLoadedException;
|
||||||
|
use Aws\Common\Exception\RuntimeException;
|
||||||
|
use Guzzle\Common\FromConfigInterface;
|
||||||
|
use Guzzle\Cache\CacheAdapterInterface;
|
||||||
|
use Guzzle\Cache\DoctrineCacheAdapter;
|
||||||
|
use Guzzle\Common\Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic implementation of the AWSCredentials interface that allows callers to
|
||||||
|
* pass in the AWS access key and secret access in the constructor.
|
||||||
|
*/
|
||||||
|
class Credentials implements CredentialsInterface, FromConfigInterface
|
||||||
|
{
|
||||||
|
const ENV_KEY = 'AWS_ACCESS_KEY_ID';
|
||||||
|
const ENV_SECRET = 'AWS_SECRET_KEY';
|
||||||
|
const ENV_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY';
|
||||||
|
const ENV_PROFILE = 'AWS_PROFILE';
|
||||||
|
|
||||||
|
/** @var string AWS Access Key ID */
|
||||||
|
protected $key;
|
||||||
|
|
||||||
|
/** @var string AWS Secret Access Key */
|
||||||
|
protected $secret;
|
||||||
|
|
||||||
|
/** @var string AWS Security Token */
|
||||||
|
protected $token;
|
||||||
|
|
||||||
|
/** @var int Time to die of token */
|
||||||
|
protected $ttd;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the available keys for the factory method
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getConfigDefaults()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
Options::KEY => null,
|
||||||
|
Options::SECRET => null,
|
||||||
|
Options::TOKEN => null,
|
||||||
|
Options::TOKEN_TTD => null,
|
||||||
|
Options::PROFILE => null,
|
||||||
|
Options::CREDENTIALS_CACHE => null,
|
||||||
|
Options::CREDENTIALS_CACHE_KEY => null,
|
||||||
|
Options::CREDENTIALS_CLIENT => null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory method for creating new credentials. This factory method will
|
||||||
|
* create the appropriate credentials object with appropriate decorators
|
||||||
|
* based on the passed configuration options.
|
||||||
|
*
|
||||||
|
* @param array $config Options to use when instantiating the credentials
|
||||||
|
*
|
||||||
|
* @return CredentialsInterface
|
||||||
|
* @throws InvalidArgumentException If the caching options are invalid
|
||||||
|
* @throws RuntimeException If using the default cache and APC is disabled
|
||||||
|
*/
|
||||||
|
public static function factory($config = array())
|
||||||
|
{
|
||||||
|
// Add default key values
|
||||||
|
foreach (self::getConfigDefaults() as $key => $value) {
|
||||||
|
if (!isset($config[$key])) {
|
||||||
|
$config[$key] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up the cache
|
||||||
|
$cache = $config[Options::CREDENTIALS_CACHE];
|
||||||
|
$cacheKey = $config[Options::CREDENTIALS_CACHE_KEY] ?:
|
||||||
|
'credentials_' . ($config[Options::KEY] ?: crc32(gethostname()));
|
||||||
|
|
||||||
|
if (
|
||||||
|
$cacheKey &&
|
||||||
|
$cache instanceof CacheAdapterInterface &&
|
||||||
|
$cached = self::createFromCache($cache, $cacheKey)
|
||||||
|
) {
|
||||||
|
return $cached;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the credentials object
|
||||||
|
if (!$config[Options::KEY] || !$config[Options::SECRET]) {
|
||||||
|
$credentials = self::createFromEnvironment($config);
|
||||||
|
} else {
|
||||||
|
// Instantiate using short or long term credentials
|
||||||
|
$credentials = new static(
|
||||||
|
$config[Options::KEY],
|
||||||
|
$config[Options::SECRET],
|
||||||
|
$config[Options::TOKEN],
|
||||||
|
$config[Options::TOKEN_TTD]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the credentials are refreshable, and if so, configure caching
|
||||||
|
$cache = $config[Options::CREDENTIALS_CACHE];
|
||||||
|
if ($cacheKey && $cache) {
|
||||||
|
$credentials = self::createCache($credentials, $cache, $cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $credentials;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create credentials from the credentials ini file in the HOME directory.
|
||||||
|
*
|
||||||
|
* @param string|null $profile Pass a specific profile to use. If no
|
||||||
|
* profile is specified we will attempt to use
|
||||||
|
* the value specified in the AWS_PROFILE
|
||||||
|
* environment variable. If AWS_PROFILE is not
|
||||||
|
* set, the "default" profile is used.
|
||||||
|
* @param string|null $filename Pass a string to specify the location of the
|
||||||
|
* credentials files. If null is passed, the
|
||||||
|
* SDK will attempt to find the configuration
|
||||||
|
* file at in your HOME directory at
|
||||||
|
* ~/.aws/credentials.
|
||||||
|
* @return CredentialsInterface
|
||||||
|
* @throws \RuntimeException if the file cannot be found, if the file is
|
||||||
|
* invalid, or if the profile is invalid.
|
||||||
|
*/
|
||||||
|
public static function fromIni($profile = null, $filename = null)
|
||||||
|
{
|
||||||
|
if (!$filename) {
|
||||||
|
$filename = self::getHomeDir() . '/.aws/credentials';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$profile) {
|
||||||
|
$profile = self::getEnvVar(self::ENV_PROFILE) ?: 'default';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_readable($filename) || ($data = parse_ini_file($filename, true)) === false) {
|
||||||
|
throw new \RuntimeException("Invalid AWS credentials file: {$filename}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($data[$profile]['aws_access_key_id']) || !isset($data[$profile]['aws_secret_access_key'])) {
|
||||||
|
throw new \RuntimeException("Invalid AWS credentials profile {$profile} in {$filename}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new self(
|
||||||
|
$data[$profile]['aws_access_key_id'],
|
||||||
|
$data[$profile]['aws_secret_access_key'],
|
||||||
|
isset($data[$profile]['aws_security_token'])
|
||||||
|
? $data[$profile]['aws_security_token']
|
||||||
|
: null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new BasicAWSCredentials object, with the specified AWS
|
||||||
|
* access key and AWS secret key
|
||||||
|
*
|
||||||
|
* @param string $accessKeyId AWS access key ID
|
||||||
|
* @param string $secretAccessKey AWS secret access key
|
||||||
|
* @param string $token Security token to use
|
||||||
|
* @param int $expiration UNIX timestamp for when credentials expire
|
||||||
|
*/
|
||||||
|
public function __construct($accessKeyId, $secretAccessKey, $token = null, $expiration = null)
|
||||||
|
{
|
||||||
|
$this->key = trim($accessKeyId);
|
||||||
|
$this->secret = trim($secretAccessKey);
|
||||||
|
$this->token = $token;
|
||||||
|
$this->ttd = $expiration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function serialize()
|
||||||
|
{
|
||||||
|
return json_encode(array(
|
||||||
|
Options::KEY => $this->key,
|
||||||
|
Options::SECRET => $this->secret,
|
||||||
|
Options::TOKEN => $this->token,
|
||||||
|
Options::TOKEN_TTD => $this->ttd
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unserialize($serialized)
|
||||||
|
{
|
||||||
|
$data = json_decode($serialized, true);
|
||||||
|
$this->key = $data[Options::KEY];
|
||||||
|
$this->secret = $data[Options::SECRET];
|
||||||
|
$this->token = $data[Options::TOKEN];
|
||||||
|
$this->ttd = $data[Options::TOKEN_TTD];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAccessKeyId()
|
||||||
|
{
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSecretKey()
|
||||||
|
{
|
||||||
|
return $this->secret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSecurityToken()
|
||||||
|
{
|
||||||
|
return $this->token;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getExpiration()
|
||||||
|
{
|
||||||
|
return $this->ttd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isExpired()
|
||||||
|
{
|
||||||
|
return $this->ttd !== null && time() >= $this->ttd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAccessKeyId($key)
|
||||||
|
{
|
||||||
|
$this->key = $key;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSecretKey($secret)
|
||||||
|
{
|
||||||
|
$this->secret = $secret;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSecurityToken($token)
|
||||||
|
{
|
||||||
|
$this->token = $token;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setExpiration($timestamp)
|
||||||
|
{
|
||||||
|
$this->ttd = $timestamp;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When no keys are provided, attempt to create them based on the
|
||||||
|
* environment or instance profile credentials.
|
||||||
|
*
|
||||||
|
* @param array|Collection $config
|
||||||
|
*
|
||||||
|
* @return CredentialsInterface
|
||||||
|
*/
|
||||||
|
private static function createFromEnvironment($config)
|
||||||
|
{
|
||||||
|
// Get key and secret from ENV variables
|
||||||
|
$envKey = self::getEnvVar(self::ENV_KEY);
|
||||||
|
if (!($envSecret = self::getEnvVar(self::ENV_SECRET))) {
|
||||||
|
// Use AWS_SECRET_ACCESS_KEY if AWS_SECRET_KEY was not set
|
||||||
|
$envSecret = self::getEnvVar(self::ENV_SECRET_ACCESS_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use credentials from the environment variables if available
|
||||||
|
if ($envKey && $envSecret) {
|
||||||
|
return new static($envKey, $envSecret);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Use credentials from the INI file in HOME directory if available
|
||||||
|
return self::fromIni($config[Options::PROFILE]);
|
||||||
|
} catch (\RuntimeException $e) {
|
||||||
|
// Otherwise, try using instance profile credentials (available on EC2 instances)
|
||||||
|
return new RefreshableInstanceProfileCredentials(
|
||||||
|
new static('', '', '', 1),
|
||||||
|
$config[Options::CREDENTIALS_CLIENT]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function createFromCache(CacheAdapterInterface $cache, $cacheKey)
|
||||||
|
{
|
||||||
|
$cached = $cache->fetch($cacheKey);
|
||||||
|
if ($cached instanceof CredentialsInterface && !$cached->isExpired()) {
|
||||||
|
return new CacheableCredentials($cached, $cache, $cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function createCache(CredentialsInterface $credentials, $cache, $cacheKey)
|
||||||
|
{
|
||||||
|
if ($cache === 'true' || $cache === true) {
|
||||||
|
// If no cache adapter was provided, then create one for the user
|
||||||
|
// @codeCoverageIgnoreStart
|
||||||
|
if (!extension_loaded('apc')) {
|
||||||
|
throw new RequiredExtensionNotLoadedException('PHP has not been compiled with APC. Unable to cache '
|
||||||
|
. 'the credentials.');
|
||||||
|
} elseif (!class_exists('Doctrine\Common\Cache\ApcCache')) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
'Cannot set ' . Options::CREDENTIALS_CACHE . ' to true because the Doctrine cache component is '
|
||||||
|
. 'not installed. Either install doctrine/cache or pass in an instantiated '
|
||||||
|
. 'Guzzle\Cache\CacheAdapterInterface object'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// @codeCoverageIgnoreEnd
|
||||||
|
$cache = new DoctrineCacheAdapter(new \Doctrine\Common\Cache\ApcCache());
|
||||||
|
} elseif (!($cache instanceof CacheAdapterInterface)) {
|
||||||
|
throw new InvalidArgumentException('Unable to utilize caching with the specified options');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decorate the credentials with a cache
|
||||||
|
return new CacheableCredentials($credentials, $cache, $cacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getHomeDir()
|
||||||
|
{
|
||||||
|
// On Linux/Unix-like systems, use the HOME environment variable
|
||||||
|
if ($homeDir = self::getEnvVar('HOME')) {
|
||||||
|
return $homeDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the HOMEDRIVE and HOMEPATH values for Windows hosts
|
||||||
|
$homeDrive = self::getEnvVar('HOMEDRIVE');
|
||||||
|
$homePath = self::getEnvVar('HOMEPATH');
|
||||||
|
|
||||||
|
return ($homeDrive && $homePath) ? $homeDrive . $homePath : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the value of an environment variable by checking $_SERVER and getenv().
|
||||||
|
*
|
||||||
|
* @param string $var Name of the environment variable
|
||||||
|
*
|
||||||
|
* @return mixed|null
|
||||||
|
*/
|
||||||
|
private static function getEnvVar($var)
|
||||||
|
{
|
||||||
|
return isset($_SERVER[$var]) ? $_SERVER[$var] : getenv($var);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License").
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* A copy of the License is located at
|
||||||
|
*
|
||||||
|
* http://aws.amazon.com/apache2.0
|
||||||
|
*
|
||||||
|
* or in the "license" file accompanying this file. This file is distributed
|
||||||
|
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
|
||||||
|
* express or implied. See the License for the specific language governing
|
||||||
|
* permissions and limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Aws\Common\Credentials;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides access to the AWS credentials used for accessing AWS services: AWS
|
||||||
|
* access key ID, secret access key, and security token. These credentials are
|
||||||
|
* used to securely sign requests to AWS services.
|
||||||
|
*/
|
||||||
|
interface CredentialsInterface extends \Serializable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns the AWS access key ID for this credentials object.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAccessKeyId();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the AWS secret access key for this credentials object.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getSecretKey();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the associated security token if available
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getSecurityToken();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the UNIX timestamp in which the credentials will expire
|
||||||
|
*
|
||||||
|
* @return int|null
|
||||||
|
*/
|
||||||
|
public function getExpiration();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the AWS access key ID for this credentials object.
|
||||||
|
*
|
||||||
|
* @param string $key AWS access key ID
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setAccessKeyId($key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the AWS secret access key for this credentials object.
|
||||||
|
*
|
||||||
|
* @param string $secret AWS secret access key
|
||||||
|
*
|
||||||
|
* @return CredentialsInterface
|
||||||
|
*/
|
||||||
|
public function setSecretKey($secret);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the security token to use with this credentials object
|
||||||
|
*
|
||||||
|
* @param string $token Security token
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setSecurityToken($token);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the UNIX timestamp in which the credentials will expire
|
||||||
|
*
|
||||||
|
* @param int $timestamp UNIX timestamp expiration
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function setExpiration($timestamp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the credentials are expired
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isExpired();
|
||||||
|
}
|
||||||