Tutorial Extension  1.0.0
SellerDeck Extensions - Tutorial Extension
CAbstractHandshaking.php
1 <?php
2 
3 /**
4  * CAbstractHandshaking.php - Implementation file for Handshaking Abstract class.
5  *
6  * @package SellerDeck Extensions
7  *
8  * @author Péter Erdődi
9  * @copyright © SellerDeck Ltd 2015. All rights reserved.
10  */
11 abstract class CAbstractHandshaking
12  {
13 
14  /**
15  * @var array $m_aInitMessage Init Message
16  */
17  protected $m_aInitMessage = [];
18 
19  /**
20  * __construct - Object constructor
21  *
22  * @access public
23  * @param array $aInitMessage Init Message
24  * @return void
25  */
26  public function __construct($aInitMessage)
27  {
28  if (empty($aInitMessage) || false === $aInitMessage)
29  {
30  define('HANDSHAKING', true);
31  require_once(FRAMEWORK_ROOT . 'bootstrap.php');
32  \SDExtension\Helper\CLogger::get('unknown', CACHE_ROOT)->addError(EXCEPTION_MSG_NO_DATA);
33  throw new \SDExtension\SDException\SDException(EXCEPTION_MSG_NO_DATA, EXCEPTION_CODE_NO_DATA);
34  }
35  $this->m_aInitMessage = $aInitMessage;
36  return $this;
37  }
38 
39  /**
40  * GetResponse - Getting Response
41  *
42  * @access public
43  * @param array $aInitMessage Init Message
44  * @return string Response XML
45  */
46  public function GetResponse()
47  {
48  $this->SetHeader();
49  switch ($this->GetFunction())
50  {
51  case HANDSHAKE_VERSION_INFORMATION:
52  define('HANDSHAKING', true);
53  require_once(FRAMEWORK_ROOT . 'bootstrap.php');
54  return $this->VersionInformation();
55  break;
56  case HANDSHAKE_SDD_CONFIGURATION:
57  define('HANDSHAKING', true);
58  require_once(FRAMEWORK_ROOT . 'bootstrap.php');
59  return $this->SDDConfiguration();
60  break;
61  case HANDSHAKE_EXTENSION_CONFIGURATION:
62  require_once(FRAMEWORK_ROOT . 'bootstrap.php');
63  return $this->ExtensionConfiguration();
64  break;
65  default:
66  }
67  }
68 
69  /**
70  * SetHeader - Setting Response XML header
71  *
72  * @access public
73  * @param string $sHeader Response XML header
74  * @return CAbstractHandshaking This object
75  */
76  public function SetHeader($sHeader = "Content-Type: application/xml; charset=utf-8")
77  {
78 //
79 // Response XML header
80 //
81  header($sHeader);
82  return $this;
83  }
84 
85  /**
86  * GetFunction - Getting Function name
87  *
88  * @access private
89  * @return string Function name
90  */
91  private function GetFunction()
92  {
93  return @arr_get($this->m_aInitMessage, '@attributes.name', '');
94  }
95 
96  /**
97  * VersionInformation - Version Information
98  *
99  * Handshaking round #1
100  *
101  * @access protected
102  * @return string Response XML
103  */
104  protected function VersionInformation()
105  {
106  $sConfigFileVersion = CACHE_ROOT . "version.php";
107  @save_config($this->m_aInitMessage, true, $sConfigFileVersion);
108  $nActualVersionNumber = @arr_get($this->m_aInitMessage, 'versionid.major', 1) * 10000 + @arr_get($this->m_aInitMessage, 'versionid.minor', 0) * 100 + @arr_get($this->m_aInitMessage, 'versionid.maintenance', 0);
109  $sActualVersion = @arr_get($this->m_aInitMessage, 'versionid.major', 1) . "." . @arr_get($this->m_aInitMessage, 'versionid.minor', 0) . "." . @arr_get($this->m_aInitMessage, 'versionid.maintenance', 0);
110  $nRequiredVersionNumber = REQUIRED_SDD_VERSION_MAJOR * 10000 + REQUIRED_SDD_VERSION_MINOR * 100 + REQUIRED_SDD_VERSION_MAINTENANCE;
111  if ($nActualVersionNumber < $nRequiredVersionNumber)
112  {
113  $nRequiredVersion = REQUIRED_SDD_VERSION_MAJOR . "." . REQUIRED_SDD_VERSION_MINOR . "." . REQUIRED_SDD_VERSION_MAINTENANCE;
114  \SDExtension\Helper\CLogger::get('unknown', CACHE_ROOT)->addError(sprintf(EXCEPTION_MSG_SDD_INCOMPATIBLE, $nRequiredVersion));
115  }
116  $sConfigFile = CONFIG_APP_ROOT . "handshake_response1.php";
117  $aResponse = load_config($sConfigFile, function() use ($sConfigFile)
118  {
119  \SDExtension\Helper\CLogger::get('unknown', CACHE_ROOT)->addError(EXCEPTION_MSG_CANT_LOAD_CONFIG_FILE . ": $sConfigFile.");
120  throw new \SDExtension\SDException\SDException(EXCEPTION_MSG_CANT_LOAD_CONFIG_FILE . ": $sConfigFile.", EXCEPTION_CODE_CANT_LOAD_CONFIG_FILE);
121  });
122  $sResponseXML = SDExtension\Helper\Array2XML::createXML('response', $aResponse)->saveXML();
123  return $sResponseXML;
124  }
125 
126  /**
127  * SDDConfiguration - SellerDeck Desktop Configuration
128  *
129  * Handshaking round #2
130  *
131  * @access protected
132  * @return string Response XML
133  */
134  protected function SDDConfiguration()
135  {
136  $sSiteName = arr_get($this->m_aInitMessage, 'site.sitename.sitename', DEFAULT_SITE_NAME);
137  $sSdeLogs = arr_get($this->m_aInitMessage, 'paths.logs.site', DEFAULT_LOG_ROOT);
138  $sSiteSdeDataFolder = arr_get($this->m_aInitMessage, 'paths.files.temporary', DEFAULT_CONFIG_ROOT) . DS;
139  if (!file_exists($sSdeLogs))
140  {
141  @mkdir($sSdeLogs, 0777, true);
142  }
143  if (!file_exists($sSiteSdeDataFolder))
144  {
145  @mkdir($sSiteSdeDataFolder, 0777, true);
146  }
147  @rename(CACHE_ROOT . "version.php", $sSiteSdeDataFolder . "version.php");
148  @save_config($this->m_aInitMessage, false, $sSiteSdeDataFolder . "details.php");
149  @save_config([
150  'sSiteName' => $sSiteName,
151  'sSdeLogs' => $sSdeLogs,
152  'sSiteSdeDataFolder' => $sSiteSdeDataFolder,
153  ], false, CACHE_ROOT . "details_temp.php");
154  $sConfigFile = CONFIG_APP_ROOT . "handshake_response2.php";
155  $aResponse = load_config($sConfigFile, function() use ($sConfigFile)
156  {
157  \SDExtension\Helper\CLogger::get(LOG_CHANNEL_NAME)->addError(EXCEPTION_MSG_CANT_LOAD_CONFIG_FILE . ": $sConfigFile.");
158  throw new \SDExtension\SDException\SDException(EXCEPTION_MSG_CANT_LOAD_CONFIG_FILE . ": $sConfigFile.", EXCEPTION_CODE_CANT_LOAD_CONFIG_FILE);
159  });
160  $sResponseXML = SDExtension\Helper\Array2XML::createXML('response', $aResponse)->saveXML();
161  @SDExtension\Helper\CLogger::init($sSiteName, $sSdeLogs . DS);
162  @SDExtension\Helper\CLogger::get()->addInfo("Handshaking #2");
163  return $sResponseXML;
164  }
165 
166  /**
167  * ExtensionConfiguration - Extension Configuration
168  *
169  * Handshaking round #3
170  *
171  * @access protected
172  * @return string Response XML
173  */
174  protected function ExtensionConfiguration()
175  {
176  //
177  // Init Settings
178  //
179  $this->AppInit();
180  $sConfigFile = CONFIG_APP_ROOT . "handshake_response3.php";
181  $aResponse = load_config($sConfigFile, function() use ($sConfigFile)
182  {
183  \SDExtension\Helper\CLogger::get(LOG_CHANNEL_NAME)->addError(EXCEPTION_MSG_CANT_LOAD_CONFIG_FILE . ": $sConfigFile.");
184  throw new \SDExtension\SDException\SDException(EXCEPTION_MSG_CANT_LOAD_CONFIG_FILE . ": $sConfigFile.", EXCEPTION_CODE_CANT_LOAD_CONFIG_FILE);
185  });
186  $sResponseXML = SDExtension\Helper\Array2XML::createXML('response', $aResponse)->saveXML();
187  SDExtension\Helper\CLogger::get()->addInfo("Handshaking done!");
188  //
189  // Unlocking
190  //
191  @RemoveLock();
192  return $sResponseXML;
193  }
194 
195  /**
196  * AppInit - Init Application
197  *
198  * @access protected
199  * @return void
200  */
201  abstract protected function AppInit();
202  }
static get($sChannel="default", $sLogRoot="")
Definition: CLogger.php:90
static init($sChannel="default", $sLogRoot="")
Definition: CLogger.php:43
SetHeader($sHeader="Content-Type: application/xml; charset=utf-8")
static & createXML($node_name, $arr=array(), $namespace=null)
Definition: Array2XML.php:62