<?
include_once (_DIR_EXT.'/frames/c_menu_tabs.php') ;

//---------------------------------------------------------------------------------------------------------------------
//
// функции для сохранения удаленных объектов
//
//---------------------------------------------------------------------------------------------------------------------


function copy_check_obj_to_trash($_check)
{   if (_sizeof($_check)) foreach ($_check as $tkey=>$tkey_arr)
	  if (_sizeof($tkey_arr)) foreach ($tkey_arr as $clss=>$clss_arr) if (!_CLSS($clss)->no_use_trash)
 		  if (_sizeof($clss_arr)) foreach($clss_arr as $pkey=>$parent)
           {   $cur_obj[$tkey][$clss][$pkey]=$parent ;
               $doc=export_OBJ_to_XML_doc($cur_obj,array('copy_file_to_trash'=>1)) ; // получаем XML описание объекта, одновременно перемещая файлы объекта в корзину
               $content=$doc->saveXML() ;
               $obj_info=select_db_obj_info($tkey,$pkey) ;
               $name=($obj_info['obj_name'])? $obj_info['obj_name']:_CLSS($clss)->name.' # '.$pkey ;
               $fname=safe_patch_files(safe_file_names($name)).'.xml' ;
               if (!is_dir(_DIR_TO_DELETED.'/')) create_dir(_DIR_TO_DELETED.'/') ;
               file_put_contents(_DIR_TO_DELETED.'/'.$fname,$content) ;
               //echo $content.'<br>' ;
               echo 'Помещен в мусорную корзину:  <span class=green>'._CLSS($clss)->name.'</span> - <strong>'.$name.'</strong><br>' ;
           }

}

//---------------------------------------------------------------------------------------------------------------------
//
// класс - корзина в админке
//
//---------------------------------------------------------------------------------------------------------------------


function CART_FRAMES(){if (!is_object($GLOBALS['cart_frames'])) $GLOBALS['cart_frames']=new c_cart_frames;return($GLOBALS['cart_frames']);}

class c_cart_frames
{ public $cnt ;	      // число товаров в корзине
  public $list_check =array() ; // краткая информация по товару в корзине

   // создание корзины
  function __construct()
  {  $this->cnt=0  ;
     $this->not_delete_obj_from_backet=0 ;
  }

  function arr_ids()
  {
    return($_SESSION['cart']) ;
  }

  // добавление товара в корзину
  function add($_check)
  { //damp_array($_check) ;

    if (_sizeof($_check)) foreach ($_check as $tkey=>$tkey_arr)
	  if (_sizeof($tkey_arr)) foreach ($tkey_arr as $clss=>$clss_arr)
 		  if (_sizeof($clss_arr)) foreach($clss_arr as $pkey=>$parent) $_SESSION['cart'][$tkey][$clss][$pkey]=$parent  ;

  }

  // удаляем из корзины
  function del($_check)
  { //damp_array($_check) ;
    //damp_array($_SESSION['cart']) ;

    if (_sizeof($_check)) foreach ($_check as $tkey=>$tkey_arr)
	  if (_sizeof($tkey_arr)) foreach ($tkey_arr as $clss=>$clss_arr)
 	   {  if (_sizeof($clss_arr)) foreach($clss_arr as $pkey=>$parent)
 		  { unset($_SESSION['cart'][$tkey][$clss][$pkey])  ;
 		    if (!_sizeof($_SESSION['cart'][$tkey][$clss])) unset($_SESSION['cart'][$tkey][$clss]) ; // очистка пустных массивов
 		  }
 		  if (!_sizeof($_SESSION['cart'][$tkey])) unset($_SESSION['cart'][$tkey]) ; // очистка пустных массивов
 	   }
 	   if (!_sizeof($_SESSION['cart'])) unset($_SESSION['cart']) ; // очистка пустных массивов

  }

  function get_count()
  {
    $cnt=0 ;
 	if (_sizeof($_SESSION['cart'])) foreach ($_SESSION['cart'] as $tkey=>$tkey_arr)
	  if (_sizeof($tkey_arr)) foreach ($tkey_arr as $clss=>$clss_arr)
 		  if (_sizeof($clss_arr)) foreach($clss_arr as $pkey=>$parent) $cnt+=1 ;
     return($cnt) ;
  }

  // очищаем корзину
  function erase()
  { $_SESSION['cart'] = array() ;

  }

  // переносим товар из корзины
  function cart_move_as_obj()
  { global $_check,$tkey,$obj_info,$_use_self_pkey ;
    // перемещения объектов через корзину производиться по разному для объектов в этой же таблице и для объектов с другой таблицы
    // перемещение первых происходит за счет изменения parent
    // переменение вторых - через XML DOM
    $_SESSION['cart_admin']->save_params() ;
    $_check_source=$_check ; //damp_array($_check_source) ; echo 'tkey='.$tkey.'<br>';
    // 1. перемещаем объекты, которые находятся внутри текущей таблицы
    if (_sizeof($_check)) foreach($_check as $cur_tkey=>$tkey_arr)
      if (_sizeof($tkey_arr)) foreach($tkey_arr as $cur_clss=>$clss_arr) if (_sizeof($clss_arr))
         if ($cur_tkey==_DOT($tkey)->list_clss[$cur_clss]) // смотрим, нет ли перемещаний объектов для текущего объекта в рамках текущего класса
         {  $str_pkeys=implode(',',array_keys($clss_arr)) ;
            //echo $str_pkeys.'<br>' ; echo _DOT($cur_tkey)->table_name.'<br>' ;
            update_rec_in_table($cur_tkey,array('parent'=>$obj_info['pkey']),'pkey in ('.$str_pkeys.')',array('debug'=>0)) ;
            echo 'Объекты <strong>'.$str_pkeys.'</strong> перемещены в  <span class=green>'._CLSS($obj_info['clss'])->name.'</span> "<strong>'.$obj_info['obj_name'].'</strong>"<br>' ;
 	       unset($_check[$cur_tkey][$cur_clss]) ;
 	    }
    // удаляем из массива пустые позиции
    if (_sizeof($_check)) foreach($_check as $cur_tkey=>$tkey_arr) if (!_sizeof($tkey_arr)) unset($_check[$cur_tkey]) ;
    //echo 'check после копирования внутри таблицы' ; damp_array($_check) ; echo '<br>' ;

    // 2. копируем оставшиеся объекты из одной таблицы в другую
    if (_sizeof($_check))
    { $doc=export_OBJ_to_XML_doc($_check) ; // создаем DOM-XML объект
    	 import_OBJ_from_XML($doc,array('use_self_pkey'=>$_use_self_pkey)) ; // создаем новые объекты из DOM-модели

      // 2.1. удаляем объекты из исходной таблицы
      cmd_delete_obj($_check) ;
    }

    // 4. очищаем корзину от отработанных объектов
    if (!$_SESSION['cart_admin']->not_delete_obj_from_backet) $_SESSION['cart_admin']->del($_check_source) ;

    // 5. возвращаем id активного пункта меню
    if (_sizeof($_check)) list($_tkey,$arr1)=each($_check) ; if (_sizeof($arr1)) list($_clss,$arr2)=each($arr1) ;
    if ($_SESSION['cart_admin']->cnt)  return('cart') ;
    else if ($_clss) return('structure_'.$_clss) ;
    else             return('structure') ;

  }

  // копируем товар из корзины
  // $_use_self_pkey - Сохранить id объектов
  function cart_copy_as_obj($target_reffer,$_check)
  { include_once (_DIR_TO_ENGINE.'/ext/XML/export_OBJ_to_XML_doc.php') ;
    include_once (_DIR_TO_ENGINE.'/ext/XML/import_OBJ_from_XML.php') ;
    $_use_self_pkey=0 ;

    $doc=export_OBJ_to_XML_doc($_check,array('use_inner_file_dir'=>1)) ; // создаем DOM-XML объект
    list($cnt,$size)=import_OBJ_from_XML($target_reffer,$doc,array('use_self_pkey'=>$_use_self_pkey,'debug_import'=>0)) ; // создаем новые объекты из DOM-модели
    if ($cnt) echo '<div class=green bold>Произведено копирование '.$cnt.' объектов</div>' ;
    if (!$GLOBALS['LS_frames_not_delete_obj_from_backet']) CART_FRAMES()->del($_check) ;
    //if (_sizeof($_check)) list($_tkey,$arr1)=each($_check) ; if (_sizeof($arr1)) list($_clss,$arr2)=each($arr1) ;
    //if ($_SESSION['cart_admin']->cnt)  return('ok') ;
    //else if ($_clss) return('structure_'.$_clss) ;
    //else             return('structure') ;
  }

}

 // *****************************************************************************************************************************************************************
 // *****************************************************************************************************************************************************************
 // *****************************************************************************************************************************************************************

 // КОРЗИНА

 // показываем корзину
 function show_cart()
  { //damp_array($cur_page) ;
    ?><form><?
    if (_sizeof(_CUR_PAGE()->obj_info)) { $allow_clss=_CLSS(_CUR_PAGE()->obj_info['clss'])->get_adding_clss(_CUR_PAGE()->obj_info['tkey'],_CUR_PAGE()->obj_info['pkey'],0) ; }
    else                             $allow_clss=_CLSS(0)->get_adding_clss(_CUR_PAGE()->tkey) ;
    $arr_links_clss=_CLSS(100)->get_arr_child_clss() ; // список классов дочерних от "ссылка на объект"
    $arr_allow_clss=array_keys($allow_clss);
    $res_arr=array_intersect($arr_links_clss,$arr_allow_clss) ;
    $copy_as_links=(_sizeof($res_arr))? 1:0;
    $copy_as_links=1 ;  // объект всегда можно скопировать как ссылку если прави

 	?><div id=childs_objs><?
 	// по массиву check получаем массивы информации по объекту

    $cnt_view=0 ; $cnt_copy_move=0 ;
 	if (_sizeof(CART_FRAMES()->arr_ids())) foreach (CART_FRAMES()->arr_ids() as $tkey=>$tkey_arr)
	  if (_sizeof($tkey_arr)) foreach ($tkey_arr as $clss=>$clss_arr) if (isset($allow_clss[$clss]) or $copy_as_links)
	   { $pkey_str=implode(',',array_keys($clss_arr))  ;
         $options['read_only']=1 ;
         $options['buttons']=array() ;
         if ($_SESSION['cart_admin']->cnt==1) $options['check_all']=1 ;
         _CLSS($clss)->show_list_items($tkey,'pkey in ('.$pkey_str.')',$options) ;
         $cnt_view+=_sizeof($clss_arr)  ;
         if (isset($allow_clss[$clss])) $cnt_copy_move+=_sizeof($clss_arr) ;

	   }
    if ($cnt_view)
    { if ($cnt_copy_move){?><button class="btn btn-success v2" cmd="frames/cart_copy_as_obj" target_reffer="<?echo _CUR_PAGE()->obj_info['_reffer']?>">Сделать копию</button><button class=button cmd=cart_move_as_obj>Переместить</button><?}

      /*if (isset($copy_as_links)){?><button class=button cmd=cart_copy_as_refs>Сделать линк</button><?}*/

      ?><!--<button class=button cmd=export_obj_to_xml mode=give_file>В XML</button>-->
        <button class="btn btn-success v2" cmd="frames/cart_erase">Очистить список</button><br><br><strong>Параметры корзины:</strong><br><br>
        <input class="v2" cmd="setting/save_setting" name="LS_frames_not_delete_obj_from_backet" type="checkbox" value="1" <?if ($GLOBALS['LS_frames_not_delete_obj_from_backet']) echo 'checked'?>>&nbsp;Не удалять с корзины после операции<br>
      <?
      if ($cnt_copy_move) // опции только для copy/move
      {?>
	   <!--<input name="Name" type="checkbox" value="ON">&nbsp;Без дочерних объектов<br>-->
	   <!--<input name="Name" type="checkbox" value="ON">&nbsp;Создавать копии изображений<br>-->
	   <!--<input name="_use_self_pkey" type="checkbox" value="ON">&nbsp;Сохранить id объектов<br>-->
      <?}
    }
    else {?><div class=alert>Вы не можете вставить или скопировать сюда выбранные объекты</div><?}
    ?></div></form><?
  }



 /*
 function cmd_exe_cart_delete_check()
 {  global $_check ;
    $_SESSION['cart_admin']->save_params() ;
	$_SESSION['cart_admin']->del($_check) ;
 }
 */



 // переделано 14.08.13
 // вместо out-таблиц для ссылок используем одну таблицу с линками
 // просто вставляем в эту таблицу данные объекта и объекта, в составе которого он будет находиться
 function cart_copy_as_refs()
 { global $_check,$tkey,$obj_info,$cur_page ;
   $_SESSION['cart_admin']->save_params() ;
   //$use_clss=0 ;
   //if (_sizeof($cur_page->obj_info)) $allow_clss=_CLSS($cur_page->obj_info['clss'])->get_adding_clss($cur_page->obj_info['tkey'],$cur_page->obj_info['pkey']) ;
   //else                             $allow_clss=_CLSS(0)->get_adding_clss($cur_page->tkey) ;
   //$arr_links_clss=_CLSS(100)->get_arr_child_clss() ; // список классов дочерних от "ссылка на объект"
   //$arr_allow_clss=array_keys($allow_clss);
   //$res_arr=array_intersect($arr_links_clss,$arr_allow_clss) ;
   //if (_sizeof($res_arr)) $use_clss=$res_arr[0] ;
   if (_sizeof($_check)) foreach ($_check as $cur_tkey=>$tkey_arr) if (_sizeof($tkey_arr)) foreach ($tkey_arr as $cur_clss=>$clss_arr) if (_sizeof($clss_arr)) foreach($clss_arr as $cur_pkey=>$parent)
     {  $rec=array('pkey'=>$cur_pkey,'tkey'=>$cur_tkey,'clss'=>$cur_clss) ;
        create_link($rec,$obj_info) ;
	             }
	   if (!$_SESSION['cart_admin']->not_delete_obj_from_backet) $_SESSION['cart_admin']->del($_check) ;
   if ($_SESSION['cart_admin']->cnt)  return('cart') ;
   else return('structure_LINK') ;
 }




?>
