1: <?php
2: /**
3: * LICENSE (BSD)
4: *
5: * Copyright (c) 2012, Gerd Christian Kunze
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions are
10: * met:
11: *
12: * * Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: *
15: * * Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: *
19: * * Neither the name of Gerd Christian Kunze nor the names of the
20: * contributors may be used to endorse or promote products derived from
21: * this software without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24: * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34: *
35: * Directory
36: * 15.10.2012 15:38
37: */
38: namespace MOC\Module\Network\Ftp;
39: use MOC\Api;
40: use MOC\Generic\Device\Module;
41:
42: /**
43: *
44: */
45: class Directory extends Directory\Read implements Module {
46: /**
47: * Get Singleton/Instance
48: *
49: * @static
50: * @return Directory
51: */
52: public static function InterfaceInstance() {
53: return new Directory();
54: }
55:
56: /**
57: * Get Dependencies
58: *
59: * @static
60: * @return \MOC\Core\Depending
61: */
62: public static function InterfaceDepending() {
63: return Api::Core()->Depending();
64: }
65:
66: /**
67: * Get Changelog
68: *
69: * @static
70: * @return \MOC\Core\Changelog
71: */
72: public static function InterfaceChangelog() {
73: return Api::Core()->Changelog()->Create( __CLASS__ );
74: }
75:
76: /**
77: * Directory-to-Handle
78: *
79: * @param string $Location
80: *
81: * @return Directory
82: */
83: public function Handle( $Location ) {
84: $this->Location( $Location );
85: $this->UpdateProperties();
86: return $this;
87: }
88:
89: /**
90: * Directory-Exists
91: *
92: * @return bool
93: */
94: public function Exists() {
95: $Current = ftp_pwd( $this->Connection()->Handler() );
96: if( ftp_chdir( $this->Connection()->Handler(), $this->Location() ) ) {
97: ftp_chdir( $this->Connection()->Handler(), $Current );
98: return true;
99: } else {
100: ftp_chdir( $this->Connection()->Handler(), $Current );
101: return false;
102: }
103: }
104:
105: /**
106: * Directory-Empty
107: *
108: * @return bool
109: */
110: public function IsEmpty() {
111: if( !count( ftp_nlist( $this->Connection()->Handler(), '' ) ) ) {
112: return true;
113: } return false;
114: }
115:
116: /**
117: * Directory-Hash
118: *
119: * @return null|string
120: */
121: public function Hash() {
122: //return sha1( $this->Location() );
123: }
124:
125:
126: /*
127: public function DirectoryList( $Recursive = true ) {
128: /*
129: $this->setCurrent();
130: /** @var \MOC\Module\Network\Ftp\Directory[] $Result */
131: /*$Result = array();
132: if( false !== ( $ItemList = @ftp_rawlist( $this->Connection()->Handler(), $this->RawDataLocation() ) ) ) {
133: foreach( (array)$ItemList as $Item ) {
134: array_push( $Result, new \MOC\Module\Network\Ftp\Directory() );
135: end( $Result )->Connection( $this->Connection() );
136: end( $Result )->Determine( $Item );
137: end( $Result )->RawDataLocation( end( $Result )->RawDataLocation().$this->RawDataName() );
138: if( end( $Result )->RawDataType() != $this::RAW_DATA_TYPE_DIRECTORY ) {
139: array_pop( $Result );
140: } else if( $Recursive ) {
141: //var_dump( end( $Result )->DirectoryList( $Recursive ) );
142: }
143: }
144: }
145: return $Result;
146: */
147: /* }
148:
149: private function setCurrent() {
150: // Walk to Root
151: while( $this->getCurrent() != '/' ) {
152: @ftp_cdup( $this->Connection()->Handler() );
153: }
154: // Walk to THIS Directory
155: @ftp_chdir( $this->Connection()->Handler(), $this->RawDataLocation() );
156: }
157: private function getCurrent() {
158: return @ftp_pwd( $this->Connection()->Handler() );
159: }
160:
161:
162: /*
163:
164: public function Name() {
165: return @ftp_pwd( $this->Connection()->Handler() );
166: }
167: public function Change( $Name ) {
168: return @ftp_chdir( $this->Connection()->Handler(), $Name );
169: }
170: public function Create( $Name ) {
171: return @ftp_mkdir( $this->Connection()->Handler(), $Name );
172: }
173: public function Remove() {
174: return @ftp_rmdir( $this->Connection()->Handler(), $this->Name() );
175: }
176: public function Rename( $Name ) {
177: return @ftp_rename( $this->Connection()->Handler(), $this->Name(), $Name );
178: }
179: public function DirectoryList( $Recursive = false ) {
180: $ResultList = array();
181: if( false !== ( $ItemList = @ftp_rawlist( $this->Connection()->Handler(), $this->Name(), $Recursive ) ) ) {
182: var_dump( $ItemList );
183: foreach( (array)$ItemList as $Item ) {
184: $Data = new \MOC\Module\Network\Ftp\RawData();
185: $Data->ListItem( $Item );
186: if( $Data->Type() == $Data::RAW_DATA_TYPE_DIRECTORY ) {
187: array_push( $ResultList, new \MOC\Module\Network\Ftp\Directory() );
188: end( $ResultList )->Connection( $this->Connection() )->Change( $Data->Name() );
189: }
190: }
191: }
192: return $ResultList;
193: }
194: public function FileList() {
195: return @ftp_rawlist( $this->Connection()->Handler(), $this->Name() );
196: }
197: */
198: }
199: