+ * Admin::skineditgeneral()\r
+ * \r
+ * @param integer $skinid\r
+ * @param string $handler\r
+ * @return string empty or message if failed\r
+ */\r
+ static private function skineditgeneral($skinid, $handler='')\r
+ {\r
+ $name = postVar('name');\r
+ $desc = postVar('desc');\r
+ $type = postVar('type');\r
+ $inc_mode = postVar('inc_mode');\r
+ $inc_prefix = postVar('inc_prefix');\r
+ \r
+ $skin =& $manager->getSkin($skinid, $handler);\r
+ \r
+ // 1. Some checks\r
+ if ( !isValidSkinName($name) )\r
+ {\r
+ return _ERROR_BADSKINNAME;\r
+ }\r
+ \r
+ if ( ($skin->getName() != $name) && SKIN::exists($name) )\r
+ {\r
+ return _ERROR_DUPSKINNAME;\r
+ }\r
+ \r
+ if ( !$type )\r
+ {\r
+ $type = 'text/html';\r
+ }\r
+ \r
+ if ( !$inc_mode )\r
+ {\r
+ $inc_mode = 'normal';\r
+ }\r
+ \r
+ // 2. Update description\r
+ $skin->updateGeneralInfo($name, $desc, $type, $inc_mode, $inc_prefix);\r
+ \r
+ return '';\r
+ }\r
+ /**\r
+ * Admin::skindeleteconfirm()\r
+ * \r
+ * @param integer $skinid\r
+ * @return void\r
+ */\r
+ static private function skindeleteconfirm($skinid)\r
+ {\r
+ global $manager;\r
+ \r
+ if ( !preg_match('#^admin/#', self::$action) )\r
+ {\r
+ $event_identifier = 'Skin';\r
+ }\r
+ else\r
+ {\r
+ $event_identifier = 'AdminSkin';\r
+ }\r
+ \r
+ $manager->notify("PreDelete{$event_identifier}", array('skinid' => $skinid));\r
+ \r
+ // 1. delete description\r
+ $query = "DELETE FROM %s WHERE sdnumber=%d;";\r
+ $query = sprintf($query, sql_table('skin_desc'), (integer) $skinid);\r
+ DB::execute($query);\r
+ \r
+ // 2. delete parts\r
+ $query = "DELETE FROM %s WHERE sdesc=%d;";\r
+ $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
+ DB::execute($query);\r
+ \r
+ $manager->notify("PostDelete{$event_identifier}", array('skinid' => $skinid));\r
+ \r
+ return;\r
+ }\r
+ \r
+ /**\r
+ * Admin::skinremovetypeconfirm()\r
+ * \r
+ * @param integer $skinid\r
+ * @param string $skintype\r
+ * @return string empty or message if failed\r
+ */\r
+ static private function skinremovetypeconfirm($skinid, $skintype)\r
+ {\r
+ if ( !preg_match('#^admin/#', self::$action) )\r
+ {\r
+ $event_identifier = 'Skin';\r
+ }\r
+ else\r
+ {\r
+ $event_identifier = 'AdminSkin';\r
+ }\r
+ \r
+ if ( !isValidShortName($skintype) )\r
+ {\r
+ return _ERROR_SKIN_PARTS_SPECIAL_DELETE;\r
+ }\r
+ \r
+ $data =array(\r
+ 'skinid' => $skinid,\r
+ 'skintype' => $skintype\r
+ );\r
+ $manager->notify("PreDelete{$event_identifier}Part", $data);\r
+ \r
+ // delete part\r
+ $query = 'DELETE FROM %s WHERE sdesc = %d AND stype = %s;';\r
+ $query = sprintf($query, sql_table('skin'), (integer) $skinid, DB::quoteValue($skintype) );\r
+ DB::execute($query);\r
+ \r
+ $data = array(\r
+ 'skinid' => $skinid,\r
+ 'skintype' => $skintype\r
+ );\r
+ $manager->notify("PostDelete{$event_identifier}Part", $data);\r
+ \r
+ return '';\r
+ }\r
+ \r
+ /**\r
+ * Admin::skinclone()\r
+ * \r
+ * @param integer $skinid\r
+ * @param string $handler\r
+ * @return void\r
+ */\r
+ static private function skinclone($skinid, $handler='')\r
+ {\r
+ global $manager;\r
+ \r
+ // 1. read skin to clone\r
+ $skin =& $manager->getSkin($skinid, $handler);\r
+ $name = "{$skin->getName()}_clone";\r
+ \r
+ // if a skin with that name already exists:\r
+ if ( Skin::exists($name) )\r
+ {\r
+ $i = 1;\r
+ while ( Skin::exists($name . $i) )\r
+ {\r
+ $i++;\r
+ }\r
+ $name .= $i;\r
+ }\r
+ \r
+ // 2. create skin desc\r
+ $newid = Skin::createNew(\r
+ $name,\r
+ $skin->getDescription(),\r
+ $skin->getContentType(),\r
+ $skin->getIncludeMode(),\r
+ $skin->getIncludePrefix()\r
+ );\r
+ \r
+ // 3. clone\r
+ $query = "SELECT stype FROM %s WHERE sdesc=%d;";\r
+ $query = sprintf($query, sql_table('skin'), (integer) $skinid);\r
+ \r
+ $res = DB::getResult($query);\r
+ foreach ( $res as $row )\r
+ {\r
+ $content = $skin->getContentFromDB($row['stype']);\r
+ if ( $content )\r
+ {\r
+ $query = "INSERT INTO %s (sdesc, scontent, stype) VALUES (%d, %s, %s)";\r
+ $query = sprintf($query, sql_table('skin'), (integer) $newid, DB::quoteValue($content), DB::quoteValue($type));\r
+ DB::execute($query);\r
+ }\r
+ }\r
+ return;\r
+ }\r
+ \r
+ /**\r
+ * Admin::skinieimport()\r
+ * \r
+ * @param string $mode\r
+ * @param string $skinFileRaw\r
+ * @return string empty or message if failed\r
+ */\r
+ static private function skinieimport($mode, $skinFileRaw)\r
+ {\r
+ global $DIR_LIBS, $DIR_SKINS;\r
+ \r
+ // load skinie class\r
+ include_once($DIR_LIBS . 'skinie.php');\r
+ \r
+ $importer = new SkinImport();\r
+ \r
+ // get full filename\r
+ if ( $mode == 'file' )\r
+ {\r
+ $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
+ }\r
+ else\r
+ {\r
+ $skinFile = $skinFileRaw;\r
+ }\r
+ \r
+ // read only metadata\r
+ $error = $importer->readFile($skinFile, 1);\r
+ if ( $error )\r
+ {\r
+ unset($importer);\r
+ return $error;\r
+ }\r
+ \r
+ /* TODO: we should consider to use the other way insterad of this */\r
+ $_REQUEST['skininfo'] = $importer->getInfo();\r
+ $_REQUEST['skinnames'] = $importer->getSkinNames();\r
+ $_REQUEST['tpltnames'] = $importer->getTemplateNames();\r
+ \r
+ // clashes\r
+ $skinNameClashes = $importer->checkSkinNameClashes();\r
+ $templateNameClashes = $importer->checkTemplateNameClashes();\r
+ $hasNameClashes = (count($skinNameClashes) > 0) || (count($templateNameClashes) > 0);\r
+ \r
+ /* TODO: we should consider to use the other way insterad of this */\r
+ $_REQUEST['skinclashes'] = $skinNameClashes;\r
+ $_REQUEST['tpltclashes'] = $templateNameClashes;\r
+ $_REQUEST['nameclashes'] = $hasNameClashes ? 1 : 0;\r
+ \r
+ unset($importer);\r
+ return '';\r
+ }\r
+ \r
+ /**\r
+ * Admin::skinieedoimport()\r
+ * \r
+ * @param string $mode\r
+ * @param string $skinFileRaw\r
+ * @param boolean $allowOverwrite\r
+ * @return string empty or message if failed\r
+ */\r
+ static private function skiniedoimport($mode, $skinFileRaw, $allowOverwrite)\r
+ {\r
+ global $DIR_LIBS, $DIR_SKINS;\r
+ \r
+ // load skinie class\r
+ include_once($DIR_LIBS . 'skinie.php');\r
+ \r
+ $importer = new SkinImport();\r
+ \r
+ // get full filename\r
+ if ( $mode == 'file' )\r
+ {\r
+ $skinFile = $DIR_SKINS . $skinFileRaw . '/skinbackup.xml';\r
+ }\r
+ else\r
+ {\r
+ $skinFile = $skinFileRaw;\r
+ }\r
+ \r
+ $error = $importer->readFile($skinFile);\r
+ if ( $error )\r
+ {\r
+ unset($importer);\r
+ return $error;\r
+ }\r
+ \r
+ $error = $importer->writeToDatabase($allowOverwrite);\r
+ if ( $error )\r
+ {\r
+ unset($importer);\r
+ return $error;\r
+ }\r
+ \r
+ /* TODO: we should consider to use the other way insterad of this */\r
+ $_REQUEST['skininfo'] = $importer->getInfo();\r
+ $_REQUEST['skinnames'] = $importer->getSkinNames();\r
+ $_REQUEST['tpltnames'] = $importer->getTemplateNames();\r
+ \r
+ unset($importer);\r
+ return '';\r
+ }\r
+ \r
+ /**\r
+ * Admin::skinieexport()\r
+ * \r
+ * @param array $aSkins\r
+ * @param array $aTemplates\r
+ * @param string $info\r
+ * @return void\r
+ */\r
+ static private function skinieexport($aSkins, $aTemplates, $info)\r
+ {\r
+ global $DIR_LIBS;\r
+ \r
+ // load skinie class\r
+ include_once($DIR_LIBS . 'skinie.php');\r
+ \r
+ if ( !is_array($aSkins) )\r
+ {\r
+ $aSkins = array();\r
+ }\r
+ \r
+ if (!is_array($aTemplates))\r
+ {\r
+ $aTemplates = array();\r
+ }\r
+ \r
+ $skinList = array_keys($aSkins);\r
+ $templateList = array_keys($aTemplates);\r
+ \r
+ $exporter = new SkinExport();\r
+ foreach ( $skinList as $skinId )\r
+ {\r
+ $exporter->addSkin($skinId);\r
+ }\r
+ foreach ( $templateList as $templateId )\r
+ {\r
+ $exporter->addTemplate($templateId);\r
+ }\r
+ $exporter->setInfo($info);\r
+ $exporter->export();\r
+ \r
+ return;\r
+ }\r
+ \r
+ /**\r